From a5f03d96eee482cd84861fc8cefff9eb451c0cad Mon Sep 17 00:00:00 2001
From: xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>
Date: Sun, 29 Mar 2009 09:47:11 +0000
Subject: [PATCH] Cleaned up configure script. Distribution of CIL as an
 expanded source tree with changes applied (instead of original .tar.gz +
 patches to be applied at config time).

git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1020 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
---
 LICENSE                                       |   14 +-
 cil-1.3.5.tar.gz                              |  Bin 1139611 -> 0 bytes
 cil.patch/Makefile.in.patch                   |   23 -
 cil.patch/astslicer.ml.patch                  |   40 -
 cil.patch/cabs2cil.ml.patch                   |  457 --
 cil.patch/cfg.ml.patch                        |   55 -
 cil.patch/check.ml.patch                      |   56 -
 cil.patch/cil.ml.patch                        |  381 -
 cil.patch/cil.mli.patch                       |   59 -
 cil.patch/clexer.mll.patch                    |   24 -
 cil.patch/dataflow.ml.patch                   |   27 -
 cil.patch/dataslicing.ml.patch                |   28 -
 cil.patch/formatparse.mly.patch               |   40 -
 cil.patch/mergecil.ml.patch                   |   25 -
 cil.patch/oneret.ml.patch                     |   38 -
 cil.patch/ptranal.ml.patch                    |   28 -
 cil.patch/usedef.ml.patch                     |   38 -
 cil/INSTALL                                   |   41 +
 cil/LICENSE                                   |   35 +
 cil/Makefile.gcc                              |   75 +
 cil/Makefile.in                               |  656 ++
 cil/Makefile.msvc                             |   42 +
 cil/README                                    |    2 +
 cil/bin/CilConfig.pm.in                       |    6 +
 cil/bin/cilly                                 |  152 +
 cil/bin/cilly.bat.in                          |    1 +
 cil/bin/patcher                               |  605 ++
 cil/bin/patcher.bat.in                        |    1 +
 cil/bin/teetwo                                |   36 +
 cil/bin/test-bad                              |  202 +
 cil/cil.spec                                  |   90 +
 cil/cil.spec.in                               |   90 +
 cil/config.guess                              | 1497 ++++
 cil/config.h.in                               |   23 +
 cil/config.sub                                | 1469 ++++
 cil/configure                                 | 5697 +++++++++++++++
 cil/configure.in                              |  600 ++
 cil/doc/CIL-API.pdf                           |  Bin 0 -> 226152 bytes
 cil/doc/CIL.pdf                               |  Bin 0 -> 269328 bytes
 cil/doc/api/Alpha.html                        |   79 +
 cil/doc/api/Cfg.html                          |   69 +
 cil/doc/api/Cil.cilPrinter.html               |  118 +
 cil/doc/api/Cil.cilVisitor.html               |  125 +
 cil/doc/api/Cil.defaultCilPrinterClass.html   |   36 +
 cil/doc/api/Cil.html                          | 3337 +++++++++
 cil/doc/api/Cil.nopCilVisitor.html            |   35 +
 cil/doc/api/Cil.plainCilPrinterClass.html     |   36 +
 cil/doc/api/Cillower.html                     |   40 +
 cil/doc/api/Clist.html                        |  118 +
 cil/doc/api/Dataflow.BackwardsDataFlow.html   |   54 +
 cil/doc/api/Dataflow.BackwardsTransfer.html   |   83 +
 cil/doc/api/Dataflow.ForwardsDataFlow.html    |   53 +
 cil/doc/api/Dataflow.ForwardsTransfer.html    |   88 +
 cil/doc/api/Dataflow.html                     |  114 +
 cil/doc/api/Dominators.html                   |   58 +
 cil/doc/api/Errormsg.html                     |  141 +
 cil/doc/api/Formatcil.html                    |   84 +
 cil/doc/api/Pretty.MakeMapPrinter.html        |   63 +
 cil/doc/api/Pretty.MakeSetPrinter.html        |   63 +
 cil/doc/api/Pretty.html                       |  268 +
 cil/doc/api/Stats.html                        |   69 +
 cil/doc/api/index.html                        |   83 +
 cil/doc/api/index_attributes.html             |   30 +
 cil/doc/api/index_class_types.html            |   41 +
 cil/doc/api/index_classes.html                |   46 +
 cil/doc/api/index_exceptions.html             |   53 +
 cil/doc/api/index_methods.html                |  228 +
 cil/doc/api/index_module_types.html           |   36 +
 cil/doc/api/index_modules.html                |  108 +
 cil/doc/api/index_types.html                  |  271 +
 cil/doc/api/index_values.html                 | 1964 +++++
 cil/doc/api/style.css                         |   32 +
 cil/doc/api/type_Alpha.html                   |   43 +
 cil/doc/api/type_Cfg.html                     |   35 +
 cil/doc/api/type_Cil.cilPrinter.html          |   48 +
 cil/doc/api/type_Cil.cilVisitor.html          |   43 +
 .../api/type_Cil.defaultCilPrinterClass.html  |   25 +
 cil/doc/api/type_Cil.html                     |  622 ++
 cil/doc/api/type_Cil.nopCilVisitor.html       |   25 +
 .../api/type_Cil.plainCilPrinterClass.html    |   25 +
 cil/doc/api/type_Cillower.html                |   25 +
 cil/doc/api/type_Clist.html                   |   44 +
 .../api/type_Dataflow.BackwardsDataFlow.html  |   26 +
 .../api/type_Dataflow.BackwardsTransfer.html  |   44 +
 .../api/type_Dataflow.ForwardsDataFlow.html   |   25 +
 .../api/type_Dataflow.ForwardsTransfer.html   |   51 +
 cil/doc/api/type_Dataflow.html                |   85 +
 cil/doc/api/type_Dominators.html              |   32 +
 cil/doc/api/type_Errormsg.html                |   64 +
 cil/doc/api/type_Formatcil.html               |   45 +
 cil/doc/api/type_Pretty.MakeMapPrinter.html   |   42 +
 cil/doc/api/type_Pretty.MakeSetPrinter.html   |   40 +
 cil/doc/api/type_Pretty.html                  |  111 +
 cil/doc/api/type_Stats.html                   |   36 +
 cil/doc/changes.html                          |  486 ++
 cil/doc/cil.css                               |   10 +
 cil/doc/cil.html                              | 3532 +++++++++
 cil/doc/cil.version.tex                       |    2 +
 cil/doc/cil001.html                           |  134 +
 cil/doc/cil002.html                           |   98 +
 cil/doc/cil003.html                           |  187 +
 cil/doc/cil004.html                           |  350 +
 cil/doc/cil006.html                           |  627 ++
 cil/doc/cil007.html                           |  279 +
 cil/doc/cil009.html                           |   48 +
 cil/doc/cil010.html                           |  100 +
 cil/doc/cil011.html                           |   53 +
 cil/doc/cil012.html                           |  133 +
 cil/doc/cil015.html                           |   60 +
 cil/doc/cil016.html                           |  342 +
 cil/doc/cil017.html                           |   53 +
 cil/doc/cil018.html                           |   71 +
 cil/doc/cil019.html                           |   45 +
 cil/doc/cilly.html                            |  187 +
 cil/doc/cilpp.haux                            |   64 +
 cil/doc/cilpp.htoc                            |   65 +
 cil/doc/ciltoc.html                           |   92 +
 cil/doc/contents_motif.gif                    |  Bin 0 -> 316 bytes
 cil/doc/examples/ex1.txt                      |   16 +
 cil/doc/examples/ex10.txt                     |   10 +
 cil/doc/examples/ex11.txt                     |    5 +
 cil/doc/examples/ex12.txt                     |   32 +
 cil/doc/examples/ex13.txt                     |   21 +
 cil/doc/examples/ex14.txt                     |   22 +
 cil/doc/examples/ex15.txt                     |   14 +
 cil/doc/examples/ex16.txt                     |   22 +
 cil/doc/examples/ex17.txt                     |   81 +
 cil/doc/examples/ex18.txt                     |   20 +
 cil/doc/examples/ex19.txt                     |   42 +
 cil/doc/examples/ex2.txt                      |    9 +
 cil/doc/examples/ex20.txt                     |   26 +
 cil/doc/examples/ex21.txt                     |   25 +
 cil/doc/examples/ex22.txt                     |   16 +
 cil/doc/examples/ex23.txt                     |   56 +
 cil/doc/examples/ex24.txt                     |   59 +
 cil/doc/examples/ex25.txt                     |   40 +
 cil/doc/examples/ex26.txt                     |   29 +
 cil/doc/examples/ex27.txt                     |   51 +
 cil/doc/examples/ex28.txt                     |   24 +
 cil/doc/examples/ex29.txt                     |   53 +
 cil/doc/examples/ex3.txt                      |   20 +
 cil/doc/examples/ex30.txt                     |   12 +
 cil/doc/examples/ex31.txt                     |   12 +
 cil/doc/examples/ex32.txt                     |   16 +
 cil/doc/examples/ex33.txt                     |   24 +
 cil/doc/examples/ex34.txt                     |   15 +
 cil/doc/examples/ex35.txt                     |   32 +
 cil/doc/examples/ex36.txt                     |   20 +
 cil/doc/examples/ex37.txt                     |   14 +
 cil/doc/examples/ex38.txt                     |   12 +
 cil/doc/examples/ex39.txt                     |   25 +
 cil/doc/examples/ex4.txt                      |   16 +
 cil/doc/examples/ex40.txt                     |   20 +
 cil/doc/examples/ex41.txt                     |   69 +
 cil/doc/examples/ex42.txt                     |   22 +
 cil/doc/examples/ex43.txt                     |   46 +
 cil/doc/examples/ex44.txt                     |   31 +
 cil/doc/examples/ex45.txt                     |   11 +
 cil/doc/examples/ex46.txt                     |   23 +
 cil/doc/examples/ex47.txt                     |   28 +
 cil/doc/examples/ex5.txt                      |   27 +
 cil/doc/examples/ex6.txt                      |    7 +
 cil/doc/examples/ex7.txt                      |   22 +
 cil/doc/examples/ex8.txt                      |   13 +
 cil/doc/examples/ex9.txt                      |   16 +
 cil/doc/ext.html                              |  506 ++
 cil/doc/header.html                           |   18 +
 cil/doc/index.html                            |   26 +
 cil/doc/merger.html                           |  167 +
 cil/doc/next_motif.gif                        |  Bin 0 -> 317 bytes
 cil/doc/patcher.html                          |  126 +
 cil/doc/previous_motif.gif                    |  Bin 0 -> 317 bytes
 cil/install-sh                                |  251 +
 cil/lib/Cilly.pm                              | 2137 ++++++
 cil/lib/KeptFile.pm                           |   88 +
 cil/lib/OutputFile.pm                         |  213 +
 cil/lib/TempFile.pm                           |   90 +
 cil/ocamlutil/Makefile.ocaml                  |  395 +
 cil/ocamlutil/Makefile.ocaml.build            |   50 +
 cil/ocamlutil/alpha.ml                        |  156 +
 cil/ocamlutil/alpha.mli                       |   50 +
 cil/ocamlutil/clist.ml                        |  183 +
 cil/ocamlutil/clist.mli                       |   97 +
 cil/ocamlutil/errormsg.ml                     |  337 +
 cil/ocamlutil/errormsg.mli                    |  164 +
 cil/ocamlutil/growArray.ml                    |  191 +
 cil/ocamlutil/growArray.mli                   |  131 +
 cil/ocamlutil/inthash.ml                      |  188 +
 cil/ocamlutil/inthash.mli                     |   27 +
 cil/ocamlutil/intmap.ml                       |  171 +
 cil/ocamlutil/intmap.mli                      |   87 +
 cil/ocamlutil/perfcount.c.in                  |  184 +
 cil/ocamlutil/pretty.ml                       |  859 +++
 cil/ocamlutil/pretty.mli                      |  316 +
 cil/ocamlutil/stats.ml                        |  146 +
 cil/ocamlutil/stats.mli                       |   72 +
 cil/ocamlutil/trace.ml                        |  169 +
 cil/ocamlutil/trace.mli                       |  106 +
 cil/ocamlutil/util.ml                         |  815 +++
 cil/ocamlutil/util.mli                        |  311 +
 cil/src/check.ml                              | 1017 +++
 cil/src/check.mli                             |   45 +
 cil/src/cil.ml                                | 6427 +++++++++++++++++
 cil/src/cil.mli                               | 2455 +++++++
 cil/src/cillower.ml                           |   57 +
 cil/src/cillower.mli                          |   42 +
 cil/src/ciloptions.ml                         |  196 +
 cil/src/ciloptions.mli                        |   48 +
 cil/src/cilutil.ml                            |   72 +
 cil/src/escape.ml                             |   93 +
 cil/src/escape.mli                            |   48 +
 cil/src/ext/astslicer.ml                      |  454 ++
 cil/src/ext/availexps.ml                      |  359 +
 cil/src/ext/bitmap.ml                         |  224 +
 cil/src/ext/bitmap.mli                        |   50 +
 cil/src/ext/blockinggraph.ml                  |  769 ++
 cil/src/ext/blockinggraph.mli                 |   40 +
 cil/src/ext/callgraph.ml                      |  250 +
 cil/src/ext/callgraph.mli                     |  123 +
 cil/src/ext/canonicalize.ml                   |  292 +
 cil/src/ext/canonicalize.mli                  |   48 +
 cil/src/ext/cfg.ml                            |  289 +
 cil/src/ext/cfg.mli                           |   36 +
 cil/src/ext/ciltools.ml                       |  228 +
 cil/src/ext/dataflow.ml                       |  466 ++
 cil/src/ext/dataflow.mli                      |  151 +
 cil/src/ext/dataslicing.ml                    |  462 ++
 cil/src/ext/dataslicing.mli                   |   41 +
 cil/src/ext/deadcodeelim.ml                   |  173 +
 cil/src/ext/dominators.ml                     |  241 +
 cil/src/ext/dominators.mli                    |   29 +
 cil/src/ext/epicenter.ml                      |  114 +
 cil/src/ext/heap.ml                           |  112 +
 cil/src/ext/heapify.ml                        |  250 +
 cil/src/ext/liveness.ml                       |  190 +
 cil/src/ext/logcalls.ml                       |  268 +
 cil/src/ext/logcalls.mli                      |   41 +
 cil/src/ext/logwrites.ml                      |  139 +
 cil/src/ext/oneret.ml                         |  187 +
 cil/src/ext/oneret.mli                        |   44 +
 cil/src/ext/partial.ml                        |  851 +++
 cil/src/ext/pta/golf.ml                       | 1657 +++++
 cil/src/ext/pta/golf.mli                      |   83 +
 cil/src/ext/pta/olf.ml                        | 1108 +++
 cil/src/ext/pta/olf.mli                       |   80 +
 cil/src/ext/pta/ptranal.ml                    |  597 ++
 cil/src/ext/pta/ptranal.mli                   |  156 +
 cil/src/ext/pta/setp.ml                       |  342 +
 cil/src/ext/pta/setp.mli                      |  180 +
 cil/src/ext/pta/steensgaard.ml                | 1417 ++++
 cil/src/ext/pta/steensgaard.mli               |   71 +
 cil/src/ext/pta/uref.ml                       |   94 +
 cil/src/ext/pta/uref.mli                      |   65 +
 cil/src/ext/reachingdefs.ml                   |  511 ++
 cil/src/ext/sfi.ml                            |  337 +
 cil/src/ext/simplemem.ml                      |  132 +
 cil/src/ext/simplify.ml                       |  845 +++
 cil/src/ext/ssa.ml                            |  696 ++
 cil/src/ext/ssa.mli                           |   45 +
 cil/src/ext/stackoverflow.ml                  |  246 +
 cil/src/ext/stackoverflow.mli                 |   43 +
 cil/src/ext/usedef.ml                         |  188 +
 cil/src/formatcil.ml                          |  215 +
 cil/src/formatcil.mli                         |  103 +
 cil/src/formatlex.mll                         |  308 +
 cil/src/formatparse.mly                       | 1455 ++++
 cil/src/frontc/cabs.ml                        |  396 +
 cil/src/frontc/cabs2cil.ml                    | 6238 ++++++++++++++++
 cil/src/frontc/cabs2cil.mli                   |   49 +
 cil/src/frontc/cabsvisit.ml                   |  577 ++
 cil/src/frontc/cabsvisit.mli                  |  115 +
 cil/src/frontc/clexer.mli                     |   55 +
 cil/src/frontc/clexer.mll                     |  664 ++
 cil/src/frontc/cparser.mly                    | 1521 ++++
 cil/src/frontc/cprint.ml                      | 1014 +++
 cil/src/frontc/frontc.ml                      |  256 +
 cil/src/frontc/frontc.mli                     |   55 +
 cil/src/frontc/lexerhack.ml                   |   22 +
 cil/src/frontc/patch.ml                       |  837 +++
 cil/src/frontc/patch.mli                      |   42 +
 cil/src/libmaincil.ml                         |  108 +
 cil/src/machdep.c                             |  220 +
 cil/src/main.ml                               |  288 +
 cil/src/mergecil.ml                           | 1770 +++++
 cil/src/mergecil.mli                          |   42 +
 cil/src/rmtmps.ml                             |  778 ++
 cil/src/rmtmps.mli                            |   82 +
 cil/src/testcil.ml                            |  440 ++
 cil/test/small1/func.c                        |   24 +
 cil/test/small1/hello.c                       |    8 +
 cil/test/small1/init.c                        |  177 +
 cil/test/small1/init1.c                       |   17 +
 cil/test/small1/testharness.h                 |   17 +
 cil/test/small1/vararg1.c                     |   47 +
 cil/test/small1/wchar1.c                      |   24 +
 configure                                     |  112 +-
 296 files changed, 82317 insertions(+), 1356 deletions(-)
 delete mode 100644 cil-1.3.5.tar.gz
 delete mode 100644 cil.patch/Makefile.in.patch
 delete mode 100644 cil.patch/astslicer.ml.patch
 delete mode 100644 cil.patch/cabs2cil.ml.patch
 delete mode 100644 cil.patch/cfg.ml.patch
 delete mode 100644 cil.patch/check.ml.patch
 delete mode 100644 cil.patch/cil.ml.patch
 delete mode 100644 cil.patch/cil.mli.patch
 delete mode 100644 cil.patch/clexer.mll.patch
 delete mode 100644 cil.patch/dataflow.ml.patch
 delete mode 100644 cil.patch/dataslicing.ml.patch
 delete mode 100644 cil.patch/formatparse.mly.patch
 delete mode 100644 cil.patch/mergecil.ml.patch
 delete mode 100644 cil.patch/oneret.ml.patch
 delete mode 100644 cil.patch/ptranal.ml.patch
 delete mode 100644 cil.patch/usedef.ml.patch
 create mode 100644 cil/INSTALL
 create mode 100644 cil/LICENSE
 create mode 100644 cil/Makefile.gcc
 create mode 100644 cil/Makefile.in
 create mode 100644 cil/Makefile.msvc
 create mode 100644 cil/README
 create mode 100644 cil/bin/CilConfig.pm.in
 create mode 100755 cil/bin/cilly
 create mode 100755 cil/bin/cilly.bat.in
 create mode 100755 cil/bin/patcher
 create mode 100755 cil/bin/patcher.bat.in
 create mode 100755 cil/bin/teetwo
 create mode 100755 cil/bin/test-bad
 create mode 100644 cil/cil.spec
 create mode 100644 cil/cil.spec.in
 create mode 100755 cil/config.guess
 create mode 100644 cil/config.h.in
 create mode 100755 cil/config.sub
 create mode 100755 cil/configure
 create mode 100644 cil/configure.in
 create mode 100644 cil/doc/CIL-API.pdf
 create mode 100644 cil/doc/CIL.pdf
 create mode 100644 cil/doc/api/Alpha.html
 create mode 100644 cil/doc/api/Cfg.html
 create mode 100644 cil/doc/api/Cil.cilPrinter.html
 create mode 100644 cil/doc/api/Cil.cilVisitor.html
 create mode 100644 cil/doc/api/Cil.defaultCilPrinterClass.html
 create mode 100644 cil/doc/api/Cil.html
 create mode 100644 cil/doc/api/Cil.nopCilVisitor.html
 create mode 100644 cil/doc/api/Cil.plainCilPrinterClass.html
 create mode 100644 cil/doc/api/Cillower.html
 create mode 100644 cil/doc/api/Clist.html
 create mode 100644 cil/doc/api/Dataflow.BackwardsDataFlow.html
 create mode 100644 cil/doc/api/Dataflow.BackwardsTransfer.html
 create mode 100644 cil/doc/api/Dataflow.ForwardsDataFlow.html
 create mode 100644 cil/doc/api/Dataflow.ForwardsTransfer.html
 create mode 100644 cil/doc/api/Dataflow.html
 create mode 100644 cil/doc/api/Dominators.html
 create mode 100644 cil/doc/api/Errormsg.html
 create mode 100644 cil/doc/api/Formatcil.html
 create mode 100644 cil/doc/api/Pretty.MakeMapPrinter.html
 create mode 100644 cil/doc/api/Pretty.MakeSetPrinter.html
 create mode 100644 cil/doc/api/Pretty.html
 create mode 100644 cil/doc/api/Stats.html
 create mode 100644 cil/doc/api/index.html
 create mode 100644 cil/doc/api/index_attributes.html
 create mode 100644 cil/doc/api/index_class_types.html
 create mode 100644 cil/doc/api/index_classes.html
 create mode 100644 cil/doc/api/index_exceptions.html
 create mode 100644 cil/doc/api/index_methods.html
 create mode 100644 cil/doc/api/index_module_types.html
 create mode 100644 cil/doc/api/index_modules.html
 create mode 100644 cil/doc/api/index_types.html
 create mode 100644 cil/doc/api/index_values.html
 create mode 100644 cil/doc/api/style.css
 create mode 100644 cil/doc/api/type_Alpha.html
 create mode 100644 cil/doc/api/type_Cfg.html
 create mode 100644 cil/doc/api/type_Cil.cilPrinter.html
 create mode 100644 cil/doc/api/type_Cil.cilVisitor.html
 create mode 100644 cil/doc/api/type_Cil.defaultCilPrinterClass.html
 create mode 100644 cil/doc/api/type_Cil.html
 create mode 100644 cil/doc/api/type_Cil.nopCilVisitor.html
 create mode 100644 cil/doc/api/type_Cil.plainCilPrinterClass.html
 create mode 100644 cil/doc/api/type_Cillower.html
 create mode 100644 cil/doc/api/type_Clist.html
 create mode 100644 cil/doc/api/type_Dataflow.BackwardsDataFlow.html
 create mode 100644 cil/doc/api/type_Dataflow.BackwardsTransfer.html
 create mode 100644 cil/doc/api/type_Dataflow.ForwardsDataFlow.html
 create mode 100644 cil/doc/api/type_Dataflow.ForwardsTransfer.html
 create mode 100644 cil/doc/api/type_Dataflow.html
 create mode 100644 cil/doc/api/type_Dominators.html
 create mode 100644 cil/doc/api/type_Errormsg.html
 create mode 100644 cil/doc/api/type_Formatcil.html
 create mode 100644 cil/doc/api/type_Pretty.MakeMapPrinter.html
 create mode 100644 cil/doc/api/type_Pretty.MakeSetPrinter.html
 create mode 100644 cil/doc/api/type_Pretty.html
 create mode 100644 cil/doc/api/type_Stats.html
 create mode 100644 cil/doc/changes.html
 create mode 100644 cil/doc/cil.css
 create mode 100644 cil/doc/cil.html
 create mode 100644 cil/doc/cil.version.tex
 create mode 100644 cil/doc/cil001.html
 create mode 100644 cil/doc/cil002.html
 create mode 100644 cil/doc/cil003.html
 create mode 100644 cil/doc/cil004.html
 create mode 100644 cil/doc/cil006.html
 create mode 100644 cil/doc/cil007.html
 create mode 100644 cil/doc/cil009.html
 create mode 100644 cil/doc/cil010.html
 create mode 100644 cil/doc/cil011.html
 create mode 100644 cil/doc/cil012.html
 create mode 100644 cil/doc/cil015.html
 create mode 100644 cil/doc/cil016.html
 create mode 100644 cil/doc/cil017.html
 create mode 100644 cil/doc/cil018.html
 create mode 100644 cil/doc/cil019.html
 create mode 100644 cil/doc/cilly.html
 create mode 100644 cil/doc/cilpp.haux
 create mode 100644 cil/doc/cilpp.htoc
 create mode 100644 cil/doc/ciltoc.html
 create mode 100644 cil/doc/contents_motif.gif
 create mode 100644 cil/doc/examples/ex1.txt
 create mode 100644 cil/doc/examples/ex10.txt
 create mode 100644 cil/doc/examples/ex11.txt
 create mode 100644 cil/doc/examples/ex12.txt
 create mode 100644 cil/doc/examples/ex13.txt
 create mode 100644 cil/doc/examples/ex14.txt
 create mode 100644 cil/doc/examples/ex15.txt
 create mode 100644 cil/doc/examples/ex16.txt
 create mode 100644 cil/doc/examples/ex17.txt
 create mode 100644 cil/doc/examples/ex18.txt
 create mode 100644 cil/doc/examples/ex19.txt
 create mode 100644 cil/doc/examples/ex2.txt
 create mode 100644 cil/doc/examples/ex20.txt
 create mode 100644 cil/doc/examples/ex21.txt
 create mode 100644 cil/doc/examples/ex22.txt
 create mode 100644 cil/doc/examples/ex23.txt
 create mode 100644 cil/doc/examples/ex24.txt
 create mode 100644 cil/doc/examples/ex25.txt
 create mode 100644 cil/doc/examples/ex26.txt
 create mode 100644 cil/doc/examples/ex27.txt
 create mode 100644 cil/doc/examples/ex28.txt
 create mode 100644 cil/doc/examples/ex29.txt
 create mode 100644 cil/doc/examples/ex3.txt
 create mode 100644 cil/doc/examples/ex30.txt
 create mode 100644 cil/doc/examples/ex31.txt
 create mode 100644 cil/doc/examples/ex32.txt
 create mode 100644 cil/doc/examples/ex33.txt
 create mode 100644 cil/doc/examples/ex34.txt
 create mode 100644 cil/doc/examples/ex35.txt
 create mode 100644 cil/doc/examples/ex36.txt
 create mode 100644 cil/doc/examples/ex37.txt
 create mode 100644 cil/doc/examples/ex38.txt
 create mode 100644 cil/doc/examples/ex39.txt
 create mode 100644 cil/doc/examples/ex4.txt
 create mode 100644 cil/doc/examples/ex40.txt
 create mode 100644 cil/doc/examples/ex41.txt
 create mode 100644 cil/doc/examples/ex42.txt
 create mode 100644 cil/doc/examples/ex43.txt
 create mode 100644 cil/doc/examples/ex44.txt
 create mode 100644 cil/doc/examples/ex45.txt
 create mode 100644 cil/doc/examples/ex46.txt
 create mode 100644 cil/doc/examples/ex47.txt
 create mode 100644 cil/doc/examples/ex5.txt
 create mode 100644 cil/doc/examples/ex6.txt
 create mode 100644 cil/doc/examples/ex7.txt
 create mode 100644 cil/doc/examples/ex8.txt
 create mode 100644 cil/doc/examples/ex9.txt
 create mode 100644 cil/doc/ext.html
 create mode 100644 cil/doc/header.html
 create mode 100644 cil/doc/index.html
 create mode 100644 cil/doc/merger.html
 create mode 100644 cil/doc/next_motif.gif
 create mode 100644 cil/doc/patcher.html
 create mode 100644 cil/doc/previous_motif.gif
 create mode 100644 cil/install-sh
 create mode 100644 cil/lib/Cilly.pm
 create mode 100644 cil/lib/KeptFile.pm
 create mode 100644 cil/lib/OutputFile.pm
 create mode 100644 cil/lib/TempFile.pm
 create mode 100644 cil/ocamlutil/Makefile.ocaml
 create mode 100644 cil/ocamlutil/Makefile.ocaml.build
 create mode 100755 cil/ocamlutil/alpha.ml
 create mode 100755 cil/ocamlutil/alpha.mli
 create mode 100644 cil/ocamlutil/clist.ml
 create mode 100644 cil/ocamlutil/clist.mli
 create mode 100644 cil/ocamlutil/errormsg.ml
 create mode 100644 cil/ocamlutil/errormsg.mli
 create mode 100644 cil/ocamlutil/growArray.ml
 create mode 100644 cil/ocamlutil/growArray.mli
 create mode 100755 cil/ocamlutil/inthash.ml
 create mode 100755 cil/ocamlutil/inthash.mli
 create mode 100755 cil/ocamlutil/intmap.ml
 create mode 100755 cil/ocamlutil/intmap.mli
 create mode 100755 cil/ocamlutil/perfcount.c.in
 create mode 100644 cil/ocamlutil/pretty.ml
 create mode 100644 cil/ocamlutil/pretty.mli
 create mode 100644 cil/ocamlutil/stats.ml
 create mode 100644 cil/ocamlutil/stats.mli
 create mode 100644 cil/ocamlutil/trace.ml
 create mode 100644 cil/ocamlutil/trace.mli
 create mode 100755 cil/ocamlutil/util.ml
 create mode 100644 cil/ocamlutil/util.mli
 create mode 100644 cil/src/check.ml
 create mode 100644 cil/src/check.mli
 create mode 100644 cil/src/cil.ml
 create mode 100644 cil/src/cil.mli
 create mode 100755 cil/src/cillower.ml
 create mode 100755 cil/src/cillower.mli
 create mode 100755 cil/src/ciloptions.ml
 create mode 100755 cil/src/ciloptions.mli
 create mode 100644 cil/src/cilutil.ml
 create mode 100644 cil/src/escape.ml
 create mode 100644 cil/src/escape.mli
 create mode 100644 cil/src/ext/astslicer.ml
 create mode 100644 cil/src/ext/availexps.ml
 create mode 100644 cil/src/ext/bitmap.ml
 create mode 100644 cil/src/ext/bitmap.mli
 create mode 100644 cil/src/ext/blockinggraph.ml
 create mode 100644 cil/src/ext/blockinggraph.mli
 create mode 100644 cil/src/ext/callgraph.ml
 create mode 100644 cil/src/ext/callgraph.mli
 create mode 100644 cil/src/ext/canonicalize.ml
 create mode 100644 cil/src/ext/canonicalize.mli
 create mode 100644 cil/src/ext/cfg.ml
 create mode 100644 cil/src/ext/cfg.mli
 create mode 100755 cil/src/ext/ciltools.ml
 create mode 100755 cil/src/ext/dataflow.ml
 create mode 100755 cil/src/ext/dataflow.mli
 create mode 100644 cil/src/ext/dataslicing.ml
 create mode 100644 cil/src/ext/dataslicing.mli
 create mode 100644 cil/src/ext/deadcodeelim.ml
 create mode 100755 cil/src/ext/dominators.ml
 create mode 100755 cil/src/ext/dominators.mli
 create mode 100644 cil/src/ext/epicenter.ml
 create mode 100644 cil/src/ext/heap.ml
 create mode 100644 cil/src/ext/heapify.ml
 create mode 100644 cil/src/ext/liveness.ml
 create mode 100644 cil/src/ext/logcalls.ml
 create mode 100644 cil/src/ext/logcalls.mli
 create mode 100644 cil/src/ext/logwrites.ml
 create mode 100644 cil/src/ext/oneret.ml
 create mode 100644 cil/src/ext/oneret.mli
 create mode 100644 cil/src/ext/partial.ml
 create mode 100644 cil/src/ext/pta/golf.ml
 create mode 100644 cil/src/ext/pta/golf.mli
 create mode 100644 cil/src/ext/pta/olf.ml
 create mode 100644 cil/src/ext/pta/olf.mli
 create mode 100644 cil/src/ext/pta/ptranal.ml
 create mode 100644 cil/src/ext/pta/ptranal.mli
 create mode 100644 cil/src/ext/pta/setp.ml
 create mode 100644 cil/src/ext/pta/setp.mli
 create mode 100644 cil/src/ext/pta/steensgaard.ml
 create mode 100644 cil/src/ext/pta/steensgaard.mli
 create mode 100644 cil/src/ext/pta/uref.ml
 create mode 100644 cil/src/ext/pta/uref.mli
 create mode 100644 cil/src/ext/reachingdefs.ml
 create mode 100755 cil/src/ext/sfi.ml
 create mode 100644 cil/src/ext/simplemem.ml
 create mode 100755 cil/src/ext/simplify.ml
 create mode 100644 cil/src/ext/ssa.ml
 create mode 100644 cil/src/ext/ssa.mli
 create mode 100644 cil/src/ext/stackoverflow.ml
 create mode 100644 cil/src/ext/stackoverflow.mli
 create mode 100755 cil/src/ext/usedef.ml
 create mode 100644 cil/src/formatcil.ml
 create mode 100644 cil/src/formatcil.mli
 create mode 100644 cil/src/formatlex.mll
 create mode 100644 cil/src/formatparse.mly
 create mode 100644 cil/src/frontc/cabs.ml
 create mode 100644 cil/src/frontc/cabs2cil.ml
 create mode 100644 cil/src/frontc/cabs2cil.mli
 create mode 100644 cil/src/frontc/cabsvisit.ml
 create mode 100644 cil/src/frontc/cabsvisit.mli
 create mode 100644 cil/src/frontc/clexer.mli
 create mode 100644 cil/src/frontc/clexer.mll
 create mode 100644 cil/src/frontc/cparser.mly
 create mode 100644 cil/src/frontc/cprint.ml
 create mode 100644 cil/src/frontc/frontc.ml
 create mode 100644 cil/src/frontc/frontc.mli
 create mode 100755 cil/src/frontc/lexerhack.ml
 create mode 100644 cil/src/frontc/patch.ml
 create mode 100644 cil/src/frontc/patch.mli
 create mode 100644 cil/src/libmaincil.ml
 create mode 100644 cil/src/machdep.c
 create mode 100644 cil/src/main.ml
 create mode 100644 cil/src/mergecil.ml
 create mode 100644 cil/src/mergecil.mli
 create mode 100644 cil/src/rmtmps.ml
 create mode 100644 cil/src/rmtmps.mli
 create mode 100644 cil/src/testcil.ml
 create mode 100644 cil/test/small1/func.c
 create mode 100644 cil/test/small1/hello.c
 create mode 100644 cil/test/small1/init.c
 create mode 100644 cil/test/small1/init1.c
 create mode 100644 cil/test/small1/testharness.h
 create mode 100644 cil/test/small1/vararg1.c
 create mode 100644 cil/test/small1/wchar1.c

diff --git a/LICENSE b/LICENSE
index 36268209d..373ee656e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -37,14 +37,12 @@ files are free software and can be used both in commercial and
 non-commercial contexts, subject to the terms of the GNU General
 Public License.
 
-This distribution includes a copy of the CIL library and modifications
-to this library in the form of patches.  The CIL library is Copyright
-2001-2005 George C. Necula, Scott McPeak, Wes Weimer and Ben Liblit.
-The modifications contained in the sub-directory cil.patches/ of this
-distribution are Copyright 2006, 2007, 2008, 2009 Institut National de
-Recherche en Informatique et en Automatique.  The CIL library and the
-modifications contained in the sub-directory cil.patches/ are
-distributed under the terms of the BSD license, included below.
+This distribution includes a modified copy of the CIL library.
+The CIL library is Copyright 2001-2005 George C. Necula, Scott McPeak,
+Wes Weimer and Ben Liblit.  The modifications are Copyright 2006,
+2007, 2008, 2009 Institut National de Recherche en Informatique et en
+Automatique.  The CIL library and the modifications are distributed
+under the terms of the BSD license, included below.
 
 ----------------------------------------------------------------------
 
diff --git a/cil-1.3.5.tar.gz b/cil-1.3.5.tar.gz
deleted file mode 100644
index 2c19144eac21212f792afc4fc352d82db086d905..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1139611
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%0AO@?Dw$+-PlNmo<~L!|TA8LHFDxTkAy
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%0Aukq|ARbZ3{a
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
Y{OjLe|Ni>-zwh7w13hoJ<^b?K0QUbbMF0Q*

diff --git a/cil.patch/Makefile.in.patch b/cil.patch/Makefile.in.patch
deleted file mode 100644
index 7bc4ea1b7..000000000
--- a/cil.patch/Makefile.in.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- ../cil/Makefile.in.orig	2008-12-31 19:08:43.000000000 +0100
-+++ ../cil/Makefile.in	2008-12-31 19:09:00.000000000 +0100
-@@ -212,7 +212,7 @@
- # build two libraries
- .PHONY: cillib libcil
- ifeq ($(NATIVECAML),1)
--cillib: $(OBJDIR)/cil.$(CMXA) $(OBJDIR)/libcil.a
-+cillib: $(OBJDIR)/cil.$(CMXA) # $(OBJDIR)/libcil.a
- else
- cillib: $(OBJDIR)/cil.$(CMXA) 
- endif
-@@ -243,9 +243,9 @@
- 	echo "   Zrapp.feature;" >> $@  
- endif
- # Now the extra features, with the first letter capitalized
--	echo -ne \
-+	echo \
-           $(foreach f,@EXTRAFEATURES@, \
--             `echo $f | cut -c 1 | tr "[a-z]" "[A-Z]"``echo $f | cut -c 2-`".feature;\n") >> $@
-+             `echo $f | cut -c 1 | tr "[a-z]" "[A-Z]"``echo $f | cut -c 2-`".feature;") >> $@
- 	echo "]"   >>$@ 
- # Must delete main.d and remake it, because it may have been made
- # before feature_config existed.
diff --git a/cil.patch/astslicer.ml.patch b/cil.patch/astslicer.ml.patch
deleted file mode 100644
index e8d019541..000000000
--- a/cil.patch/astslicer.ml.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-*** ../cil/src/ext/astslicer.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/astslicer.ml	2006-06-20 17:24:22.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 97,103 ****
---- 99,110 ----
-            Printf.fprintf out ")\n" ; 
-            incr i 
-      | Switch(_,b,_,_) 
-+ (*
-      | Loop(b,_,_,_) 
-+ *)
-+     | While(_,b,_)
-+     | DoWhile(_,b,_)
-+     | For(_,_,_,b,_)
-      | Block(b) -> 
-            emit base i st_ht s ; 
-            decr i ; 
-***************
-*** 371,377 ****
---- 378,389 ----
-          doBlock b2 base'' i'' inside ;
-          incr i
-      | Switch(_,b,_,_) 
-+ (*
-      | Loop(b,_,_,_) 
-+ *)
-+     | While(_,b,_)
-+     | DoWhile(_,b,_)
-+     | For(_,_,_,b,_)
-      | Block(b) -> 
-          let inside = check base i default in 
-          mark ws s inside ;
diff --git a/cil.patch/cabs2cil.ml.patch b/cil.patch/cabs2cil.ml.patch
deleted file mode 100644
index 74ae0c79f..000000000
--- a/cil.patch/cabs2cil.ml.patch
+++ /dev/null
@@ -1,457 +0,0 @@
-*** ../cil.orig/src/frontc/cabs2cil.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil/src/frontc/cabs2cil.ml	2008-04-19 10:17:27.000000000 +0200
-***************
-*** 1,3 ****
---- 1,11 ----
-+ (* MODIF: allow E.Error to propagate *)
-+ 
-+ (* MODIF: for pointer comparison, avoid systematic cast to unsigned int *)
-+ 
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ (* MODIF: Return statement no longer added when the body of the function
-+           falls-through. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 816,828 ****
-            (fun s -> 
-              if s.labels != [] then 
-                raise (Failure "cannot duplicate: has labels");
-              (match s.skind with 
-!               If _ | Switch _ | Loop _ | Block _ -> 
-                  raise (Failure "cannot duplicate: complex stmt")
-              | Instr il -> 
-                  pCount := !pCount + List.length il
-              | _ -> incr pCount);
-              if !pCount > 5 then raise (Failure ("cannot duplicate: too many instr"));
-              (* We can just copy it because there is nothing to share here. 
-               * Except maybe for the ref cell in Goto but it is Ok to share 
-               * that, I think *)
---- 824,839 ----
-            (fun s -> 
-              if s.labels != [] then 
-                raise (Failure "cannot duplicate: has labels");
-+ (*
-              (match s.skind with 
-!               If _ | Switch _ | (*Loop _*)
-! 	       While _ | DoWhile _ | For _ | Block _ -> 
-                  raise (Failure "cannot duplicate: complex stmt")
-              | Instr il -> 
-                  pCount := !pCount + List.length il
-              | _ -> incr pCount);
-              if !pCount > 5 then raise (Failure ("cannot duplicate: too many instr"));
-+ *)
-              (* We can just copy it because there is nothing to share here. 
-               * Except maybe for the ref cell in Goto but it is Ok to share 
-               * that, I think *)
-***************
-*** 838,843 ****
---- 849,855 ----
-      let canDrop (c: chunk) =
-        List.for_all canDropStatement c.stmts
-  
-+ (*
-      let loopChunk (body: chunk) : chunk = 
-        (* Make the statement *)
-        let loop = mkStmt (Loop (c2block body, !currentLoc, None, None)) in
-***************
-*** 845,850 ****
---- 857,889 ----
-          postins = [];
-          cases = body.cases;
-        } 
-+ *)
-+ 
-+     let whileChunk (e: exp) (body: chunk) : chunk = 
-+       let loop = mkStmt (While (e, c2block body, !currentLoc)) in
-+ 	
-+ 	{ stmts = [ loop ];
-+           postins = [];
-+           cases = body.cases;
-+ 	} 
-+ 
-+     let doWhileChunk (e: exp) (body: chunk) : chunk = 
-+       let loop = mkStmt (DoWhile (e, c2block body, !currentLoc)) in
-+ 	
-+ 	{ stmts = [ loop ];
-+           postins = [];
-+           cases = body.cases;
-+ 	} 
-+       
-+     let forChunk (bInit: chunk) (e: exp) (bIter: chunk)
-+                  (body: chunk) : chunk = 
-+       let loop = mkStmt (For (c2block bInit, e, c2block bIter,
-+ 			      c2block body, !currentLoc)) in
-+ 	
-+ 	{ stmts = [ loop ];
-+           postins = [];
-+           cases = body.cases;
-+ 	} 
-        
-      let breakChunk (l: location) : chunk = 
-        { stmts = [ mkStmt (Break l) ];
-***************
-*** 959,964 ****
---- 998,1004 ----
-  
-  
-  (************ Labels ***********)
-+ (*
-  (* Since we turn dowhile and for loops into while we need to take care in 
-   * processing the continue statement. For each loop that we enter we place a 
-   * marker in a list saying what kinds of loop it is. When we see a continue 
-***************
-*** 971,980 ****
---- 1011,1041 ----
-  
-  let startLoop iswhile = 
-    continues := (if iswhile then While else NotWhile (ref "")) :: !continues
-+ *)
-+ 
-+ (* We need to take care while processing the continue statement...
-+  * For each loop that we enter we place a marker in a list saying what
-+  * chunk of code we must duplicate before each continue statement
-+  * in order to preserve the semantics. *)
-+ type loopMarker =
-+   | DuplicateBeforeContinue of chunk
-+   | ContinueUnchanged
-+ 
-+ let continues : loopMarker list ref = ref []
-+   
-+ let startLoop lstate =
-+   continues := lstate :: !continues
-+   
-+ let continueDuplicateChunk (l: location) : chunk = 
-+   match !continues with
-+     | []                             -> E.s (error "continue not in a loop")
-+     | DuplicateBeforeContinue c :: _ -> c @@ continueChunk l
-+     | ContinueUnchanged :: _         -> continueChunk l
-  
-  (* Sometimes we need to create new label names *)
-  let newLabelName (base: string) = fst (newAlphaName false "label" base)
-  
-+ (*
-  let continueOrLabelChunk (l: location) : chunk = 
-    match !continues with
-      [] -> E.s (error "continue not in a loop")
-***************
-*** 990,995 ****
---- 1051,1057 ----
-      [] -> E.s (error "labContinue not in a loop")
-    | While :: rest -> c
-    | NotWhile lr :: rest -> if !lr = "" then c else consLabel !lr c !currentLoc false
-+ *)
-  
-  let exitLoop () = 
-    match !continues with
-***************
-*** 4141,4151 ****
-      | _ -> E.s (error "%a operator on a non-integer type" d_binop bop)
-    in
-    let pointerComparison e1 t1 e2 t2 = 
-!     (* Cast both sides to an integer *)
-!     let commontype = !upointType in
-      intType,
-!     optConstFoldBinOp false bop (mkCastT e1 t1 commontype) 
-!       (mkCastT e2 t2 commontype) intType
-    in
-  
-    match bop with
---- 4203,4211 ----
-      | _ -> E.s (error "%a operator on a non-integer type" d_binop bop)
-    in
-    let pointerComparison e1 t1 e2 t2 = 
-!     (* XL: Do not cast both sides -- what's the point? *)
-      intType,
-!     optConstFoldBinOp false bop e1 e2 intType
-    in
-  
-    match bop with
-***************
-*** 4194,4207 ****
-  
-    | (Eq|Ne|Le|Lt|Ge|Gt) when isPointerType t1 && isArithmeticType t2 ->
-        ignore (warnOpt "Comparison of pointer and non-pointer");
-!       (* Cast both values to upointType *)
-!       doBinOp bop (mkCastT e1 t1 !upointType) !upointType 
-!                   (mkCastT e2 t2 !upointType) !upointType
-    | (Eq|Ne|Le|Lt|Ge|Gt) when isArithmeticType t1 && isPointerType t2 ->
-        ignore (warnOpt "Comparison of pointer and non-pointer");
-!       (* Cast both values to upointType *)
-!       doBinOp bop (mkCastT e1 t1 !upointType) !upointType 
-!                   (mkCastT e2 t2 !upointType) !upointType
-  
-    | _ -> E.s (error "doBinOp: %a\n" d_plainexp (BinOp(bop,e1,e2,intType)))
-  
---- 4254,4267 ----
-  
-    | (Eq|Ne|Le|Lt|Ge|Gt) when isPointerType t1 && isArithmeticType t2 ->
-        ignore (warnOpt "Comparison of pointer and non-pointer");
-!       (* Cast both values to void * *)
-!       doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
-!                   (mkCastT e2 t2 voidPtrType) voidPtrType
-    | (Eq|Ne|Le|Lt|Ge|Gt) when isArithmeticType t1 && isPointerType t2 ->
-        ignore (warnOpt "Comparison of pointer and non-pointer");
-!       (* Cast both values to void * *)
-!       doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
-!                   (mkCastT e2 t2 voidPtrType) voidPtrType
-  
-    | _ -> E.s (error "doBinOp: %a\n" d_plainexp (BinOp(bop,e1,e2,intType)))
-  
-***************
-*** 5465,5473 ****
---- 5525,5538 ----
-                         * then the switch falls through. *)
-                        blockFallsThrough b || blockCanBreak b
-                     end
-+ (*
-                | Loop (b, _, _, _) -> 
-                    (* A loop falls through if it can break. *)
-                    blockCanBreak b
-+ *)
-+ 	      | While (_, b, _) -> blockCanBreak b
-+ 	      | DoWhile (_, b, _) -> blockCanBreak b
-+ 	      | For (_, _, _, b, _) -> blockCanBreak b
-                | Block b -> blockFallsThrough b
-                | TryFinally (b, h, _) -> blockFallsThrough h
-                | TryExcept (b, _, h, _) -> true (* Conservative *)
-***************
-*** 5512,5518 ****
-                | Break _ -> true
-                | If (_, b1, b2, _) -> 
-                    blockCanBreak b1 || blockCanBreak b2
-!               | Switch _ | Loop _ -> 
-                    (* switches and loops catch any breaks in their bodies *)
-                    false
-                | Block b -> blockCanBreak b
---- 5577,5583 ----
-                | Break _ -> true
-                | If (_, b1, b2, _) -> 
-                    blockCanBreak b1 || blockCanBreak b2
-!               | Switch _ | (*Loop _*) While _ | DoWhile _ | For _ -> 
-                    (* switches and loops catch any breaks in their bodies *)
-                    false
-                | Block b -> blockCanBreak b
-***************
-*** 5522,5527 ****
---- 5587,5593 ----
-                List.exists stmtCanBreak b.bstmts
-              in
-              if blockFallsThrough !currentFunctionFDEC.sbody then begin
-+ (*
-                let retval = 
-                  match unrollType !currentReturnType with
-                    TVoid _ -> None
-***************
-*** 5537,5549 ****
-                  !currentFunctionFDEC.sbody.bstmts <- 
-                    !currentFunctionFDEC.sbody.bstmts 
-                    @ [mkStmt (Return(retval, endloc))]
-              end;
-              
-              (* ignore (E.log "The env after finishing the body of %s:\n%t\n"
-                          n docEnv); *)
-              cabsPushGlobal (GFun (!currentFunctionFDEC, funloc));
-              empty
-!           with e -> begin
-              ignore (E.log "error in collectFunction %s: %s\n"
-                        n (Printexc.to_string e));
-              cabsPushGlobal (GAsm("error in function " ^ n, !currentLoc));
---- 5603,5617 ----
-                  !currentFunctionFDEC.sbody.bstmts <- 
-                    !currentFunctionFDEC.sbody.bstmts 
-                    @ [mkStmt (Return(retval, endloc))]
-+ *)
-              end;
-              
-              (* ignore (E.log "The env after finishing the body of %s:\n%t\n"
-                          n docEnv); *)
-              cabsPushGlobal (GFun (!currentFunctionFDEC, funloc));
-              empty
-!           with E.Error as e -> raise e
-!              | e -> begin
-              ignore (E.log "error in collectFunction %s: %s\n"
-                        n (Printexc.to_string e));
-              cabsPushGlobal (GAsm("error in function " ^ n, !currentLoc));
-***************
-*** 5596,5609 ****
-          * local context  *)
-          addLocalToEnv (kindPlusName "type" n) (EnvTyp namedTyp);
-          cabsPushGlobal (GType (ti, !currentLoc))
-!       with e -> begin
-          ignore (E.log "Error on A.TYPEDEF (%s)\n"
-                    (Printexc.to_string e));
-          cabsPushGlobal (GAsm ("booo_typedef:" ^ n, !currentLoc))
-        end
-      in
-      List.iter createTypedef nl
-!   with e -> begin    
-      ignore (E.log "Error on A.TYPEDEF (%s)\n"
-                (Printexc.to_string e));
-      let fstname = 
---- 5664,5679 ----
-          * local context  *)
-          addLocalToEnv (kindPlusName "type" n) (EnvTyp namedTyp);
-          cabsPushGlobal (GType (ti, !currentLoc))
-!       with E.Error as e -> raise e
-!          | e -> begin
-          ignore (E.log "Error on A.TYPEDEF (%s)\n"
-                    (Printexc.to_string e));
-          cabsPushGlobal (GAsm ("booo_typedef:" ^ n, !currentLoc))
-        end
-      in
-      List.iter createTypedef nl
-!   with E.Error as e -> raise e
-!      | e -> begin    
-      ignore (E.log "Error on A.TYPEDEF (%s)\n"
-                (Printexc.to_string e));
-      let fstname = 
-***************
-*** 5650,5656 ****
-      | _ -> 
-          ignore (warn "Ignoring un-named typedef that does not introduce a struct or enumeration type\n")
-              
-!   with e -> begin
-      ignore (E.log "Error on A.ONLYTYPEDEF (%s)\n"
-                (Printexc.to_string e));
-      cabsPushGlobal (GAsm ("booo_typedef", !currentLoc))
---- 5720,5727 ----
-      | _ -> 
-          ignore (warn "Ignoring un-named typedef that does not introduce a struct or enumeration type\n")
-              
-!   with E.Error as e -> raise e
-!      | e -> begin
-      ignore (E.log "Error on A.ONLYTYPEDEF (%s)\n"
-                (Printexc.to_string e));
-      cabsPushGlobal (GAsm ("booo_typedef", !currentLoc))
-***************
-*** 5738,5743 ****
---- 5809,5815 ----
-          doCondition false e st' sf'
-  
-      | A.WHILE(e,s,loc) ->
-+ (*
-          startLoop true;
-          let s' = doStatement s in
-          exitLoop ();
-***************
-*** 5746,5753 ****
---- 5818,5844 ----
-          loopChunk ((doCondition false e skipChunk
-                        (breakChunk loc'))
-                     @@ s')
-+ *)
-+ 	(** We need to convert A.WHILE(e,s) where e may have side effects
-+ 	     into Cil.While(e',s') where e' is side-effect free. *)
-+ 	
-+ 	(* Let e == (sCond , eCond) with sCond a sequence of statements
-+ 	   and eCond a side-effect free expression. *)
-+ 	let (sCond, eCond, _) = doExp false e (AExp None) in
-+ 	  
-+ 	  (* Then doStatement(A.WHILE((sCond , eCond), s))
-+              = sCond ; Cil.While(eCond, (doStatement(s) ; sCond))
-+ 	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
-+ 	  
-+           startLoop (DuplicateBeforeContinue sCond);
-+           let s' = doStatement s in
-+             exitLoop ();
-+             let loc' = convLoc loc in
-+               currentLoc := loc';
-+               sCond @@ (whileChunk eCond (s' @@ sCond))
-            
-      | A.DOWHILE(e,s,loc) -> 
-+ (*
-          startLoop false;
-          let s' = doStatement s in
-          let loc' = convLoc loc in
-***************
-*** 5757,5764 ****
-          in
-          exitLoop ();
-          loopChunk (s' @@ s'')
-            
-!     | A.FOR(fc1,e2,e3,s,loc) -> begin
-          let loc' = convLoc loc in
-          currentLoc := loc';
-          enterScope (); (* Just in case we have a declaration *)
---- 5848,5874 ----
-          in
-          exitLoop ();
-          loopChunk (s' @@ s'')
-+ *)
-+ 	(** We need to convert A.DOWHILE(e,s) where e may have side effects
-+ 	     into Cil.DoWhile(e',s') where e' is side-effect free. *)
-+ 	
-+ 	(* Let e == (sCond , eCond) with sCond a sequence of statements
-+ 	   and eCond a side-effect free expression. *)
-+ 	let (sCond, eCond, _) = doExp false e (AExp None) in
-+ 	  
-+ 	  (* Then doStatement(A.DOWHILE((sCond , eCond), s))
-+              = Cil.DoWhile(eCond, (doStatement(s) ; sCond))
-+ 	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
-+ 	  
-+           startLoop (DuplicateBeforeContinue sCond);
-+           let s' = doStatement s in
-+             exitLoop ();
-+             let loc' = convLoc loc in
-+               currentLoc := loc';
-+               doWhileChunk eCond (s' @@ sCond)
-            
-!     | A.FOR(fc1,e2,e3,s,loc) ->
-! (*begin
-          let loc' = convLoc loc in
-          currentLoc := loc';
-          enterScope (); (* Just in case we have a declaration *)
-***************
-*** 5784,5789 ****
---- 5894,5928 ----
-          exitScope ();
-          res
-      end
-+ *)
-+ 	(** We need to convert A.FOR(e1,e2,e3,s) where e1, e2 and e3 may
-+ 	     have side effects into Cil.For(bInit,e2',bIter,s') where e2'
-+ 	     is side-effect free. **)
-+ 	
-+ 	(* Let e1 == bInit be a block of statements
-+ 	   Let e2 == (bCond , eCond) with bCond a block of statements
-+ 	   and eCond a side-effect free expression
-+ 	   Let e3 == bIter be a sequence of statements. *)
-+ 	let (bInit, _, _) = match fc1 with 
-+           | FC_EXP e1 -> doExp false e1 ADrop 
-+           | FC_DECL d1 -> (doDecl false d1, zero, voidType) in
-+ 	let (bCond, eCond, _) = doExp false e2 (AExp None) in
-+ 	let eCond' = match eCond with
-+ 	  | Const(CStr "exp_nothing") -> Cil.one
-+ 	  | _                         -> eCond in
-+ 	let (bIter, _, _) = doExp false e3 ADrop in
-+ 	  
-+ 	(* Then doStatement(A.FOR(bInit, (bCond , eCond), bIter, s))
-+            = Cil.For({bInit; bCond}, eCond', {bIter; bCond}, {doStatement(s)})
-+ 	   where doStatement(A.CONTINUE) = Cil.Continue. *)
-+ 	  
-+ 	  startLoop ContinueUnchanged;
-+           let s' = doStatement s in
-+             exitLoop ();
-+             let loc' = convLoc loc in
-+               currentLoc := loc';
-+               (forChunk (bInit @@ bCond) eCond' (bIter @@ bCond) s')
-+ 
-      | A.BREAK loc -> 
-          let loc' = convLoc loc in
-          currentLoc := loc';
-***************
-*** 5792,5798 ****
---- 5931,5940 ----
-      | A.CONTINUE loc -> 
-          let loc' = convLoc loc in
-          currentLoc := loc';
-+ (*
-          continueOrLabelChunk loc'
-+ *)
-+ 	continueDuplicateChunk loc'
-  
-      | A.RETURN (A.NOTHING, loc) -> 
-          let loc' = convLoc loc in
diff --git a/cil.patch/cfg.ml.patch b/cil.patch/cfg.ml.patch
deleted file mode 100644
index 9629d46cc..000000000
--- a/cil.patch/cfg.ml.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-*** ../cil/src/ext/cfg.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/cfg.ml	2006-06-20 17:42:04.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2003, 
-***************
-*** 156,162 ****
---- 158,169 ----
-        then 
-          addOptionSucc next;
-        cfgBlock blk next next cont
-+ (*
-    | Loop(blk,_,_,_) ->
-+ *)
-+   | While(_,blk,_)
-+   | DoWhile(_,blk,_)
-+   | For(_,_,_,blk,_) ->
-        addBlockSucc blk;
-        cfgBlock blk (Some s) next (Some s)
-        (* Since all loops have terminating condition true, we don't put
-***************
-*** 184,190 ****
---- 191,202 ----
-        | Block b -> fasBlock todo b
-        | If (_, tb, fb, _) -> (fasBlock todo tb; fasBlock todo fb)
-        | Switch (_, b, _, _) -> fasBlock todo b
-+ (*
-        | Loop (b, _, _, _) -> fasBlock todo b
-+ *)
-+       | While (_, b, _) -> fasBlock todo b
-+       | DoWhile (_, b, _) -> fasBlock todo b
-+       | For (_, _, _, b, _) -> fasBlock todo b
-        | (Return _ | Break _ | Continue _ | Goto _ | Instr _) -> ()
-        | TryExcept _ | TryFinally _ -> E.s (E.unimp "try/except/finally")
-    end
-***************
-*** 201,207 ****
---- 213,224 ----
-    begin
-      match s.skind with
-        | If (e, _, _, _)  -> "if" (*sprint ~width:999 (dprintf "if %a" d_exp e)*)
-+ (*
-        | Loop _ -> "loop"
-+ *)
-+       | While _ -> "while"
-+       | DoWhile _ -> "dowhile"
-+       | For _ -> "for"
-        | Break _ -> "break"
-        | Continue _ -> "continue"
-        | Goto _ -> "goto"
diff --git a/cil.patch/check.ml.patch b/cil.patch/check.ml.patch
deleted file mode 100644
index 7fe183f3d..000000000
--- a/cil.patch/check.ml.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-*** ../cil/src/check.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/check.ml	2006-06-21 11:13:35.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (* 
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 661,667 ****
-      (fun _ -> 
-        (* Print context only for certain small statements *)
-        match s.skind with 
-!         Loop _ | If _ | Switch _  -> nil
-        | _ -> dprintf "checkStmt: %a" d_stmt s)
-      (fun _ -> 
-        (* Check the labels *)
---- 663,669 ----
-      (fun _ -> 
-        (* Print context only for certain small statements *)
-        match s.skind with 
-!         (*Loop _*) While _ | DoWhile _ | For _ | If _ | Switch _  -> nil
-        | _ -> dprintf "checkStmt: %a" d_stmt s)
-      (fun _ -> 
-        (* Check the labels *)
-***************
-*** 704,710 ****
---- 706,731 ----
-            | None, _ -> ignore (warn "Invalid return value")
-            | Some re', rt' -> checkExpType false re' rt'
-          end
-+ (*
-        | Loop (b, l, _, _) -> checkBlock b
-+ *)
-+       | While (e, b, l) ->
-+           currentLoc := l;
-+           let te = checkExp false e in
-+           checkBooleanType te;
-+           checkBlock b;
-+       | DoWhile (e, b, l) ->
-+           currentLoc := l;
-+           let te = checkExp false e in
-+           checkBooleanType te;
-+           checkBlock b;
-+       | For (bInit, e, bIter, b, l) ->
-+           currentLoc := l;
-+ 	  checkBlock bInit;
-+ 	  let te = checkExp false e in
-+           checkBooleanType te;
-+ 	  checkBlock bIter;
-+           checkBlock b;
-        | Block b -> checkBlock b
-        | If (e, bt, bf, l) -> 
-            currentLoc := l;
diff --git a/cil.patch/cil.ml.patch b/cil.patch/cil.ml.patch
deleted file mode 100644
index a49b73d1a..000000000
--- a/cil.patch/cil.ml.patch
+++ /dev/null
@@ -1,381 +0,0 @@
-*** ../cil/src/cil.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/cil.ml	2006-07-25 10:57:30.686790845 +0200
-***************
-*** 1,3 ****
---- 1,6 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ (* MODIF: useLogicalOperators flag set to true by default. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2003,
-***************
-*** 63,69 ****
-                                         * print output for the MS VC 
-                                         * compiler. Default is GCC *)
-  
-! let useLogicalOperators = ref false
-  
-  
-  module M = Machdep
---- 66,72 ----
-                                         * print output for the MS VC 
-                                         * compiler. Default is GCC *)
-  
-! let useLogicalOperators = ref (*false*) true
-  
-  
-  module M = Machdep
-***************
-*** 684,692 ****
-    | Goto of stmt ref * location         (** A goto statement. Appears from 
-                                              actual goto's in the code. *)
-    | Break of location                   (** A break to the end of the nearest 
-!                                              enclosing Loop or Switch *)
-    | Continue of location                (** A continue to the start of the 
-!                                             nearest enclosing [Loop] *)
-    | If of exp * block * block * location (** A conditional. 
-                                               Two successors, the "then" and 
-                                               the "else" branches. Both 
---- 687,695 ----
-    | Goto of stmt ref * location         (** A goto statement. Appears from 
-                                              actual goto's in the code. *)
-    | Break of location                   (** A break to the end of the nearest 
-!                                              enclosing loop or Switch *)
-    | Continue of location                (** A continue to the start of the 
-!                                             nearest enclosing loop *)
-    | If of exp * block * block * location (** A conditional. 
-                                               Two successors, the "then" and 
-                                               the "else" branches. Both 
-***************
-*** 701,706 ****
---- 704,710 ----
-                                             you can get from the labels of the 
-                                             statement *)
-  
-+ (*
-    | Loop of block * location * (stmt option) * (stmt option) 
-                                             (** A [while(1)] loop. The 
-                                              * termination test is implemented 
-***************
-*** 713,718 ****
---- 717,726 ----
-                                              * and the second will point to 
-                                              * the stmt containing the break 
-                                              * label for this loop. *)
-+ *)
-+   | While of exp * block * location                 (** A while loop. *)
-+   | DoWhile of exp * block * location               (** A do...while loop. *)
-+   | For of block * exp * block * block * location   (** A for loop. *)
-  
-    | Block of block                      (** Just a block of statements. Use it 
-                                              as a way to keep some attributes 
-***************
-*** 1040,1046 ****
---- 1048,1059 ----
-      | Continue(loc) -> loc
-      | If(_, _, _, loc) -> loc
-      | Switch (_, _, _, loc) -> loc
-+ (*
-      | Loop (_, loc, _, _) -> loc
-+ *)
-+     | While (_, _, loc) -> loc
-+     | DoWhile (_, _, loc) -> loc
-+     | For (_, _, _, _, loc) -> loc
-      | Block b -> if b.bstmts == [] then lu 
-                   else get_stmtLoc ((List.hd b.bstmts).skind)
-      | TryFinally (_, _, l) -> l
-***************
-*** 1524,1533 ****
---- 1537,1549 ----
-  
-  let mkWhile ~(guard:exp) ~(body: stmt list) : stmt list = 
-    (* Do it like this so that the pretty printer recognizes it *)
-+ (*
-    [ mkStmt (Loop (mkBlock (mkStmt (If(guard, 
-                                        mkBlock [ mkEmptyStmt () ], 
-                                        mkBlock [ mkStmt (Break lu)], lu)) ::
-                             body), lu, None, None)) ]
-+ *)
-+   [ mkStmt (While (guard, mkBlock body, lu)) ]
-  
-  
-  
-***************
-*** 3448,3453 ****
---- 3464,3471 ----
-                  ++ self#pExp () e
-                  ++ text ") "
-                  ++ self#pBlock () b)
-+ 
-+ (*
-      | Loop(b, l, _, _) -> begin
-          (* Maybe the first thing is a conditional. Turn it into a WHILE *)
-          try
-***************
-*** 3484,3489 ****
---- 3502,3540 ----
-                    ++ text "ile (1) "
-                    ++ self#pBlock () b)
-      end
-+ *)
-+ 
-+     | While (e, b, l) ->
-+         self#pLineDirective l
-+           ++ (align
-+                 ++ text "while ("
-+                 ++ self#pExp () e
-+                 ++ text ") "
-+                 ++ self#pBlock () b)
-+ 
-+     | DoWhile (e, b, l) ->
-+         self#pLineDirective l
-+           ++ (align
-+                 ++ text "do "
-+                 ++ self#pBlock () b
-+                 ++ text " while ("
-+                 ++ self#pExp () e
-+                 ++ text ");")
-+ 
-+     | For (bInit, e, bIter, b, l) ->
-+ 	ignore (E.warn
-+ 		  "in for loops, the 1st and 3rd expressions are not printed");
-+           self#pLineDirective l
-+             ++ (align
-+                   ++ text "for ("
-+                   ++ text "/* ??? */"   (* self#pBlock () bInit *)
-+                   ++ text "; "
-+                   ++ self#pExp () e
-+                   ++ text "; "
-+                   ++ text "/* ??? */"   (* self#pBlock() bIter *)
-+                   ++ text ") "
-+                   ++ self#pBlock () b)
-+ 
-      | Block b -> align ++ self#pBlock () b
-        
-      | TryFinally (b, h, l) -> 
-***************
-*** 4705,4713 ****
---- 4756,4781 ----
-      | Return (Some e, l) -> 
-          let e' = fExp e in
-          if e' != e then Return (Some e', l) else s.skind
-+ (*
-      | Loop (b, l, s1, s2) -> 
-          let b' = fBlock b in
-          if b' != b then Loop (b', l, s1, s2) else s.skind
-+ *)
-+     | While (e, b, l) ->
-+ 	let e' = fExp e in 
-+         let b' = fBlock b in
-+           if e' != e || b' != b then While (e', b', l) else s.skind
-+     | DoWhile (e, b, l) ->
-+ 	let b' = fBlock b in
-+         let e' = fExp e in 
-+           if e' != e || b' != b then DoWhile (e', b', l) else s.skind
-+     | For (bInit, e, bIter, b, l) -> 
-+ 	let bInit' = fBlock bInit in
-+ 	let e' = fExp e in
-+ 	let bIter' = fBlock bIter in
-+ 	let b' = fBlock b in
-+ 	  if bInit' != bInit || e' != e || bIter' != bIter || b' != b then
-+ 	    For (bInit', e', bIter', b', l) else s.skind
-      | If(e, s1, s2, l) -> 
-          let e' = fExp e in 
-          (*if e queued any instructions, pop them here and remember them so that
-***************
-*** 5180,5186 ****
---- 5248,5262 ----
-            peepHole1 doone tb.bstmts;
-            peepHole1 doone eb.bstmts
-        | Switch (e, b, _, _) -> peepHole1 doone b.bstmts
-+ (*
-        | Loop (b, l, _, _) -> peepHole1 doone b.bstmts
-+ *)
-+       | While (_, b, _) -> peepHole1 doone b.bstmts
-+       | DoWhile (_, b, _) -> peepHole1 doone b.bstmts
-+       | For (bInit, _, bIter, b, _) ->
-+ 	  peepHole1 doone bInit.bstmts;
-+ 	  peepHole1 doone bIter.bstmts;
-+ 	  peepHole1 doone b.bstmts
-        | Block b -> peepHole1 doone b.bstmts
-        | TryFinally (b, h, l) -> 
-            peepHole1 doone b.bstmts; 
-***************
-*** 5214,5220 ****
---- 5290,5304 ----
-            peepHole2 dotwo tb.bstmts;
-            peepHole2 dotwo eb.bstmts
-        | Switch (e, b, _, _) -> peepHole2 dotwo b.bstmts
-+ (*
-        | Loop (b, l, _, _) -> peepHole2 dotwo b.bstmts
-+ *)
-+       | While (_, b, _) -> peepHole2 dotwo b.bstmts
-+       | DoWhile (_, b, _) -> peepHole2 dotwo b.bstmts
-+       | For (bInit, _, bIter, b, _) ->
-+ 	  peepHole2 dotwo bInit.bstmts;
-+ 	  peepHole2 dotwo bIter.bstmts;
-+ 	  peepHole2 dotwo b.bstmts
-        | Block b -> peepHole2 dotwo b.bstmts
-        | TryFinally (b, h, l) -> peepHole2 dotwo b.bstmts; 
-                                  peepHole2 dotwo h.bstmts
-***************
-*** 5887,5892 ****
---- 5971,5977 ----
-          [] -> trylink s fallthrough
-        | hd :: tl -> (link s hd ; succpred_block b2 fallthrough ))
-  
-+ (*
-    | Loop(b,l,_,_) -> 
-        begin match b.bstmts with
-          [] -> failwith "computeCFGInfo: empty loop" 
-***************
-*** 5894,5899 ****
---- 5979,6011 ----
-            link s hd ; 
-            succpred_block b (Some(hd))
-        end
-+ *)
-+ 
-+   | While (e, b, l) -> begin match b.bstmts with
-+                        | [] -> failwith "computeCFGInfo: empty loop" 
-+ 	               | hd :: tl -> link s hd ;
-+                                      succpred_block b (Some(hd))
-+                        end
-+ 
-+   | DoWhile (e, b, l) ->begin match b.bstmts with
-+                        |  [] -> failwith "computeCFGInfo: empty loop" 
-+ 	               | hd :: tl -> link s hd ;
-+                                      succpred_block b (Some(hd))
-+                        end
-+ 
-+   | For (bInit, e, bIter, b, l) ->
-+       (match bInit.bstmts with
-+          |  [] -> failwith "computeCFGInfo: empty loop" 
-+ 	 | hd :: tl -> link s hd ;
-+              succpred_block bInit (Some(hd))) ;
-+       (match bIter.bstmts with
-+          |  [] -> failwith "computeCFGInfo: empty loop" 
-+ 	 | hd :: tl -> link s hd ;
-+              succpred_block bIter (Some(hd))) ;
-+       (match b.bstmts with
-+          |  [] -> failwith "computeCFGInfo: empty loop" 
-+ 	 | hd :: tl -> link s hd ;
-+              succpred_block b (Some(hd))) ;
-  
-    | Block(b) -> begin match b.bstmts with
-                    [] -> trylink s fallthrough
-***************
-*** 5985,5991 ****
-        let i = get_switch_count () in 
-        let break_stmt = mkStmt (Instr []) in
-        break_stmt.labels <- 
-! 				[Label((Printf.sprintf "switch_%d_break" i),l,false)] ;
-        let break_block = mkBlock [ break_stmt ] in
-        let body_block = b in 
-        let body_if_stmtkind = (If(zero,body_block,break_block,l)) in
---- 6097,6103 ----
-        let i = get_switch_count () in 
-        let break_stmt = mkStmt (Instr []) in
-        break_stmt.labels <- 
-! 	[Label((Printf.sprintf "switch_%d_break" i),l,false)] ;
-        let break_block = mkBlock [ break_stmt ] in
-        let body_block = b in 
-        let body_if_stmtkind = (If(zero,body_block,break_block,l)) in
-***************
-*** 6026,6039 ****
-        s.skind <- handle_choices (List.sort compare_choices sl) ;
-        xform_switch_block b (fun () -> ref break_stmt) cont_dest i 
-      end
-    | Loop(b,l,_,_) -> 
-            let i = get_switch_count () in 
-            let break_stmt = mkStmt (Instr []) in
-            break_stmt.labels <- 
-! 						[Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-            let cont_stmt = mkStmt (Instr []) in
-            cont_stmt.labels <- 
-! 						[Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-            b.bstmts <- cont_stmt :: b.bstmts ;
-            let this_stmt = mkStmt 
-              (Loop(b,l,Some(cont_stmt),Some(break_stmt))) in 
---- 6138,6152 ----
-        s.skind <- handle_choices (List.sort compare_choices sl) ;
-        xform_switch_block b (fun () -> ref break_stmt) cont_dest i 
-      end
-+ (*
-    | Loop(b,l,_,_) -> 
-            let i = get_switch_count () in 
-            let break_stmt = mkStmt (Instr []) in
-            break_stmt.labels <- 
-! 	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-            let cont_stmt = mkStmt (Instr []) in
-            cont_stmt.labels <- 
-! 	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-            b.bstmts <- cont_stmt :: b.bstmts ;
-            let this_stmt = mkStmt 
-              (Loop(b,l,Some(cont_stmt),Some(break_stmt))) in 
-***************
-*** 6043,6048 ****
---- 6156,6217 ----
-            break_stmt.succs <- s.succs ; 
-            let new_block = mkBlock [ this_stmt ; break_stmt ] in
-            s.skind <- Block new_block
-+ *)
-+   | While (e, b, l) ->
-+           let i = get_switch_count () in 
-+           let break_stmt = mkStmt (Instr []) in
-+           break_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-+           let cont_stmt = mkStmt (Instr []) in
-+           cont_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-+           b.bstmts <- cont_stmt :: b.bstmts ;
-+           let this_stmt = mkStmt 
-+             (While(e,b,l)) in 
-+           let break_dest () = ref break_stmt in
-+           let cont_dest () = ref cont_stmt in 
-+           xform_switch_block b break_dest cont_dest label_index ;
-+           break_stmt.succs <- s.succs ; 
-+           let new_block = mkBlock [ this_stmt ; break_stmt ] in
-+           s.skind <- Block new_block
-+ 
-+   | DoWhile (e, b, l) ->
-+           let i = get_switch_count () in 
-+           let break_stmt = mkStmt (Instr []) in
-+           break_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-+           let cont_stmt = mkStmt (Instr []) in
-+           cont_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-+           b.bstmts <- cont_stmt :: b.bstmts ;
-+           let this_stmt = mkStmt 
-+             (DoWhile(e,b,l)) in 
-+           let break_dest () = ref break_stmt in
-+           let cont_dest () = ref cont_stmt in 
-+           xform_switch_block b break_dest cont_dest label_index ;
-+           break_stmt.succs <- s.succs ; 
-+           let new_block = mkBlock [ this_stmt ; break_stmt ] in
-+           s.skind <- Block new_block
-+ 
-+   | For (bInit, e, bIter , b, l) ->
-+           let i = get_switch_count () in 
-+           let break_stmt = mkStmt (Instr []) in
-+           break_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-+           let cont_stmt = mkStmt (Instr []) in
-+           cont_stmt.labels <- 
-+ 	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-+           b.bstmts <- cont_stmt :: b.bstmts ;
-+           let this_stmt = mkStmt 
-+             (For(bInit,e,bIter,b,l)) in 
-+           let break_dest () = ref break_stmt in
-+           let cont_dest () = ref cont_stmt in 
-+           xform_switch_block b break_dest cont_dest label_index ;
-+           break_stmt.succs <- s.succs ; 
-+           let new_block = mkBlock [ this_stmt ; break_stmt ] in
-+           s.skind <- Block new_block
-+ 
-+ 
-    | Block(b) -> xform_switch_block b break_dest cont_dest label_index
-  
-    | TryExcept _ | TryFinally _ -> 
diff --git a/cil.patch/cil.mli.patch b/cil.patch/cil.mli.patch
deleted file mode 100644
index d0e0363e2..000000000
--- a/cil.patch/cil.mli.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-*** ../cil/src/cil.mli	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/cil.mli	2006-06-21 10:56:23.555126082 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 918,927 ****
-      * statement. The target statement MUST have at least a label. *)
-  
-    | Break of location                   
-!    (** A break to the end of the nearest enclosing Loop or Switch *)
-  
-    | Continue of location                
-!    (** A continue to the start of the nearest enclosing [Loop] *)
-    | If of exp * block * block * location 
-     (** A conditional. Two successors, the "then" and the "else" branches. 
-      * Both branches fall-through to the successor of the If statement. *)
---- 920,929 ----
-      * statement. The target statement MUST have at least a label. *)
-  
-    | Break of location                   
-!    (** A break to the end of the nearest enclosing loop or Switch *)
-  
-    | Continue of location                
-!    (** A continue to the start of the nearest enclosing loop *)
-    | If of exp * block * block * location 
-     (** A conditional. Two successors, the "then" and the "else" branches. 
-      * Both branches fall-through to the successor of the If statement. *)
-***************
-*** 932,943 ****
---- 934,956 ----
-      * among its labels what cases it implements. The statements that 
-      * implement the cases are somewhere within the provided [block]. *)
-  
-+ (*
-    | Loop of block * location * (stmt option) * (stmt option)
-      (** A [while(1)] loop. The termination test is implemented in the body of 
-       * a loop using a [Break] statement. If prepareCFG has been called,
-       * the first stmt option will point to the stmt containing the continue
-       * label for this loop and the second will point to the stmt containing
-       * the break label for this loop. *)
-+ *)
-+ 
-+   | While of exp * block * location
-+     (** A [while] loop. *)
-+ 
-+   | DoWhile of exp * block * location
-+     (** A [do...while] loop. *)
-+ 
-+   | For of block * exp * block * block * location
-+     (** A [for] loop. *)
-  
-    | Block of block                      
-      (** Just a block of statements. Use it as a way to keep some block 
diff --git a/cil.patch/clexer.mll.patch b/cil.patch/clexer.mll.patch
deleted file mode 100644
index edbe8beb4..000000000
--- a/cil.patch/clexer.mll.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-*** ../cil.orig/src/frontc/clexer.mll	2006-05-21 06:14:15.000000000 +0200
---- ../cil/src/frontc/clexer.mll	2009-03-29 10:34:34.000000000 +0200
-***************
-*** 584,590 ****
-  | blank		{ hash lexbuf}
-  | intnum	{ (* We are seeing a line number. This is the number for the 
-                     * next line *)
-!                   E.setCurrentLine (int_of_string (Lexing.lexeme lexbuf) - 1);
-                    (* A file name must follow *)
-  		  file lexbuf }
-  | "line"        { hash lexbuf } (* MSVC line number info *)
---- 584,595 ----
-  | blank		{ hash lexbuf}
-  | intnum	{ (* We are seeing a line number. This is the number for the 
-                     * next line *)
-!                   let s = Lexing.lexeme lexbuf in
-!                   begin try
-!                     E.setCurrentLine (int_of_string s - 1)
-!                   with Failure _ ->
-!                     E.warn "Bad line number in preprocessed file: %s" s
-!                   end;
-                    (* A file name must follow *)
-  		  file lexbuf }
-  | "line"        { hash lexbuf } (* MSVC line number info *)
diff --git a/cil.patch/dataflow.ml.patch b/cil.patch/dataflow.ml.patch
deleted file mode 100644
index 87b00de63..000000000
--- a/cil.patch/dataflow.ml.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-*** ../cil/src/ext/dataflow.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/dataflow.ml	2006-06-20 17:28:35.000000000 +0200
-***************
-*** 1,3 ****
---- 1,4 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-  
-  module IH = Inthash
-  module E = Errormsg
-***************
-*** 219,225 ****
-  
-              | Goto _ | Break _ | Continue _ | If _ 
-              | TryExcept _ | TryFinally _ 
-!             | Switch _ | Loop _ | Return _ | Block _ -> curr
-            in
-            currentLoc := get_stmtLoc s.skind;
-                  
---- 220,227 ----
-  
-              | Goto _ | Break _ | Continue _ | If _ 
-              | TryExcept _ | TryFinally _ 
-!             | Switch _ | (*Loop _*) While _ | DoWhile _ | For _
-! 	    | Return _ | Block _ -> curr
-            in
-            currentLoc := get_stmtLoc s.skind;
-                  
diff --git a/cil.patch/dataslicing.ml.patch b/cil.patch/dataslicing.ml.patch
deleted file mode 100644
index cebf2e3a7..000000000
--- a/cil.patch/dataslicing.ml.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-*** ../cil/src/ext/dataslicing.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/dataslicing.ml	2006-06-21 11:14:58.866051623 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2004, 
-***************
-*** 357,365 ****
---- 359,373 ----
-    | Return (eo, l) -> sliceReturnExp eo l
-    | Switch (e, b, sl, l) -> Switch (sliceExp 1 e, sliceBlock b,
-                                      List.map sliceStmt sl, l)
-+ (*
-    | Loop (b, l, so1, so2) -> Loop (sliceBlock b, l,
-                                     applyOption sliceStmt so1,
-                                     applyOption sliceStmt so2)
-+ *)
-+   | While (e, b, l) -> While (sliceExp 1 e, sliceBlock b, l)
-+   | DoWhile (e, b, l) -> DoWhile (sliceExp 1 e, sliceBlock b, l)
-+   | For (bInit, e, bIter, b, l) ->
-+ 	For (sliceBlock bInit, sliceExp 1e, sliceBlock bIter, sliceBlock b, l)
-    | Goto _ -> sk
-    | _ -> E.s (unimp "statement")
-  
diff --git a/cil.patch/formatparse.mly.patch b/cil.patch/formatparse.mly.patch
deleted file mode 100644
index 09e161b9e..000000000
--- a/cil.patch/formatparse.mly.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-*** ../cil/src/formatparse.mly	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/formatparse.mly	2006-06-20 16:22:57.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ /* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. */
-+ 
-  /*(* Parser for constructing CIL from format strings *)
-  (*
-   *
-***************
-*** 1352,1357 ****
---- 1354,1360 ----
-                              mkCast e !upointType
-                            else e
-                          in
-+ (*
-                          mkStmt 
-                            (Loop (mkBlock [ mkStmt 
-                                               (If(e,
-***************
-*** 1360,1366 ****
-                                                               (Break loc) ],
-                                                   loc));
-                                             $5 mkTemp loc args ],
-!                                  loc, None, None)))
-                     } 
-  |   instr_list    { (fun mkTemp loc args -> 
-                         mkStmt (Instr ($1 loc args)))
---- 1363,1372 ----
-                                                               (Break loc) ],
-                                                   loc));
-                                             $5 mkTemp loc args ],
-!                                  loc, None, None))
-! *)
-! 			mkStmt
-! 			  (While (e, mkBlock [ $5 mkTemp loc args ], loc)))
-                     } 
-  |   instr_list    { (fun mkTemp loc args -> 
-                         mkStmt (Instr ($1 loc args)))
diff --git a/cil.patch/mergecil.ml.patch b/cil.patch/mergecil.ml.patch
deleted file mode 100644
index cc976ec55..000000000
--- a/cil.patch/mergecil.ml.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-*** ../cil/src/mergecil.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/mergecil.ml	2006-06-20 17:20:05.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 1151,1157 ****
---- 1153,1164 ----
-                            + 41*(stmtListSum b2.bstmts)
-      | Switch(_,b,_,_) -> 43 + 47*(stmtListSum b.bstmts)
-                              (* don't look at stmt list b/c is not part of tree *)
-+ (*
-      | Loop(b,_,_,_) -> 49 + 53*(stmtListSum b.bstmts)
-+ *)
-+     | While(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-+     | DoWhile(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-+     | For(_,_,_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-      | Block(b) -> 59 + 61*(stmtListSum b.bstmts)
-      | TryExcept (b, (il, e), h, _) -> 
-          67 + 83*(stmtListSum b.bstmts) + 97*(stmtListSum h.bstmts)
diff --git a/cil.patch/oneret.ml.patch b/cil.patch/oneret.ml.patch
deleted file mode 100644
index d4c13d52e..000000000
--- a/cil.patch/oneret.ml.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-*** ../cil/src/ext/oneret.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/oneret.ml	2006-06-21 11:15:54.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002, 
-***************
-*** 133,142 ****
---- 135,159 ----
-          currentLoc := l;
-          s.skind <- If(eb, scanBlock false t, scanBlock false e, l);
-          s :: scanStmts mainbody rests
-+ (*
-      | ({skind=Loop(b,l,lb1,lb2)} as s) :: rests -> 
-          currentLoc := l;
-          s.skind <- Loop(scanBlock false b, l,lb1,lb2);
-          s :: scanStmts mainbody rests
-+ *)
-+     | ({skind=While(e,b,l)} as s) :: rests -> 
-+         currentLoc := l;
-+         s.skind <- While(e, scanBlock false b, l);
-+         s :: scanStmts mainbody rests
-+     | ({skind=DoWhile(e,b,l)} as s) :: rests -> 
-+         currentLoc := l;
-+         s.skind <- DoWhile(e, scanBlock false b, l);
-+         s :: scanStmts mainbody rests
-+     | ({skind=For(bInit,e,bIter,b,l)} as s) :: rests -> 
-+         currentLoc := l;
-+ 	s.skind <- For(scanBlock false bInit, e, scanBlock false bIter,
-+ 		       scanBlock false b, l);
-+         s :: scanStmts mainbody rests
-      | ({skind=Switch(e, b, cases, l)} as s) :: rests -> 
-          currentLoc := l;
-          s.skind <- Switch(e, scanBlock false b, cases, l);
diff --git a/cil.patch/ptranal.ml.patch b/cil.patch/ptranal.ml.patch
deleted file mode 100644
index 8b5cf9f26..000000000
--- a/cil.patch/ptranal.ml.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-*** ../cil/src/ext/pta/ptranal.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/pta/ptranal.ml	2006-06-21 11:55:25.414890423 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  (*
-   *
-   * Copyright (c) 2001-2002,
-***************
-*** 312,318 ****
---- 314,328 ----
-      | Switch (e, b, sl, l) ->
-          analyze_block b;
-          List.iter analyze_stmt sl
-+ (*
-      | Loop (b, l, _, _) -> analyze_block b
-+ *)
-+     | While (_, b, _) -> analyze_block b
-+     | DoWhile (_, b, _) -> analyze_block b
-+     | For (bInit, _, bIter, b, _) ->
-+ 	analyze_block bInit;
-+ 	analyze_block bIter;
-+ 	analyze_block b
-      | Block b -> analyze_block b
-      | TryFinally (b, h, _) ->
-          analyze_block b;
diff --git a/cil.patch/usedef.ml.patch b/cil.patch/usedef.ml.patch
deleted file mode 100644
index d07531631..000000000
--- a/cil.patch/usedef.ml.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-*** ../cil/src/ext/usedef.ml	2006-05-21 06:14:15.000000000 +0200
---- ../cil_patch/src/ext/usedef.ml	2006-06-20 17:36:16.000000000 +0200
-***************
-*** 1,3 ****
---- 1,5 ----
-+ (* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-+ 
-  
-  open Cil
-  open Pretty
-***************
-*** 130,136 ****
---- 132,141 ----
-      | Return (Some e, _) -> ve e
-      | If (e, _, _, _) -> ve e
-      | Break _ | Goto _ | Continue _ -> ()
-+ (*
-      | Loop (_, _, _, _) -> ()
-+ *)
-+     | While _ | DoWhile _ | For _ -> ()
-      | Switch (e, _, _, _) -> ve e
-      | Instr il -> 
-          List.iter (fun i -> ignore (visitCilInstr useDefVisitor i)) il
-***************
-*** 165,171 ****
---- 170,181 ----
-        let u'', d'' = handle_block fb in
-        (VS.union (VS.union u u') u'', VS.union (VS.union d d') d'')
-    | Break _ | Goto _ | Continue _ -> !varUsed, !varDefs
-+ (*
-    | Loop (b, _, _, _) -> handle_block b
-+ *)
-+   | While (_, b, _) -> handle_block b
-+   | DoWhile (_, b, _) -> handle_block b
-+   | For (_, _, _, b, _) -> handle_block b
-    | Switch (e, b, _, _) -> 
-        let _ = ve e in
-        let u, d = !varUsed, !varDefs in
diff --git a/cil/INSTALL b/cil/INSTALL
new file mode 100644
index 000000000..ef7846fd9
--- /dev/null
+++ b/cil/INSTALL
@@ -0,0 +1,41 @@
+
+ (For more complete installation instructions see the documentation in
+  doc/html.)
+
+ Building from source (see below for installing binary distributions)
+---------------------------------------------------------------------
+
+ 1. If you use Windows, you must first install cygwin. 
+
+ 2. You must install OCaml version 3.08 or higher (see instructions at
+    http://caml.inria.fr/ocaml). The recommended build process is using 
+    the cygwin version of ocaml. 
+
+    You can also build with Microsoft Visual Studio, but you must still have
+    cygwin during the build process. See msvcbuild.cmd. 
+
+ 3. Download and unpack the distribution. 
+
+ 4. Run ./configure (from within bash if on Windows)
+
+ 5. Run make
+
+ 6. Run make check
+
+ Now you can start using bin/cilly and bin/ccured as explained in the
+ documentation (in doc/html). 
+
+
+ Installing binary distributions (Windows-only)
+-----------------------------------------------
+
+ 1. Unpack the installation package
+ 
+ 2. Change CILHOME to the full path of the diretory where you put cil, in 
+    the following files: bin/CilConfig.pm, bin/cilly.bat, bin/patcher.bat
+ 3. Go to test/small1 directory and run 
+    ..\..\cilly /c hello.c
+
+
+
+    
\ No newline at end of file
diff --git a/cil/LICENSE b/cil/LICENSE
new file mode 100644
index 000000000..5a7dab5e3
--- /dev/null
+++ b/cil/LICENSE
@@ -0,0 +1,35 @@
+Copyright (c) 2001-2005,
+ George C. Necula    <necula@cs.berkeley.edu>
+ Scott McPeak        <smcpeak@cs.berkeley.edu>
+ Wes Weimer          <weimer@cs.berkeley.edu>
+ Ben Liblit          <liblit@cs.wisc.edu>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+3. The names of the contributors may not be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+(See http://www.opensource.org/licenses/bsd-license.php)
diff --git a/cil/Makefile.gcc b/cil/Makefile.gcc
new file mode 100644
index 000000000..8fae4e343
--- /dev/null
+++ b/cil/Makefile.gcc
@@ -0,0 +1,75 @@
+# -*-makefile-*-
+# Makefile for CCured. The gcc part
+
+
+COMPILERNAME := GNUCC
+
+CC := gcc
+ifdef RELEASELIB
+  # sm: I will leave this here, but only use it for compiling our runtime lib
+  CFLAGS := -D_GNUCC -Wall -O3
+else
+  CFLAGS := -D_GNUCC -Wall -g -ggdb -D_DEBUG
+endif
+
+# dsw: added optional -pg flag
+ifdef USE_PG
+  CFLAGS += -pg
+endif
+
+ifdef NO_OPTIMIZATION
+  OPT_O2 :=
+else
+  OPT_O2 := -O2
+endif
+CONLY := -c
+OBJOUT := -o
+OBJEXT := o
+LIBEXT := a
+EXEOUT := -o
+LDEXT := 
+DEF := -D
+ASMONLY := -S -o 
+WARNALL := -Wall
+# sm: shuffled around a couple things so I could use CPPSTART for patch2
+CPPSTART := gcc -E -x c -Dx86_LINUX -D_GNUCC  -I/usr/include/sys
+CPPOUT := -o %o
+CPP := $(CPPSTART) -include fixup.h %i $(CPPOUT)
+INC := -I
+
+# sm: disable patching for now ('true' has no output)
+# (set it to 'echo' to re-enable)
+ifndef PATCHECHO
+  PATCHECHO := echo
+endif
+
+AR := ar 
+LIBOUT := -rs 
+
+# The system include files to be patched
+PATCH_SYSINCLUDES := crypt.h ctype.h fcntl.h glob.h grp.h malloc.h netdb.h \
+                     pthread.h pwd.h signal.h stdarg.h stdio.h stdlib.h \
+                     string.h time.h unistd.h varargs.h arpa/inet.h \
+		     sys/cdefs.h sys/fcntl.h sys/ioctl.h sys/socket.h \
+                     sys/stat.h sys/types.h sys/uio.h malloc.h setjmp.h
+
+ifneq ($(ARCHOS), x86_WIN32)
+PATCH_SYSINCLUDES += sys/shm.h
+endif
+
+# dsw & sm: DON'T DO THIS.  See comment in ccured_GNUCC.patch, search for 'sys/io.h'.
+# PATCH_SYSINCLUDES += sys/io.h
+
+# matth: reent.h is only in Cygwin, and Cygwin defines struct sigaction 
+# in sys/signal.h:
+ifeq ($(ARCHOS), x86_WIN32)
+PATCH_SYSINCLUDES += sys/reent.h sys/signal.h
+endif
+
+# matth: these files are not in Cygwin
+ifeq ($(ARCHOS), x86_LINUX)
+PATCH_SYSINCLUDES +=  nl_types.h bits/sigaction.h bits/select.h sys/prctl.h \
+	libgen.h shadow.h
+endif
+
+
diff --git a/cil/Makefile.in b/cil/Makefile.in
new file mode 100644
index 000000000..a16d60cf1
--- /dev/null
+++ b/cil/Makefile.in
@@ -0,0 +1,656 @@
+# -*- Mode: makefile -*- 
+
+# Makefile for the cil wrapper
+# @do_not_edit@ Makefile.in
+#
+# author: George Necula
+
+#
+# If you want to add extra CIL features, you do not always need to change 
+# this file. Just invoke 
+#        ./configure EXTRASRCDIRS=/home/foodir EXTRAFEATURES="foo bar"
+# This will add two features that must be defined in foo.ml and bar.ml
+# 
+
+# Debugging. Set ECHO= to debug this Makefile 
+.PHONY: setup quickbuild doc distrib machdep cilversion
+ECHO = @
+
+# It is important to build quickbuild first, to generate the proper dependencies
+all:  quickbuild setup
+
+# Now add the defines for the CIL features
+@CIL_FEATURES_DEFINES@
+
+
+# look out for outdated Makefile; if it's out of date, this will automatically
+# re-run ./config.status, then re-exec make with the same arguments
+Makefile: config.status Makefile.in 
+	./$<
+
+config.status: configure
+	./$@ --recheck
+
+configure: configure.in
+	autoconf
+
+ocamlutil/perfcount.c: config.status ocamlutil/perfcount.c.in
+	./$<
+
+@DEFAULT_COMPILER@=1
+
+
+
+ifdef RELEASE
+  NATIVECAML := 1
+  UNSAFE     := 1
+endif
+
+ifndef ARCHOS
+   ARCHOS=@ARCHOS@
+endif
+
+# Put here all the byproducts of make
+OBJDIR      := obj/$(ARCHOS)
+DEPENDDIR   := obj/.depend
+
+CILLY_FEATURES :=
+ifdef USE_BLOCKINGGRAPH
+  CILLY_FEATURES += blockinggraph
+endif
+ifdef USE_RAND
+  CILLY_FEATURES += rand
+endif
+ifdef USE_ARITHABS
+  CILLY_FEATURES += arithabs
+endif
+ifdef USE_SMALLOC
+  CILLY_FEATURES += smalloc
+endif
+ifdef USE_CQUALANN
+  CILLY_FEATURES += cqualann
+endif
+ifdef USE_ZRAPP
+  CILLY_FEATURES += rmciltmps zrapp
+endif
+# Add the EXTRAFEATURES
+CILLY_FEATURES += @EXTRAFEATURES@
+
+    # Now rules to make cilly
+CILLY_LIBRARY_MODULES = pretty inthash errormsg alpha trace stats util clist \
+              cilutil escape growArray\
+              cabs cabsvisit cprint lexerhack machdep cparser clexer  \
+              cilversion cil cillower formatparse formatlex formatcil cabs2cil \
+              patch frontc check mergecil \
+              dataflow dominators bitmap ssa ciltools \
+              usedef logcalls logwrites rmtmps \
+	      callgraph epicenter heapify \
+              setp uref olf ptranal \
+              canonicalize heap oneret partial simplemem simplify \
+	      dataslicing sfi \
+              cfg reachingdefs deadcodeelim availexps \
+              liveness \
+              testcil \
+	      $(CILLY_FEATURES) \
+	      ciloptions feature_config
+# ww: we don't want "main" in an external cil library (cil.cma),
+# otherwise every program that links against that library will get
+# main's argument checking and whatnot ...
+CILLY_MODULES = $(CILLY_LIBRARY_MODULES) main
+CILLY_CMODULES =
+CILLY_LIBS     = unix str
+
+SOURCEDIRS  += src src/frontc src/ext src/ext/pta ocamlutil @EXTRASRCDIRS@
+MLLS        += clexer.mll formatlex.mll
+MLYS        += cparser.mly formatparse.mly
+MODULES     += $(CILLY_MODULES) libmaincil
+
+
+
+    # Include now the common set of rules for OCAML
+include ocamlutil/Makefile.ocaml
+
+
+   # Now the rule to make cilly
+
+PROJECT_EXECUTABLE = $(OBJDIR)/cilly$(EXE)
+PROJECT_MODULES    = $(CILLY_MODULES)
+PROJECT_CMODULES   = perfcount $(CILLY_CMODULES)
+PROJECT_LIBS       = $(CILLY_LIBS)
+cilly: $(PROJECT_EXECUTABLE)
+include ocamlutil/Makefile.ocaml.build
+
+
+quickbuild: cilversion machdep cilly
+
+# Setup also makes the native code versions
+#
+# sm: cillib is only built with NATIVECAML=1 because it builds libcil.a,
+# which requires native-code .cmx compiled modules... could break it
+# into two targets so we build cil.cma both ways, but no one is using
+# cil.cma now so I'll leave it alone
+setup: cilversion machdep
+	$(MAKE) cilly NATIVECAML= 
+	$(MAKE) cilly NATIVECAML=1
+	$(MAKE) cillib NATIVECAML=
+	$(MAKE) cillib NATIVECAML=1
+
+# Create the machine dependency module
+# If the cl command cannot be run then the MSVC part will be identical to GCC
+.PHONY : machdep 
+machdep: $(OBJDIR)/machdep.ml 
+$(OBJDIR)/machdep.ml : src/machdep.c configure.in Makefile.in
+	rm -f $@
+	echo "(* This module was generated automatically by code in Makefile and machdep.c *)" >$@
+# Now generate the type definition
+	echo "type mach = {" >> $@ 
+	echo "  version_major: int;     (* Major version number *)"    >> $@
+	echo "  version_minor: int;     (* Minor version number *)"    >> $@
+	echo "  version: string;        (* version number *)"          >> $@
+	echo "  underscore_name: bool;  (* If assembly names have leading underscore *)" >> $@
+	echo "  sizeof_short: int;      (* Size of \"short\" *)"       >> $@
+	echo "  sizeof_int: int;        (* Size of \"int\" *)"         >> $@
+	echo "  sizeof_long: int ;      (* Size of \"long\" *)"        >> $@
+	echo "  sizeof_longlong: int;   (* Size of \"long long\" *)"   >> $@
+	echo "  sizeof_ptr: int;        (* Size of pointers *)"        >> $@
+	echo "  sizeof_enum: int;       (* Size of enum types *)"      >> $@
+	echo "  sizeof_float: int;      (* Size of \"float\" *)"       >> $@
+	echo "  sizeof_double: int;     (* Size of \"double\" *)"      >> $@
+	echo "  sizeof_longdouble: int; (* Size of \"long double\" *)" >> $@
+	echo "  sizeof_sizeof: int;     (* Size of \"sizeof(T)\" *)"   >> $@
+	echo "  sizeof_wchar: int;      (* Size of \"wchar_t\" *)"     >> $@ 
+	echo "  sizeof_void: int;       (* Size of \"void\" *)"        >> $@
+	echo "  sizeof_fun: int;        (* Size of function *)"        >> $@
+	echo "  alignof_short: int;     (* Alignment of \"short\" *)"  >> $@
+	echo "  alignof_int: int;       (* Alignment of \"int\" *)"    >> $@
+	echo "  alignof_long: int;      (* Alignment of \"long\" *)"   >> $@
+	echo "  alignof_longlong: int;  (* Alignment of \"long long\" *)" >> $@
+	echo "  alignof_ptr: int;       (* Alignment of pointers *)"   >> $@
+	echo "  alignof_enum: int;      (* Alignment of enum types *)" >> $@
+	echo "  alignof_float: int;     (* Alignment of \"float\" *)"  >> $@
+	echo "  alignof_double: int;    (* Alignment of \"double\" *)" >> $@
+	echo "  alignof_longdouble: int;  (* Alignment of \"long double\" *)" >> $@
+	echo "  alignof_str: int;       (* Alignment of strings *)" >> $@
+	echo "  alignof_fun: int;       (* Alignment of function *)" >> $@
+	echo "  char_is_unsigned: bool; (* Whether \"char\" is unsigned *)">> $@
+	echo "  const_string_literals: bool; (* Whether string literals have const chars *)">> $@
+	echo "  little_endian: bool; (* whether the machine is little endian *)">>$@
+	echo "}" >> $@ 	
+	if gcc -D_GNUCC $< -o $(OBJDIR)/machdep.exe ;then \
+	    echo "machdep.exe created succesfull." \
+	;else \
+            rm -f $@; exit 1 \
+        ;fi 
+	echo "let gcc = {" >>$@
+	$(OBJDIR)/machdep.exe >>$@
+	echo "	 underscore_name = @UNDERSCORE_NAME@ ;" >> $@
+	echo "}"          >>$@
+	if cl /D_MSVC $< /Fe$(OBJDIR)/machdep.exe /Fo$(OBJDIR)/machdep.obj ;then \
+           echo "let hasMSVC = true" >>$@ \
+        ;else \
+           echo "let hasMSVC = false" >>$@ ;fi
+	echo "let msvc = {" >>$@
+	$(OBJDIR)/machdep.exe >>$@
+	echo "	 underscore_name = true ;" >> $@
+	echo "}"          >>$@
+	echo "let gccHas__builtin_va_list = @HAVE_BUILTIN_VA_LIST@" >>$@
+	echo "let __thread_is_keyword = @THREAD_IS_KEYWORD@"  >>$@
+
+#
+# Create the version information module
+.PHONY: cilversion 
+cilversion: $(OBJDIR)/cilversion.ml
+$(OBJDIR)/cilversion.ml: configure.in Makefile.in
+	rm -f $@
+	echo "(* This module was generated automatically by code in Makefile *)" >$@
+# Generate here the version information
+	echo "let cilVersionMajor = @CIL_VERSION_MAJOR@" >>$@
+	echo "let cilVersionMinor = @CIL_VERSION_MINOR@" >>$@
+	echo "let cilVersionRev   = @CIL_VERSION_REV@"   >>$@
+	echo "let cilVersion      = \"@CIL_VERSION@\""  >>$@ 
+
+# build two libraries
+.PHONY: cillib libcil
+ifeq ($(NATIVECAML),1)
+cillib: $(OBJDIR)/cil.$(CMXA) # $(OBJDIR)/libcil.a
+else
+cillib: $(OBJDIR)/cil.$(CMXA) 
+endif
+
+
+$(OBJDIR)/feature_config.ml: Makefile config.status
+	rm -f $(OBJDIR)/feature_config.*
+	echo "(* This module was generated automatically by code in Makefile.in *)" >$@
+# The Cilly feature options. A list of Cil.featureDescr 
+	echo "open Cil"   >>$@ 
+	echo "let features : featureDescr list = [" >> $@
+ifdef USE_BLOCKINGGRAPH
+	echo "   Blockinggraph.feature;" >> $@  
+endif
+ifdef USE_RAND
+	echo "   Rand.feature;" >> $@  
+endif
+ifdef USE_ARITHABS
+	echo "   Arithabs.feature;" >>$@
+endif
+ifdef USE_SMALLOC
+	echo "   Smalloc.feature;" >> $@  
+endif
+ifdef USE_CQUALANN
+	echo "   Cqualann.feature;" >> $@  
+endif
+ifdef USE_ZRAPP
+	echo "   Zrapp.feature;" >> $@  
+endif
+# Now the extra features, with the first letter capitalized
+	echo \
+          $(foreach f,@EXTRAFEATURES@, \
+             `echo $f | cut -c 1 | tr "[a-z]" "[A-Z]"``echo $f | cut -c 2-`".feature;") >> $@
+	echo "]"   >>$@ 
+# Must delete main.d and remake it, because it may have been made
+# before feature_config existed.
+	rm -f $(DEPENDDIR)/main.d
+	$(MAKE) $(DEPENDDIR)/main.d
+
+
+
+
+
+
+OCAML_CIL_LIB_MODULES := $(CILLY_LIBRARY_MODULES) 
+OCAML_CIL_LIB_CMODULES := perfcount
+
+# list of modules to use for building a library; remove 'main'
+# and add 'libmaincil'
+OCAML_CIL_C_LIB_MODULES := $(CILLY_MODULES:main=) libmaincil
+
+# Build an OCAML library (CMA / CMXA) that exports our Cil stuff
+$(OBJDIR)/cil.$(CMXA): $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a) \
+                       $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
+	$(CAMLLINK) -a -o $@ -ccopt -L$(pkglibdir) \
+               $(OCAML_CIL_LIB_CMODULES:%=-cclib -l%) \
+               $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
+
+$(OBJDIR)/libperfcount.a: %: %($(OBJDIR)/perfcount.$(CMC))
+	ranlib $@
+
+# sm: for Simon: build a library of CIL functions which can
+# be called from C code; this is like the target above, except
+# it is callable from C instead of from Ocaml
+ifeq ($(NATIVECAML),1)
+$(OBJDIR)/libcil.a: $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a) \
+                    $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
+	ocamlopt -output-obj -o $@ unix.cmxa str.cmxa $^
+else
+$(OBJDIR)/libcil.a:
+	@echo "Can only build $@ when NATIVECAML is 1."
+	exit 2
+endif
+
+# Test cil
+ifdef _MSVC
+TESTCILARG=--MSVC --testcil "bash msvctestcil"
+else
+TESTCILARG=       --testcil "bash gcctestcil"
+endif
+
+.PHONY: testcil
+testcil: $(OBJDIR)/cilly$(EXE)
+	       cd test; ../$(OBJDIR)/cilly$(EXE) $(TESTCILARG)
+
+.PHONY: odoc texdoc pdfdoc
+
+###
+### DOCUMENTATION
+###
+### The following are available
+###
+###   make doc  - creates the documentation
+###   make publish_doc - creates the documentation and puts it on the web page
+
+# Documentation generated by "ocamldoc"
+odoc: $(OBJDIR)/pretty.cmi $(OBJDIR)/cil.cmi
+	-rm -rf doc/html/cil/api
+	-mkdir doc/html/cil/api
+	-mkdir doc/html/cil/api-latex
+	-rm -f doc/ocamldoc.sty
+	ocamldoc -d doc/html/cil/api -v -stars \
+             -html \
+             -t "CIL API Documentation (version @CIL_VERSION@)" \
+	     -I $(OBJDIR) \
+                    ocamlutil/pretty.mli ocamlutil/errormsg.mli \
+                    ocamlutil/clist.mli \
+	  	    ocamlutil/stats.mli src/cil.mli src/formatcil.mli \
+                    ocamlutil/alpha.mli src/cillower.mli \
+                    src/ext/cfg.mli src/ext/dataflow.mli \
+                    src/ext/dominators.mli
+
+doc/cilpp.tex: doc/cilcode.pl doc/cil.tex 
+	-rm -rf doc/html/cil
+	-mkdir doc/html/cil
+	-mkdir doc/html/cil/examples
+	cd doc; perl cilcode.pl cil.tex >cilpp.tex.tmp
+	mv doc/cilpp.tex.tmp $@
+
+# Documentation generated from latex files using "hevea"
+texdoc: doc/cilpp.tex
+# Create the version document
+	cd doc/html/cil; echo "\def\cilversion{@CIL_VERSION@}" >cil.version.tex
+	cd doc/html/cil; echo "\def\ccuredversion{@CCURED_VERSION@}" >>cil.version.tex
+	cd doc/html/cil; hevea -exec xxdate.exe ../../cilpp
+	cd doc/html/cil; hevea -exec xxdate.exe ../../cilpp
+	cd doc/html/cil; mv cilpp.html cil.html
+	cd doc/html/cil; hacha -o ciltoc.html cil.html
+	cp -f doc/index.html doc/html/cil/index.html
+	cp -f doc/header.html doc/html/cil
+
+pdfdoc: doc/cilpp.tex $(OBJDIR)/pretty.cmi $(OBJDIR)/cil.cmi
+	cd doc; echo "\def\cilversion{@CIL_VERSION@}" >cil.version.tex
+	cd doc; echo "\def\ccuredversion{@CCURED_VERSION@}" >>cil.version.tex
+	cd doc; pdflatex cilpp.tex; pdflatex cilpp.tex
+	cd doc; mv cilpp.pdf html/cil/CIL.pdf
+	ocamldoc -o doc/cil-api.tex -v -stars \
+             -latex \
+             -t "CIL API Documentation (version @CIL_VERSION@)" \
+	     -I $(OBJDIR) \
+                    ocamlutil/pretty.mli ocamlutil/errormsg.mli \
+                    ocamlutil/clist.mli \
+	  	    ocamlutil/stats.mli src/cil.mli src/formatcil.mli \
+                    ocamlutil/alpha.mli
+
+	cd doc ; TEXINPUTS="$$TEXINPUTS:/usr/local/lib/ocaml/ocamldoc:/usr/lib/ocaml/ocamldoc" pdflatex cil-api.tex
+	cd doc ; mv cil-api.pdf html/cil/CIL-API.pdf
+
+doc: texdoc pdfdoc odoc
+
+
+#----------------------------------------------------------------------
+# Generate the CIL distribution
+# This will create a file cil.tar.gz. It includes the HTML documentation 
+# so that people can use it even if they don't have ocamldoc, hevea etc. 
+
+.PHONY: distrib distrib-nocheck checkdistrib
+CIL_TAR_GZ:=cil-@CIL_VERSION@.tar.gz
+## Make a distribution and check it
+distrib: distrib-nocheck checkdistrib
+
+# Work in a temporary directory
+TEMP_DIR = TEMP_cil-distrib
+
+# The tar archive members will be relative to this directory
+TOP_DIR = $(TEMP_DIR)/cil
+
+DISTRIB_ROOT = README LICENSE INSTALL Makefile.in  \
+               config.h.in Makefile.gcc Makefile.msvc \
+	       configure configure.in install-sh config.guess config.sub \
+	       cil.spec cil.spec.in
+
+DISTRIB_SRC = cilutil.ml cil.ml cil.mli check.ml check.mli \
+	      rmtmps.ml rmtmps.mli formatlex.mll formatparse.mly \
+	      formatcil.mli formatcil.ml testcil.ml \
+	      mergecil.ml mergecil.mli main.ml machdep.c \
+	      ciloptions.ml ciloptions.mli libmaincil.ml \
+	      escape.ml escape.mli cillower.mli cillower.ml
+
+DISTRIB_OCAMLUTIL = pretty.ml pretty.mli errormsg.ml errormsg.mli \
+                    trace.ml trace.mli stats.ml stats.mli util.ml util.mli \
+                    inthash.ml inthash.mli alpha.ml alpha.mli \
+		    intmap.ml intmap.mli clist.ml clist.mli \
+                    growArray.ml growArray.mli \
+                    perfcount.c.in Makefile.ocaml Makefile.ocaml.build
+
+
+DISTRIB_SRC_FRONTC = cabs.ml cprint.ml clexer.mli clexer.mll \
+		     cparser.mly lexerhack.ml \
+		     cabs2cil.ml cabs2cil.mli frontc.ml frontc.mli \
+	             cabsvisit.mli cabsvisit.ml patch.mli patch.ml
+
+DISTRIB_SRC_EXT = logcalls.ml logcalls.mli \
+                  astslicer.ml heap.ml partial.ml \
+                  logwrites.ml heapify.ml callgraph.ml callgraph.mli \
+                  epicenter.ml usedef.ml ciltools.ml \
+                  cfg.ml deadcodeelim.ml availexps.ml \
+                  dataflow.ml dataflow.mli \
+		  dominators.ml dominators.mli \
+		  bitmap.ml bitmap.mli \
+		  ssa.ml ssa.mli \
+	          stackoverflow.mli stackoverflow.ml \
+	          canonicalize.ml canonicalize.mli \
+	          oneret.ml oneret.mli sfi.ml \
+	          simplemem.ml simplify.ml \
+	          blockinggraph.ml blockinggraph.mli \
+		  dataslicing.ml dataslicing.mli \
+		  reachingdefs.ml \
+		  cfg.ml cfg.mli \
+		  liveness.ml
+
+DISTRIB_SRC_EXT_PTA = setp.ml setp.mli golf.ml golf.mli \
+                      ptranal.ml ptranal.mli \
+	              steensgaard.mli steensgaard.ml \
+                      uref.ml uref.mli olf.ml olf.mli
+
+DISTRIB_LIB = Cilly.pm KeptFile.pm OutputFile.pm TempFile.pm
+
+DISTRIB_BIN = CilConfig.pm.in cilly cilly.bat.in \
+              patcher patcher.bat.in test-bad teetwo
+
+DISTRIB_SMALL1=hello.c func.c init.c init1.c wchar1.c vararg1.c testharness.h 
+
+distrib-nocheck: $(DISTRIB_ROOT) doc
+        # Create the distribution from scratch
+	rm -rf $(TEMP_DIR)
+	mkdir $(TEMP_DIR)
+
+	rm -rf $(CIL_TAR_GZ)
+	mkdir $(TOP_DIR) \
+	      $(TOP_DIR)/src \
+              $(TOP_DIR)/src/frontc \
+              $(TOP_DIR)/src/ext \
+              $(TOP_DIR)/src/ext/pta \
+              $(TOP_DIR)/obj \
+              $(TOP_DIR)/doc \
+	      $(TOP_DIR)/lib \
+	      $(TOP_DIR)/bin \
+	      $(TOP_DIR)/doc/api \
+              $(TOP_DIR)/obj/.depend \
+              $(TOP_DIR)/obj/x86_WIN32 \
+              $(TOP_DIR)/obj/x86_LINUX \
+              $(TOP_DIR)/obj/ppc_DARWIN \
+              $(TOP_DIR)/obj/sparc_SOLARIS \
+              $(TOP_DIR)/test \
+              $(TOP_DIR)/test/small1 \
+              $(TOP_DIR)/ocamlutil
+
+	cp $(patsubst %,%,$(DISTRIB_ROOT)) $(TOP_DIR)
+
+	cp $(patsubst %,src/%,$(DISTRIB_SRC)) $(TOP_DIR)/src
+	cp $(patsubst %,ocamlutil/%,$(DISTRIB_OCAMLUTIL)) $(TOP_DIR)/ocamlutil
+	cp $(patsubst %,src/ext/%,$(DISTRIB_SRC_EXT)) $(TOP_DIR)/src/ext
+	cp $(patsubst %,src/ext/pta/%,$(DISTRIB_SRC_EXT_PTA)) \
+                                      $(TOP_DIR)/src/ext/pta
+	cp $(patsubst %,src/frontc/%,$(DISTRIB_SRC_FRONTC)) \
+		$(TOP_DIR)/src/frontc
+	cp $(patsubst %,lib/%,$(DISTRIB_LIB)) $(TOP_DIR)/lib
+	cp $(patsubst %,bin/%,$(DISTRIB_BIN)) $(TOP_DIR)/bin
+	cp $(patsubst %,test/small1/%,$(DISTRIB_SMALL1)) $(TOP_DIR)/test/small1
+
+	cp -r doc/html/cil/* $(TOP_DIR)/doc
+# Delete all CVS directories
+	if find $(TEMP_DIR) -name CVS -print >cvss.txt ; then \
+            rm -rf `cat cvss.txt` ;fi
+# Now make the TAR ball
+	cd $(TEMP_DIR); tar cfz $(CIL_TAR_GZ) cil
+	mv $(TEMP_DIR)/$(CIL_TAR_GZ) .
+
+#	rm -rf $(TEMP_DIR)
+
+## Check a distribution
+checkdistrib:
+	cd $(TOP_DIR) && ./configure && \
+           $(MAKE) && $(MAKE) quicktest
+
+distclean: clean
+	rm -f src/frontc/cparser.output
+	rm -f src/formatparse.output
+	rm -f ocamlutil/perfcount.c
+	rm -f bin/cilly.bat
+	rm -f bin/patcher.bat
+	rm -f bin/CilConfig.pm
+	rm -f config.log
+	rm -f config.h
+	rm -f Makefile
+
+## Publish the distribution
+CILHTMLDEST=/var/www/cil
+publish_distrib: publish_doc
+	if test -d $(CILHTMLDEST); then \
+           cp -rf doc/html/cil/* $(CILHTMLDEST); \
+           cp -f $(CIL_TAR_GZ) $(CILHTMLDEST)/distrib; \
+           ln -sf $(CILHTMLDEST)/distrib/$(CIL_TAR_GZ) $(CILHTMLDEST)/distrib/cil-latest.tar.gz ; \
+           echo "Publish succeeded"; \
+	else \
+	   error "Cannot publish because $(CILHTMLDEST) does not exist" ; \
+        fi
+
+publish_doc: doc
+	if test -d $(CILHTMLDEST); then \
+           cp -rf doc/html/cil/* $(CILHTMLDEST); echo "Done publishing doc"; \
+	else \
+	   error "Cannot publish because $(CILHTMLDEST) does not exist" ; \
+        fi
+
+cleancheck:
+	rm -f test/small1/*.o
+	rm -f test/small1/hello
+	rm -f test/small1/vararg1
+	rm -f test/small1/wchar1
+
+clean: cleancaml cleancheck
+	rm -f $(OBJDIR)/machdep.ml
+
+# Now include the compiler specific stuff
+ifdef _MSVC
+  include Makefile.msvc
+else
+  ifdef _GNUCC
+    include Makefile.gcc
+  endif
+endif
+
+test/%: 
+	bin/cilly $(CONLY) test/small1/$*.c $(OBJOUT)test/small1/$*.o
+
+testrun/%: 
+	bin/cilly test/small1/$*.c $(OBJOUT)test/small1/$*
+	test/small1/$*
+
+
+
+.PHONY: quicktest
+quicktest: $(patsubst %,test/%,func init init1) \
+           $(patsubst %,testrun/%,hello wchar1 vararg1)
+
+.PHONY: check
+check: quicktest
+
+############# Binary distribution ################
+.PHONY: bindistrb checkbindistrib
+
+BINCIL_TAR_GZ:=cil-win32-@CIL_VERSION@.tar.gz
+
+# Work in a temporary directory
+BINTEMP_DIR = TEMP_cil-bindistrib
+
+# The tar archive members will be relative to this directory
+BINTOP_DIR = $(BINTEMP_DIR)/cil
+
+BINDISTRIB_ROOT = README LICENSE
+
+BINDISTRIB_LIB = Cilly.pm KeptFile.pm OutputFile.pm TempFile.pm
+
+BINDISTRIB_BIN = CilConfig.pm.in cilly cilly.bat.in \
+              patcher patcher.bat.in
+
+BINDISTRIB_OBJ = cilly.byte.exe cilly.asm.exe
+
+BINDISTRIB_SMALL1=hello.c 
+
+bindistrib-nocheck: $(BINDISTRIB_ROOT) obj/x86_WIN32/cilly.asm.exe
+        # Create the distribution from scratch
+	rm -rf $(BINTEMP_DIR)
+	mkdir $(BINTEMP_DIR)
+
+	mkdir $(BINTOP_DIR) \
+              $(BINTOP_DIR)/obj \
+              $(BINTOP_DIR)/doc \
+	      $(BINTOP_DIR)/lib \
+	      $(BINTOP_DIR)/bin \
+	      $(BINTOP_DIR)/doc/api \
+              $(BINTOP_DIR)/obj/.depend \
+              $(BINTOP_DIR)/obj/x86_WIN32 \
+              $(BINTOP_DIR)/test \
+              $(BINTOP_DIR)/test/small1 
+
+	cp $(patsubst %,%,$(BINDISTRIB_ROOT)) $(BINTOP_DIR)
+	cp $(patsubst %,lib/%,$(BINDISTRIB_LIB)) $(BINTOP_DIR)/lib
+	cat bin/CilConfig.pm.in \
+            | sed -e "s|@||g" \
+            | sed -e "s|CC|cl|" \
+            | sed -e "s|DEFAULT_CIL_MODE|MSVC|" \
+            | sed -e "s|ARCHOS|x86_WIN32|" \
+               > $(BINTOP_DIR)/bin/CilConfig.pm
+	cat bin/patcher.bat.in | sed -e "s|@||g" >$(BINTOP_DIR)/bin/patcher.bat
+	cp bin/patcher $(BINTOP_DIR)/bin
+	cp bin/cilly $(BINTOP_DIR)/bin
+	cat bin/cilly.bat.in | sed -e "s|@||g" > $(BINTOP_DIR)/bin/cilly.bat
+	cp $(patsubst %,test/small1/%,$(BINDISTRIB_SMALL1)) \
+                                                 $(BINTOP_DIR)/test/small1
+	cp $(patsubst %,obj/x86_WIN32/%,$(BINDISTRIB_OBJ)) \
+                                       $(BINTOP_DIR)/obj/x86_WIN32
+
+	cp -r doc/html/cil/* $(BINTOP_DIR)/doc
+# Delete all CVS directories
+	if find $(BINTEMP_DIR) -name CVS -print >cvss.txt ; then \
+            rm -rf `cat cvss.txt` ;fi
+# Now make the TAR ball
+	cd $(BINTEMP_DIR); tar cfz $(BINCIL_TAR_GZ) cil
+	mv $(BINTEMP_DIR)/$(BINCIL_TAR_GZ) .
+
+#	rm -rf $(TEMP_DIR)
+
+## Check a distribution
+checkbindistrib:
+
+########################################################################
+
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+pkglibdir = $(libdir)/cil
+datadir = @datadir@
+pkgdatadir = $(datadir)/cil
+
+all_mli := $(filter %.mli, $(DISTRIB_OCAMLUTIL) $(DISTRIB_SRC) $(DISTRIB_SRC_FRONTC) $(DISTRIB_SRC_EXT) $(DISTRIB_SRC_EXT_PTA))
+install_mli := $(filter $(OCAML_CIL_LIB_MODULES:=.mli), $(all_mli))
+install_cmi := $(install_mli:%.mli=$(OBJDIR)/%.cmi)
+install_cma := $(addprefix $(OBJDIR)/cil., cma cmxa a)
+install_lib := $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a)
+
+install: $(install_cmi) $(install_cma) $(install_lib)
+	$(INSTALL) -d $(DESTDIR)$(pkglibdir)
+	$(INSTALL_DATA) $(install_cma) $(DESTDIR)$(pkglibdir)
+	$(INSTALL_DATA) $(install_cmi) $(DESTDIR)$(pkglibdir)
+	$(INSTALL_DATA) $(install_lib) $(DESTDIR)$(pkglibdir)
+	$(INSTALL) -d $(DESTDIR)$(pkgdatadir)
+	$(INSTALL_DATA) $(addprefix lib/, $(filter %.pm, $(DISTRIB_LIB))) $(DESTDIR)$(pkgdatadir)
+
+cil.spec: cil.spec.in
+	./config.status $@
+
+rpms: distrib
+	rpmbuild -ta $(CIL_TAR_GZ)
+
diff --git a/cil/Makefile.msvc b/cil/Makefile.msvc
new file mode 100644
index 000000000..be1bb3823
--- /dev/null
+++ b/cil/Makefile.msvc
@@ -0,0 +1,42 @@
+#
+# Makefile for CCured. The Microsoft Visual C part
+#
+COMPILERNAME=MSVC
+
+CC:=cl /nologo
+ifdef RELEASELIB
+#matth:  we need the frame pointer for CHECK_GETFRAME, so
+# use /Oy- to prevent that optimization.
+  CFLAGS:=/DRELEASE /D_MSVC /Ox /Ob2 /G6 /Oy-
+else
+  CFLAGS:=/D_DEBUG /D_MSVC /Zi /MLd
+endif
+CONLY:=/c
+
+OPT_O2:= /Ox /Ob2 /G6
+
+OBJOUT:=/Fo
+OBJEXT:=obj
+
+EXEOUT:=/Fe
+LIBEXT:=lib
+LDEXT:=.exe
+
+DEF:=/D
+ASMONLY:=/Fa
+INC:=/I
+
+CPPSTART:=cl /Dx86_WIN32 /D_MSVC /E /TC /I./lib /DCCURED
+CPPOUT:=  >%o
+CPP:=$(CPPSTART) /FI fixup.h %i $(CPPOUT)
+
+PATCHECHO:=echo
+
+AR:=lib 
+LIBOUT:=/OUT:
+
+# The system include files to be patched
+PATCH_SYSINCLUDES:=stdio.h ctype.h string.h io.h stdarg.h crtdbg.h \
+                   varargs.h stdlib.h time.h malloc.h
+
+
diff --git a/cil/README b/cil/README
new file mode 100644
index 000000000..52710f2a9
--- /dev/null
+++ b/cil/README
@@ -0,0 +1,2 @@
+ 
+ See the documentation in doc/html.
diff --git a/cil/bin/CilConfig.pm.in b/cil/bin/CilConfig.pm.in
new file mode 100644
index 000000000..94241b190
--- /dev/null
+++ b/cil/bin/CilConfig.pm.in
@@ -0,0 +1,6 @@
+
+$::archos    = "@ARCHOS@";
+$::cc        = "@CC@";
+$::cilhome   = "@CILHOME@";
+$::default_mode = "@DEFAULT_CIL_MODE@";
+
diff --git a/cil/bin/cilly b/cil/bin/cilly
new file mode 100755
index 000000000..e4bf737c7
--- /dev/null
+++ b/cil/bin/cilly
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+# A simple use of the Cilly module
+#
+#
+#
+# Copyright (c) 2001-2002, 
+#  George C. Necula    <necula@cs.berkeley.edu>
+#  Scott McPeak        <smcpeak@cs.berkeley.edu>
+#  Wes Weimer          <weimer@cs.berkeley.edu>
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. The names of the contributors may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+use strict;
+use Data::Dumper;
+use FindBin;
+use lib "$FindBin::Bin";
+use lib "$FindBin::Bin/../lib"; # The libraries are in the lib directory
+# Read the configuration script
+use CilConfig;
+
+use Cilly;
+
+$::default_is_merge = 0;
+my $stub = CilCompiler->new(@ARGV);
+
+$stub->setVersion ();
+
+# print Dumper($stub);
+$stub->doit();
+
+
+# Define here your favorite compiler by overriding Merger methods
+package CilCompiler;
+use File::Basename;
+use strict;
+BEGIN {
+    @CilCompiler::ISA = qw(Cilly);
+    $CilCompiler::base = "$::cilhome/obj/$::archos/cilly";
+    # Use the most recent version of cilly
+    $CilCompiler::mtime_asm = int((stat("$CilCompiler::base.asm.exe"))[9]);
+    $CilCompiler::mtime_byte = int((stat("$CilCompiler::base.byte.exe"))[9]);
+    $CilCompiler::use_debug = 
+         grep(/--bytecode/, @ARGV) ||
+         grep(/--ocamldebug/, @ARGV) ||
+        ($CilCompiler::mtime_asm < $CilCompiler::mtime_byte);
+    $CilCompiler::compiler = 
+        $CilCompiler::base . 
+            ($CilCompiler::use_debug ? ".byte" : ".asm") . ".exe";
+    if($CilCompiler::use_debug) { 
+        $ENV{"OCAMLRUNPARAM"} = "b" . $ENV{"OCAMLRUNPARAM"};
+    } 
+}
+
+# We need to customize the collection of arguments
+sub collectOneArgument {
+    my($self, $arg, $pargs) = @_;
+    if($arg =~ m|--transval=(.+)$|)  {
+        $self->{TRANSVAL} = $1; return 1;
+    }
+    if($arg eq '--ocamldebug')  {
+        $self->{OCAMLDEBUG} = 1; return 1;
+    }
+    if($arg eq '--cabsonly') {
+        $self->{CABSONLY} = 1; return 1;
+    }
+    # See if the super class understands this
+    return $self->SUPER::collectOneArgument($arg, $pargs);
+}
+
+sub usage {
+    print "Usage: cilly [options] [gcc_or_mscl arguments]\n";
+}
+
+sub helpMessage {
+    my($self) = @_;
+    # Print first the original
+    $self->SUPER::helpMessage();
+    print <<EOF;
+
+  All other arguments starting with -- are passed to the Cilly process.
+
+The following are the arguments of the Cilly process
+EOF
+   my @cmd = ($CilCompiler::compiler, '-help');
+   $self->runShell(@cmd); 
+}
+
+
+sub CillyCommand {
+    my ($self, $ppsrc, $dest) = @_;
+
+    my $aftercil;
+    my @cmd = ($CilCompiler::compiler);
+
+    if(defined $ENV{OCAMLDEBUG} || $self->{OCAMLDEBUG}) {
+        print "OCAMLDEBUG is on\n";
+        my @idirs = ("src", "src/frontc", "src/ccured", "src/ext",
+                     "ocamlutil", 
+                     "obj/$::archos");
+	my @iflags = map { ('-I', "$::cilhome/$_") } @idirs;
+        unshift @cmd, 'ocamldebug', '-emacs', @iflags;
+    }
+    if($::docxx) {
+        push @cmd, '--cxx';
+    }
+    if($self->{CABSONLY}) {
+        $aftercil = $self->cilOutputFile($dest, 'cabs.c');
+        push @cmd, '--cabsonly', $aftercil;
+    } else {
+        if(defined $self->{CILLY_OUT}) {
+            $aftercil = new OutputFile($dest, $self->{CILLY_OUT});
+            return ($aftercil, @cmd);
+        }
+	$aftercil = $self->cilOutputFile($dest, 'cil.c');
+    }
+    return ($aftercil, @cmd, '--out', $aftercil);
+}
+
+sub MergeCommand {
+    my ($self, $ppsrc, $dir, $base) = @_;
+
+    return ('', $CilCompiler::compiler);
+}
+
+
+1;
diff --git a/cil/bin/cilly.bat.in b/cil/bin/cilly.bat.in
new file mode 100755
index 000000000..9e5a36e52
--- /dev/null
+++ b/cil/bin/cilly.bat.in
@@ -0,0 +1 @@
+perl @CILHOME@/bin/cilly %*
diff --git a/cil/bin/patcher b/cil/bin/patcher
new file mode 100755
index 000000000..6eb7d1546
--- /dev/null
+++ b/cil/bin/patcher
@@ -0,0 +1,605 @@
+#!/usr/bin/perl
+# A Perl script that patches a bunch of files
+#
+#
+#
+# Copyright (c) 2001-2002, 
+#  George C. Necula    <necula@cs.berkeley.edu>
+#  Scott McPeak        <smcpeak@cs.berkeley.edu>
+#  Wes Weimer          <weimer@cs.berkeley.edu>
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. The names of the contributors may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+use strict;
+use File::Basename;
+use File::Copy;
+use Getopt::Long;           # Command-line option processing
+use Data::Dumper;
+use FindBin;
+use lib "$FindBin::Bin";
+use lib "$FindBin::Bin/../lib";
+# Read the configuration script
+use CilConfig;
+
+$::iswin32 = $^O eq 'MSWin32' || $^O eq 'cygwin';
+# matth: On cygwin, ^O is either MSWin32 or cygwin, depending on how you build
+# perl.  We don't care about the distinction, so just treat all windows
+# platforms the same when looking at "system=cygwin" tags on patches.
+$::platform = $::iswin32 ? 'cygwin' : $^O;
+
+
+# Set filename parsing according to current operating system.
+File::Basename::fileparse_set_fstype($^O);
+
+sub printHelp {
+    print <<EOL;
+Patch include files
+Usage: patcher [options] args
+
+options: 
+  --help       Prints this help message
+  --verbose    Prints a lot of information about what is being done
+  --mode=xxx   What tool to emulate: 
+                GNUCC   - GNU CC
+                MSVC    - MS VC cl compiler
+                EDG     - EDG front end
+
+  --dest=xxx   The destination directory. Will make one if it does not exist
+  --patch=xxx  Patch file (can be specified multiple times)
+
+  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
+  --sfile=xxx  A system-include file to be patched (treated as \#include <xxx>)
+ 
+  --clean       Remove all files in the destination directory
+  --dumpversion Print the version name used for the current compiler
+
+ All of the other arguments are passed to the preprocessor.
+
+We will use \"$::platform\" as your system type.
+
+Send bugs to necula\@cs.berkeley.edu.
+EOL
+}
+
+
+my %option;
+&Getopt::Long::Configure("pass_through");
+&Getopt::Long::GetOptions
+    (\%option,
+     "--help",            # Display help information
+     "--verbose|v",       # Display information about programs invoked
+     "--mode=s",          # The mode (GNUCC, MSVC)
+     "--dest=s",          # The destination directory
+     "--patch=s@",         # Patch files
+     "--ufile=s@",         # User include files
+     "--sfile=s@",         # System include files
+     "--dumpversion",
+     "--clean",
+     );
+
+if($option{help}) {
+    &printHelp();
+    exit 0;
+}
+
+# print Dumper({"option" => \%option, "ARGV" => \@ARGV});
+
+my $cversion; # Compiler version
+my $cname; # Compiler name
+my @patches; # A list of the patches to apply
+
+my $ppargs = join(' ', @ARGV);
+
+my %groups;
+
+&findCompilerVersion();
+
+if($option{dumpversion}) {
+    print $cversion;
+    exit 0;
+}
+
+# Find the destination directory
+if(!defined($option{dest})) {
+    die "Must give a --dest directory\n";
+}
+if(! -d $option{dest}) {
+    die "The destination directory $option{dest} does not exist\n";
+}
+
+if($option{clean}) {
+    # Find the destination directory for a dummy file
+    my $dest = &destinationFileName("");
+    chop $dest; # The final /
+    print "Cleaning all files in $dest\n";
+    (!system("rm -rf $dest")) || die "Cannot remove directory\n";
+    exit 0;
+}
+
+print "Patching files for $cname version $cversion\n";
+
+# Prepare the patches
+if(defined($option{patch})) {
+    my $pFile;
+    foreach $pFile (@{$option{patch}}) {
+        &preparePatchFile($pFile);
+    }
+}
+
+# print Dumper(\@patches);
+
+my $file;
+foreach $file (@{$option{ufile}}) {
+    &patchOneFile($file, 0);
+}
+foreach $file (@{$option{sfile}}) {
+    &patchOneFile($file, 1);
+} 
+
+# Now check whether we have used all the patches
+my $hadError = 0;
+foreach my $patch (@patches) {
+    # It was optional
+    if(defined $patch->{FLAGS}->{optional} ||
+       defined $patch->{FLAGS}->{disabled}) { next; }
+    # It was for another system
+    if(defined $patch->{FLAGS}->{system} &&
+       $patch->{FLAGS}->{system} ne $::platform) { next; }
+    # Its group was done
+    if(defined $patch->{FLAGS}->{group}) {
+        if(! defined $groups{$patch->{FLAGS}->{group}}) {
+            $hadError = 1;
+            print "None of the following patches from group $patch->{FLAGS}->{group} was used:\n";
+            foreach my $gp (@patches) {
+                if($gp->{FLAGS}->{group} eq $patch->{FLAGS}->{group}) {
+                    print "\tfrom $gp->{PATCHFILE} at $gp->{PATCHLINENO}\n";
+                }
+            }
+            $groups{$patch->{FLAGS}->{group}} = 1; # We're done with it
+        }
+        next;
+    }
+    # It was not in a group and was not optional
+    if(! defined $patch->{USED}) { 
+        $hadError = 1;
+        print "Non-optional patch was not used:\n\tfrom $patch->{PATCHFILE} at $patch->{PATCHLINENO}\n";
+        next;
+    }
+}
+exit $hadError;
+
+
+############# SUBROUTINES 
+sub findCompilerVersion {
+    $cname = "";
+    $cversion = 0;
+    if($option{mode} eq "GNUCC") {
+        $cname = "GNU CC";
+        open(VER, "$::cc -dumpversion $ppargs|") 
+            || die "Cannot start $cname";
+        while(<VER>) {
+            # sm: had to modify this to match "egcs-2.91.66", which is
+            # how egcs responds to the -dumpversion request
+            if($_ =~ m|^(\d+\S+)|  ||
+               $_ =~ m|^(egcs-\d+\S+)|) {
+                $cversion = "gcc_$1";
+                close(VER) || die "Cannot start $cname\n";
+                return;
+            }
+        }
+        die "Cannot find the version for GCC\n";
+    }
+    if($option{mode} eq "MSVC") {
+        $cname = "Microsoft cl";
+        $ppargs =~ s|/nologo||g;
+        open(VER, "cl $ppargs 2>&1|") || die "Cannot start $cname: cl $ppargs\n";
+        while(<VER>) {
+            if($_ =~ m|Compiler Version (\S+) |) {
+                $cversion = "cl_$1";
+                close(VER);
+                return;
+            }
+        }
+        die "Cannot find the version for Microsoft CL\n";
+    }
+    die "You must specify a --mode (either GNUCC or MSVC)";
+}
+
+sub lineDirective {
+    my ($fileName, $lineno) = @_;
+    if($::iswin32) {
+        $fileName =~ s|\\|/|g;
+    }
+    if($option{mode} eq "MSVC") {
+        return "#line $lineno \"$fileName\"\n";
+    }
+    if($option{mode} eq "GNUCC" || $option{mode} eq "EDG") {
+        return "# $lineno \"$fileName\"\n";
+    }
+    die "lineDirective: invalid mode";
+}
+
+# Find the absolute name for a file
+sub patchOneFile {
+    my ($fname, $issys) = @_;
+    my $fname1 = $issys ? "<$fname>" : "\"$fname\"";
+    print "Patching $fname1\n";
+    my $preprocfile = "__topreproc";
+    unlink "$preprocfile.i";
+    open(TOPREPROC, ">$preprocfile.c") || die "Cannot open preprocessor file";
+    print TOPREPROC "#include $fname1\n";
+    close(TOPREPROC);
+    # Do not test for error while running the preprocessor because the 
+    # error might be due to an #error directive
+    my $preproccmd = "";
+    if($option{mode} eq "GNUCC") {
+	$preproccmd = "$::cc -E $ppargs $preprocfile.c >$preprocfile.i";
+	if ($^O ne 'MSWin32') {   # Windows has no /dev/null
+	                          # ignore stderr (e.g. #error directives)
+	    $preproccmd .= " 2>/dev/null";
+	}
+    } elsif($option{mode} eq "MSVC") {
+        $preproccmd = "cl /nologo /P $ppargs $preprocfile.c";
+    } else { die "Invalid --mode"; }
+
+    if(system($preproccmd) && $option{mode} eq "MSVC" ) {
+        # For some reason the gcc returns spurious error codes
+        die "Error running preprocessor: $preproccmd"
+    }
+    
+    # Now scan the resulting file and get the real name of the file
+    my $absname = "";
+    open(PPOUT, "<$preprocfile.i") || die "Cannot find $preprocfile.i";
+    while(<PPOUT>) {
+        if($_ =~ m|^\#.+\"(.+$fname)\"|) {
+            $absname = $1;
+            last;
+        }
+    }
+    close(PPOUT);
+    if($absname eq "") {
+        die "Cannot find the absolute name of $fname1 in $preprocfile.i\n";
+    }
+    unlink "$preprocfile.c";
+    unlink "$preprocfile.i";
+    # If we fail then maybe we are using cygwin paths in a Win32 system
+    if($option{mode} eq "GNUCC" && $::iswin32) {
+        open(WINNAME, "cygpath -w $absname|")
+            || die "Cannot run cygpath to convert $absname to a Windows name";
+        $absname = <WINNAME>;
+        if($absname =~ m|\n$|) {
+            chop $absname;
+        }
+        # print "Converted $fileName to $newName\n";
+        close(WINNAME) || die "Cannot run cygpath to convert $absname";
+    }
+    if(! -f $absname) { #matth: we need to do this test after calling cygpath
+        die "Cannot find the absolute name of $fname1 (\"$absname\")\n";
+    }
+    print "   Absolute name is $absname\n";
+    # Decide where to put the result
+    my $dest = &destinationFileName($fname);
+    print "   Destination is $dest\n";
+    &applyPatches($absname, $dest);
+}
+
+# Is absolute path name?
+sub isAbsolute {
+    my($name) = @_;
+    if($::iswin32) {
+        return ($name =~ m%^([a-zA-Z]:)?[/\\]%);
+    } else {
+        return ($name =~ m%^[/\\]%);
+    }
+}
+
+# Compute the destination file name and create all necessary directories
+sub destinationFileName {
+    my ($fname) = @_;
+    if(&isAbsolute($fname)) {
+        die "Cannot process files that have absolute names\n";
+    }
+    my $dest = $option{dest} . "/" . $cversion;
+    # Break the file name into components
+    my @fnamecomp = split(m%[/\\]%, $fname);
+    # Add one component at a time
+    do {
+        if(! -d $dest) {
+            (mkdir $dest, 0777) || die "Cannot create directory $dest\n";
+        }
+        my $comp = shift @fnamecomp;
+        $dest .= ('/' . $comp);
+    } while($#fnamecomp >= 0);
+    return $dest;
+}
+#####################################################################
+# Patching of files
+#
+sub preparePatchFile {
+    my ($pFile) = @_;
+    open(PFILE, "<$pFile") ||
+        die "Cannot read patch file $pFile\n";
+    my $patchLineNo = 0;
+    my $patchStartLine = 0;
+  NextPattern:
+    while(<PFILE>) {
+        $patchLineNo ++;
+        if($_ !~ m|^<<<(.*)$|) {
+            next;
+        }
+        # Process the flags
+        my @patchflags = split(/\s*,\s*/, $1);
+        my %valueflags;
+        foreach my $flg (@patchflags) {
+            $flg = &trimSpaces($flg);
+            if($flg =~ m|^(.+)\s*=\s*(.+)$|) {
+                $valueflags{$1} = $2;
+            } else {
+                $valueflags{$flg} = 1;
+            }
+        }
+        # Now we have found the start
+        $_ = <PFILE>;
+        $patchLineNo ++;
+        my $current_pattern = [];
+        my @all_patterns = ();
+        if($_ =~ m|^===|) {
+            if(! defined $valueflags{ateof} && 
+               ! defined $valueflags{atsof}) {
+                die "A pattern is missing in $pFile";
+            }
+            goto AfterPattern;
+        }
+        if($_ eq "") {
+            die "A pattern is missing in $pFile";
+        }
+        push @{$current_pattern}, $_;
+
+        while(<PFILE>) {
+            $patchLineNo ++;
+            if($_ =~ m|^===|) {
+                last;
+            }
+            if($_ =~ m%^\|\|\|%) {
+                # This is an alternate pattern
+                push @all_patterns, $current_pattern;
+                $current_pattern = [];
+                next;
+            }
+            push @{$current_pattern}, $_;
+        }
+      AfterPattern:
+        # Finish off the last pattern
+        push @all_patterns, $current_pattern;
+        if($_ !~ m|^===|) {
+            die "No separator found after pattern in $pFile";
+        }
+        $patchStartLine = $patchLineNo + 1;
+        my $replacement = "";
+        # If we have more than one non-optional pattern with no group
+        # specified, then create a group
+        if(@all_patterns > 1 && 
+           ! defined $valueflags{group} && 
+           ! defined $valueflags{optional}) {
+            $valueflags{group} = $pFile . "_$patchStartLine";
+        }
+        while(<PFILE>) {
+            $patchLineNo ++;
+            if($_ =~ m|^>>>|) {
+                # For each alternate pattern
+                my $patt;
+                foreach $patt (@all_patterns) {
+                    # Maybe the @__pattern__@ string appears in the replacement
+                    my $pattern_repl = join('', @{$patt});
+                    my $nrlines = int(@{$patt});
+                    my $local_repl = $replacement;
+                    $local_repl =~ s/\@__pattern__\@/$pattern_repl/g;
+                    # Strip the spaces from patterns
+                    my @pattern_no_space = ();
+                    my $i;
+                    foreach $i (@{$patt}) {
+                        $i =~ s/\s+//g;
+                        push @pattern_no_space, $i;
+                    }
+                    push @patches, { HEAD => $pattern_no_space[0],
+                                     FLAGS => \%valueflags,
+                                     NRLINES   => $nrlines,
+                                     PATTERNS => \@pattern_no_space,
+                                     REPLACE => $local_repl,
+                                     PATCHFILE => $pFile,
+                                     PATCHLINENO => $patchStartLine,
+                                 };
+                }
+                next NextPattern;
+            }
+            $replacement .= $_;
+        }
+        die "Unfinished replacement for pattern in $pFile";
+    }
+    close(PFILE) ||
+        die "Cannot close patch file $pFile\n";
+    print "Loaded patches from $pFile\n";
+    # print Dumper(\@patches); die "Here\n";
+    
+}
+
+sub trimSpaces {
+    my($str) = @_;
+    if($str =~ m|^\s+(\S.*)$|) {
+        $str = $1;
+    }
+    if($str =~ m|^(.*\S)\s+$|) {
+        $str = $1;
+    }
+    return $str;
+}
+
+
+my @includeReadAhead = ();
+sub readIncludeLine {
+    my($infile) = @_;
+    if($#includeReadAhead < 0) {
+        my $newLine = <$infile>;
+        return $newLine;
+    } else {
+        return shift @includeReadAhead;
+    }
+}
+
+sub undoReadIncludeLine {
+    my($line) = @_;
+    push @includeReadAhead, $line;
+}
+
+sub applyPatches {
+    my($in, $out) = @_;
+    # Initialize all the patches
+    my $patch;
+    # And remember the EOF patches that are applicable here
+    my @eof_patches = ();
+    foreach $patch (@patches) {
+        $patch->{USE} = 1;
+        my $infile = $patch->{FLAGS}->{file};
+        if(defined $infile && $in !~ m|$infile$|) {
+#            print "Will not use patch ", 
+#                  &lineDirective($patch->{PATCHFILE},$patch->{PATCHLINENO});
+            $patch->{USE} = 0;
+            next;
+        }
+        # Disable the system specific patterns
+        if(defined $patch->{FLAGS}->{system} &&
+           $patch->{FLAGS}->{system} ne $::platform) {
+            $patch->{USE} = 0;
+            next;
+        }
+        # Disable also (for now) the patches that must be applied at EOF
+        if(defined $patch->{FLAGS}->{ateof} || 
+           defined $patch->{FLAGS}->{atsof} ||
+           defined $patch->{FLAGS}->{disabled} ) {
+            $patch->{USE} = 0;
+            push @eof_patches, $patch;
+        }
+        
+    }
+        
+    open(OUT, ">$out") || die "Cannot open patch output file $out";
+    open(IN, "<$in") || die "Cannot open patch input file $in";
+
+    @includeReadAhead = ();
+
+    my $lineno = 0;
+    my $line; # The current line
+
+    # the file name that should be printed in the line directives
+    my $lineDirectiveFile = $in;
+    # Now apply the SOF patches
+    foreach my $patch (@eof_patches) {
+        if(defined $patch->{FLAGS}->{atsof}) {
+            my $line = &applyOnePatch($patch, &lineDirective($in, $lineno));
+            print OUT $line;
+        }
+    }
+
+    while($line = &readIncludeLine(\*IN)) {
+        $lineno ++;
+            # Now we have a line to print out. See if it needs patching
+        my $patch;
+        my @lines = ($line); # A number of lines
+        my $nrLines = 1;     # How many lines
+        my $toundo  = 0;
+      NextPatch:
+        foreach $patch (@patches) {
+            if(! $patch->{USE}) { next; } # We are not using this patch
+            my $line_no_spaces = $line;
+            $line_no_spaces =~ s/\s+//g;
+            if($line_no_spaces eq $patch->{HEAD}) {
+                # Now see if all the lines match
+                my $patNrLines = $patch->{NRLINES};
+                if($patNrLines > 1) {
+                    # Make sure we have enough lines
+                    while($nrLines < $patNrLines) {
+                        push @lines, &readIncludeLine(\*IN);
+                        $nrLines ++;
+                        $toundo ++;
+                    }
+                    my @checkLines = @{$patch->{PATTERNS}};
+                    my $i;
+                    # print "check: ", join(":", @checkLines);
+                    # print "with $nrLines lines: ", join("+", @lines);
+                    for($i=0;$i<$patNrLines;$i++) {
+                        $line_no_spaces = $lines[$i];
+                        $line_no_spaces =~ s/\s+//g;
+                        if($checkLines[$i] ne $line_no_spaces) {
+                            # print "No match for $patch->{HEAD}\n";
+                            next NextPatch;
+                        }
+                    }
+                }
+                # print "Using patch from $patch->{PATCHFILE}:$patch->{PATCHLINENO} at $in:$lineno\n";
+                # Now replace
+                $lineno += ($patNrLines - 1);
+                $toundo -= ($patNrLines - 1);
+                $line = &applyOnePatch($patch, &lineDirective($in, $lineno + 1));
+                last;
+            }
+        }
+        print OUT $line;
+        # Now undo all but the first line
+        my $i;
+        for($i=$nrLines - $toundo;$i<$nrLines;$i++) {
+            &undoReadIncludeLine($lines[$i]);
+        }
+    }
+    close(IN) || die "Cannot close file $in";
+    # Now apply the EOF patches
+    foreach $patch (@eof_patches) {
+        if(defined $patch->{FLAGS}->{ateof}) {
+            my $line = &applyOnePatch($patch, &lineDirective($in, $lineno));
+            print OUT $line;
+        }
+    }
+
+    close(OUT);
+    return 1;
+}
+
+
+sub applyOnePatch {
+    my($patch, $after) = @_;
+    my $line  = &lineDirective($patch->{PATCHFILE},
+                               $patch->{PATCHLINENO});
+    $line .= $patch->{REPLACE};
+    $line .= $after;
+    # Mark that we have used this group
+    $patch->{USED} = 1;
+    if(defined $patch->{FLAGS}->{group}) {
+        $groups{$patch->{FLAGS}->{group}} = 1;
+    }
+    return $line;
+}
diff --git a/cil/bin/patcher.bat.in b/cil/bin/patcher.bat.in
new file mode 100755
index 000000000..2e356ae45
--- /dev/null
+++ b/cil/bin/patcher.bat.in
@@ -0,0 +1 @@
+perl @CILHOME@/bin/patcher %*
diff --git a/cil/bin/teetwo b/cil/bin/teetwo
new file mode 100755
index 000000000..2aa68fa5e
--- /dev/null
+++ b/cil/bin/teetwo
@@ -0,0 +1,36 @@
+#!/bin/bash
+# run a command, sending stdout to one file and stderr to another,
+# but also sending both to this process' stdout/stderr, respectively
+
+if [ "$3" = "" ]; then
+  echo "usage: $0 stdout-file stderr-file cmd [args..]"
+  exit 0
+fi
+
+stdoutFile="$1"
+stderrFile="$2"
+command="$3"
+shift
+shift
+shift
+
+result=0
+handler() {
+  # this signal means the underlying command exit erroneously,
+  # though we don't know the code
+  echo "The command failed!"
+  result=2
+}
+trap handler SIGUSR1
+
+# dup my stdout/err on fd 3,4
+exec 3>&1
+exec 4>&2
+
+
+# run the command with tees to duplicate the data
+mypid=$$
+# echo "mypid = $mypid, command=$command, args=$@, stdout=$stdoutFile, stderr=$stderrFile"
+(("$command" "$@" || kill -s USR1 $mypid) | tee "$stdoutFile" >&3) 2>&1 | tee "$stderrFile" >&4
+
+exit $result
diff --git a/cil/bin/test-bad b/cil/bin/test-bad
new file mode 100755
index 000000000..4eacdc006
--- /dev/null
+++ b/cil/bin/test-bad
@@ -0,0 +1,202 @@
+#!/bin/sh
+# run a regression test containing one or more intentional failures
+#
+# To create a source file to be processed by this script do the following:
+# - the file should be a standalone program with main without any arguments
+#   You can add other files as part of the CFLAGS variable
+# - add a comment
+#    // NUMERRORS n
+#   where n is the number of errors to be tested by this file
+#
+#   This file is processed n+1 times. The first time, it should succeed (main returns or 
+#   exits with code 0) and the other n times it should fail. 
+#   For each run the preprocessor variable ERROR is defined to be
+#   be k (0 <= k <= n). 
+#   You can mark certain lines in your program so that they are used ONLY in a certain run: put the 
+#   following comment after a line to make it appear only in the run with ERROR == 3
+#   
+#    some_code; // ERROR(3)
+#
+#
+#   Furthermore, for each run that is intended to fail you can specify a string that 
+#   must appear in the output.
+#
+#    some_code; // ERROR(3):this string must appear in output
+#
+#   Do not put any spaces around the : 
+#
+#   Simple example:
+#
+#   #define E(n) {printf("Error %d\n", n); exit(n); }
+#   #define SUCCESS {printf("Success\n"); exit(0); }
+#
+#   // NUMERRORS 3
+#   int main() {
+#
+#     char char x; // ERROR(1):invalid type specifier
+#     int  y;
+#     int  z = ++y;
+#     // This conditional should be true
+#     if(z == y) E(2); // ERROR(2):Error 2
+#
+#     #if ERROR == 3
+#        z = (++y, y--);
+#        if(z == y + 1) E(3); // ERROR(3):Error 3
+#     #endif
+#
+#     SUCCESS;
+#   }
+#
+#
+# set RUNONLY=n to run only the test case n
+#
+
+if [ "$1" = "" ]; then
+  # most parameters are passed by name, instead of as positional
+  # arguments, for better impedance match with Makefile; but it's
+  # good to have at least 1 positional arg so when it's missing I
+  # can easily tell, and print this message
+  echo "usage: CILHOME=... CILLY=... CFLAGS=... $0 source-file.c"
+  echo "You can also set RUNONLY=n to run only the nth iteration"
+  exit 0
+fi
+echo "CILLY=$CILLY"
+echo "CFLAGS=$CFLAGS"
+srcfile="$1"
+# Construct the name of the temporary file to use
+srcfilenoext=`echo $srcfile | sed s/.c\$//`
+tmpname="$srcfilenoext-tmp"
+
+# for GCC, use "# xx foo.c".  For MSVC, use "#line xx foo.c"
+if [ "$_MSVC" != "" ]; then 
+  LINEOPT="line"
+  OUTFLAG="/Fe"
+  OUTEXT=".exe"
+else
+  LINEOPT=""
+  OUTFLAG="-o "
+  OUTEXT=".exe" # So that I can delete the executables
+fi
+
+# Start it in the right directory
+# cd "$CILLYHOME/test/small2" || exit
+
+# read how many failure cases are in the file; expect line of form
+# "// NUMERRORS n"
+numcases=`grep NUMERRORS "$srcfile" | perl -e '$_ = <>; m|(\d+)|; print $1;'`
+if [ -z "$numcases" ]; then
+  echo "didn't find a string of form NUMERRORS <n> in the file"
+  exit 2
+fi
+echo "there are $numcases failure cases in this file"
+
+
+# iterate through the cases; first case (0) is where no errors are present
+i=0
+if [ "$RUNONLY" != "" ] ;then
+   i=$RUNONLY
+fi
+while [ $i -le $numcases ]; do
+  echo
+  echo
+  echo "********************** Iteration $i"
+  echo
+  echo
+  # generate a temporary file; first hide the ERROR tags which identify
+  # the current test, then remove all remaining ERROR lines
+  # (syntax for errors has parentheses so if I have >=10 cases I don't
+  # run into problems where e.g. ERROR1 is a substring of ERROR10)
+  # use the little perl script to put line number directives where we remove 
+  # lines 
+  echo "generating test $i"
+  rm -f $tmpname.c 2>/dev/null
+  ( echo "#define ERROR $i"; echo "#$LINEOPT 1 \"$srcfile\"";cat "$srcfile") |\
+       sed "s|ERROR($i)|(selected: $i)|" | \
+       perl -e 'my $ln = 0; while(<>) { if($_ =~ m|ERROR\(|) { print "#'$LINEOPT' $ln\n"; } else { print $_; }; $ln ++}' \
+         > "$tmpname.c"
+  chmod a-w "$tmpname.c"
+
+  # Grab the errorline for this test case
+  themsg=`cat "$srcfile" | grep "ERROR($i).*:" | sed "s/^.*ERROR.*://" `
+  if [ "x$themsg" != "x" ] ;then 
+     echo "Expecting error message:$themsg"
+  fi
+
+  # compile this with our tool
+  rm -f test-bad.out test-bad.err ${tmpname}$OUTEXT
+  echo $CILLY $CFLAGS $tmpname.c ${OUTFLAG}${tmpname}$OUTEXT
+  $CILHOME/bin/teetwo test-bad.out test-bad.err \
+              $CILLY $CFLAGS -DERROR=$i $tmpname.c ${OUTFLAG}${tmpname}$OUTEXT
+  # cat test-bad.out test-bad.err
+  status=$?
+  runit=1
+  if [ $status != 0 ]; then
+    if [ $i = 0 ] ;then
+      echo "The 0th iteration failed to CURE! It is supposed to succeed."
+      exit $status
+    else
+      if [ "x$themsg" != "x" ] ;then
+         echo "grep \"$themsg\" test-bad.out test-bad.err"
+         if ! grep "$themsg" test-bad.out test-bad.err  ;then
+            echo "The ${i}th iteration failed to CURE but cannot find: $themsg"
+            exit 3
+         else
+           echo "The ${i}th iteration failed to CURE, as expected!"
+         fi
+      else
+         echo "The ${i}th iteration failed to CURE. We expected some failure!"
+      fi
+      runit=0
+    fi
+  fi
+
+  # run it
+  if [ $runit != 0 ]; then 
+    echo "./$tmpname$OUTEXT"
+    rm -f test-bad.out test-bad.err
+    if $CILHOME/bin/teetwo test-bad.out test-bad.err ./$tmpname$OUTEXT ; then
+      # cat test-bad.out test-bad.err
+      if [ $i = 0 ]; then
+        # expected success on 0th iteration
+        echo "(succeeded as expected)"
+      else
+        # unexpected success on >0th iteration
+        echo "The ${i}th iteration did not fail!  It is supposed to fail."
+        exit 2
+      fi
+    else
+      # cat test-bad.out test-bad.err
+      if [ $i = 0 ]; then
+        # unexpected failure on 0th iteration
+        echo "The 0th iteration failed! It is supposed to succeed."
+        #cat $tmpname.c
+        exit 2
+      else
+        # expected failure on >0th iteration
+        if [ "x$themsg" != "x" ] ;then
+           echo "grep \"$themsg\" test-bad.out test-bad.err"
+           if ! grep "$themsg" test-bad.out test-bad.err ;then
+              echo "The ${i}th iteration failed but cannot find:$themsg"
+              exit 3
+           fi
+        fi
+        echo "(failed as expected)"
+      fi
+    fi
+  fi
+
+  # possibly bail after 0th
+  if [ "$TESTBADONCE" != "" ]; then
+    echo "bailing after 0th iteration because TESTBADONCE is set"
+    exit 0
+  fi
+  if [ "$RUNONLY" != "" ]; then
+    echo "bailing after ${RUNONLY}th iteration because RUNONLY is set"
+    exit 0
+  fi
+
+  i=`expr $i + 1`
+done
+
+echo "all $numcases cases in $srcfile failed as expected"
+
diff --git a/cil/cil.spec b/cil/cil.spec
new file mode 100644
index 000000000..538097363
--- /dev/null
+++ b/cil/cil.spec
@@ -0,0 +1,90 @@
+Name: cil
+Version: 1.3.5
+Release: 1
+License: BSD
+URL: http://manju.cs.berkeley.edu/cil/
+Source0: %{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+BuildRequires: gcc
+BuildRequires: ocaml >= 3.08
+BuildRequires: perl >= 5.6.1
+
+# No ELF executables or shared libraries
+%define debug_package %{nil}
+
+
+########################################################################
+#
+#  Package cil
+#
+
+Summary: OCaml library for C program analysis and transformation
+Group: Development/Libraries
+Requires: perl >= 5.6.1
+
+%description
+CIL (C Intermediate Language) is a high-level representation along
+with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.
+
+This package provides Perl modules which are useful for building
+compiler wrappers.  A wrapper can use CIL to transform C code before
+passing it along to the native C compiler.
+
+%files
+%defattr(-,root,root,-)
+%doc LICENSE
+%{_datadir}/%{name}
+
+
+########################################################################
+#
+#  Package cil-devel
+#
+
+%package devel
+
+Summary: OCaml library for C program analysis and transformation
+Group: Development/Libraries
+Requires: ocaml >= 3.04
+
+%description devel
+CIL (C Intermediate Language) is a high-level representation along
+with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.
+
+This package provides OCaml interfaces and an OCaml library which form
+the CIL API.
+
+%files devel
+%defattr(-,root,root,-)
+%doc LICENSE
+%{_libdir}/%{name}
+
+
+########################################################################
+#
+#  General scripts
+#
+
+%prep
+%setup -q -n %{name}
+
+%build
+%configure
+%define cilmake make -f Makefile.cil
+%cilmake cilversion machdep
+%cilmake cillib NATIVECAML=
+%cilmake cillib NATIVECAML=1
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%makeinstall
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%changelog
+* Tue Aug  5 2003 Ben Liblit <liblit@cs.berkeley.edu> 
+- Initial build.
diff --git a/cil/cil.spec.in b/cil/cil.spec.in
new file mode 100644
index 000000000..0a47dbdd4
--- /dev/null
+++ b/cil/cil.spec.in
@@ -0,0 +1,90 @@
+Name: cil
+Version: @CIL_VERSION@
+Release: 1
+License: BSD
+URL: http://manju.cs.berkeley.edu/cil/
+Source0: %{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+BuildRequires: gcc
+BuildRequires: ocaml >= 3.08
+BuildRequires: perl >= 5.6.1
+
+# No ELF executables or shared libraries
+%define debug_package %{nil}
+
+
+########################################################################
+#
+#  Package cil
+#
+
+Summary: OCaml library for C program analysis and transformation
+Group: Development/Libraries
+Requires: perl >= 5.6.1
+
+%description
+CIL (C Intermediate Language) is a high-level representation along
+with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.
+
+This package provides Perl modules which are useful for building
+compiler wrappers.  A wrapper can use CIL to transform C code before
+passing it along to the native C compiler.
+
+%files
+%defattr(-,root,root,-)
+%doc LICENSE
+%{_datadir}/%{name}
+
+
+########################################################################
+#
+#  Package cil-devel
+#
+
+%package devel
+
+Summary: OCaml library for C program analysis and transformation
+Group: Development/Libraries
+Requires: ocaml >= 3.04
+
+%description devel
+CIL (C Intermediate Language) is a high-level representation along
+with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.
+
+This package provides OCaml interfaces and an OCaml library which form
+the CIL API.
+
+%files devel
+%defattr(-,root,root,-)
+%doc LICENSE
+%{_libdir}/%{name}
+
+
+########################################################################
+#
+#  General scripts
+#
+
+%prep
+%setup -q -n %{name}
+
+%build
+%configure
+%define cilmake make -f Makefile.cil
+%cilmake cilversion machdep
+%cilmake cillib NATIVECAML=
+%cilmake cillib NATIVECAML=1
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%makeinstall
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%changelog
+* Tue Aug  5 2003 Ben Liblit <liblit@cs.berkeley.edu> 
+- Initial build.
diff --git a/cil/config.guess b/cil/config.guess
new file mode 100755
index 000000000..c085f4f51
--- /dev/null
+++ b/cil/config.guess
@@ -0,0 +1,1497 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-05-13'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    x86:Interix*:[345]*)
+	echo i586-pc-interix${UNAME_RELEASE}
+	exit ;;
+    EM64T:Interix*:[345]*)
+	echo x86_64-unknown-interix${UNAME_RELEASE}
+	exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/cil/config.h.in b/cil/config.h.in
new file mode 100644
index 000000000..57dc9f0a3
--- /dev/null
+++ b/cil/config.h.in
@@ -0,0 +1,23 @@
+#undef HAVE_WCHAR_T
+
+#undef HAVE_STDLIB_H
+
+#undef HAVE_STRINGS_H
+
+#undef HAVE_SYS_TIME_H
+
+#undef HAVE_UNISTD_H
+
+#undef HAVE_CONST
+
+#undef HAVE_INLINE
+
+#undef HAVE_TIME_H
+
+#undef HAVE_MEMCP
+
+#undef HAVE_MKDIR
+
+#undef HAVE_SELECT
+
+#undef HAVE_SOCKET
diff --git a/cil/config.sub b/cil/config.sub
new file mode 100755
index 000000000..f0675aa6b
--- /dev/null
+++ b/cil/config.sub
@@ -0,0 +1,1469 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-11-30'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k \
+	| m32r | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* \
+	| m32r-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39 | mipstx39el \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2)
+		basic_machine=i686-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3d)
+		basic_machine=alpha-cray
+		os=-unicos
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+        tic4x | c4x*)
+		basic_machine=tic4x-unknown
+		os=-coff
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/cil/configure b/cil/configure
new file mode 100755
index 000000000..fe8634bf0
--- /dev/null
+++ b/cil/configure
@@ -0,0 +1,5697 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="src/cil.mli"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='CIL_FEATURES_DEFINES NEWLINE SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CPP EGREP LIBOBJS ARCHOS CILHOME HAS_MSVC DEFAULT_COMPILER DEFAULT_CIL_MODE CIL_VERSION_MAJOR CIL_VERSION_MINOR CIL_VERSION_REV CIL_VERSION CYCLES_PER_USEC HAS_PERFCOUNT HAVE_BUILTIN_VA_LIST THREAD_IS_KEYWORD UNDERSCORE_NAME EXTRAFEATURES EXTRASRCDIRS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-blockinggraph    enable the blocking graph feature
+  --with-rand             enable the randomized value numbering
+  --with-arithabs         enable the arithmetic abstraction
+  --with-zrapp            enable the zrapp pretty-printer
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
+
+# sm: require a late-enough autoconf; this is the version number
+# that's on manju, so I assume it's ok
+
+
+#
+# Assign here the CIL version numbers
+CIL_VERSION_MAJOR=1
+CIL_VERSION_MINOR=3
+CIL_VERSION_REV=5
+CIL_VERSION=$CIL_VERSION_MAJOR.$CIL_VERSION_MINOR.$CIL_VERSION_REV
+
+
+# make sure I haven't forgotten to run autoconf
+if test configure -ot configure.in; then
+  { { echo "$as_me:$LINENO: error: configure is older than configure.in; you forgot to run autoconf" >&5
+echo "$as_me: error: configure is older than configure.in; you forgot to run autoconf" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# check for C compiler; this typically finds gcc; it sets the
+# variable CC to whatever it finds, which then gets substituted
+# for @CC@ in output files; you have to do this even if you don't
+# care about @CC@, because system feature tests later on in
+# the ./configure script will expect $CC to be set right
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+
+# find system type (using this macro means we must include
+# the files install-sh, config.sub, and config.guess (all from
+# the autoconf distribution) in our source tree!)
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_target_alias=$target_alias
+test "x$ac_cv_target_alias" = "x" &&
+  ac_cv_target_alias=$ac_cv_host_alias
+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6
+target=$ac_cv_target
+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+# ---------------- generic functions -----------------
+# debugging diagnostic; set to 'echo' to debug or 'true' for production
+# (technically you're not supposed to use shell functions in
+# configure scripts, because some-obscure-sh somewhere doesn't
+# support them.. but they're too convenient to not use)
+diagnostic() {
+  #echo "$@"
+  true "$@"
+}
+
+# determine if a binary is in the path
+binaryExists() {
+  # on cygwin, 'which' always returns success, so use 'type' instead
+  if type "$1" >/dev/null 2>&1; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+
+# -------------- portable configuration ----------------
+# this specifies the root of the source tree; it's just the
+# directory where ./configure runs, except on cygwin, which
+# overrides this below
+CILHOME=`pwd`
+
+DEFAULT_COMPILER=_GNUCC
+DEFAULT_CIL_MODE=GNUCC
+
+# is the microsoft compiler available?
+# hmm.. I think we should check the version or something, because
+# sometimes people have Common Lisp's interpreter called 'cl' ..
+echo "$as_me:$LINENO: checking for msvc cl.exe (optional)" >&5
+echo $ECHO_N "checking for msvc cl.exe (optional)... $ECHO_C" >&6
+# See if CC points to the MS compiler
+if "$CC" 2>&1 | grep "Microsoft" >/dev/null; then
+  echo "$as_me:$LINENO: result: found, set as default" >&5
+echo "${ECHO_T}found, set as default" >&6
+  HAS_MSVC=yes
+  DEFAULT_COMPILER=_MSVC
+  DEFAULT_CIL_MODE=MSVC
+else
+  if cl 2>&1 | grep "Microsoft" >/dev/null ;then
+     echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+     HAS_MSVC=yes
+  else
+     echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+     HAS_MSVC=no
+  fi
+fi
+
+# is ocaml available?
+# needed binaries: ocamllex ocamlyacc ocamldep ocamlopt ocamlc
+ocamlDownloadInstructions="
+      OCaml can be downloaded from http://caml.inria.fr/ocaml/.
+      After downloading and unpacking the source distribution, in the ocaml
+      directory, do
+        ./configure
+        make world
+        make opt
+        make install
+      Then come back here and re-run ./configure."
+
+# required major/minor.
+# required major/minor
+reqMaj=3
+reqMin=08
+knownMaj=3
+knownMin=09
+echo "$as_me:$LINENO: checking ocaml version is at least $reqMaj.$reqMin" >&5
+echo $ECHO_N "checking ocaml version is at least $reqMaj.$reqMin... $ECHO_C" >&6
+if binaryExists ocamlc; then
+  # what version?
+  ver=`ocamlc -v | grep version | sed 's/^.*version //'`
+  diagnostic "ver is $ver"
+  # major: anything before the .
+  major=`echo $ver | sed 's/\..*$//'`
+  diagnostic "major is $major"
+  # minor: numbers after the .
+  # (the outer level of bracket-quotation protects the inner brackets)
+  minor=`echo $ver | sed 's/^[^.]*\.\([0-9][0-9]*\).*$/\1/'`
+  diagnostic "minor is $minor"
+
+  # I would think autoconf would already have a facility for doing
+  # these kinds of major/minor version checks, but I can't find it
+  if test $major -gt $reqMaj -o $major -ge $reqMaj -a $minor -ge $reqMin; then
+    echo "$as_me:$LINENO: result: version is $ver, ok" >&5
+echo "${ECHO_T}version is $ver, ok" >&6
+
+    # sm: added this test when we found that CCured needed to be changed
+    # a little when 3.06 came out (it had previously worked with 3.04)
+    if test "$major" -gt $knownMaj -o "$major" -ge $knownMaj -a "$minor" -gt $knownMin; then
+      { echo "$as_me:$LINENO: WARNING: Your ocaml version is $ver, but the latest version this program
+                   is known to work with is $knownMaj.$knownMin.  If you have
+                   trouble compiling, please try using an earlier version
+                   or see if there is a later version of this program." >&5
+echo "$as_me: WARNING: Your ocaml version is $ver, but the latest version this program
+                   is known to work with is $knownMaj.$knownMin.  If you have
+                   trouble compiling, please try using an earlier version
+                   or see if there is a later version of this program." >&2;}
+    fi
+  else
+    { { echo "$as_me:$LINENO: error:
+      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
+      Please download a newer OCaml distribution.
+      $ocamlDownloadInstructions
+    " >&5
+echo "$as_me: error:
+      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
+      Please download a newer OCaml distribution.
+      $ocamlDownloadInstructions
+    " >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+  # check for existence of other binaries
+  echo "$as_me:$LINENO: checking existence of related ocaml tools" >&5
+echo $ECHO_N "checking existence of related ocaml tools... $ECHO_C" >&6
+  if binaryExists ocamllex && \
+     binaryExists ocamlyacc && \
+     binaryExists ocamldep && \
+     binaryExists ocamlopt; then
+    echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+  else
+    { { echo "$as_me:$LINENO: error:
+      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
+      In particular, ocamlopt requires you to \"make opt\" when building
+      OCaml from source.  Please make sure all these tools are built and
+      in the path.
+    " >&5
+echo "$as_me: error:
+      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
+      In particular, ocamlopt requires you to \"make opt\" when building
+      OCaml from source.  Please make sure all these tools are built and
+      in the path.
+    " >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  { { echo "$as_me:$LINENO: error:
+      The \"ocamlc\" OCaml compiler was not found in the path: $PATH.
+
+      Most of this program is written in the OCaml language, so its compiler
+      is required.
+      $ocamlDownloadInstructions
+  " >&5
+echo "$as_me: error:
+      The \"ocamlc\" OCaml compiler was not found in the path: $PATH.
+
+      Most of this program is written in the OCaml language, so its compiler
+      is required.
+      $ocamlDownloadInstructions
+  " >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+#
+# ------------------- Perl ----------------
+#
+echo "$as_me:$LINENO: checking for Perl" >&5
+echo $ECHO_N "checking for Perl... $ECHO_C" >&6
+  if ! binaryExists perl; then
+    { { echo "$as_me:$LINENO: error:
+      perl not found.
+      You need perl version 5.6.1 or later for CIL.
+      You can get perl at http://www.cpan.org/src/index.html .
+    " >&5
+echo "$as_me: error:
+      perl not found.
+      You need perl version 5.6.1 or later for CIL.
+      You can get perl at http://www.cpan.org/src/index.html .
+    " >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+  # sm: oh how nice it would be to just say "use English;
+  # print($PERL_VERSION)", but that appears broken on 5.6.1.. so I'm
+  # trying to say "caret right-bracket", but then that would run afoul
+  # of autoconf's quoting characters, so I use the "quadrigraph" ]
+  # to stand for right-bracket.  what a mess.
+  perlver=`perl -e 'print($]);'`
+  if perl -e "exit( $perlver >= 5.006001 );"; then
+    { { echo "$as_me:$LINENO: error:
+      Found perl version $perlver, but at least 5.6.1 is required.
+      You can get a newer perl at http://www.cpan.org/src/index.html .
+    " >&5
+echo "$as_me: error:
+      Found perl version $perlver, but at least 5.6.1 is required.
+      You can get a newer perl at http://www.cpan.org/src/index.html .
+    " >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+  perlport=`perl -e "print $^O;"`
+  case "$perlport" in
+    cygwin)
+        ;;
+    MSWin32) # ActivePerl
+        ;;
+    linux)
+        ;;
+    freebsd)
+        ;;
+    openbsd)
+        ;;
+    darwin) # Mac OS X
+        ;;
+    solaris)
+	;;
+    *)
+      { { echo "$as_me:$LINENO: error:
+        Unsupported Perl port $perlport -- sorry.
+        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
+        and solaris are the supported ports.
+      " >&5
+echo "$as_me: error:
+        Unsupported Perl port $perlport -- sorry.
+        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
+        and solaris are the supported ports.
+      " >&2;}
+   { (exit 1); exit 1; }; }
+  esac
+echo "$as_me:$LINENO: result: found version $perlver, port $perlport" >&5
+echo "${ECHO_T}found version $perlver, port $perlport" >&6
+
+        # The cygwin port has some bugs in the File::Spec module
+if test "$perlport" = "cygwin" ;then
+  echo "$as_me:$LINENO: checking for known cygwin Perl bug in File::Spec" >&5
+echo $ECHO_N "checking for known cygwin Perl bug in File::Spec... $ECHO_C" >&6
+  perlfixres=`perl -e '
+      use File::Spec;
+      if(File::Spec->file_name_is_absolute("C:/test")) {
+        print "no bug found"; exit 0;
+      } else {
+        print "bug";
+        foreach $d (@INC) {
+           if(-f "$d/File/Spec/Unix.pm") {
+              open(IN, "<$d/File/Spec/Unix.pm");
+              open(OUT, ">$d/File/Spec/Unix.pm.fixed")
+                       || die "Cannot open $d/File/Spec/Unix.pm.fixed";
+              while(<IN>) {
+                if($_ =~ m|sub file_name_is_absolute|) {
+                   print OUT $_;
+                   print OUT scalar(<IN>);
+                   print OUT <<EOF;
+   if(\\$^O eq \"cygwin\") {
+       return scalar(\\$file =~ m{^(\\[a-z\\]:)?\\[\\\\\\\\/\\]}is);
+};
+EOF
+                   next;
+                }
+                print OUT $_;
+              }
+              close(OUT);
+              close(IN);
+              system("mv -f $d/File/Spec/Unix.pm.fixed $d/File/Spec/Unix.pm");
+           }
+        }
+      }
+  '`
+  # See if it was indeed fixed
+  if test "$perlfixres" = "bug" ;then
+     perlfixres=`perl -e '
+      use File::Spec;
+      if(File::Spec->file_name_is_absolute("C:/test")) {
+        print "bug fixed"; exit 0;
+      } else {
+        print "cannot fix bug"; exit 1;
+      }'`
+  fi
+  if test "x$perlfixres" = "x" ;then
+      { { echo "$as_me:$LINENO: error:
+        Cannot run perl
+      " >&5
+echo "$as_me: error:
+        Cannot run perl
+      " >&2;}
+   { (exit 1); exit 1; }; }
+  elif test "$perlfixres" = "cannot fix bug" ;then
+      { { echo "$as_me:$LINENO: error:
+        Found a bug but cannot fix it.
+      " >&5
+echo "$as_me: error:
+        Found a bug but cannot fix it.
+      " >&2;}
+   { (exit 1); exit 1; }; }
+  else
+     echo "$as_me:$LINENO: result: $perlfixres" >&5
+echo "${ECHO_T}$perlfixres" >&6
+ fi
+fi
+
+#
+# Now setup the performance counters
+#
+echo "$as_me:$LINENO: checking if performance counters are usable" >&5
+echo $ECHO_N "checking if performance counters are usable... $ECHO_C" >&6
+# Create a C file from src/perfcount.c.in
+rm -f ./cycles.exe
+if gcc -DCONFIGURATION_ONLY \
+       -x c ocamlutil/perfcount.c.in -lm -o ./cycles.exe >/dev/null 2>&1; then
+
+   if CYCLES_PER_USEC=`./cycles.exe 2>&1` ;then
+     echo "$as_me:$LINENO: result: ok ($CYCLES_PER_USEC cycles per us)" >&5
+echo "${ECHO_T}ok ($CYCLES_PER_USEC cycles per us)" >&6
+   else
+     # Print what we got
+     echo "$as_me:$LINENO: result: no ($CYCLES_PER_USEC)" >&5
+echo "${ECHO_T}no ($CYCLES_PER_USEC)" >&6
+     CYCLES_PER_USEC=0
+   fi
+else
+   CYCLES_PER_USEC=0
+   echo "$as_me:$LINENO: result: no (cannot compile perfcount.c)" >&5
+echo "${ECHO_T}no (cannot compile perfcount.c)" >&6
+fi
+rm -f ./cycles.exe
+
+# If we are on Linux and we use performance counters try to get
+# the processor speed from /proc/cpuinfo
+if test "$CYCLES_PER_USEC" != "0" ;then
+     case "$target" in
+        # linux
+        *86*linux*)
+             echo "$as_me:$LINENO: checking if /proc/cpuinfo has processor speed" >&5
+echo $ECHO_N "checking if /proc/cpuinfo has processor speed... $ECHO_C" >&6
+             cpuinfo=`cat /proc/cpuinfo 2>/dev/null | grep "cpu MHz"`
+             procspeed=`echo $cpuinfo | sed 's/^.*[^0-9]\([0-9]\+\.[0-9]\+\).*$/\1/g'`
+             if test "$procspeed"!="" ;then
+                CYCLES_PER_USEC=$procspeed
+                echo "$as_me:$LINENO: result: got $CYCLES_PER_USEC cycles per us" >&5
+echo "${ECHO_T}got $CYCLES_PER_USEC cycles per us" >&6
+             else
+                echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+             fi
+             ;;
+        *)
+             ;;
+      esac
+      # Now set HAS_PERFCOUNT
+      HAS_PERFCOUNT=1
+else
+      HAS_PERFCOUNT=0
+fi
+
+# additional tools we might check for:
+#   - gnu make
+
+#
+# -------------------- GCC --------------
+#
+
+echo "$as_me:$LINENO: checking for gcc version" >&5
+echo $ECHO_N "checking for gcc version... $ECHO_C" >&6
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for __builtin_va_list" >&5
+echo $ECHO_N "checking for __builtin_va_list... $ECHO_C" >&6
+if test "${ac_cv_type___builtin_va_list+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((__builtin_va_list *) 0)
+  return 0;
+if (sizeof (__builtin_va_list))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type___builtin_va_list=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type___builtin_va_list=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type___builtin_va_list" >&5
+echo "${ECHO_T}$ac_cv_type___builtin_va_list" >&6
+if test $ac_cv_type___builtin_va_list = yes; then
+  HAVE_BUILTIN_VA_LIST=true
+else
+  HAVE_BUILTIN_VA_LIST=false
+fi
+
+echo "$as_me:$LINENO: checking if __thread is a keyword" >&5
+echo $ECHO_N "checking if __thread is a keyword... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+int main(int __thread) { return 0; }
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  THREAD_IS_KEYWORD=false
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+THREAD_IS_KEYWORD=true
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $THREAD_IS_KEYWORD" >&5
+echo "${ECHO_T}$THREAD_IS_KEYWORD" >&6
+
+# Does gcc add underscores to identifiers to make assembly labels?
+# (I think MSVC always does)
+echo "$as_me:$LINENO: checking if gcc adds underscores to assembly labels." >&5
+echo $ECHO_N "checking if gcc adds underscores to assembly labels.... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+int main() { __asm__("jmp _main"); }
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  UNDERSCORE_NAME=true
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+UNDERSCORE_NAME=false
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $UNDERSCORE_NAME" >&5
+echo "${ECHO_T}$UNDERSCORE_NAME" >&6
+
+
+# ----------- some stuff 'autoscan' put here --------------
+# (autoscan is part of the autoconf distribution)
+
+# checks for header files
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+for ac_header in stdlib.h strings.h sys/time.h unistd.h wchar.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# checks for typedefs, structures, and compiler characteristics
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_time=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+# checks for library functions; more autoscan stuff
+echo "$as_me:$LINENO: checking for working memcmp" >&5
+echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
+if test "${ac_cv_func_memcmp_working+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_memcmp_working=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+  /* Some versions of memcmp are not 8-bit clean.  */
+  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
+  if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+    exit (1);
+
+  /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+     or more and with at least one buffer not starting on a 4-byte boundary.
+     William Lewis provided this test program.   */
+  {
+    char foo[21];
+    char bar[21];
+    int i;
+    for (i = 0; i < 4; i++)
+      {
+	char *a = foo + i;
+	char *b = bar + i;
+	strcpy (a, "--------01111111");
+	strcpy (b, "--------10000000");
+	if (memcmp (a, b, 16) >= 0)
+	  exit (1);
+      }
+    exit (0);
+  }
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_memcmp_working=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_memcmp_working=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6
+test $ac_cv_func_memcmp_working = no && case $LIBOBJS in
+    "memcmp.$ac_objext"   | \
+  *" memcmp.$ac_objext"   | \
+    "memcmp.$ac_objext "* | \
+  *" memcmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;;
+esac
+
+
+
+
+
+
+for ac_func in mkdir select socket __sysv_signal
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+# ----------- platform-specific code -------------
+# $target is typically processor-vendor-os
+case "$target" in
+  # linux
+  *86*linux*|*86*freebsd*|*86*openbsd*|*86*darwin*)
+    echo "$as_me:$LINENO: result: configuring for linux/x86" >&5
+echo "${ECHO_T}configuring for linux/x86" >&6
+
+    ARCHOS=x86_LINUX
+    ;;
+
+  # Mac OS X
+  *powerpc*darwin*)
+    echo "$as_me:$LINENO: result: configuring for powerpc/darwin" >&5
+echo "${ECHO_T}configuring for powerpc/darwin" >&6
+
+    ARCHOS=ppc_DARWIN
+    ;;
+
+  # cygwin
+  *86*cygwin*)
+    echo "$as_me:$LINENO: result: configuring for Cygwin on win32/x86" >&5
+echo "${ECHO_T}configuring for Cygwin on win32/x86" >&6
+
+    ARCHOS=x86_WIN32
+
+    # override CILHOME; even on cygwin we want forward slashes
+    # sm: I folded this into what I hope will be the only
+    # case-analysis of machine type
+    CILHOME=`cygpath -wa "$CILHOME"  | sed -e "s/\\\\\/\\//g"`
+    CC=`which $CC`
+    CC=`cygpath -wa "$CC"  | sed -e "s/\\\\\/\\//g"`
+    ;;
+
+  # Solaris
+  *sparc*solaris*)
+    echo "$as_me:$LINENO: result: configuring for SPARC/Solaris" >&5
+echo "${ECHO_T}configuring for SPARC/Solaris" >&6
+
+    ARCHOS=sparc_SOLARIS
+    ;;
+
+  *)
+    { { echo "$as_me:$LINENO: error:
+      Unsupported platform $target -- sorry.
+      ./configure supports these platforms:
+         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
+         on PowerPC: Mac OS X
+         on SPARC:   Solaris
+    " >&5
+echo "$as_me: error:
+      Unsupported platform $target -- sorry.
+      ./configure supports these platforms:
+         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
+         on PowerPC: Mac OS X
+         on SPARC:   Solaris
+    " >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+esac
+
+# Make the object directory if not already present
+as_ac_File=`echo "ac_cv_file_obj/$ARCHOS" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for obj/$ARCHOS" >&5
+echo $ECHO_N "checking for obj/$ARCHOS... $ECHO_C" >&6
+if eval "test \"\${$as_ac_File+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  test "$cross_compiling" = yes &&
+  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+if test -r "obj/$ARCHOS"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+if test `eval echo '${'$as_ac_File'}'` = yes; then
+  :
+else
+  echo "$as_me:$LINENO: result: creating obj/$ARCHOS" >&5
+echo "${ECHO_T}creating obj/$ARCHOS" >&6;
+                            mkdir -p obj/$ARCHOS
+fi
+
+
+echo "$as_me:$LINENO: checking delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file" >&5
+echo $ECHO_N "checking delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file... $ECHO_C" >&6
+rm -f obj/$ARCHOS/machdep.ml
+rm -f obj/.depend/machdep.d
+rm -f obj/$ARCHOS/feature_config.ml
+rm -f obj/.depend/feature_config.d
+echo "$as_me:$LINENO: result: done" >&5
+echo "${ECHO_T}done" >&6
+
+# We will use substitution variables whose definition contains newlines. The
+# problem is that when config.status runs, it wants to break the series of
+# substitution commands for sed into fragments based on line count. We could
+# be unlucky and have config.status break the series of substitution in the
+# middle of a variable that contains newlines. So, we first create a single
+# variable called NEWLINE whose definition is a carriage return. This means
+# that there will be exactly one opportunity for this error to happen (in the
+# definition of NEWLINE). The occurrence of AC_SUBST for NEWLINE must occur
+# after those of the variables that use it! And we want to put all of these
+# very early on, to make sure that they are not around the place when the file
+# bets broken.
+
+NEWLINE="\\
+"
+
+
+#
+# CIL/CCured features
+#
+#
+
+# Set the defaults
+
+
+# Give a space-separated list of features with the defaults
+features="blockinggraph=no rand=no arithabs=no zrapp=no"
+
+
+# Check whether --with-blockinggraph or --without-blockinggraph was given.
+if test "${with_blockinggraph+set}" = set; then
+  withval="$with_blockinggraph"
+
+fi;
+
+# Check whether --with-rand or --without-rand was given.
+if test "${with_rand+set}" = set; then
+  withval="$with_rand"
+
+fi;
+
+# Check whether --with-arithabs or --without-arithabs was given.
+if test "${with_arithabs+set}" = set; then
+  withval="$with_arithabs"
+
+fi;
+
+# Check whether --with-zrapp or --without-zrapp was given.
+if test "${with_zrapp+set}" = set; then
+  withval="$with_zrapp"
+
+fi;
+
+# Smalloc.ml is distributed by {matth,nks}@cs.berkeley.edu as part of Scrash.
+features="$features smalloc=no"
+
+# cqualann.ml is used by Matt Harren.  Please ignore.
+features="$features cqualann=no"
+
+# Now add any features specified in the command-line
+
+features="$features $EXTRAFEATURES"
+
+for f_val in $features
+do
+   # If there is no =, then we default to yes
+   if ! (echo $f_val | grep "=" >/dev/null) ;then f_val="$f_val=yes"; fi
+   # echo "Testing feature $f_val"
+   f=`echo $f_val | sed -e s%=.*$%%`
+   echo "$as_me:$LINENO: checking whether to use CIL feature $f" >&5
+echo $ECHO_N "checking whether to use CIL feature $f... $ECHO_C" >&6
+   # default value from "features"
+   defval=`echo $f_val | sed -e s%^.*=%%`
+   # current value
+   getcurval="echo \${with_$f:=$defval}"
+   curval=`eval $getcurval`
+   echo "$as_me:$LINENO: result: $curval" >&5
+echo "${ECHO_T}$curval" >&6
+   if test $curval = yes ;then
+      CIL_FEATURES="$CIL_FEATURES $f"
+   fi
+done
+
+## Now produce the CIL_FEATURES_DEFINES
+CIL_FEATURES_DEFINES=""
+# Convert to upper case
+for f in `echo $CIL_FEATURES | tr a-z A-Z`
+do
+   CIL_FEATURES_DEFINES="${CIL_FEATURES_DEFINES}@NEWLINE@export USE_$f=yes"
+done
+
+
+# ----------------- finish up -------------------
+# names of the variables that get substituted in files; for example,
+# write @ARCHOS@ somewhere in a written file to get it substituted
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# finish the configure script and generate various files; ./configure
+# will apply variable substitutions to <filename>.in to generate <filename>;
+# I find it useful to mark generated files as read-only so I don't
+# accidentally edit them (and them lose my changes when ./configure
+# runs again); I had originally done the chmod after AC_OUTPUT, but
+# the problem is then the chmod doesn't run inside ./config.status
+
+# MY_AC_CONFIG_FILES(filename)
+# do AC_CONFIG_FILES(filename, chmod a-w filename)
+
+
+
+{
+  if test -f Makefile.in; then
+              ac_config_files="$ac_config_files Makefile"
+
+  else
+    true
+    #echo "skipping [Makefile] because it's not in this distribution"
+  fi
+}
+{
+  if test -f cil.spec.in; then
+              ac_config_files="$ac_config_files cil.spec"
+
+  else
+    true
+    #echo "skipping [cil.spec] because it's not in this distribution"
+  fi
+}
+{
+  if test -f config.mk.in; then
+              ac_config_files="$ac_config_files config.mk"
+
+  else
+    true
+    #echo "skipping [config.mk] because it's not in this distribution"
+  fi
+}
+{
+  if test -f test/Makefile.in; then
+              ac_config_files="$ac_config_files test/Makefile"
+
+  else
+    true
+    #echo "skipping [test/Makefile] because it's not in this distribution"
+  fi
+}
+{
+  if test -f bin/cilly.bat.in; then
+              ac_config_files="$ac_config_files bin/cilly.bat"
+
+  else
+    true
+    #echo "skipping [bin/cilly.bat] because it's not in this distribution"
+  fi
+}
+{
+  if test -f bin/patcher.bat.in; then
+              ac_config_files="$ac_config_files bin/patcher.bat"
+
+  else
+    true
+    #echo "skipping [bin/patcher.bat] because it's not in this distribution"
+  fi
+}
+{
+  if test -f bin/CilConfig.pm.in; then
+              ac_config_files="$ac_config_files bin/CilConfig.pm"
+
+  else
+    true
+    #echo "skipping [bin/CilConfig.pm] because it's not in this distribution"
+  fi
+}
+{
+  if test -f doc/index.html.in; then
+              ac_config_files="$ac_config_files doc/index.html"
+
+  else
+    true
+    #echo "skipping [doc/index.html] because it's not in this distribution"
+  fi
+}
+{
+  if test -f doc/header.html.in; then
+              ac_config_files="$ac_config_files doc/header.html"
+
+  else
+    true
+    #echo "skipping [doc/header.html] because it's not in this distribution"
+  fi
+}
+{
+  if test -f ocamlutil/perfcount.c.in; then
+              ac_config_files="$ac_config_files ocamlutil/perfcount.c"
+
+  else
+    true
+    #echo "skipping [ocamlutil/perfcount.c] because it's not in this distribution"
+  fi
+}
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "cil.spec" ) CONFIG_FILES="$CONFIG_FILES cil.spec" ;;
+  "config.mk" ) CONFIG_FILES="$CONFIG_FILES config.mk" ;;
+  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+  "bin/cilly.bat" ) CONFIG_FILES="$CONFIG_FILES bin/cilly.bat" ;;
+  "bin/patcher.bat" ) CONFIG_FILES="$CONFIG_FILES bin/patcher.bat" ;;
+  "bin/CilConfig.pm" ) CONFIG_FILES="$CONFIG_FILES bin/CilConfig.pm" ;;
+  "doc/index.html" ) CONFIG_FILES="$CONFIG_FILES doc/index.html" ;;
+  "doc/header.html" ) CONFIG_FILES="$CONFIG_FILES doc/header.html" ;;
+  "ocamlutil/perfcount.c" ) CONFIG_FILES="$CONFIG_FILES ocamlutil/perfcount.c" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@CIL_FEATURES_DEFINES@,$CIL_FEATURES_DEFINES,;t t
+s,@NEWLINE@,$NEWLINE,;t t
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@target@,$target,;t t
+s,@target_cpu@,$target_cpu,;t t
+s,@target_vendor@,$target_vendor,;t t
+s,@target_os@,$target_os,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@ARCHOS@,$ARCHOS,;t t
+s,@CILHOME@,$CILHOME,;t t
+s,@HAS_MSVC@,$HAS_MSVC,;t t
+s,@DEFAULT_COMPILER@,$DEFAULT_COMPILER,;t t
+s,@DEFAULT_CIL_MODE@,$DEFAULT_CIL_MODE,;t t
+s,@CIL_VERSION_MAJOR@,$CIL_VERSION_MAJOR,;t t
+s,@CIL_VERSION_MINOR@,$CIL_VERSION_MINOR,;t t
+s,@CIL_VERSION_REV@,$CIL_VERSION_REV,;t t
+s,@CIL_VERSION@,$CIL_VERSION,;t t
+s,@CYCLES_PER_USEC@,$CYCLES_PER_USEC,;t t
+s,@HAS_PERFCOUNT@,$HAS_PERFCOUNT,;t t
+s,@HAVE_BUILTIN_VA_LIST@,$HAVE_BUILTIN_VA_LIST,;t t
+s,@THREAD_IS_KEYWORD@,$THREAD_IS_KEYWORD,;t t
+s,@UNDERSCORE_NAME@,$UNDERSCORE_NAME,;t t
+s,@EXTRAFEATURES@,$EXTRAFEATURES,;t t
+s,@EXTRASRCDIRS@,$EXTRASRCDIRS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+  # Run the commands associated with the file.
+  case $ac_file in
+    Makefile ) chmod a-w Makefile ;;
+    cil.spec ) chmod a-w cil.spec ;;
+    config.mk ) chmod a-w config.mk ;;
+    test/Makefile ) chmod a-w test/Makefile ;;
+    bin/cilly.bat ) chmod a-w,a+x bin/cilly.bat ;;
+    bin/patcher.bat ) chmod a-w,a+x bin/patcher.bat ;;
+    bin/CilConfig.pm ) chmod a-w bin/CilConfig.pm ;;
+    doc/index.html ) chmod a-w doc/index.html ;;
+    doc/header.html ) chmod a-w doc/header.html ;;
+    ocamlutil/perfcount.c ) chmod a-w ocamlutil/perfcount.c ;;
+  esac
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+# show the user what the variables have been set to
+cat <<EOF
+
+CIL configuration:
+  architecture/OS:            ARCHOS             $ARCHOS
+  source tree root:           CILHOME            $CILHOME
+  (optional) cl.exe found:    HAS_MSVC           $HAS_MSVC
+  gcc to use                  CC                 $CC
+  default compiler            DEFAULT_COMPILER   $DEFAULT_COMPILER
+  CIL version                 CIL_VERSION        $CIL_VERSION
+  CIL features                CIL_FEATURES       $CIL_FEATURES
+  Extra source directories    EXTRASRCDIRS       $EXTRASRCDIRS
+  Cycles per microsecond      CYCLES_PER_USEC    $CYCLES_PER_USEC
+EOF
+
diff --git a/cil/configure.in b/cil/configure.in
new file mode 100644
index 000000000..aee7ac73d
--- /dev/null
+++ b/cil/configure.in
@@ -0,0 +1,600 @@
+# configure.in for CIL           -*- sh -*-
+# Process this file with autoconf to produce a configure script.
+
+# Autoconf runs this through the M4 macroprocessor first; lines
+# starting with "dnl" are comments to M4.  The result is a bash
+# script; any text which isn't an M4/autoconf directive gets
+# copied verbatim to that script.
+
+# also, in general, watch out: the M4 quoting charactes are
+# the square brackets: [ and ].  if you want to pass brackets
+# to something, you can quote the brackets with more brackets.
+# I don't know how to pass a single (unbalanced) bracket ..
+
+# sm: changed this file to use '#' for comments, since that's
+# just as good (since this becomes an 'sh' script)
+
+
+# We must put these AC_SUBST very early, and in this order. See below where we
+# define NEWLINE
+AC_SUBST(CIL_FEATURES_DEFINES) 
+AC_SUBST(NEWLINE)
+
+
+# -------------- usual initial stuff -------------
+# this simply names a file somewhere in the source tree to verify
+# we're in the right directory
+AC_INIT(src/cil.mli)
+AC_CONFIG_HEADERS(config.h)
+
+# sm: require a late-enough autoconf; this is the version number
+# that's on manju, so I assume it's ok
+AC_PREREQ(2.50)
+
+#
+# Assign here the CIL version numbers
+CIL_VERSION_MAJOR=1
+CIL_VERSION_MINOR=3
+CIL_VERSION_REV=5
+CIL_VERSION=$CIL_VERSION_MAJOR.$CIL_VERSION_MINOR.$CIL_VERSION_REV
+
+
+# make sure I haven't forgotten to run autoconf
+if test configure -ot configure.in; then
+  AC_MSG_ERROR(configure is older than configure.in; you forgot to run autoconf)
+fi
+
+# check for C compiler; this typically finds gcc; it sets the
+# variable CC to whatever it finds, which then gets substituted
+# for @CC@ in output files; you have to do this even if you don't
+# care about @CC@, because system feature tests later on in
+# the ./configure script will expect $CC to be set right
+AC_PROG_CC
+
+AC_PROG_INSTALL
+
+
+# find system type (using this macro means we must include
+# the files install-sh, config.sub, and config.guess (all from
+# the autoconf distribution) in our source tree!)
+AC_CANONICAL_SYSTEM
+
+
+# ---------------- generic functions -----------------
+# debugging diagnostic; set to 'echo' to debug or 'true' for production
+# (technically you're not supposed to use shell functions in
+# configure scripts, because some-obscure-sh somewhere doesn't
+# support them.. but they're too convenient to not use)
+diagnostic() {
+  #echo "$@"
+  true "$@"
+}
+
+# determine if a binary is in the path
+binaryExists() {
+  # on cygwin, 'which' always returns success, so use 'type' instead
+  if type "$1" >/dev/null 2>&1; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+
+# -------------- portable configuration ----------------
+# this specifies the root of the source tree; it's just the
+# directory where ./configure runs, except on cygwin, which
+# overrides this below
+CILHOME=`pwd`
+
+DEFAULT_COMPILER=_GNUCC
+DEFAULT_CIL_MODE=GNUCC
+
+# is the microsoft compiler available?
+# hmm.. I think we should check the version or something, because
+# sometimes people have Common Lisp's interpreter called 'cl' ..
+AC_MSG_CHECKING(for msvc cl.exe (optional))
+# See if CC points to the MS compiler
+if "$CC" 2>&1 | grep "Microsoft" >/dev/null; then 
+  AC_MSG_RESULT([found, set as default])
+  HAS_MSVC=yes
+  DEFAULT_COMPILER=_MSVC
+  DEFAULT_CIL_MODE=MSVC
+else
+  if cl 2>&1 | grep "Microsoft" >/dev/null ;then
+     AC_MSG_RESULT(found)
+     HAS_MSVC=yes
+  else
+     AC_MSG_RESULT(not found)
+     HAS_MSVC=no
+  fi
+fi
+
+# is ocaml available?
+# needed binaries: ocamllex ocamlyacc ocamldep ocamlopt ocamlc
+ocamlDownloadInstructions="
+      OCaml can be downloaded from http://caml.inria.fr/ocaml/.
+      After downloading and unpacking the source distribution, in the ocaml
+      directory, do
+        ./configure
+        make world
+        make opt
+        make install
+      Then come back here and re-run ./configure."
+
+# required major/minor. 
+# required major/minor
+reqMaj=3
+reqMin=08
+knownMaj=3
+knownMin=09
+AC_MSG_CHECKING(ocaml version is at least $reqMaj.$reqMin)
+if binaryExists ocamlc; then
+  # what version?
+  ver=`ocamlc -v | grep version | sed 's/^.*version //'`
+  diagnostic "ver is $ver"
+  # major: anything before the .
+  major=`echo $ver | sed 's/\..*$//'`
+  diagnostic "major is $major"
+  # minor: numbers after the .
+  # (the outer level of bracket-quotation protects the inner brackets)
+  [minor=`echo $ver | sed 's/^[^.]*\.\([0-9][0-9]*\).*$/\1/'`]
+  diagnostic "minor is $minor"
+
+  # I would think autoconf would already have a facility for doing
+  # these kinds of major/minor version checks, but I can't find it
+  if test $major -gt $reqMaj -o $major -ge $reqMaj -a $minor -ge $reqMin; then
+    AC_MSG_RESULT([version is $ver, ok])
+
+    # sm: added this test when we found that CCured needed to be changed
+    # a little when 3.06 came out (it had previously worked with 3.04)
+    if test "$major" -gt $knownMaj -o "$major" -ge $knownMaj -a "$minor" -gt $knownMin; then
+      AC_MSG_WARN([Your ocaml version is $ver, but the latest version this program
+                   is known to work with is $knownMaj.$knownMin.  If you have
+                   trouble compiling, please try using an earlier version
+                   or see if there is a later version of this program.])
+    fi
+  else
+    AC_MSG_ERROR([
+      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
+      Please download a newer OCaml distribution.
+      $ocamlDownloadInstructions
+    ])
+  fi
+
+  # check for existence of other binaries
+  AC_MSG_CHECKING(existence of related ocaml tools)
+  if binaryExists ocamllex && \
+     binaryExists ocamlyacc && \
+     binaryExists ocamldep && \
+     binaryExists ocamlopt; then
+    AC_MSG_RESULT(ok)
+  else
+    AC_MSG_ERROR([
+      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
+      In particular, ocamlopt requires you to "make opt" when building
+      OCaml from source.  Please make sure all these tools are built and
+      in the path.
+    ])
+  fi
+else
+  AC_MSG_ERROR([
+      The "ocamlc" OCaml compiler was not found in the path: $PATH.
+
+      Most of this program is written in the OCaml language, so its compiler
+      is required.
+      $ocamlDownloadInstructions
+  ])
+fi
+
+#
+# ------------------- Perl ----------------
+#
+AC_MSG_CHECKING([for Perl])
+  if ! binaryExists perl; then
+    AC_MSG_ERROR([
+      perl not found.
+      You need perl version 5.6.1 or later for CIL.
+      You can get perl at http://www.cpan.org/src/index.html .
+    ])
+  fi
+
+  # sm: oh how nice it would be to just say "use English;
+  # print($PERL_VERSION)", but that appears broken on 5.6.1.. so I'm
+  # trying to say "caret right-bracket", but then that would run afoul
+  # of autoconf's quoting characters, so I use the "quadrigraph" @:>@
+  # to stand for right-bracket.  what a mess.
+  perlver=`perl -e 'print($@:>@);'`
+  if perl -e "exit( $perlver >= 5.006001 );"; then
+    AC_MSG_ERROR([
+      Found perl version $perlver, but at least 5.6.1 is required.
+      You can get a newer perl at http://www.cpan.org/src/index.html .
+    ])
+  fi
+
+  perlport=`perl -e "print $^O;"`
+  case "$perlport" in
+    cygwin)
+        ;;
+    MSWin32) # ActivePerl
+        ;;
+    linux)
+        ;;
+    freebsd)
+        ;;
+    openbsd)
+        ;;
+    darwin) # Mac OS X
+        ;;
+    solaris)
+	;;
+    *)
+      AC_MSG_ERROR([
+        Unsupported Perl port $perlport -- sorry.
+        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
+        and solaris are the supported ports.
+      ])
+  esac
+AC_MSG_RESULT([found version $perlver, port $perlport])
+
+        # The cygwin port has some bugs in the File::Spec module
+if test "$perlport" = "cygwin" ;then
+  AC_MSG_CHECKING([for known cygwin Perl bug in File::Spec])
+  perlfixres=[`perl -e '
+      use File::Spec;
+      if(File::Spec->file_name_is_absolute("C:/test")) {
+        print "no bug found"; exit 0;
+      } else {
+        print "bug";
+        foreach $d (@INC) {
+           if(-f "$d/File/Spec/Unix.pm") {
+              open(IN, "<$d/File/Spec/Unix.pm");
+              open(OUT, ">$d/File/Spec/Unix.pm.fixed") 
+                       || die "Cannot open $d/File/Spec/Unix.pm.fixed";
+              while(<IN>) {
+                if($_ =~ m|sub file_name_is_absolute|) {
+                   print OUT $_;
+                   print OUT scalar(<IN>);
+                   print OUT <<EOF;
+   if(\\$^O eq \"cygwin\") { 
+       return scalar(\\$file =~ m{^(\\[a-z\\]:)?\\[\\\\\\\\/\\]}is);
+};
+EOF
+                   next;
+                }
+                print OUT $_;
+              }
+              close(OUT);
+              close(IN);
+              system("mv -f $d/File/Spec/Unix.pm.fixed $d/File/Spec/Unix.pm");
+           }
+        }
+      }
+  '`]
+  # See if it was indeed fixed
+  if test "$perlfixres" = "bug" ;then
+     perlfixres=`perl -e '
+      use File::Spec;
+      if(File::Spec->file_name_is_absolute("C:/test")) {
+        print "bug fixed"; exit 0;
+      } else {
+        print "cannot fix bug"; exit 1;
+      }'`
+  fi
+  if test "x$perlfixres" = "x" ;then
+      AC_MSG_ERROR([
+        Cannot run perl
+      ])
+  elif test "$perlfixres" = "cannot fix bug" ;then
+      AC_MSG_ERROR([
+        Found a bug but cannot fix it.
+      ])
+  else
+     AC_MSG_RESULT([$perlfixres])
+ fi
+fi
+
+# 
+# Now setup the performance counters
+#
+AC_MSG_CHECKING(if performance counters are usable)
+# Create a C file from src/perfcount.c.in
+rm -f ./cycles.exe
+if gcc -DCONFIGURATION_ONLY \
+       -x c ocamlutil/perfcount.c.in -lm -o ./cycles.exe >/dev/null 2>&1; then
+
+   if CYCLES_PER_USEC=`./cycles.exe 2>&1` ;then
+     AC_MSG_RESULT([ok ($CYCLES_PER_USEC cycles per us)])
+   else
+     # Print what we got 
+     AC_MSG_RESULT([no ($CYCLES_PER_USEC)])
+     CYCLES_PER_USEC=0
+   fi
+else
+   CYCLES_PER_USEC=0
+   AC_MSG_RESULT([no (cannot compile perfcount.c)])
+fi
+rm -f ./cycles.exe
+
+# If we are on Linux and we use performance counters try to get
+# the processor speed from /proc/cpuinfo
+if test "$CYCLES_PER_USEC" != "0" ;then
+     case "$target" in
+        # linux
+        *86*linux*)
+             AC_MSG_CHECKING(if /proc/cpuinfo has processor speed)
+             cpuinfo=`cat /proc/cpuinfo 2>/dev/null | grep "cpu MHz"`
+             [procspeed=`echo $cpuinfo | sed 's/^.*[^0-9]\([0-9]\+\.[0-9]\+\).*$/\1/g'`]
+             if test "$procspeed"!="" ;then
+                CYCLES_PER_USEC=$procspeed
+                AC_MSG_RESULT([got $CYCLES_PER_USEC cycles per us])
+             else
+                AC_MSG_RESULT(no)
+             fi   
+             ;;
+        *)      
+             ;;
+      esac
+      # Now set HAS_PERFCOUNT
+      HAS_PERFCOUNT=1
+else
+      HAS_PERFCOUNT=0
+fi
+
+# additional tools we might check for:
+#   - gnu make
+
+#
+# -------------------- GCC --------------
+#
+
+AC_MSG_CHECKING([for gcc version])
+AC_CHECK_TYPE(__builtin_va_list,
+              HAVE_BUILTIN_VA_LIST=true,
+              HAVE_BUILTIN_VA_LIST=false)
+AC_MSG_CHECKING([if __thread is a keyword])
+AC_COMPILE_IFELSE([int main(int __thread) { return 0; }],
+                  THREAD_IS_KEYWORD=false,
+                  THREAD_IS_KEYWORD=true)
+AC_MSG_RESULT($THREAD_IS_KEYWORD)
+
+# Does gcc add underscores to identifiers to make assembly labels?
+# (I think MSVC always does)
+AC_MSG_CHECKING([if gcc adds underscores to assembly labels.])
+AC_LINK_IFELSE([int main() { __asm__("jmp _main"); }],
+                  UNDERSCORE_NAME=true,
+                  UNDERSCORE_NAME=false)
+AC_MSG_RESULT($UNDERSCORE_NAME)
+
+
+# ----------- some stuff 'autoscan' put here --------------
+# (autoscan is part of the autoconf distribution)
+
+# checks for header files
+AC_HEADER_STDC
+AC_CHECK_HEADERS(stdlib.h strings.h sys/time.h unistd.h wchar.h)
+
+# checks for typedefs, structures, and compiler characteristics
+AC_C_CONST
+AC_C_INLINE
+AC_HEADER_TIME
+
+# checks for library functions; more autoscan stuff
+AC_FUNC_MEMCMP
+AC_CHECK_FUNCS(mkdir select socket __sysv_signal)
+
+
+
+# ----------- platform-specific code -------------
+# $target is typically processor-vendor-os
+case "$target" in
+  # linux
+  *86*linux*|*86*freebsd*|*86*openbsd*|*86*darwin*)
+    AC_MSG_RESULT(configuring for linux/x86)
+
+    ARCHOS=x86_LINUX
+    ;;
+
+  # Mac OS X
+  *powerpc*darwin*)
+    AC_MSG_RESULT(configuring for powerpc/darwin, which we treat like linux/x86)
+
+    ARCHOS=ppc_DARWIN
+    ;;
+
+  # cygwin
+  *86*cygwin*)
+    AC_MSG_RESULT(configuring for Cygwin on win32/x86)
+
+    ARCHOS=x86_WIN32
+
+    # override CILHOME; even on cygwin we want forward slashes
+    # sm: I folded this into what I hope will be the only
+    # case-analysis of machine type
+    CILHOME=`cygpath -wa "$CILHOME"  | sed -e "s/\\\\\/\\//g"`
+    CC=`which $CC`
+    CC=`cygpath -wa "$CC"  | sed -e "s/\\\\\/\\//g"`
+    ;;
+
+  # Solaris
+  *sparc*solaris*)
+    AC_MSG_RESULT(configuring for SPARC/Solaris)
+
+    ARCHOS=sparc_SOLARIS
+    ;;
+
+  *)
+    AC_MSG_ERROR([
+      Unsupported platform $target -- sorry.
+      ./configure supports these platforms:
+         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
+         on PowerPC: Mac OS X 
+         on SPARC:   Solaris
+    ])
+    ;;
+esac
+
+# Make the object directory if not already present
+AC_CHECK_FILE(obj/$ARCHOS,, AC_MSG_RESULT(creating obj/$ARCHOS);
+                            mkdir -p obj/$ARCHOS)
+   
+AC_MSG_CHECKING([delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file])
+rm -f obj/$ARCHOS/machdep.ml
+rm -f obj/.depend/machdep.d
+rm -f obj/$ARCHOS/feature_config.ml
+rm -f obj/.depend/feature_config.d
+AC_MSG_RESULT([done])
+
+# We will use substitution variables whose definition contains newlines. The
+# problem is that when config.status runs, it wants to break the series of
+# substitution commands for sed into fragments based on line count. We could
+# be unlucky and have config.status break the series of substitution in the
+# middle of a variable that contains newlines. So, we first create a single
+# variable called NEWLINE whose definition is a carriage return. This means
+# that there will be exactly one opportunity for this error to happen (in the
+# definition of NEWLINE). The occurrence of AC_SUBST for NEWLINE must occur
+# after those of the variables that use it! And we want to put all of these
+# very early on, to make sure that they are not around the place when the file
+# bets broken.
+
+NEWLINE="\\
+"
+
+
+#
+# CIL/CCured features
+#
+#
+   
+# Set the defaults
+
+
+# Give a space-separated list of features with the defaults
+features="blockinggraph=no rand=no arithabs=no zrapp=no"
+
+AC_ARG_WITH(blockinggraph,
+    AC_HELP_STRING([--with-blockinggraph],
+                   [enable the blocking graph feature]))
+AC_ARG_WITH(rand,
+    AC_HELP_STRING([--with-rand],
+                   [enable the randomized value numbering]))
+AC_ARG_WITH(arithabs,
+    AC_HELP_STRING([--with-arithabs],
+                   [enable the arithmetic abstraction]))
+AC_ARG_WITH(zrapp,
+    AC_HELP_STRING([--with-zrapp],
+                   [enable the zrapp pretty-printer]))
+
+# Smalloc.ml is distributed by {matth,nks}@cs.berkeley.edu as part of Scrash.
+features="$features smalloc=no"
+
+# cqualann.ml is used by Matt Harren.  Please ignore.
+features="$features cqualann=no"
+
+# Now add any features specified in the command-line
+
+features="$features $EXTRAFEATURES"
+
+for f_val in $features
+do
+   # If there is no =, then we default to yes
+   if ! (echo $f_val | grep "=" >/dev/null) ;then f_val="$f_val=yes"; fi
+   # echo "Testing feature $f_val"
+   f=`echo $f_val | sed -e s%=.*$%%`
+   AC_MSG_CHECKING(whether to use CIL feature $f)
+   # default value from "features"
+   defval=`echo $f_val | sed -e s%^.*=%%`
+   # current value
+   getcurval="echo \${with_$f:=$defval}"
+   curval=`eval $getcurval`
+   AC_MSG_RESULT($curval)
+   if test $curval = yes ;then
+      CIL_FEATURES="$CIL_FEATURES $f"
+   fi
+done
+
+## Now produce the CIL_FEATURES_DEFINES
+CIL_FEATURES_DEFINES=""
+# Convert to upper case
+for f in `echo $CIL_FEATURES | tr a-z A-Z`
+do
+   CIL_FEATURES_DEFINES="${CIL_FEATURES_DEFINES}@NEWLINE@export USE_$f=yes"
+done
+
+
+# ----------------- finish up -------------------
+# names of the variables that get substituted in files; for example,
+# write @ARCHOS@ somewhere in a written file to get it substituted
+AC_SUBST(ARCHOS)
+AC_SUBST(CILHOME)
+AC_SUBST(HAS_MSVC)
+AC_SUBST(DEFAULT_COMPILER)
+AC_SUBST(DEFAULT_CIL_MODE)
+AC_SUBST(CIL_VERSION_MAJOR)
+AC_SUBST(CIL_VERSION_MINOR)
+AC_SUBST(CIL_VERSION_REV)
+AC_SUBST(CIL_VERSION)
+AC_SUBST(CYCLES_PER_USEC)
+AC_SUBST(HAS_PERFCOUNT)
+AC_SUBST(HAVE_BUILTIN_VA_LIST)
+AC_SUBST(THREAD_IS_KEYWORD)
+AC_SUBST(UNDERSCORE_NAME)
+AC_SUBST(EXTRAFEATURES)
+AC_SUBST(EXTRASRCDIRS)
+
+# finish the configure script and generate various files; ./configure
+# will apply variable substitutions to <filename>.in to generate <filename>;
+# I find it useful to mark generated files as read-only so I don't
+# accidentally edit them (and them lose my changes when ./configure
+# runs again); I had originally done the chmod after AC_OUTPUT, but
+# the problem is then the chmod doesn't run inside ./config.status
+
+# MY_AC_CONFIG_FILES(filename)
+# do AC_CONFIG_FILES(filename, chmod a-w filename)
+define([MY_AC_CONFIG_FILES],
+[{
+  if test -f [$1].in; then
+    AC_CONFIG_FILES([$1], chmod a-w [$1])
+  else
+    true
+    #echo "skipping [$1] because it's not in this distribution"
+  fi
+}])
+define([MY_AC_CONFIG_EXE_FILES],
+[{
+  if test -f [$1].in; then
+    AC_CONFIG_FILES([$1], [chmod a-w,a+x $1])
+  else
+    true
+    #echo "skipping [$1] because it's not in this distribution"
+  fi
+}])
+
+MY_AC_CONFIG_FILES(Makefile)
+MY_AC_CONFIG_FILES(cil.spec)
+MY_AC_CONFIG_FILES(config.mk)
+MY_AC_CONFIG_FILES(test/Makefile)
+MY_AC_CONFIG_EXE_FILES(bin/cilly.bat)
+MY_AC_CONFIG_EXE_FILES(bin/patcher.bat)
+MY_AC_CONFIG_FILES(bin/CilConfig.pm)
+MY_AC_CONFIG_FILES(doc/index.html)
+MY_AC_CONFIG_FILES(doc/header.html)
+MY_AC_CONFIG_FILES(ocamlutil/perfcount.c)
+
+AC_OUTPUT()
+
+# show the user what the variables have been set to
+cat <<EOF
+
+CIL configuration:
+  architecture/OS:            ARCHOS             $ARCHOS
+  source tree root:           CILHOME            $CILHOME
+  (optional) cl.exe found:    HAS_MSVC           $HAS_MSVC
+  gcc to use                  CC                 $CC
+  default compiler            DEFAULT_COMPILER   $DEFAULT_COMPILER
+  CIL version                 CIL_VERSION        $CIL_VERSION
+  CIL features                CIL_FEATURES       $CIL_FEATURES
+  Extra source directories    EXTRASRCDIRS       $EXTRASRCDIRS
+  Cycles per microsecond      CYCLES_PER_USEC    $CYCLES_PER_USEC
+EOF
+
diff --git a/cil/doc/CIL-API.pdf b/cil/doc/CIL-API.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..240ff49104c9dbad0bfe2c3753d29c2050316f9a
GIT binary patch
literal 226152
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

literal 0
HcmV?d00001

diff --git a/cil/doc/CIL.pdf b/cil/doc/CIL.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..34554fa69bf4297900ba175c2464caa7af62179f
GIT binary patch
literal 269328
zcmbrmW0a*^(zcsfY1^!{ZQHhO+h(P0+qP{~+O};}p4$8E{q^qAea6@4yw9&Wo-tR%
zT7PC-_Z=}8v7C?yH9ZXzBqKf@zO8`;J{K1xt(38isgoH#0}BHS{+|ydt%$jmld%In
zt%#Mrld+Jop{<cIBo7ayqmzTNzBQ!VT9mq^?YbCZ_pvH^8#G8N^mYt8RV*_J5N*7k
z|Lv8r37mCUJljAhpMpJ8k59!}h0Qp_vwdBA#^U1Q<45`Da)~P*kMOFt60m(@k*n-`
z2U%G_{pi&l7t|g@x98gD88?>=!S#I%7B7Th%*dw?(>zyp3l{I)(Y@OKyicwz;V|6G
z>pL5EExLOMC{8l(Q*qaf)7~R!Adys1;kNa!$A^{<vhcvp$#_oQ=l}`|34}v)MWrpX
zH*?-d9L1l>12gw5?J_c&ffN%4Z88|h?rIya>ez$&>EH>pCP-*o!O@Y9w8dS!UD1Ns
z2YSdz1x#XdTIjFx3c!O*J@@luqjO{^DhN1uLut<|wumSu*r{nPoVLdy$11gV)sW?x
z=<qFaHp;{L#9G};v{K@jGV_TGpJ{AFWy|+XEcT~edOn41X>=?vufgKegr6vy3u>Q@
z<chZFa2(vXJlU;;(UZ<5k6At+H~Q^IeBnj(r9jDiBKKe>{i+iT*Uy+CIXqTXPwN08
zl7SS`;_6G^_PD*W8XtV18swBUwN430h>zt3I1nsmc)AzW6T$S;jwO~SV9x50Ze553
z439j5y+wR7O@eLSKay>66P4A@T<7toBbvqb!0*)Xq$y{)s%q)e2WD;0ZK=X%T3(nm
zs=}r%?C&tYWwd?w#V_w?yqv+S-7QLsX(zKF`iyHBDw;PU>X)Vi!D7A-;r==@5N3d)
z$6FIm8I(7Xl6k1|V<Y?)d!T~bw7crmH`xg(acH~(;({Lw2Xt;4RP%Db0~M-?Mug$k
zH(aK(CY}|S_L{wGDa(GFy-SxaBlCtwlY|<^3<Z~y2c$9*r)p5MxUzd5)8b+f@G90)
zfB^9(bvoHw5e7)(ET7=5YGJCPmgpdYit1#eWly7z(OjjUZ{n-px6<A@>qOPx@G`Ng
z3e?k%GRc{#ek^}t9h%)xv3OG1EvhT^vlyHlWNEWktA}3Io=|-wYe>t98qs1nyAR}c
z(40mBjixvY6uykLXAvoZUzTA{7R}|{#Bz-pi=|7N+ODm7OI+{GT<T*m1J)FhwpjyP
zaz~)~Xl9u+_Hq?QB(g=&l(5WvERJY?+Y!|;p@B&Xt-mI!6i3C<qXN^!5X7~PPG4K8
z?|o{`xcQP!Jttam&X%&83+FWx36<H!oJgOvFimJsWn?t-VhL~p$6Z$RbFMD2ez}&Q
z+nND_E$%Cq36Z|83X&;yv=EMETz3pccJD=ID6Tq@lp@AVvV$KO9xy9aKW|n45RkV<
zAkLNA1t$>({CUZb_DM_xNXqVf2njrw78ipOsAJu2_Or^4@iUz}7JyS(zG0DR_xNA|
zZ+9X|>-(LMrgH1Tq=e8>5pk_|8CF3uqYLjZpMA<s$95^kX%)m2eadqW-%;j=LeSBm
zo;{9uL-+k!7uxC0#{Ihz=VrPV{&AT(R;xZn_8boMqAV~u>TYA_I0cuaH(GM{;@GQE
zBE;9amFrS4DvSIvofke@AL|%Y)q(+N(i)ZLO`Y%U<D2n;E#P$W!dH)hWC7T1wzTNp
zALF%$ab+K1a;u)T8k|wGI>&)O$N3tRi$H83q&3((+KDkhBXo&mqwukxmPj0&<ID!H
zf9ihKnV{rJbiKW6Ju4ELFR)_|?Gl2SB*}f-Yj+$rV%<@-&2l>~1H~Got?I31a@&nM
zn@}_NaAqVVqCeMQ={P5E*jA@bxMJ`CFd=1>d2GEh=4_Tdfb4Q^X_Zoe;d{ZmdjEtR
zm4a;THSf2n%4wh_LQBM>$(%I6J%0-)Y%_|9v#=SIvH*f$VIF@d;xE>?Z7$fYYL+V^
zXBz53O#Q4DF0@Oc6Kki|3?gUCyX$}L{WVGm;p^Y!%`LO6R3~{hS%$I&#dp9A+EgVt
zwnEs)^`KH;0Q*#!OIh4frb!=*559~hZZ10`Gb_s|_*vCU7BOew%!-Nr0j^@+&0Gw!
zX%)1Oho!d$pxsN`<kuwB4!+ybBu0Igk6rnMNE|lK<kVjD%ceb{qct4R3C$D9IV6!Q
z#uBa2j^Ji5mcV^0qqRgh0Gm;y8Y>->qc#pp$h^urR-#2{m%}P(nd@#*LV7Hr-@&ND
za}W!bQn`*;0`!s%k;Oo_v$s#UYhgPJhv-1SAqL=sT0)`Rpx74<b^di#_&Sn!7OBn~
z{9(DsApOE}fVv4u4}?}A0s0yH3>7^A;3E^{80x6A|JR-NM!JtS3{iw_U7;M=Zhx2a
z<%E|B-kvd22p!^>w$Pj@N%%sg=t96$saI2bmG)ag0?9FRAxLd)6ImaCaF8wS7@3nB
z2tJ8`JIfYf1TJSXVYL$MTB9jT7Y7?HA3MDD@<Iz39%f+*?!1PB-nvzWdd6gi&#$%F
z;dH9jxhGO}_$2Y-t|KNa5R^4+nQ5eLbTV@Ga#)if)kc_|;czl}OfdcQRl%)yU-vH+
z__MYMwq|MC%q$1*bteOYB+C+-m2*F4N*K_a`0n;ml`)O#jxa$L5vA^CdJX4LLiOFW
zPHQq91GQ9y6?9QUe{N|sCQ!E_&*~42?>13z0M>$m-wx7sG@B<%V}q)$2|aXTbd@-k
z+gcsATNwnwz?HJCs!OyH<sLj6;h3d{%#C2WSzx1EU`*>O9@0V-`sQz>1v*7b0tR&h
z?^yKjo0)nYg=J!Yot8Q<+*ZKPF(VhnZl{VV9!Cd@f@#O-k)joBQ{S97WquXi$2RWI
zK$diL)<(K3NEEVmcpx`Q;|={95k9YP)ze{zz_HO0;~>F>dr?nEuD4E3PVYXA5D><c
zrb$SP+wkZ=iv;5{-?PHr)UZ@_<cw*7S}4ja-yQumTu@~ajj8x7BVfp2P2%u#IeSo-
zr1fHNs&f<v0aF#*9?2Ndz}+dKCiDDeF(H;}YlX2ooyPalprLc8wO!i6Ig2t1t;m1|
z$0A$s(E#H)n{H2%lsYH1#1W0<XB7=(2yy*vW_s3Ldx%GU-7;+uf%eY#xc3Sh5|cO^
zQjKy`shRA%zOZXn&QbDDfvUhHQve-P)0m<mv%1;`<y6JDlK4okTBmQ%Zx&U}ru{Nl
zeUwMzOz%CNuxBZwDJ@h!HanKX8ad{*%n6C&{Q3cXn9s1Bj>aTn5oq;7+|eiwa~o{a
z$vH|Qm>-?;I6NzXb~w1cyHfYE$(p?FHf9=NuA>a3*3tk!DY%RUN!LtDEPbl2b=x1r
z{Ei|iyER49Yp~lfNX<tbu8}NMC2O<i-nq*^0vprTJYe?y5hKpMNE&_Nc%>?0$TlD6
z%O19>k%?X@GesD^@$_|nmM2w*F}uLw*=ByJVM7oyW)MdO^@43K?$^z6VJ!#Vs>kEi
zOJsiVvMY5t*?c|<TFcXr-nsFYe*<)vuBG@?m}`#o^2UydU*o>?OS&Ov8;R)MpLt7%
zK5V)RPC)VgGIzg6SZYBVx>M1?i74^`ul`wqKQ<rECxVh_EPvXgf3n_@lfCtcRb|#E
zXKZ8i50?DB`puz`41eQMC3ibxd|EkuQ)5V4L0cOqV;d(&{6BzI0g_h1*wNP6!O++d
zpZ<SdNE;iO>kHVr;cL?Ue!<MnOvAv+%!1FxL{G!U#?Gb<`8$xq?+Ew|f22_OO|kg@
zNcl&AzYtjDcbeZU{2O@bnekcv*!ahi1)u#N%im;7|L5m_zh=Y#z2|>+FtFm&v;DPZ
z!)N&OJK_HZWm-80TSG--Cw$G{KSW3bpH|7(%?V%oZ`m3Ci1AnYe-Jn$9UI+$OW;Ww
zk_qd>2;J|hRt^wq#B*+ld^V613W@RB)pN<(Wn`fU01o>806=~kvpqbY&d<<(+Lf8u
zjhUyXr)gKGtPd^k*WJDen};1<cvsg~F|Pc`mvi2z+eJR@Q2j)$9kgGEY0aC!I;`n+
z6s+rHlAR+SUa_;atDsv+$xzVY;m3l@6XoX41Hp7}<(25?5DJ^P{N216bys$CHVvEa
z{;prO5RAp#0QT27TU{xDis!X&MKtDG^xW!<mq**rU#<7o&HS|!2}DMyXQ(R$L)?$U
zQT78w%IS@E$?m$^9-`@A9EhNd(01A)B<ApLgGBd`1v9c4)~NyCa>v2s7l4#Q*dQ--
zN7}O*`jvtU^=`&}`HHV9h-048z}X+Vmhr%karb-QPe^^5IOBx&S4udMz*-`-ETKGd
z?5<BW8rOGFi`!tXNT3&#-AClX=|MvHI@?(9lD8NnOu=eusSgP4vP3ToD~sjFJpv>G
zMJVUg+~r7b>F!kr2lRkM9ItOcOS+RFpnyx^C3a>%`!}8?7}H~XVs}npAdcl@r6mLG
zu8&d!m;{wYc}g%iR(C3Q2?Va*?BO%dA`H7wHbPL`;=xn(!dQ~AR_7|~ddjmNzF7&t
zn<G!D5l_xvCGm}bwa6>=_6Cf1W4dWlg-m|985?iMvV_A^@W0_Fb725}H{$FzhrhmK
z8&7E`FP0RbY`-s5GpYgsti()fMx~Y#qs`M}V7Z&uu(cb8VqXu~aqHsTV}0_`5o?SS
z?)I8pW;0o6AT5B|&23&;s-Q%SR9sZ)GQYuRJ+gieVt0=`m&2)v0?$)CKdWL?EYtXo
zf`g}|;tSGuy$yW3@fqMDH3)%Bf`CNYBn9GpRqA}eIBrRRarhAOI7|^W4ze>6+758R
zUz`&(3pQ|-5SN!<mrCH{?l?7<HZKpLORNPPWz-X)5Ffm8q=fwQ8q0{2R~kw9H1QzD
zdDd0X72Eg?%EmEP@&{`6t&X$eqlX}PBeIc*oM{itoEsXce!CKf{oADBv-%KXk^f=P
z2wD@7d$NF2LR0X7;+f}2Gz#D6x6;J=M<lANr$nRDb{W3Fb=}&w<n?H`+-l;lI3mw*
zTMsZrpH(94Hh8_sGK~f|m1}P?(#3M+_Z2M2isMJ)#K-iM{4|&OgJFhN$dDv#S&G|V
z&W;JMC|kgqK~R`Ku8$LvL^)pE6Y(cSReJ3kbzn0FvzO50fkv4Y9!2v?*O%8kw88*M
z>9L;>hq(za2`7H&@9w3#Qa&{v>RZ52d=Lgon1Uu<k2$m#uj$01_^mVMmbq5HB{W2E
z&62@*ksAADCDQAc88EJ+=V7LCs6tDdN0x58AN>S*9|dLP<cBkLg*>=S_oHQ&9BChA
zTP`W&=N_-A#MBBb5DCy*8eJPb6Nev73yvHs6lcntr)>(UAj`YC@)DtBLR~pNeME$v
zeyJN4ef!GT)QSujSk~S>zsP(aGta?0A2RPv7U+@D_0I5}ruI($QO`dQO7EF$llOka
z5%QWS>f%w}3nsrP(&9|x&R@;f?(rpe&P+<)nlW!#S?Fky#tO5Z^^yFWs#*0B#nj*{
z2aBt4KH-WHKJkkCFj_H)OO?6+vg?KMRT$n-aIkC`3`I^_PAGw75sZx#Fp=#I#k9tu
z&7O-)#*kopERst#5cOJN_ROa}v@9!PL1opdJ>-{+Q`m0zjm~}qs%ay_NVt?C;&=jz
ztH=Uz{SqunARii$Sl-$5??&Y>F4U#RrFg3GHzR_gf5bg15`&kvnvZT*rjc$dCZb9r
zOLyW{U_Rm~qF!y3l$KsgE74K~K;Xl^Phw+^G0dQ+o3Jlb@7^j$PL((#X*jEZ0UZBi
zpv{v@7_ve)-|NCMmaPg+lRays)2E-?gL0`5`@m%oIlRAz3w7n)JRW03Y*xP`lL!=L
z%lOsMbwjxz=}EenIye4o@U~o&Dw1vHxvdhl*X{jG2#aQvQ3}w2wJHYCJf`2_y=SpU
zS0_we1iEFLt}V!~IG40+XDzkUS`4gM4tf~AF9#B0-~#V=>P~FuzKDz^Q3b=<=fpMd
zR{AqVgca8h>aln57LD-H-$c*Je&~Qs9(F;K=O-2+?<TQ1vKOT-^k-I%`nKUd;Nj7!
zP0w>+QhcpK4#s-8@d3c%53CTi>dPFla{IkcNM>MH1Yyha^kNkO+V|B(z4c0wGOUcD
zF+^ziRuyiu(~3%T_1I3~>?Xzj5lC{NSfK>k1Rm7K&MmjSF0ygtGoGz|L>a<W%bN)c
z47HXs-syPdEu-Np0=enRKn~{iw<o(;K<LziS#^R^qC;`#^@h6`y*^xL6Ei5Ir;5kg
zwNf%k`bIV};p>y-AMy%^F|S)tI<MU^z6{nDPddFuaY&;m<;d(xra<dVeQ*0BLE~}=
zOsuuFDlrlhPZ@Wq+6a10*@VVjThf)nw4KRTRVWDZEE57|UX{4?KaPUoig`CDY}LKX
zpoXa1YVxC<WhPEYCUA%EEo9^{8WNQ$>Qi(W1%m`o;w2|FcS9+0q5=48V|9?_3|ttR
z9Ipy`#oT}8pA5NNyv1c{9)d?!vns?uHt7Jbx2fMMU%AW2YjEDEF)z99ivDyk!8g{q
z7q$#RY06NqbK_yiq#Gle@6N8%6~sBfA$e7@MMRyqZbK|uMTl$!an+m=lqe9+l187y
z$>%56kSCWmFB)%ceWD@~r_c}antR<-NOY$LnDA(e9e0!%2VE`;_m*hw&`(5Ze&@=`
z?6~d_6^>m^$oN%zBar?gfl`1QCXT%YSV+1TEVT*E07b|>q_8wl6QODJmJB@lsRlX}
zAq>p~A(OGMTJQFY4T2=1SEH)O>kX&{0V|q6!3<um4A)SWRCBP#zpubAI)pF;7ydwY
zS{bqiWh1IMPQT<G2=OZY?QyY870HR3k&^rp2IJW)bF$$PzO$!U0WafxB~MakCSt=%
zfwU)SR!M<uwQ;VIbPCdX3UMgHXjXYwaAchA9=YPOGi^LL&k0LF!r@I~e~(}a30X}-
zT|1dwwM>GRZRcB0B?h_{NQtdY=O@uj1H)LYgp3P|#CZgp_9M8U&)H`<@Zq76UHRHG
z`}05zb0a9Djp@!-w}Vve2<8~N2+NMdltcY5*p<f<#IGZ=m9wA@+~`df7QYApaNyl6
zP|D7Z`C<=Eik+;3RNs`V1(&AiOlRP>O`Mf!W(<gD!g{%t9khu6caO*gSp1Sw#iDO?
zJ(@?J*9Y{AiRcf^>rm54^~nhe@<Rh*V$W_j2eU^(K;jh+)An@Ud4zHsGBM7SIp`0H
z!gPx|D&YX(=iin2>wod<^(@dZrHSx?@oUVMs0l2FN}Ns_F`pwcAY85K(V026)wcL|
zBiC<(x=A<dL5-mGxVB>Zp3Qf_p3*f~%OK3CXE;xwN3XY0`F{*95}&1((f+Wz-xTR~
z?%bH`Nx4{g#$-Gniu^XeMCwjq6POTxbj4ziys|FE4&@giYqYX!07F701I@-;zz7TW
zZso0<4=G6?-u`*a0g{U{HBqhCW*uuQXeMU*de`uyvUMX+nr$Lwdzr0}p7W^GBIjN4
zOV?%P8XJ8*`|R3+_BFu;5AdNP-X)JBSO@GOGOhDI1UOrvu^g|3)(ZuNHL(cU2%Gh>
z4KdYiJ>0jE1-3!z)g*E(U(v(HS`W5?`Bf+--+PZC$Li@7^kKz0UFUsUSs8MgP9~3L
zVR|;9i(Dw%<3*%|rTGXD%(1c?Ve(g7o>yu{VqYh_jB&hqB`_zTn5)+r@~VvNfj4yi
zi@Wuw>H3U)49y}M7TL)ZFO364^Q^=>K6ph{qOkT6X4FR<tHkP1SLNOW2g>j-_uH<@
zDohqno$@S~4mdwb@1npr!ifVsZ_r3XRn4I?XG0ZxH~C+*fa39sZP_*If%;sp?Bb_G
zc#5W1xRTOQep~m}&PXNZ51cjj^tubJ0A^7gpCNQ3r|YCp(tGxqd_@NGWn}4PO32il
z0dt0_vcx7rR}oRuOCEx6+Vb>~J`YL#!<i)%qG(nnaszd5p57JS-4Rdp_GrQ#R7pB|
zKZ>q>TEDJ(1R-75{#{2g{Y_T<M<Mm6@c0)c#qbYp_5WW={TbmeG4oF?^*5zN&xFtL
z|5GV3{#~g3)vI7-XZmlIQjxlP!a570PmXTh_=JKosuTd%^AyHNm?Dy?3wJat$}ymz
zJ<%|7S?mJ#ug7&XGK)br%_iBwRkMd%XV#a?si6s063qh&S*iNgHq8?<#WEI`xRA0r
zlBI}@N87%~bJmG%TOY62BO~+b`i0?$*yIgbY1BmR9<9?{jk8?qT#Ph2v+Ea5EB(g!
zJ{+3g1boofx5x#mjZ;Y)A!(z#x7MP%;qDBBWcyq4Q(|X(_eAdZ?#?!KRJnJ+E;uBG
z$lnM?Na7}wz)0*qfLug1M($psQeu@!mCPCxHI47D%nY^H^9fwqhyrsbxZ^_4Y$Q{q
zB7HAbA?BzfNW-)7Y3E4E4pUAxepM|3Gu@z39mI=7yP6RsgcbB<s9G5ar!srj-`*8D
zLut$-bttmayje&m4pbT!ZCQ_rj|Y-3C5q%ywFhT_*RTDa7_Cm#aX7Al1x@XHU2*3>
z6y@n$cz2S9zMYTZ7m|Hbd<n=Y&xaPiN7PF6+3&P?6G?UM<^(6@Vu#H1rRNM?+D#?$
zXzUN~zQg^PF5b#*z5kemB~h%LG9Z_S%DTb(@bS4(8|61-q#w;v9LR|}wBbGMsYV$x
zbi}nIMiT%iJ+li0wJP#`8`<=x_=S55*;9K=!cp6wsYReiumGT$^%IIDP_;tb7S{NO
zsLP=?xzfvnmlL7Y_2w@#$@;5=W(2wi*>)4R^0O8g29`veb?&t&aCy?cBuf@BbbBmJ
zv6yM71l9>EL_w?b?2#)CrK0FS)u@V`WFwnzV07o{%s=~8u$+V{O+oy`T{&5mtOqE;
zW%MS9eXGY9R7%kFV5~V>&U^eLNDx}%_{9a+LAO(^L#_5-iuSHKo8y7<z{1%U``+_$
zK(l{A44d~cm!}T>TBQwScaBm;)%bGJ<cc!8{ecFX{R_c%R03CI+cSMynNvOvR%dcE
z0%j!su6l@GB!_m{j9ibjm4v{2cWnYy9pD|EKC)Wz&T9QdIcUO6Q<?jX?cy@@YUeqY
z!s%uTDw|o~EKyG{AltTJ5Wg32dC6~k5X0VDk9H7=uEGcZb&=V7rg{un<LCmK%s+aT
zf>B?_$wwF?ZhHt|OPN|B8fLTn;YVl#uWq~clyvtqne7wCilK7qEo7tYhfT%Q5^ciw
zJCc_zTroNUoDY#G>f#VA1pGR0NeS`^5i`1B*gZ)`3u0ov()MypTb>v;M7$|5lh5)P
z<pz@0lG@>$C`;a8`_=_6rZ%t&%%ckbo?s+_1OUMc!m|yi(z#ur8cJ_7%w{8Wx?ml7
z6m7}jjjcKo`@NL$cUpa+se%-TK$|6XC<Yom-Je77+{3XDMhw*mXPlrFiVvJ_M#z&>
zLo*HTr_wiwFt@Mb7(~?g8G$|N*v;gmI3q^k1$g|82s@-b7htuXEpO+w{d}e{ZCCCl
z`b`phT9Qk0T-Lbd7%Bc-B(v@$72sNNdw%4BAb1zwH|Vq~y;SfSw~TY!s(a7lPS=4#
zXm>3QqGo7{{k{{8_D|B!1ispfRS>6>gfWmC@sK|AJn)cc8b;egtr?+t$)8w`dz18m
zq~y+WnzxKb{tO#jchjBFl}Fz!TOHj{fqfS%Sh}$TvJdsvA7bBO3hY1Jl3y7jS<Sd{
zU`10CAGSKF0Eb7eT020}WQ+~5CN434W1DLPVjXqB!oX?XvqVK~52JP5!AAQIEkEI%
z9qaT_CY+g*26uC<peESYZIj_!Yl(zbltNAek~aOqaICNW9AxyJ)3kXMIRqmk+As+-
z!y}{n+EgM+N?6^D1k_swbje8mM7!X+#aHxbCf4_9?`!l-9%ROUM}hE|G)0EJX}~=I
z%_{a$FR%g=;5GU^rKj^)<XAsgvDT$AF%N{C9^DVv5GhSjUSUm$A3Yyt4cf3ko<kZD
zGO|sEy*Hm-U*#)ZzN$}end2Z0yZm5SO-kRC8U=$>SykT85SU?4B@zC0XJ|l|-XpX6
z4dW0UzAH+h24^^VJw;f#rm>zvCGdRVXd-evS0-Hg$k`<l4j-k;33*-d*h4ot^A%fh
z8ypm>Pgz3kg)<zL0@&XRPrwR)jCH9rL&1Su_nb~GSEiGyt^wC@%g=y)Tww(yt7w!`
zYYJdK5ix9-C-=M0clLa5p|KxzBzt}Xm2J_c>S=UC{wes)vESpUpm9K#!tc_Wgxr+a
zs*&$OJ%X&Y#Vv+0NDJ-i5@q#DBqbE>^Zn3OrrUEj><xNzcUMya<t%mId92oTkb~V#
z=x2hB3eVI#3-d(7ORF&%yO?EV>}rl`vkh=ur+3D4ybKtLR?r2O_CGh#Y(Bg6r^y$>
z1$wZQMa1Cgg(eAfGvC1y-NlV#bE8+pSX`>(Vg<Qa>@H?r7{#TIM~>`j=)ykQtQ}RY
zVYS_TJQ6F&!n|>38?x}>-t|4IaR{NIy}z!2SY3D)VqY_60y6te<+n{O5+*$~n!Y8K
zY1%U|v@b$J!iYoM&nM0}A2MxEnBH+y6fm2%)aE9KM(qX#Vqi-$n`wW+)oVsc%34WN
z_;F)hMKgT*u%+7{(N9>$=Z2Se;>dE%SoSX+dzZkP(KDER-8r2f<>x~1BkiZVvxeo-
zjpsR@O`OlNAN6;8xD!Mlo5QULvbRJHhh61_mcMW%e%>r^fu`md>kDBK-Ztx=wgCn<
ziwF2fx~VB{M3j*jvF-dSkrTaN6$GCpin%XfT#_As<W%OFCS!#`Np02DVwT#tHKp>h
z8F8`?k{=(>cH6WH$l*W3CC+y6d>?@(8Kl6F1aJzZ<IMLQGcenb(TESMmV%x^6Fy}G
zd#En9p20&GU0zJBMo!G>t%UGOFS`v6u;|739*``R>Cx*piKyjtyEz3?k45v)Z$w@R
zP{QZJfVC!E*YR?{*Rnk@^hTid;f6qwVS2j<$nl+wh&5s}Sb5C=wD<FE?{la}B%mU0
z&qCsEy&=>(0qB%UHky<$0&lxJ(CBMJ*ufa_(pc;Juo-tBdMubBG*hj^>LfU!zhOTD
zSC2xu@aqrKAl0>$@8`2_p0oOhf~Q8={$`vtkRZ`$Uri)V$)#-Hwu63D*CU&K_N1ee
zR~HlgWX@~QB2H@>Nr)S&Xu0P3Fcm?HT|D<Hhe#+);Nter*PKLIuY|VHQRacf!*xeX
z3S&<5@?5bp6_cI?IuhY~Dr^%N(g7**I(_+W8jNb3{l$7y4I(jMD(JN};zbDve7#X8
zmgQW?6jIA;0@|W{9}i$oB2YpRgzp%SQ$s+ez1<X;Dea|~Sy1q53)Zwu?b}uxG`#vA
zv)eM!#)edeJYxjR=dqkxXLCb1m^nlE$wWAc1S0&?k<VeXIMHns4s9kC*p+h;!DZwb
zJuD+dnH!0zWU+Ux086*Q=DEWm{XJ(FkNXlg;YIGfGDba`7*?JlUMgJdA~F;OrK_$N
zo|rp~=a4JUbP$c;{DG)UMk&>33;ijzd@_j0GB133Sj+mY1`=+l2ixt(KFtZX<p=t=
z!6;ftyYz@}T6NUt+%3^_=n({7yeXtqbiG90DouCWk=O*e13y?JhYSwCm{zgjA8b;2
z8v7l}b2Ps+(lqNfLrigOJuxR_N!L%}I9VCPwIQWvX*bwr-EYD#Eb8m{Lb@1kMifRD
ze_osqmzm9eE8@xIauerqjYXptKQ5*P*u)QxO4z(ebH3E&{Z2E8VZ<d5j*c;;rRxU&
zMO)Y;Q1NeCfboxx$X`_cAGN@rX#KBR;LnZ+B<=q~3;Yq`udM&n0>A11AMKHU?V$Xv
zvGUJu%74{CVf?$)`G+o`XJ=slZ*{?tnr6Z}6SB{B&1k^@k;b{fm`Mm&dy!yTvdfB;
zKOk;rSc03_UKMTOY0a?~5$UuCS_qmBqIPs)!Sx2u>*3ze)VWi9*dzs~dL`*xVZV40
zDUFLjxsVKM#diKsbLy|Um))Z#%u$nm^-B`^F{+Az_6?_|lul%(v|5^}PQ8ZAX=9}n
zMGWr7`L=oni}QN3+OquSy{~OUbH2S=gRl?4p>xQuGX`6zWDWk7-pi$#(GHxCW}gCQ
z<@>pLr6T#oR~<(Sxo#M!X9Esa36UNdMIeRJ52I|%JjD#DBZY7(ab#UOUa4b^^B)g2
zu&vZKimIHrw6|te(uuU|h)270SK9?AVZpd}A;`Vwcr08?-#Qo6R6DeT`$rH{Y(HF>
zn>)Bqp+-!cL@~Ul#3UJOb4DYl`5e&|bsT%=qE=!w`n+0Nwks>n>MorKoGKA%ou2{7
z+Dq}lC2R@jplZ@Fz6IF;U4~|Qtjt=$S~c!>6CuSJE4(?fOdJ|2??|8?bc)@kO>4VY
z`@oG{K++W|i$B~AmgshfOpM^Q93moYq5AIPi7!|=pBlss?c4!1G^lN2RSD42>0J(g
zDeAft_V<E46xx=QMWb%R33r4<3r@|PXNGN6j?{`7>?&A#OhoeK37=`jn$1v{*Fs)I
zhmfDh)s80n_dao&C1d-zA+;+8zcd<J4AKkviwk;PXDbk%GWO!K4#HEr3UeDOB}w)n
zU80opQ#zfr^|fvXwD3vl+71McAR2m(WO;VexS}ieu-LxjMEXZ5*G+S3oq~{2nS-d|
z2giE)E&<cCCj(2+1Km=&_p3Ws1}Cm@9arA#jBaa2>ksPtLc6TLO3mrs5O7AiGi?R%
zJ>^{#=rnA1x<j4MF_lNig7d2<NEWIKg;6=ni$XM)BCIKjuY!x%x}%u3eFB{x-sZhx
zJ2J44p`q<^I15YALVc?(vxpo?ZB9U_*z3jKQih|<!R5!Pg&4s*qG7xu#ndVkT+eGS
z;c*ubz*|O=1Pyb{;QPsbGcn*UDO7)V7s&|Ca+tzX#Q*G&<E3g-EBTJn4Lk!Kgm5j;
zwpAj&Cj4>+vBh8)Jf{k-mXP3htn}M57tfu`Gr*mRWvp%PujICbi8po2yDy_`jn7wt
z!)fdoIGdXQ?32^gyQ`D!S2?%i)A3x<n5L~-HnJmRLG=V(DA7xRqK)ag)c)bYWDJKd
z6<R*NY8lwA4kn~G0ahNs4z&H|#kF4~4MxFH&V-+)xR`YOE|?)5PF;^AajW1m5{@07
zNPbqA@g1F{nWx52wSmLB?ZTxk2kRLovn(tXIH&)xFJQ%H4U=|a$AzcZE};I!2Bi~t
ze+&~{dT*%t0gIk|)Kj&;6GRx^HjI=u?)jz6faNGS2(ehFN-9@k#ecB9ip;UPRTJ%g
zhi6m2QA;e2$eavq?+8P{EU%ZCWg%+6ne7H6@E$_cKrm0CAUtz1*Ix)>=uU8`u;A#{
z`zj02>sk)nPcr0TFUUm!j{2QZ#WF{)<#mS%-8|yErk1^g32~zdgI!v|Sgk4IF~pW~
z5VPSV%tbyQ?dcrl^b?V>CtN6H(GH~B;^IPq@M2+FR4TY$OI^}W6ekd=&6V4L=@RWZ
zl52J3LP#+tDzLd&iHv%xx3dmT`1c<qZHN33B!Ilid}4lly#bSIo^=2R*F1aVEmmwL
z!4ih7jTtX>W}hN!#XOIEzk+d$sq~<5I7c8pJQOhpA3Ftx>V~uMyAj2pdF7R{`DOdM
z?K4x4cNo9jz#xv)Z{8t*O&=*qTS!=Qr^$v*Djt?{=_|BGNQc_De|LTa$q9TS%W&)G
z%cj(F-z0N<N$Cy^h4K0+JYq7uuN^r3g+9oHvedrSCxhj6%H`vPzH4w9JkwYZBMW}?
zfVTxzm$<viKEBVd2!alExd`fdp;>MlyqXO$Q;IR9$N>R&@&$Xc-i_>>1C-o_k@my|
z3PeB@RrS8z3lRD!q%;h<MU!eoo3M&9MiMGZCVYIt>^&TOCqnV~7&`{nlS<#D@O?8&
zt<hJ8AI_1%W$R7}oExVr(1B0z`ugPy?bkpdUrTeyNpl2+j=>Hfn7Q9(n*N*J1kx7L
zNZQ#k6A?>Q!b!D&^nJV42LLIVnb+gp6$&pv-LuKm*YP-5miI4H-9S6zuUGuAx3y$E
z7NLj6Ly6Lah)F#{FGSY|le>|SYuusi_Xn%suW}Ow?r|6j7TYQEI7!`~thD30Gudsd
zK8FAd6WFG_P=vzMOhNA(Je8m{GP<1ouJO%16>v;;MgTekmb1%}Fjp4wkxq-XIZ7-Z
z$}Cl1-M~H1+L|6Z?90;)#wYmP4;X3{rN$;tWG1adB^1+dHF~vBz8MB0tamI<0><B|
ztN7B|JA2fVJKB&ni1Mc_>s}dD+!*s3RgPoKl`!va#Aal2F3*3+1LRk!{=mBn`eM+7
z9*|PZt)qA^0Zs47^ki*TA<`(%Biwc!v??>24AJcrz_nPLxK<P@ivtd}<(0k5WwZll
ztIG{*j2){QgFi>78-+I4x4Rp1jX?7Sig*H}_;+mi`)u-m#+E-S|G!`h<NpkI{4cQO
z&j|mHEq}8x|4uOfVrTvzg!%8Vh4pWI^p~B<#KQL9V#^}tn8SYS<5i8^A(5&&ooign
zsY{8aM|sB_hNnYX8jz4YgMkf@pEaj0UT0`<p^&7KX?(dB6(TV1R`=WIz~beIQ(PPs
zMEuZz&F%<-_#BmHWmjV5CzTqPm9Mss(P2{$RkiA`dKI|F08+Q8Kst3FGT_eR%%-yf
zBWdr?_W{`!yuj~zwsm*j@k4bXFTp%0oGPe6i)U8o!so_Y3!Kf@Zh5kBaA0w=bH51$
znT;wv`uOaPE;5<Z*?3@=U29yl;RPhts~uJ$>fSaRuPkZKD=Fqi{VXNQ<0`hZYKGD^
zhevj&$AK;Kgw4M(=auLwpo#yjkDw$PJ!pY_N=2=iONp{7Q=qqx5&Xpv*e}7+jx7Y+
zjYy-!1@6)ah%d%pnEp25CI~*7zk=}GIW~=u(1cng4=r|5*HjUk_`Mo_4?UC!|D5O!
zrZ*#u5^1l<oUJ|Xhm9jN1+3Uf@T`_xC2D-~p#+zV9!ea(434Q$2{5+BlAR@+Z*G3u
za+S&|4B6@V;O2R1P#NKapCf;KER%F11#q509@<{9b;5Rc**DZSJiKnNB~{yu^Q3mJ
z>+*b1Dk9<eA={~GwM2pCGwKx(n(p_v(;y#Qbg_olWA{Ry2d^>X0o^KgxQho2>&69L
zhm}?I%07cLAh1|g<@I-}0ZUPUc3SCA)WSU$OgO&2u{6QfUwgIZM4P#k2>0r>`j6Jr
z<9CmVVI+)FOj&awKt)etsllrlqT-Kpst>UnbjtXu{P2}YNQk56*3K>{l~wBoWWlyK
zC9}B8bXRF*^W4bihguhWB90FMNnup{&50_&M=g3!Ot~(TsdN%z@J7iy-r2JDsczl2
zEo!)4fL*ghtof@L;a`11qA-G2&<z%%^5%~<r)4y)*yOscR_+bQBvJ;Q=9RzttaEH9
zX{Lm`E%j<vDbl}t0#~ff0VH8JAr=Io8V5g7*noOy&<93*GPi;a8+a7(&8|v^EN2D7
z!8H;oVrBzd#=o5FVFyVxw{;1gfb^tnhBPj&sy)c){#q0^_tD!XM%g3N%dkx-Ke=h4
zD8;Dp0;6bh>gLz%Hohnbu569cg``POAMY>Un>kjB-2+Hd+<*Woij+SJfLr+xVn`s@
zgf(a=Lwdp`A!WxEwJh3|=XxUVy`=@&rW885UxRQh;P(BwYr=~1iwk_q-``%PyR4>J
zla*z_k!(E65jL}u0)HG+@VX0>Jkx$Y&z^g!y|f8~F2UO!b{M%Pu*sppo<q`SOzV|6
z4|29F2X`bWdHh2j!cJt*Wn4{U>^V<n9yM9gBo0|*NIoNNcT^76Z=nfsZl8?gskty7
zKQcNIi*Vp3BW1JMl?tFartH9pfpbz1_@^z3<Q=I(607pq^xdJ1HK<k2Apf_U3$|eM
z0SWij@|C3_zFp5Me${JQYY)E@G)IM-+>!JoNBduLy&%l(g#|$qhh$EKi4#AgK*CfL
zE;`kEwoJ*gjK~a5gSem{lk8LA7yBM0QJ7~0v~p9mE%395ksN4>dc>ev1t+OAdIN<h
z^Tv226CRZti#?Sn0tq(ANGMv?ELK)FLx($1_LXJ_Jr0-pnrv~FlcrKH_6gk4GAW}F
z-+2R3GT{z}5U{eanXvC{i_z^dY-sPE>T;>qyC@!x-jd@WI+Luii-Kv=Tux)7(lZsc
z*Ui4Oh{YxQ+iPuC?+aZT(iALt@!PB{j2$Wc2rFdw^TPBj)b}{;M75@!x7<-*y>L|C
z4Qpfggu^JQZV<m}*{Z?v>06yPr`Bi%F>q7UsYW&!`2_|^FEN80Co<6!Ww2Zk^`zmw
z5zh=@(J!Cl<wzpmiYDK+FHPNNi9$;;qhie7BfbAEmBT%aW>r#i9AxW_<4fholHEm>
zhbd?kg~McAeFx%{?0Sla9K9&7MZ@|2wCnDigUUoiEg<NPz_|alSsTqQU|fHz_%ZkO
zRu`Dpb&sr2xT-(w<~==?L_7Uen#8h))!U0VLJ7tAS=(~XCDbH2o0UlFJS#`j%4y`@
z3HmZB@ckQUP$#1R56*48q5YkN%B6ZwR_3#9H9D9pi&ML|$W%nRf1)GuB}c@2ZK?kg
z24d-c+twwm?eHudw9kHi4&{ovHi4j3dHn#T1J&zsOST_7g<(pAyQ6?vZW$SFZ|b5q
zD#k9NU^NU9D^kO4ft^0pvha{FQK^PjHvK%%u7lnIehk@QZv_tVdXIaZ=rgiLCzx~4
zxg=!sr6~Sruzt)*ZC8F^=C^a*;?dYUv~60-0&mXE1*fne#*VnC$34fyT{@#4Jf8ui
zf*-!|_}Wv#?eod=<w}d<?%jZqQ*7F!XZbMT1<tch`7y&*f!fShqd19e8wX*|gka;Q
z9##bgth`pgjq`isg@gl8wN@roYH4%#6*oj6o#&zlJF!@4SO_m(d>{06)Tp7cXjOsu
zp!2}t0Zrss>5=ivFG3vaK3DhoGA=^ih+mtnAS-CF+z4xzYa#s&&KAvS)Rp!H3g*Y<
z@8Tpji6bZ+w52#SJ`OaE=vFq?x>A85CLmRg%QY9np{@9ik#tV?DR^6-UeEj6SH7*A
zC`##deT%wy)q3p*)E~m|lyv;aG<wy*nbQ>&ywyIRo0?WNokOy!bc$m8Lk%9cKXQ!w
z^4lSkdgpq(Q&gW-eO+%<V0SD4Zn-DZM^+^f5#h2gtNTW6#)}nN7sT%NYZJO$3(Q9Z
zDMGcYrts%e*@<1oIa4F7LaLCIV92~u%~MY~j)nIgi;<2(XQvkn>jyf)9uH~vJ7+;+
z`2!tLgySTvtWyL9JFmfvt3SeNu}0XPOU-_@Qm?V=KlV&tZA9H$%-`2?>lnf%Z|I3T
z2bP>#4KOOWu7Ysx?yXR`87X-B4!mUqioD1<C}BS%0l%m0d$ZYKiZqK4JnWoVjU`JF
ze`x?T;GmIAgUu5kw>=4K+huA>xv!)a`dEePl@Q^L5CN_)a*lLq0kNyUAV3rl@x2Kc
zr<fy_1@J3l+E;RcU`H+h^8Rp6uNu*a#jUEeTZTYvislbtiw-u;NW{}WBtPL12f_*E
z^`|iM&z3b@k*D=|GQ1?X&x5EefvH8}q_jYwmZ7%V^sRbOglLj_{8{a`1V`rRnXqc;
zS&lvh{lL0L*zTJRqe)~JhH>Dzf6>o;-WQ21@uU2$=<QhMOAUt)1pNXNhPX;w;xlUO
zR%g=V=CseEgF`v3c167-2uY(0ASBAJ>R$ed7c6LVLQW9XCq9lYjG+h%LwvamR=6&T
z^9vMymm&7wiT00);=kDPKNIaAQ24Jz`{#`D|Hg=8{QHFQKaIHm7oz>=g!6wzu}pvW
z7XLEeSbsZ?e?I^B3xrc@zsHwZpnqQ=d?AxHtP<;LC~+xC6EB&^-P4>0QZ2S-i9eYo
z?8uP$^1Q`29;=Y?ILSkUA_9a5=JCt*UFm7_)U_I~oiu7*#bYIi9^j&km&QHJi!EEZ
zfa?KCvTmsd@7{^ox)PeP7M>y0*E3G}!A8gJlfcJq<H`Vc!FIzImH(p*(@3f!j27l1
z?$F0uPI?L&g`$zjXJ*$W1x5WP&)L$dZ>DUET;=0b+Odpz9&IJBp+tsxefyc$I)6&$
zN3E2icqqW?QieBhze^P6s83pi9$SS!`TUb0>o-9`(L--ftpxvaOA`(PLCrX>(?oY{
z=wvirS)VyH(h;b}XAIzlK7yY}HBW)%&30!$xrCN$#e2)LEV$N6Q;zp`oIKF!aqVK+
zCioun4B1y|M%uVukc$w^0&zr}QAugDx<Qd;)IkHyWh;ZAi7Ox*Ay?l;;>H{Lx@2+{
z=xXfWtTcOWq;PMgq$}5I@Lo0ZQo?t3qJqRq#1Suk=9&>(y<zl2SfOh{H%b}O1#B+g
z!)FcbN)o$CGv;Z4fVyWsahYd|*}8A!ZqJe<`!UKg6m#IxWsl8CM0GXvwr-N8Zb5Tq
zSi&_$;8yxs>fO}4a0!X1AmW?Hkm7o(5q|dKi2(we2&)CrTlotC<`&NPE`(RPBkLi9
zmH?$FO*k~^kTi0z1D>Pf@_bAhfb#ncZk(^E{(!|Fwn2&eJn6z1p>G50(Ur0VU2j8B
zj{zpGdcp)l9xT1|n&ce7IKf$X{C-IuUn{lea4JoOX0HWYHDoIesl=LUQ5m+U9#O(=
z#(HNCDmKeiz#)5Mii;i3dq<;#cnn^E8i5q;;b<{?nL`k#G>+q^k{zq^azA$;Y0tv@
zx~G@<e3RI*XvmX0*tE4fYxb3WtbBag-_LFwQ`U6f=2&)!5cG=Ep%g;!lVPO-JlId#
zp4R^rLl`=QNFsnVu)ESd*K!`7V<Fc)M8XJhXh*Lff>TGEl9&PKJMf^8aU!ImEH2MY
zqX`g<$fljujewXU6_P5m6H}E2>w|M|7I92U?T6vRB7h;_N6kEOv;rTVm33T;VRJ*Z
z<-`G!NXU*No|}ow@ytr2GPg`q6vf)6Cwq^9abmD~rr?}hH8hyv0OS4C>K?-+-OZ#)
z<`|e~Q`>RbQakfC3~01ey&UQ+j01SRg`O3atc19`B7^;1C3Yp3&a_j^+nb2rK<Yjs
ziZ0PGk~S#c;{doi{Qb_#s>u{Fgb*d-DXaIlY$OJIt2|CK@_`?Uh0uiZCXHk`R?mqR
zXxGe*&BsBx7y+eyOj&0WF3F-EakT9nQmW@Wj$<ec5cYl{`7FARyPM+(IJiZAr6!T0
z^8(lkX`oF*o@nHiSf%Kv$L~$=2GjOQ^FQ^pI%q~Rrk>F8F(`{wrQFg6jj@vnB*Z?h
zqE&e{F2ZBWFZ$#+IKG3hFTAsFb{LleHBkcCW`R7Z#D+uBYu5PdMG2K)y&JDduv(U6
zOwW?d8?+2uLQH?0Hu0q#a1Z8O7X!^d*DSk5Bm=&e;sjI&^XkvX<qBca5N<aI{kCNr
zSKhqZ%^lq#X;Wpg($y)C%6lpd81+VASGEli9aKN&R%Xd{JMvPVFMl{JJnfm4E76D)
zIv!%OV_czRrtYazd_<k^snF#BK>%p5#d)R*TNR&h%jW52ZuG#8(ZCpcRowd`qz-}{
zp>4{75R4r#5EY!e*y+oWlE7j@!4Da`NSoXu0~X%qW1O#9Dpxo8OGmKnU8SL}s4&kn
zEPBNUDtw;#BsPq?L5*dZeeW}x61Yn<_$deCRXFT(#38BY*y~ADI(>uG;aPlJ#SQ3Y
zAs^?@S>=YXtZ0pQ%jet^!d|VJFBYL{#;I|xFN!NRP>IZ%bsqVNus)>eQs=a~qCi6b
zzRcbc*{=|e1*hvzqZ0AZ7ah|?>HPC<Ytz;;T`MHg;4wb+$$rSo)vz=5{G=yu|6E|C
z9Ao7DaZTKR^lJjy*>=P?DLYP$#O#cclzVT!|1lud@W;DM&(MZ!E2(i}2ZoL4h=}Vi
zyue1apAc!nnVv5!l9FGT!UL$@;CIqZ%T0LHEged}@`J3B8RzDxw|OJX-6cku_v#d$
z>W!hTJC@*cA7bjik^)19F?e-$BUXznirLX>IOIWes%1^s7(?6bz9!(9J%I2POEiam
zetXNoAM7zb;O)MNDQ9?4?c;;gvJN|5y7Pstc5#ZRuU8@9@LtdpEHaHD*zVfmd5%9f
z95^|(P74y((CbkN5stf;BpYaA<-OYefMJ1NUjO$R|M#}nf2{F;mdt;x@qbRl{jX~L
z9})f{i~mcF|L^Mh-_5sw)OB{YfBY{1{{OwMFRDn}?z6ym9jmsoV%B2B5fHlvHlLun
zWEj+Sm~9CATfsIGbAB@#k0q;|C-~|Tge8{L0WtR^_Yf1CdXBZl{dDnm?%EqO;zvV>
zAvxa+8VeGs%N*pF!bq{Im$??No^qmTBLYi0|LG6C6O(uF^K{@X1p=z{M}QlHX(UbI
z!E^<Sa>HYENBzZmXk-Y4?G$Z%rj4EVm6mPhyw^#vxR;N30m%FMY3NZZ4|RrgT%Ph7
zQuOcp@Y-~VDrx2vo5Terv*4+xs};l3lc&|HpIH7<T!nFZC*CRiar$IG+%p;Wo_V*r
z2c%d1X0SJXDIxOGAz7z+YG!Sqj{A_}J-%>CDVlhDNeMm1(RQMQ9WX=vt@ZfTCk0dm
zgz{$b@$sru%_SIv<zz*Fpd+F6kst(=j)$Pdmog1$V2H~bBenMjSr=Az?M|asw~)|2
zE`-MAsvZ&SsGtZR30hCP)0elLjyYmk$Lv+dvkT-|*1AIF0FgYj8HnWSe`i;hM&eH|
z=XO8AWdZ9TuTWuXAjORHGF3Ih;f+!GdXx|TPF2#$!klj19uWZ$dlk-5Ggp+d+!eTW
z)ImCFh|8!HV?^d^7|Ttenc#3}N>X8ki}77*!+${ZD)@<y&ud)4^D#26C8{CTkL&yk
zmbd#r*q^gfWsjPu8XmlW1-|eGuUH5Q3bw_4HxeFfXNR8A48*j5QERC>fiV}$Ggy<7
zscrGRot14o22235kYnQg`79Afr5R+Uh-`t{sfzz7cdnd@c?~sVVh1K4Bfn_7cWI7v
zNE|QTRuUp}-cOSKU`TtSvo{91`QQx`1#c6c2Z!6!+h1gSn6u1c8=C<J0L#CZ&M5~_
zHU;`8Q2P$u7j6C4RtTHEdo%|P*W1Rk0>-=Q1iImY4@%A5RjlT50qL(Cg-Sc(!E6KH
z(#(tua4b^)+gVSb{t?U`?qS5yW0BXBo6sMTV<L+<ml`B9t=U+b@SIp2u7vsFA2HF(
z7D|S;@MRU>LzLQCBs9bN4s2K=oDvn+k2f7|ctyJmp5a>Gmw^1IUZ}8rLw@Rfbcg6j
zfLX<6+dpK%5!$`trU0j~w$`5P9{B>Idc`2YB_A$ekOGr*D_kKANm=OX!q0)L3Ct~Q
z3Z6=Zq*zJP@@3`EX4GX^RSW=y|5}U@4U#O*7_bcNY5#1*<`bMA=CgNwe}{f_osgY)
zZm2^udfaW%1<RYRJH|ySs7q<#{p`eL%hnGSI%@ZRT`nxCs&VkdO-Ky&M_=L?cAcj2
zdTb#=3V=-W%hO{*_zoIbwY%ux{fM?4`y}vh=N;1@j{9FH&woDe{_V;p)Bo2yn@s;>
z^#AkD=ARM%%KFdq?(f$8|Is)9-Ff#P+<1C=w*Pv#coA*Fp+My3w;S&zKptTXD$?8T
z5Js8dV4=t^)`WJ63m^I0d507@Z&LjA`~U^aqSK*J#zm8k+g`Fw>)pfUc~6r*Xv4L9
zKjy$FPvUT#mlmXRLSemNlvb4)+%%td4JOl&MIpLVasCXgB>J*)af;USGF@Dbf&cc=
z>txQHbvinB@ChpC?9dQc;V@nnz57^lD4UQrXLI5S2_Pqlm80}y^K{ZJ+fkcfghVzR
z+t1U>(h@m0GGQSfr`I?*1!pheTMnIhh+1vI9;2uYxk2oaSb5(ukk4vhbDkkYhVO$?
zZ{aA{b>aydDa@H-(xe|w?hIi5Pa0l$)j|r}(V2v-@u;ZQHPnNcERYx>8A01Eg4YaJ
z4|vj_Fh@FUY3AEeNoX_sok0NTFxhgH_hEh4FE4`HCs1Fz@kE}2X`#hD#di*h%6EP-
z(T6EeJl8a@UOW4_AqFqtK}Ye-*OWY1iywH?wKFhDkZaKMh2KsdlaK`i1$H(-Zi}VT
zAsOL%NSloDk84*wXxqRs4d)OL?od`xUunQ#S%C7!fpn>7+L=#v`}8C4EhoNPi%Bhz
zuo26eeglb@#?M>KPF=zLe^`6RAX~I;TXUst+qP}2v~AnAZQHh;xze_6ue6O?_td-h
z?OXdqynU<c@0<~1{+JP?_x|<P+DN>I-DOYV<iD^j!?T})N8xC#7T6Up&?ZtBG@n@x
z2=TAYrV3&p6id2(5~<YL=|Km#(?=8Wvu#zj@6e|6(QhB5jY;1UaFQvXH5ni_-cTr`
zr=;_h@jn7ia}+pI@`kVToDY^8em%vgZQ@wWoBaY8CVq~%HjbT{`9a5<=L(#ze51p#
z84{ys(p}#Q9weK#P8UsMTIdW4ioLmlde5XR-p6*u?X$=}4Cy==U5W~TV~|up$3`b9
z^QkJ{-IH{O3D2++iaU@x25TrigfyUKu)hsw_JNvSRYcTYGvSBpB1n`Za8Aa%eTVR?
z+wt|==fnV|*MGAemAs_nx6?q>aHS9jVT&SZdHET`=QXgZHF~m4zHWYvcy`g0A?)I7
zoRzLBGrec@0lv2h@t!7Alf5CFoYLM#(bc>+3-r3XD!}_b`C7fq*?l~{JI%@q9}?cD
zm6yUPxb*y#2W;@A-Ry%funoHJQudC^wCDcReV_f^<;{D?(F5OY>vw-c8BuK}0cTWp
zKyh*1%-rYw;wWo6*}2X1*nrD~aGQY886p{XcjE8Ztl+2F4K&Wn^rFmak1Og{GxmCT
zir$E;reTxWpj@1{rio$E3hSBRi1q-ya?Hx@IvXqdkuqA|AEsTV$VOPu>oW}`_%^wV
zFhYw6`+lVOT5M)s>Emi4*A2hquttR;MQYZY2`^v1DB5{eJ^EPUAqH6lPB}J&e`r)7
zup4+0_|InlTrFA6!w&*_0?*x-#x+|HHNw@ksjpp2VHvlsCY_I%sT%gCOdF}bi<P*(
zO$m7XXcBe0044ClMfmhNbfNa8l%a~;aYQrno;xo~%Mklf4nZXb;|`G&ob2#wBFsb$
zAzSXYiXvm#Z%5wU2Fd+CqE~1XXY+7VE6_i3Hin0QF@ZKPwl!^dUjgy)?2281JiUe1
z5d#UxMjy|Y{+f@4;bIk3)`*v4>I(?<^vm+^xAy;$L^1!3L^1zQNz~tO?f(IZ`bW1m
z%fF*f^c??K`n9Dh8N0y>-+f(sBQIznk|fN7d6-Z@p#V%C_qP1Nui20qMuJ(8by0BY
zd)-Am5yL9&NiiQuk-#+I?sb1tIkk1aa#Rsf!9Av$`6*${;8prs5f&*%qEXHIXzM>-
zU{`&>?sneqtN_a82)$yS1B@q>4OY^c4>|d?>c-ogU1hiFEIq^3<4Cq|(t!N3+r2lj
z@Cu$ubfF}75Dy7DqUzbk?t0TWFwxf$bIo%pZqjEkzw2FPnD-IH_VQ*o!#D}STDo05
zu*1eztAv0eVO-g)AYbe($eJUEWeFOWq~wm@;SXS@DG7Lc|3jAiMl^-=B0AtvFqSy^
zONweX5d^l^3oqc+l%wpH$5w_(;Vuk(XH#>A@VEUv0rCn#EzV0s`v=kWtYKSstn%`b
zkp(yAm_IWPCt6W#{^{5*^Aw;1)n*#eFspRn0rxULemyCjc-7uwj8&I5II0G41-Eau
z7646512?V8x$sYW^`xSl%U;^-(_R16)UH!B$rh=>>UtbdT%rLoU%RvsvSWRp{qT=t
z2vVJ-!fxVHwWI~Mf%fa59E#=0_0M*rQ@(@l>66FkTqwei=J-4zA3MnYXE@t!NW|$h
z4zf36@(b-5JYidshbSjO+bymBolGIB^h70m|Ho{Fng|D&$KdgZl!iMb(w+@W0iCUj
z7|^(}({@12UdF?p6O!9|x6a!TvA;!Xm-U~#ijXlSq5V=MptbN~Y_O({2*zx326pK1
z*(r#Wi6OZ&Ma3%?TSN5t{6bwPKQ8m#kMF;+r!wZUpfYyygIC{*WaUYMIJw3s$}z+m
zjiUC!Sc5v^uSO*HN2EnWUR?VnLDT#p$ONh%zvgR$5IbdsvVog{QMNCNry3S=E+RjN
zGKhuX`~q?7GaZ2Zb#WAHhn9=lbvyiHVeYM>(K-O4eY*^dr#j;G^A%4CBN~zIm;+}_
zXT=uECMOiic-0vvvTITHP+hoVH9Xr<W(-f1Ih?jd`?dP$i<I0i;|9_*^7i;y4SB})
zAx*-DWrcu-Dh1;0cb~cnp1><&T66RSoT#VnU!_N8lBAftJk8(Q1~5Y^tz{R0mm=7^
z86?fwA4DUlgeD)W<JTz1OnU>&Hp1(E%L{Se!_H;JEWn{1YRtpQlsEKuWS1~$;fi%`
zxub_xX5=<nQ*GD-D=MAf)dulPFv~6z37-PHN!@KXe>`53B^GydyIxUIKCUnaev2<r
z6`g&~hhxSWfV*muEja<utipMnUFJ8k7sm9_-$CAUgGkk+;fFh|IL7stxU)+Wbtd&d
z!Oh16ajkgo>GtXka|~>FB(;|4&azvhbL+&h#Gqw8r1`S9$U%f!PKckH2o3RLO2+7X
zoVU}`Ep?OEE<WD42rRh*iUSj85t4ql=o3}<-mWpJn;PKCjS`<8_Yg>Ni|7#N$)F?~
z%g5h9LR|Z7ZhnHm!}+59{et~JVt{|$UH=UOF#k_6z~3*}|GzN+%fG<@49rabI3I8c
zeZt{@^`cvMZ$TwzFp4}r3E9@Pbjy7G@}Z@>nTNc^z>!cASKQs@c?SwU&uUG=r8HE=
zvz{ORhd|eFJTzO{nt5?jMx^wyeG@`wN~r=e@icG@a}M<?A2?o=At%%k%2QTF4Em3~
z16$xlSHBCFD>MdsJ4H5Nc8?9jt%jWG0%kRaZx}0<R}Uyj45bBfpesJK9-00zDU0}W
zdIwYAplasRh!ViJF6!Kpa>(gYCLD=cSUYVkk<eE9a507K0BYo0@Wpu8>FKb$IQn@(
zvXI~FwAWdz8v(G{(@El4U*o-qwx^4B!c^PYoR|8Yq{2G4ts)i6HSva#H~eP<!?gD8
z`A1)riR!44tE0#l_#!1NYx*lMft|3gIeHueN3hKe)EVNlALi_<77)tonpy>L3hmEi
zz0QHE>Kl}FAn4Rf7y5eZhcpYj+PxsK8`d7lYQP;$HZ3_XA*VHS_S5KghS&P8OdK{Y
zKRqE_<RQ_+k(4Xn)bcAk{-_c-oMf6WsLM{_CBsl)yRe&e5Y{`eRxR*GF39G8i0G!)
zLFl7`1$+<?WE3g=;NKPIbkUeVu0{^&Bg@-fgrRH_#_+~PZ<zX2!UES4KGES38V+Yc
z2XhQyETsL#<5)t8oBe0bFYd5_$W^5>xMnrn!z))qPb9%!xu%l^(xnuuUo{o`1q6bK
z$5lpdOrN!g4BXbaw1JUMtdKw2FNQlr-ckOrhA<+p_rAz~(3$-+Z!Ouyyj_j@+#=Y^
zEVJvu<`;H*3Un}|K49qxVIsk6p9)U#^MMz-)|}mYIPVS<gZK6VS-}j6_o5fIgr~ra
zVF0i1v7%^lTU*|iE@Ts_Al!%cRz8K+#{uHjZ@-e$tGq?_)g!P&Q8tgBOg=%J22|Uf
z22{U9;4f!Nx~zp~DDQ{{8l9qKp35-tk7iUB@B8=l8nx4d1~W}hUngn1TMm6KYk}RG
zp;J*aZP!OvXhSgfp*YXPx;2Lo)^<JzO}1b1j@{8EvDND}?T*a_pDvlOIG<hy``r_h
zV9=j$uV$YtZ$fO`cpds_qm6S_FRENmP#}y4fUozVaHlHCay5lss$limM4bB_c1mYv
z=Y1|%0WB^&kQFR@T3Z1&%W~l-ids|smt9WSEY&HG%g>UUs8pqII`;xoH#j9vF6;{L
zcq!y)s_5+ZbBy+<w>eI7WuPc$zKCG*qxLsK5LYordQx!+&Vs!uo4~G%fOb&U^cF@G
zQ8G+6I`rbnL!)M<L5uUxz4r(l^v2_>aK2jhF&##f3DnC{0oty@nb6a}%~c-5ke{IC
z;}ma)7d4N}jXJbF8D9{QHb_fJih&cVChFz&NTU%cAs^`%v!-Ud=F1%m8WaRe7!8u)
zw1rIjFiYSvASiblxv+8aYUW9eZGdk96{XBS-HbXJu!iHsq%USVZ6ZEg1`EsO)X8;o
zmT%P{X#@J)G)rsGxw)tOX@X*sai1Efyj0kEk%V5?uEx=FP$>~KDo&~D!R!s+o=4=3
z4j_1O5O}jM0B{gG-~jv8O=fD{XB`?WX6k$+;g2~($wU!1=g)4W(4SUfIO#^lS0{r2
zk)kZaIWwB3M?!IaBS8RFmbL`CkHO(RWk1cXt?AP_E2~2#igPR{|6)cheXf!#;?mqg
zxlh%6Lug!Q>I}omeQ%>-l4U+oU@O^AtuK66Itcl`5_arvs@(}(fcuG1>-rI$%9}<n
zcCrTn#);R8=-U3RLl*xNDR^%L6XLNx#_Ze9VE~vf3tqO+U;NY2<i)^##$_@W3^`em
zQBd2@P%*i~rHOw&nu<aPM64L5T*ep43eq?1`{YMS;z|e%L_%@JW>8;<JqeNhJxq^=
zZhi3$3$~6k{u;3fBM`nacUU{_+i~eoW)A=Zw`uj?Di+KC5#;=<82q=2#q$3d<oxS|
zzk{6rf;V)c|C{OjvytGhlg)oFq*<7l{^>$`NmcSc!1aG5+G^&-#WxqUUKGJK^<A|L
zq4Er#7E?fq7FZKB7>Ow%macwpyUV9wll?+D9U=|=GZXj-eYSCTzMxN%LAk~Qj~TUR
zyqF(`h%<`+T6_##&85EQ%PL@8_!BTYjr8q3;d|@(wG&$=tGd9K+9TC9Hu=0If(>Sf
zGDCE%N%!=H+J1jerQ_X={W}{6nd$WmD(v;=N?ma@tG42=*<Ur%G#w)0WZz)QXn3La
zX|MH})E{HiVOzmy)MD?^%M0r0qA_by-anUD_<WB=wgBcXPSGgx8!NDM;C<&9bwNvj
z9m&vMQLtGoeg#)wD=p{&%%84J%5E(_6RG*B3t%Te2<!&z<&dq2Qj`JZw;L+S`<JAI
z(@+XYx^T5oJD-6{M<6mlpt?$dO_;r(PhFQCWelNIjK3Z(G{Z+$2-8v0aMNfPv?|Uz
zf{`8NfY4tNUE*_!tjtyhDh5_96(Q{_)lqfyy(^m^C^we~m@;<F_5vpUS>5&P#}$wp
zjd^qmfk|u;GB_aXJcS)ESj<$hwvOIHq^yv8OqsroomSA`?}MoryA_T%kOmicS628h
zdqQeYWAq<*kfbavT__o~S<l{1itXva7$&i|De!7nI+9Z9Q{k1^10FkFfNi>sJ@VK*
z$a~MkzHPd+eDLL7{MK*uj#fu=d+}N9o}ZjaVzMzq;Akob&&i$emi^AGITQnqN8W@Z
zLA8c%k-KtbRoqOozbF&EC#-B08;-buE{2!2-th-b@aVs97=<KKh{%|JSRXVLV}DeW
zREVxGN7KGwq(<IATlgjYs~QHCN#of9q9WpqDh{`xz^4~)OOLFHHASMo@@2+FOI|~h
z_)IhDQe(g#S0kFD!>h9T0O5&b*0Si=VRRq1Ax{Vdzijv~*1}OoT8SyEw6&V?QG0`_
zYX8<8ynK#efyx&*nMa6?pNHi1b(tMZ)a^ov`b}M8tSg)i-~~%vmCWVtje7{OPp8Sl
z0a7yQp~g`0p=QE)Ug4oFN%94;67;b+6^zcZ5QY(JqXy6sFh~$M<y!V&!HvUu+{jBA
z6tP&^>h`nka~POjvIC~x7R0smG~QkLa!lm?PduQ+=*ZmZ+8VGz8f;xdQT702^C;k*
z-tTe-2a8W3HtrK41yP7BBO%C)bn+<$N)fEgzk#=TP?=}u)9xUqSGqLyRR);%T(n$;
zX7Lm2tQ2R|ZNRPk;*W=I<mg?T2Gr&2Rm%0Qo`pb4S#6<J=fBIdFU&TN`H43z4`F)u
zIF2x2i86XNw0CNR=*Ztkdkc#x7PDcvA8zV5?s3h_m)`oU^Fs*lK+{O)kJ*@+n7T-A
zihl#eqMYI?`3s_K;UVm^sYvA`lz`#u5uPq=b|Mc>rofOVapG1yzOUii^OQHU(bbOR
z!4*}o{<+d`K3&iy*JX+??P-m49_uDm0Ega&o@28U9`eCN3Q2HQR|24V54(fAe#5&5
zj`kCv3jEn**|t-^-}*iHfl+w)OF{F*^GP79lEfqIOIW*~t2klrQ6+dNO-d}016T<s
z<KJdEzyp#z;V57Az;?Mad)yGB!b+&ar@<LLO<g*Lf|z8XW>>pm-ty;B7sAUR?#oa&
zr2b(RZai{o56fpq(w@)|U^mF86%oBwJL}8@Idtq+T9X>&DADv<fjkyTJbCc5eSETJ
z1oK1zGDBcmu9jZkU{L0Qn8UlO<XJ}SHF*Wrmb)$@)@{a`R!5068b=)*ASz14w%yhO
zKX?I9yGNGZQT)W#_9kF=Qg)h1=`39DvzMl-5b85NWllVXvOXQ#DsPfM(QtL5iv=;(
z<@_=3O|bk1@)vL5cM##6<MFop@BBHvB%X6iN^8!n*8z3%I`Szg&1a$!>Aa85HLWNu
z(fi4E9y&qYRLfqrWHEcp#4hS>#y^(f3eRwQCc{1K`@VaWi@P4xHH^%%4$fo<eQR9}
zh9lqsR1={4a_TR&#&vakK(R?K`96Q#5Y^F$Cyr4|Y`O1}7zN1Y7MlK{WZyra%VnAV
zUK0PxtN!h7<4?lm|3k0E^1nO@|JXSBw;}FdC;Yu6{_i^Y7vtnVD~W%dMgP-j@ITOK
zRjX^pZVaRN?C9pd6>H>SI@S<dH}N-E&jZ7(8?fC5S|e+PCxpor2`cE=Mt(i#OiadU
z*k6K9Pgt<0GMP>vWnNGEc)LE{VI85)gIi~5Y+9o!SjKluQqL2kD5$r$ZFFg`pC<>!
z9_ema(xk$zP-S-<&E8$dt~jivZg#(3*{)pw$*6plZW$H1;%6O|LZu=RDM`o*+Pa*8
zEx}5pi=0KTQ3iF`lbygBfi3FK)3V8%!>v<hnWe_eV!5H#kl)Q6*@n71mn}o4y~D~g
zNQ7v^fZiuvf=^1n*u3i4-|aMCd8@DeK(!A2IjAU3;b4i9ZE<Qwc-bxjv6YWrf%-o9
zIDTg39xCL?o8sc~N*iBt4)#^%M#DN*bK@CQ<E{GO^G2k8vbdKDP#u9ejA!06wjbbw
zg9}<3zr~*;k&4AEei;n&Zm^4ytlKu6PTcrp!pB8C(#MmIsa-9QY{`t@Y(Dgpne;c4
zUgg>?`de)!@9ubmkYaBMJRtWdtw!rqNY8+{!oh$foh-Iyh;|rHaIU-?hS1zDX{B30
z%dO;1VaLx<)U5;Ok}(t+x*fgFEXM;}meos3?xN)h^k7TaJ|Xdp{!zaiVj>G9uK}XO
z*+M0`1+6$zg!Va(i^z@YO3apyQS_srCdS9auU?0>=ePcXE(jxg_F>eRLxuRmWr5>j
z!U_CbifE7u5^u)u)xub_W|@*oZBnfoDJ2BMfB<V7s_d}EV?|}f$lnn4ns*~GK6Td@
z4hzaJuX`F)a$k3cmE35<ln_5hgQgvj@PQm=){pWZ0YG&_3|n}x@h8lj0Kql|#$b^s
zLZX~;L9HfR?GdZ4&>{2GnY*s8&jU7f?oR-iD6p6yN*iEtlkf>ELi8-yQh5y_HH~Nd
zhbTwYqiC=N1b&cxwhX-x!TgXUuj}hYHTcrkt(ITSK^uG#VrcWwW#v{-otoJMY(^fy
zlYv}|BzktLXsHmYJE$4yKsRAB63Y8s2$xmC-%ezptX++9TV|`h=-i$@;YW<bn0&lq
z<d+r?w35j3#H8SmZ;eQbu$bTRaSz8S$Zk88jjVGH8|{tVW;yBf!tN4Pa`=>B@=Q!L
zO6nyC;aSaDH5x>fPHG2Wa<`eZ)R7wu9^cNrda{w3IpHWShKLgrtT`<<CX%s%e-yfr
zYcfbqloja+I4C`vbklh2>N$5QLx3#_`?4KN@1@C#l3utMGgi&$xyTHbHt%sJV*kya
zRPdpubC$_zc04{~(}@udKBD)VnP-MOMe8Bd6j(C97{;PY(h89O_C2Q$M<CDS@W`{K
zNHL!#WS^H5rYa%emv#1R`Qpj+7o@a-!0^bvU6Cg`?>f!*Q)%4v%OkQWvmPAKauh@}
ziVErUxlSurf4z?1G}?(1<Y;z0Qe6v1F_0DKEQ@%aBe=VjvK}P8|2&uvn{wN(mmO7k
zaDw_<68v75Cu5>1G8K^7y_`T2Kb0Q?z)mxsi=S1PV|<6eOnly%n7Jz}e~=UdLh-d&
z?<sX@V61QuPfmT#Z2q0sZ9MIg7%f8ZvyVi*`c(caX+mH(oLSy|mUo6JuY8)nvy=C{
z9S=a9-<i)5PjpiJ`BfVh4rf%jNDyL|m_4M_FnoTH`;RpkTj@;*kAe^eiFBFcL6_T;
zkozp|Ixdt>_0ih>$6>qhj}|pBS>lio4VwnV{JHlS@Z1*!I?6<|HbTrRZ*=z;_R<4!
zQ(-jeD8-5pFxw9@DKn3l27`e=mXr^iTDv-|<I_z5+ld6nPu4r0T!6R-jPG4zsptUT
zH^q_EywZq6myh7K-z9ebBV;Hs1lf;bB=j<t-9OQ}e|$O`P7_^H!PbR!Gq4+>-YJ?O
zAyO_J<(SQa`3~*f6zyXC=svl^5j&6qb@Ohwg*%!k(aJsBKPuH1L4=sR09I9^cGgp@
z1pom5xYDe7Lg#LfI!t#tfpw3OOT3)j8lY-P0i@ldMoDXzV$z_FKO!5u1B;Phc5KeR
zSt&mw1v!*m`VP(calRbf&Xa7e=&?K7@{(B>N-kuv=p(eco959Am&!QnM%KJGyon9|
zTLO1o*h&583=WuJ0vdOrsL;nGtw~C}oc-<LJ^@HOy(fzyK-Dx0I^CRAfP<b&8;t;-
z5-6We_Ty*!#Yzs>SNv8S_(1|0TCeX%##B$nzFf%fhkHWIx1n<m0PLr_2CLl=8aC6&
zPKR?6G-uuJoC#C4b^)9|y`<rVYFA@Lm!Z`i5A$=EgJh!^D+bIqdvZ9M#n?q&#dn8|
zyMtMjOMCW>`^)zgM>KGYHI;$II9XuAep}fokHr*^0Je$_V&THtrQ94>5hsh!8^tA6
zbP>hRj5~sy7nq!DD}|*=if@3@O{GV+yg{0m=Z%hEV7`+!jnQqL3h?<78IF%%T#8`B
zj#7b0=e-l)py{O1r;Q}6UXQ7rREHdLtAHpnL5z%=Wl|8Ac`rJ6H9qYg@4V_(H3>t{
zs^NZ;3$(bqL<o#vA?|JSf@e~}*KcP}XSwpbloDFfB0kbH<|o8jLI_+}k#F*hlk)b)
zNm0;B84XW#Fw$N85;I~zQ^TyqMt(5XgsJ_>OS@>uUj9;PKb4^mfUu--fAc}AEdlEb
zn4Og8fYh=6PGmFzlbToo^6L^Uop~8E-&1(4%1m08TSEUOCr6zQ{BrmwHuyh&SEobV
zoXiUHk{yNxdew1{DjO<wge-PWRs5>94cPAM?xjwOq<+1_cEe+^F_I?=IbGiH6UxNd
zNpn(r6EdQV+H<*%Q!+?e;e7*xRpKK`-x-vajg^Ou+JD;^6rM2%^8#e!7T}Dvg_=(x
zX>%$lX;pdxZFhJevYrsgd*=7K%di>8=DT~{+O-Kk5fi;oW^h0n8!GrXTA*lLTSi0{
zKs0r*{O{pxK8$Ek7sdLo145YbmaD@BG|CnOE_jmQuL7b1JV~Mo7rR}t*rFF=G2?tq
z(7|4T{s4=zun5&}SgojWp`AQU3@l4pb_>4k216}SAMvFH#9L+qsiW8Xpf?JyImr>S
z@0TkLcdg7qnRPy#flW18ebcHO?!sM&FP@E_ij=*_ZuX_Xu$3H;SxL1cwgoiU<abK>
zqnI7^-_kIhu|sOe72Gg!Jc(U#zi1=VyEUxW#bQiwDY^UJKO$i&fVuy;WWJ1awYWz(
z@~vuow*r}8l_bd!v#0B%D;RKy%Z5w~$FXp@Uipv{R+(0PV4mSQh~VIWIN6LA+TRBG
zq1!*)vl3r&Kw=aakzmOO&<3>N+cLzm1US+okV!(-b0<_SHxHlchGJr+<zY+?_%YiO
zcb0QlAb(ipaNJi(|KJPqZ~Qc24F}}2Ml#%!Xin#D9OJ$*^a-P0kX0K(W#W|6B|_nQ
z7DLiW$*)f3F5%18k=TG|=2rumKgMX~PuQUDJ$*3)=<j4yy2epGJ2)r1)^-Tw&}bE^
z8nQh+yO8ADOVNcL$fWP>oQ&o<Svu$pT$H*hjfMJ18uxP<&>rR6zmFLi^7v5I^6Ma!
z>r02~O<nnVM5InR3sR%q98J+K^^*SF8k*u#RRT)Kfq3n(Zdrnr9D^#<gzkBnp@;jS
zk&CdoW@@UmNJ1#^sPX_<k)|nz!no^89}%GP_x}B_>yUrnzyC*T{NIt*|Jr;1f9T);
zDkb`hHtE0Y!GG!B|BAQhME}?(SpQ{U{%6tgtbZL({<E)Vq5sF;i(++a+YNTauN>Vy
zAXqiydKF=XqB2@Ytqf96^`aG>1VGiMA;J11wKAQqlrHnH&nYMh$@+QPSvph^n9u=t
zcN2CWXHO>wf=g-`MWU$-7Z#-T5Yo9uVhKTl=CmzZKG40ff^yZNPn%4<ndZg5*KeCz
zS=*W!9bKKBE^c);Wgmr;NbPhOUfrzR?d~4l9(Q%tXSj`miH(Dq)}CA~XxB&+$8y2=
z^`NJAZM4f<t>46cq2L`}1GaD@^Pp2tP~J@f_S69=zGLyUn!C>|GgWt08`l1Wu7fsn
z$7v9WyA$=S0xq(WsV{TDBGK3#A?nE4nhU!ZLQ{>lH7~CehzvKB=AU%*rb=;3BQdIo
zPUqNg5vE9lQq3t&Eu58dgeYJz<26dNeHqP}6Y74KM7{xzfqBtLktY#vc5D2oUNl(|
zBd9F+A_m0ZK@N33cS4%vNSFkMKT+o~j`cF+G%fXt28g8<-rOPzz~v0q>I+2bL|}}x
zZ_y;8_Q6eCpnY-EbC98B8)$RmQRyO3s-A?M*wGhXf$j<7{q-aVX?#gK`+v?PdgE7K
z-;-Hgxt!7+CG3bUTaJVnnEDc%5}^@t+#?193611^K$jQ*JiT>L-1drO)7guHxO!zJ
zc!Q#aj5r!9-|V6LU?zQ+HW;n1TTamp3++0t*q$A)fXwXXpwRqYrUyE#i`2a62MERB
z3j>i^c|Iy)f@L|w4)vPA0DVwouMLb7IN#5yUg4!KyGi0w5>T~T{Y3uVGO5YSb%hzq
z$jC6*27bWY(DYa;_7md++%JM0avLC0n{BU!5+d1tdX-2_EjcvCQi{CzE=E!xk&IUg
z7Gr`rikY1;v2|mJ;Aeb@;Lq`R=8f{Qg!~BOh7*Sb-%D7IA$fF?{zMw6d5-cX%a+6Y
zUF==*dX_LBD=U;hFqBhjw>Zl8eug0cbC^>`RzuI0ph-%R*s+o(jLO-P`Ew*SnIC>p
zLX}l^%#l?lF=onewl^A1rz;8|sZ=?3xBYb3cRW_b7wa#Zc|FcKp`P=o30pM;UQz&f
zV?!9qX*LkoLs=+#R%vDA7`Z#=$Xia5oWX9%y_F8}f(&=;`RID42G`KG{B)HClS1$p
zvr`3fB=ZAiDs=IV*hZ3Uet|NlJTM2s?%CU2-oD;0G2-`ezn1g;$X%0oz!5A@*npF9
zaOj_Y&?G~`6lF7nWT$9f!KbSvZ!gj7u9@jI5<8>}1C(=@vQQ#~k-nJWRW|UO=)U0W
z*=;B(3dBoL<L+M%rZk*+))ymvx*AA|)RPhMNecTiJK-+Jg%2nd8(c61DQ{1CH8kc6
zoAzp%HnH;PYys@yHf*~+fRqB~W=yE@#j=w6A7-BQ9Oz+&gyX)dUVK7<0;T%FRQ`hJ
z8q`HBu%8hZ4~h~rM7)kPO;uIJi@P}ecmgLYO#hK4)-SBVwP24pu2kA6;{0$jH!?G4
z<&He%!v~mLsxpJSOA^pQliYX)4#{p@>`NDG6Z5sfl=X~#B9u}Kdp3<;WiH>56ZP=;
z^!Q$RA8rOvDVi^3z|wNo#3k?~-t@KHPLj4g9G-4o46p*A<MXh|Gx8dDwAW5@D7tI)
z%vBhtnp#^UTMIV?j27=8_Ay}K5wnA|z~9YOj~@A2<&JC@odh@4Q?|Q}x`v~yQ^TJ&
z!WfVh+HFZ#x9RZXjTz__Wbi;x2J?3CNRutynU*2X*YG3C4_>css2ZPACY3gvf+dW^
zi%TyGMFt8yG<bD@^I2ITWORiCgY086;K#CunI`fP@tcTX(Ez@xgu*R2h0oH>kTGMd
z*hZjGvh*HUjxHn%?XErw`m~hax<Ra2YLUe+S*VwWlJP$VD@19vPK_MilcT(VojW64
z?ba?pIOhEe@+qWj!<ONo1F0aY4(EjqZ-|v9mmI%HZ*gX{zyRDCs@>&?p)GKfx6H&!
zs?jd>qcf|IJHKZ^S4Dde4162h?NB<>DE}em!$)MPEuwKeUer^-j|9ALVV-+aw7Hzg
z-?(PH5GaYKsEF-L9@HL>ZRe2W!;xLi4}lnCOz-cHX?uyDQ%wt#&l|8YP9C}P!y^s=
z62I*2DC6&f1q1=BHkF+>+AFSyhygd~Q@qVNxciMnY(bEX*AqJx&}a9jxv*_6XM=Rf
z-+_jfC)zO~q4C-{1Kq;v2vr@bj@e?JU?}Pc@!Rc4$hAZ;uVQiF&W2%Xo*+%}6*DUL
z%-{uI7-0!eU<ASW9Kq$5l9i2hqrIGUTmM8M3VBwHye@jvYErK%1X7`|O)tSojO*zt
ztJ)Oou~aEnb(B)4hNz6%lFE`0oKkCv?~ewE`6=*aBzwf%6HE+L6(QH9Fm7Fc{HiiC
z*3D*o3BbKGaNA4k-6oC-K9y{%tjrwiL<-XW$gW_On97+7%{;;X5Qh`p(_R?fhwo3_
zsgQ&tnMI`a_a*|r)nk0iLrko{oUnaBEPOQ(FGNT=0A{n$qd)tFf%H%|_oN+Uun=#E
zbu&4I?{8GI6EFc@>)-1-e+;oHWlcQn=Az3Q_CtLPUI*2h?W)$l@lKB%)e4ap=r@F4
zjPbVdHbYv6O?u!m+6Oz-*28(1wiOQe!c){|Qdj{!t88sKUOM27VSKXj`P#?ZM?@=&
z65dwY4Mfd1*9@zktt^pGHeeW;utNg)2B0ZgkG7X#qw87=Rl^;If7%obaWG@;-C3p*
zPuNxYF`!ol_PePHvOXFtrv-Flj^)Z9NAI7!N4oK?dD)u#v7*zb7qFgBDS-jy1GRIn
z@fk(H@5mL-%a1;s+d9{{fyoY2o|`JDuFl4hPFQT0=cb?^qwaP2=Pae5qIb)!6$E4s
znz5lyYS{cf)2*MIM6qu-<C~==y2qIjby#mSMRml@eOy<wQrO;dv{;YC<18#_j5e!|
zo2)EIPmidGDBaD!!@Q7o1_QGoB3X@(Q`tV;I}eDEO!&W~D10%|PWjzJtmtZeEZi~W
z^;P98J!GP1J;oE^GRGJD77-xAbx&sknk@t0x=Sm$%_pF+zd}yX0icN(YdSU#HX<|>
zYhJL4$l+PrmV_=XUEmdom!G9yDZK(u{If*(!@Ki<(Lg*Gf7<#@1kv4#{s41L6n-K>
z*_0k12?vJ2tt86z;dEV2S)=txb9v8ulZT8_SiJj`E2{uhKQVe-pEKR?<YsKGZ&$PO
zwU-A^K?wJ8aNm&Y*ORz1G4#}Y`1ad%OYhta0M4v2v)HMMee*Srg9UJ%A;N59?yepk
zLT$<-ZO~rnU25nxuGwN`3y1hxaC(IbIY%dEaqCN!Q&F?AfjWvT{017a=_LGH$IJR3
z^!Y#8@xSeO|J5}9w~m+ff9do8amUO0e?#y8t;YY?3IF-4f9ZJtUDV${BG#<`hFCMv
z{{iFw&{bTmq3(Ftg5dM#X$>$wISM#oY~oRGu_ceh>d~Xsm}(lbBj@5W0@IMrLpv!4
zmH8f7ydQM(o$WfzKjwa5M)P*toMv`bX10!zqL^3hPi^@S6$%fsuCLBQmJ_zOPx!*z
z9eY$NAZ2CbV8N|WLS(df@7uV*^{|@J+O%=+x$Wpo{4gaI@bN#s@}LSt#4HWeta0lV
zMczEP$v=q6ylC-qe9tayS24dCyrc$u!v@z+dGBA`Y7<eu5d-;kr=<1m@_b3UX;qAD
zj!eOcdX?V{`)1e|?H&J^y6jxha1J89Awg0FOTvtZAYw1k*xa@)s*moqgWuzZ2;YYU
zaU77%zG_Tna}&=yxBBx#lit}E_&BUNv(>@{iV;yi$!r(Bbv;@6anMMSG8r6ceGtL;
zgsDm;xwDE6tF``n>g8k;_2f^k8i+(CQ925TVi#O-c|>i#;Y|S86G>zXnNL0dTW`V~
zK^SSy#N&KEcw!Ln`-dGT;-7umy=kDcQ2FPY!(j(804h!GryaF;DSy<@4+9`q=9e3Y
z^7{hA@hD%HDK{u5P;O=Qx)%2YOfb0^W96oeiig(VLbpis*#)gli`+}K>K2A9@|JN)
z0gp?KPBjE|!ydcZ`ndQ9;XD)3^xYG{<Y5c5ID&S`7RtI0Z`l=)&#u$PhO?LRVn>sP
z{zy<H*{Tn^wAb(;IW!iD%;=r)V0Qe2;3+T$)92)aZ7lHlgbO8d5%ixHHG*ptLId8I
z(3sZ>SPy^@9sta<j>~;}uuxbw69aR)6i$s#ewj-#$@aV6=)uA4VYMs7i5duJi<vtv
znQY3AZe|m>PG{*s22}HlZr&lz#dem%nR`;6?B;-uQf2wZ!4mrJMX|sRCA)BK8@t(D
z@zHDd=1|?$jy)fW$?SXGQyL%I?e%dVNiqsTSao2^>zzb#;!7->m^CsKN!8G_<mVNx
zPTB8AxfQ~Yo2m&!D&&t*X3BD$8uL?C6<vj+?ryRz>i43GIC<jQx%nxF8&wuE!5dCj
z(?<Bmv{}&?&N;Q4xe9{ACIzc(+MSxW4E15fcWA98;0&wIMJMN*7aPZmwbZ7~ehX{g
zM(xL615<{GM8B7EuWRBC?1<Pf*(D7ytnq=tF)TXQmQ;ImKi@Rl#%lYgT2=FB%@M6}
z^N=9ZODq(10g7dku2og}bU&@t?6|7hvT0voM8Df@muF=ZxvrwBd|cl@J9}!|LX^}h
z7vygTO0*kG(32RHba`7CM9m=nSTMPs>h{rMtfP+7n7N+lT6ZiTNn*pErgNZ;Q%_fU
z!7xO{YaeKyeO8T;Ehw+v%CLv}z-&1>eWX+J5%MFt=v!N7))GYr<9m=DzKjx4)-`o@
zeIf|8mhrf5cvz(ZZC5YAgoB9>S>sy4t^=q>tW@GvT}}uuR8%;gu?zB1Djd%F0ow}M
z8KBU7V@;>mOIhB7dyNu}@)>;F{8Lt!*6x`~C4?E5zhg+J<(90rMw)}8<49AOcDkc?
zNx$v0%>X?(Q!do&0pv%UDHD!<UX&&0m5S>YwlirGvPbBKM%`GgIQ}38F#Q!;76^}Y
zfK9B$2U?h3_S59ge`uz~D;O5h8c~f_Uj{;ML3B;BlW>o8Qgs=jT89{hx#=n?PZjW^
z<&)@JN5+`%`wldy3rwxqKn{_p>`r03Fi(an0RT%S?FV|&+=m<-NgXseH>py@9v>u4
zVf4Cl1`m?aN8m0h$b~2lK5(6|Sey(zY``u^+#eaZulph$N3q91?r0bk9R9`$ey2G_
zl=Xrdm}}*%8^YF?MpGzYa^r9a+B3cwB2@{6qd=|ph-pylGggUZKUiO;UrPxS`_kh>
z;{-mw8^MKKPIeRwu~Cw&TYX-qxPQ6;j`W!vM8X|S2kh^U`yz-?(ir5DS^$xvbzRVz
zP^bm_xb1I59pV0#yz-dm)Ve!DM=$j((turf&+jbLHuvFW$Y+N&0iWMP{%Y&!Ng?_N
zi<EhJ{NSvQ{K*cNR*>4Bu&ArV@7nfGej<V>@92+;TPr6rO(I)fl-t?(d=uA@FLzm=
z)quJ*NXgSE2(|S%iM`dV35}+O0ouxOZ2qK>w-=%iu>)+d*4_(94t%lgf+Gh}A8nt%
zF|p;BQ)mtCkf9mv=c=3|6$k)(<SN4N)wAp|H}$_yjlB#S2xvxPT>Yp}09-;Tl>@yE
zJ@?{Lz7XJrEWCR~rbg)=Uun!j+0^QG@%o58rL;>$!ygk!?izQy4HK=Tsz4kb`GEL(
zc3m3wA+H)C_H*<#5r-MLvLnune*&%tyhvn<eDOsB%*eCl4UfL;%4iT1$tCt3dVcj|
z5}Vp!b^3@7Zvjnbl0GuCyKaiL3L$dGt45Fij*<yn;r`uAyOCU_at}$e4-xm+`gRc|
zPaGAVVk&HW<Od2sC$G=V*3h5{;syT}!YEchL#zCK%)~_&E_PJcSg8w8CY{Kv{!(Ws
zu#^}Zwro%vC8?JMNQ)Z)WWvW1Bq^^-WnPEO$`D^Gnymr?{>FuS(#^fqCFlGjt9VK7
zD}Nr8VGS<jvYYxUsyq2ruB6}WhiMindHjADtqLe^u3$&5*stDFWd;irLfuRmmO0`*
zN&TGj*gOsKf`ApU5H#IDaX(bv7k<!%c%a?FeJ9Kw=zRT^MP!Hw#c3`@J7Ko4?7mF>
zlL6!X)Z2kDrc_o~jX&w!XppuW{#GSfk&s#O`t(Ksv$%Q`E}~y~Ouf=T;iAJ!9N4sL
zmvB(+qjuvwsD;LoK@Oth^2{6J3`;22Ax**P6m7TkkwB-zW~;aFRVr<$FsGAK7_Nsu
zd^jBa3in$bY5c~XSAs6nhKXS5e^ew@rTZ(z!BgNdo?RH;0;a_Q&XeK|ap^{bUL#U;
z(x3Doqhm)ylp`BL_rW^ZH~~!gg{&92IuWOhRN>xWP71h5CYB`63Ut#`5Jdw+rtV6O
zkd8uwPn%)J*?QSMN_<7ULX$FiAx<hk09x|zQ^=**+eva89q!30Z8sJY;P<uVFQW@)
z02K?dBqBD9R+QFUya*kDzq4{Vdv*wH>+^@Tkt>b_Zo-EH%%~BR?j>p-wpB2x^;AOY
z8Vnk|WvDLgQVQ{Gena6p>*OL*L0KaK1CJ{V%@k?1yo~2ZYOAPDt&xFoJ$p{{=;|jx
z7YrvYuNZ!bJLh1Lrr9-1N$RZXv9<KP@84~hY?|;x{V`;{Q=80t(lryPbcs&}eWh=O
zEc$RGJFWQHQsWDgGKm``fTD*Ih()@ix~Sco57Op9bAGYY+4Un&D&%zK(sFs}hHJwH
zJZLjuns+ydi=f`rALP&9?n#GpY8`=SAP=$p<h?M-t#48nNIg><L``ptAVX(oRjR9S
z``Ch5b3dG}3!xH_Lph}>W~NbGl-9J1i~)90eMh5QHGFacXReGHacnlQg<=b8KE`7|
zgzp?D!w+Sx6n}eYF$SE*(yCrVgRlDxbWIun94T=zRAS|N0c@`Hy0;XHHLSI<@zR!+
zLodurhk%B^j2427*)>t9!JrF)bB^rKCte~Wcu{*>y<eG522&3y$K?k}z!{enl2zOs
z+A;aM3%2s6e0^Mso6)^`di!a%<KP)~DaOoeSK<+MnMNW{Df$p?2(=^0Tj-;BU7fnU
z9u-bt(q+xsCE(CxjFZ9L#7}5oaOB`z9Tc-4)Dph6FpiaVv7@9jK*+c4@Gc8JLlFDx
z<tHJ`9At_sY5P-m0rCE`lM`YiSmuh4F(+iy;X!6)EepHb&kmvdAyI4%D`qWV85}5b
zOLZUWex(cu&Qb$}w#XAdOn#if-dha12K^f-RD(@XCDGeB*miak#bN@)5xiH5>pU$U
zMWDQJR1t!=R)9_)lO(!uG?gG2+`SOjU%m|U%dm8!me(ouVhg{4?%v{4_mE<;q++t_
z_{JlDUTrOapd|ZFkJx4f3I^H(mX>ihs7&W!SW#C!p$;O7julLve-G%9>(s?`Cd7Ca
zo``%l8lTl4V?94{u(R~EF8hy^=Y`d-whzKDQloAwQzi^H^h+F6!hQoX7MbMzeFpkJ
zQvZLA7yo?*`kzw&zt2Gbp8Ee=A?qLN|6j|1e>4xV{Z*U$U!vAOilBcu4>ha(r>OOi
z94L8Zal*lN!x~LYK2K!tvUnqqdagxIU4n#j?CX6xGRcU_U$G1=GHG;gl8tEx`g7pv
zYQPj_%QhvGSnR6x-4msFq8YOP{n6r=l0el}>rn3YO0ovs*ZSATo+GE4WZ~myM2c4x
znh$!2jyheE>M2?di>Hr?@(@rXxWe_uK|kDbj?T;Yx!RQ&gf8(rB&Y!Pbk)EDp^To(
zGFukTrpHrhgGPS?xJ(Um4wCy3;8bBghXrpZNg>{zB-F@&+)7y37<7%z8C0@+Yhq^>
z0=3eM++Kbsv_AyD{vvCbfTmlu`{vn5im4v-XFxxeLRwR>brB6WlMi-<j)8vbvGOvk
z)u47Y^_-bbbgrCHtJaHrQ5PR7MaSe%Dt<%V@*`4I*Sr((G@fxw5GLq~#RUf`@3<Af
zax)QJ`Rz@92Q|9cMr{A->j2^?vUuQ?0WPTH;`7i~z!C)J_~7G<pxgORa0v0*lw#ci
z`|Oa3bVmYPnb@Sz_v7q1=zw!fxI0|I<s3&x8&COVH+9$H!U=Q76X##VWahEA${%nl
z2N)fc*qwb$b%(R*s6+&0deg$xwnU7zuamlNR}d_Di&$8A8c&hjrccBGI)84Vr}q7r
zxyv;A+I{yc;FAphw^Ww;Y2ShuQR<FeSA>}U25lBszk&|any_{=YvqvCKMlCyz4HqA
zQJ&D*<|eYrbphNYu^-7(SpxY{oQgkwH8RP(r7|*aV#Cd(k<MDbt+WU)%*tqK`~wj2
zjxtITgS@hm?_lz%%~kILosxpeev{rVv$G-_0eesYkXV5<om!P1nl;jQP1nghHWu^n
zP0IAKQ@(csoJJ_~sI)0TRDXB^vwTY}ByvE6zdL+C=JESPZ$->|fV)45E1-J;B}9It
zYy=H<7lP&s2E&l4=smic{@}nsv99VZr2Ub)YDdm!sjjfnJ?)%68Eo%uqq84}PLtqf
zI-BW0+A&P!8fzM7w^&Sg#qK9lPuS8Vxy$jObQE5346MBvzvyoo9J(4o?%VWR8&eqC
z@{+1PWgKvV-(>OOQ-&SkKQW@AND9de?m~3T&yw87Xa}-bt=ol4h8z2t?SoP!<U-87
zB)bPF$6eh_N>al|iK+gipTl3a!9LgDR4xV?PhO|)?g6MFaOnN~088me{viWT!&XV`
z-{+BDVlKRqNOC221B51hEjco}K|I)p^yl4I`WHRCm^tC>dE+!2wbR<iJhDyQ2fR|z
zx1U#GoWJ-sJk5o;ca*#ZTA72~n5*m6skB#PxW4K?WZ`;lGGlvqv{=B?e`V)XAyIjI
z1UHF4hda4i8v*Yo`9Z$YM*RAD6KrFd!(Q4?sRE(eH04kDLF^MSDYyM(R!p!Mb43EB
zm&vRP4`IBOD-CsDb>*f3oe8E#d7-N5xxz>dE|3vMP&Czbtw~g(vKbc*EyjM~iFKo_
zg4VDM-8AJect2`u;bJv+t`jl;-DV+@o!TjpueI%Yg-!QDdmHAL<AI6>lOthiYp!FQ
z31!$fHS-guS4^9lgr2Lc&nbD=d`?XebI5si1c#%mA`QzEu=AL;tZ+v*E;ZmGs(-3;
z?0ip-Es!gX1GYcgPgm$*w_pe3@GG1mn%c$8g~JrMdo;+#lv<sS(fXLS0_rQZ@URdw
zr{2duX#W&09vG5aE%?5HQfonLLX-@V^7(e(P+*NlK|{JoU1jJ9!gAgcySXlZvy&*u
zO|2)K9BZ3JcL{ZNWCcTn=}XII^em9}*s8<F6<Xf7y}OM$UK2h(+uj1!hO~cLbOW4m
zW#tUOinW~_CH9GR4gCaBysb~&aruEtQngY?5#99!2gQrV@i#0R7HnP!2EYjrNY6mC
z5|-r`Ydq5pFU}yNIC>TrH0XZbdX9$F&>XpF`Q$GU){^eUjf{77^X<l`%+47uNIj;*
zYiO*1sU2GQt*sX;bLCbaHZ!@?AcvQeNHLd{EqyYXZIBG0^8}VA0(o#8Awd;ERfwG{
zpY`oesPD$6s=rl6w!glh_iyRozY5KNtBh>_VX^-6$^Uyg_^%WGP6z)Qo&DD;`9G|T
z|857)#PN^q9>3K8BYzO_&-3Y0N5budA$0Lcwwda(<C^6ceU!S`czOth0#XQ&;!{LD
zKJOs#NvBDbT5FL%Sp7r`=eAxt9`CP~WL?ee8>3r|Rkkm#Z08GNDw!v2D~ci(tP-~`
zGGgbh#WkvVFTd^=v~ebjb(|AtlU%nfvTYm0SfbU7=gg|$MI)_o%Ug^Cewp^a{J3v|
z_R*<s<ZPgNaUaC{xl_B`3rz~xqu)&%Z4~;GDQ)iQLjdZJ9_Ym$a9O#?ymxb8J=HH3
z^VP8KC-#b)1p6GP^ueV`;@q4R7*hDss?c>8o_bnU5>8w^Pb*Bqd{}IO`^QWp?|I03
z8H5#IBmYZ0*rYRGN4k$FW`1u=>e$uk>Q3&vkAiRu2n~Y}zRSRBZocv5p7LbOP^tvx
z#NKHkX844>YuQ`;m;>|z&dd88y8z562GU4#S}!L^<yd0E%hyML0QaLw(VuTOw2|z`
z#sRMYYCot)`nV1pVG4ONdR{nbW3+|IjP&4sagM9i3KohNZikm^sFa*xvZ2s*VO@!X
zci1)`I~Iv_(cE2rY>V5QBiAlxHvQQmayV8S)6BBX;aRyUFJ=@1NEf86K3LX2Kpv(#
z=flpGh_~{uZ28wnm!$h|-1<*7_Wu?(kLzrtGYD2nnjD8-o)O2nQ9!fFwgG0gQ`#@s
zVC=Y_d%L#=NwB<f>XIZf-Cn*Jp)cU%a@U)Aqqt}Efa->%!gX6dOuVrl1ZY$F;)Ls;
ziweBx0JQWydpQ86_PlRfPnugoc+tTO9#=F=0f|gjEc!u8o;JrDu=^5tip?ix0&dct
z(k3W5#nYP2wUm=Qp|YqrSau&K?K7tk&{&$edvUY(N2L%W!QYU(=0Hl|$1Xyo<y0@|
zrQuAD0UKxB=eHk%-aM*jXR=4;4=Kk)M->xPg|6l(X#&2;x}Et1G=aU~P1_EvIRi_>
zF~RusBT_X&x2fln^yh^Xd<J>ZZWGx>VrMtKKOte$(|wuL$miaLlX#XUM?#}3F{XuM
zk5^paWwgbVt_G;~tlw9)xuHV>(nH>-9;mAachip1*t(A_>lhM7yc)VyvWRciXJ&7Z
zI`$cv{W(A4#j}RT;W#pYT{}C9*MJX&r!qj**Aj<wUr`{!<y|RX3l~(5&Sr*iK{43@
zE})nHTnZYjd99(DEv9RzT?}B?h|49^lLIps@#Z<%h1KYMoQyy0&liSbB5{0-U4CVG
zkxpf8;j>7q;K*Qg%inX2x<PE5@GcLHoH-h(!6mU$t{NiiB3i-4Q1P{MyRX5n4sOVh
zcCgG`Ry<sGSqI1;)72)siNT{}((`R)6V-aT%eXi73qoF2wfYL_L(1w!jA(_%(a)Ho
zb9g}2Yd(m=tr7Wtm%pQFdu`?Mpe=iygGJv$g~;u<8p04drfS?GB;0X97~=8B^1O}c
zcnMP6+6TfyS+^0^U+v0wWxI|wN@F}*^IE9Ie`wicuj5}(Q&P(wbWL}4pNgqN+BqrC
z#0tya>G%o4`dlH1z{>jro<Yl*L;?;d4NVmhzNFm}ItAb`fpEN&>`KBhhp;p8+Rbow
z{U}5ZXV~Te2aw-t&xFVH57~n`Hvk<)0;^%&i5O&9<uRa6H^7d&ih6<HZf63@;Otrd
zt?q~N_KWjOSHrE2-XpB9s=a+RAUxu=AjZA(97sCN9_vKC`Lo;5eb3F1Ow)}t1Z)#q
zufyWozWj=QG<(e%un!mr3=w4_#qPJ(u>MO=a>o~M{thpb@QWu;gw@;YVPkAx<0~jZ
zk7{!dBV$+B^`1hn%5nBLoyiL<Q%$>A<kcJq0HR~lC!6-gv&6Gckr&u@{O!hOkUtDJ
z#|Zqu=Yqi%daYZWhLyOSSxqv8a8h$w?JNyosWsxK$<I9kb!3^x_8)OrV}*x}e;#&T
zL#zo}gX=ejG`E}y==YGHX!Haqe|ln9#=9Wq{`Di-ud#hqgmg?^r2$>v2?+Culij5l
z7TYT>8PC^Ve-l?0x)nBe6I(%~rQHiGG<<{*SO#i~by^M8(bp$ud!ulo)8mK=OKTu5
zY5@pNyZ~dnV2Ni>x}pxWZ%iA(y{;N9d*Vqb4H|V{7k8ZVdH{)8)SwEAz(j@mHN?Y@
zxLN_P-PH}oJaH$k&MT?!Xo_kWYgV^r&h1f<R~uh$nrH&TgQ)#k4}qdY-AQ4fSG;K-
zquTyA3kHc?w?eZ<o6e#}JjX*0%3+T0KBo6F;#!;+F#mNN0}cKvMv(?P1$DbT?G%Ul
zKq2kpWBOB=IRO4@_J*gt6)B2dtL*>9+B*hmwyxRQY1_7KXQgf1wr$&Xr7LaQs&rP`
zw#~14pWVIJj<rto>eJu<j2ScD$S0m_j&YB1gBY!nde=;W$gETjS5$(-bf#N6aoVto
zPfo(>EUwQel?=XD%(W2)y6%QW;V~FYX*(X)j`vIGB_uMTT|(A`5VZAR!%cnrz1N*Q
z%k>1kR9OaLp;WQB!d?BQ368hXMz7>l?_k{q-g%=nV9dY=6kW#|0!k3(V*;C=cW1dW
za)RfeA(?S%YMUGsx93civyD<!V9eihQm@sDbO>sqMBK8aaizCVd1qj%XXQsKnJ%w5
zOy!-YR_iM(SH)%7XHkyeM@&k{wMcHGgU0Caj71}LKyVtP%!WO#gj60j3lyDwl0w#O
znd&e^@m@E2WzK<wO$tXKfm909g~?-zdN@_fmG8ln8i&#bQFuE_wQ<$%p|C9AX`<#p
z68tbcPXJ6+7gf*?#$}DM-7*5Wj$NZ5I$5+ZCCXyWTQ?5RMA7Iw&q7cLgoHr-L}5K?
z@@duFQ9gKv@-+|tSk8}4PA6H0-tnFIsDy|5y&`J5Z88f4lI^|o3cglznAS}&7+qC3
z^)fR9!?erVCBV5{mABaoThNR0OaG-}xZT+HoRs^M@FB8-!9f#07GQy|&hPP}e7YU%
zD@JRIImcsP<l9CVAebMfgnM#_ez5C^P`#agJzl@-aA7&V;Nuoq)_o>nF=^fEULUcf
z43`;m<nt142b$#Mrd|Cdjvpg~``DXlH)wc~x>*36L-D7;1NhB>G;avMR40DS%M!x%
z-wc2X45Kql>*0Z?5;E|p1y188XFK8Y;#K27miXZ2K`gM)C5B*7#a#x`Bz?&tFASkZ
z5x6i}>yzB~)hX~|svoo4sxVLBwz3%pKWoB-*d@y^_mafc4PXjwJ%?JInP4udB=jlO
z#hhv0Ml=rgsoA;Je1f~mvbg;jJ^x!{n*BdW?%&b#e{D>&|FOQ}U&i$R4L$$hSN~51
znm=kz|2c}u^t(gpZwfRy>RNVt%}Bo^R)`?#{FfRPL}gZRukp>;1mIE4{2M?+m%IE{
zW6b~>j-;FpaIbsQ>p!AsOVh#z7wkENreMsvcUmgg_4tmT$sCg8!`Le(W0;0x`j>km
zI!9Hw<k>6E3maa`tiE{!w0Lr;-oIJt7)P0W2R_>K8F6YkYq#uJa})f8VR?Aj*u6XD
zV-IkRF?-J{R<uO|$u#yg7S;5upHPic2}>4x&JoY_zJ6|)VY65{tYH{{>-NRSbFd&<
z0)e~)57&HbSUrd;j)+Mzm5U;9p0mt1DwS#xtY&{-yFeQ!%)CPBP2#}yrYr@#%^&OF
zG3sVTI)nN_8_R{kGUB4fPCJcGJJB1Vv&wh_>ar-70HF1~Zx$+{%6iU60gYc8yZ%b?
z#dbGu<%xTnwR^t%nlt`wkOXImha``c!f!GQq}-v~>%DjWB+d8Dy)!u@Rh0}HB#FgC
zR-4Yo%$B`}b|%=qwpZ#|Kj7AMVb8gRTHWS*@?CVM;`>v-6&DshniMW)CF%w)MyYX2
z$_QkNx0B&kBZ~rzEMl%<JM;n^wvmfP%H&G=mB?E0`Mb{)8X`5#$EY~}OScpMyo=7}
zcWxixicFxE+5<Vo%yDha)vjMmT2WQd6McLr9wQ$>mDeFQv)3R)l<x(LiM**-mMB>V
zC|<S1kp|(MJn8H%%B$PeUGcjaQ*3C#br+zrp~F~kfa^!OG#tapN;i>5K+bdFLC|0!
z>D4BX#-v;xQqBq~<Ib5Tz4FfIybQ?GY-@#0AL|xejfOBu-fc-QKB_+(1st11QMdaM
zh;9N3ns-j#lP}>(O|iD-NfMYQNPH~itD7SA@qc{U_^KJFL5{jtm#X|;zgFL)dHmz&
zs?NgYU8AMPoly&I6MVUMVJYH@8M)r?njkB=#350Jod9-H<MGWoGKX)Jd*~~)4f;q^
za*h-678@}hW7WN(j)sdz68j!gCAQ)h(H@NsNhFa6`|zCPmdef+BnO%5)CLEQadUZ5
z_4^85gXx^f^zWSCJbg7IQv!Qg6%wTfc4xp_ia@YI%?mUAruXnk&x~h)Xu!#YK8GJj
z*XcW7yYYr%Sn*B2J8wk|P#9VeSqdSIV|CqYD{GZhTh-f{s^|{eaeIYPPfa)rEH!gT
z6zobxv~!N^txR7E)1E1nft$!U^hS*9W=LI?&o~KPSU6~C)X;a81F=h2DqWcd)2N`d
zi&FAdO~Jb~$aT0Vw4aHs(}GW3td({k!}sju1zgh;?z`D^P3M;=uW2!%t!FJS%`O<%
zuQ*A?3XBtoUWdTyWk1soG7KO0v;lcm<9p8DTgoO(4a}S0C_#-mE5+4L<`tp|30_rI
zNS4#@=aq)6OI%+Tc`H`=Hr+nW#*7B6ccszyfv80mOV1{H)U2LzuD(rk8t}fqvD(m0
z5~jZ9e>yZ+M5r<5F5p2Zm_h8V6}%$qY=0=@t$As@?Lbn8xa@4r_d_06Zbwy^C@8p8
zqzQei)R0AgsB-}g2eU;IL07Fq3)2VRv!%Gb!Y*rK5NInv>|rjW$I9b5*bAW}i_QNj
zeL3l2pWF7DIj<?|^@IuEyR9BWl_V09jX@&SHjh1s)^RkKf?H-hU~W`ggqsh6lIIQ+
zh8(w3Tl_GS@(VBAk3yJYNj7)HX~Pc5s%>s+9B;`I$vr1J5<?!mk`@a?P(69ebqVq5
z4(?Xyn`^WHN;Qs`OLZd%PaAPj(08r$m!AOdXwe1!rqpLCT8A>k7NZ%MqGd%tOS@g(
zBK<}k2S{I_j8MT5)}?s~4^l@qq$Ts(Ruzkcc-`S$2n=eGrdGX?1BVuI!6kms*>8vx
zORQsXOI8yzXGLx-2fOC-z^z6S29I^{OKNN#s>5c)Yk_2%0w_xntm@3W1gZoA-W(6Z
z8Y0UH^^EzAm{VaX9)``e6PWIV3pFBG9VOT!0~x;9g!rVXN$+?;lN=kw9`v#qWsJJH
z;H*KtIdx6jFne2&;M<!cVC_^@F%z8TMyax()mT9Luq%#Jz2#TmN|CZ@FvH_&F!C3i
z@hMsoY5_$RUc=O1oPh}>$?kspvH*JQ)E<E4jpujBxJXNY{3y0T_Yd0414bz7#y$FE
zDU2_#NbfT1^MyTt-Pod09l(y1S(lv?H8BFo51o8L$6P0u8FDpK;FXQRHd+f4YyfY5
zeDmznN5RJIIB=^WMfz|<8YA)Q^l3f&bl8L_h|t-dUk&*t8iR#wT1_d>t<BeN8{Q@a
z*tz0=>E)%eK>QSgBu-FKNK)^Kkhg{*@yyRJ-58Hu?V#k_q<tNfh{a1`0eRu0xjK$I
zm~a<vWcX-JOfBMXjgk~&NJ-_>S?yGo#1hc|)+DpppvV;Q>-}Mo%O03Mf<7rie;M2(
zAc(d_Ex@XPPy%D^Lh#k@kjso;ma%baSUP5~z>M2`k96-Hu8I3VQU^`hN`H_{Hk<08
zTkO@`6?5_aj(T2p$ptL}#+Q)AfMCg`?La~VyD+nlIHGa$D2^o?2ZL^$^U%w^^Uz2Q
z7P8MxQh<rqS#K$ZVZ!D|<yp*CbP~}ppDwPaCDrsQ5Fma-oS2W2M=0rm%~{hCpC>f%
zRV-7DK3|qcQ(LZmQ`}P?1OBbai<Mo)pu(M<iW^USDNwT@@!*tg<WP*GVOq~;HI{qj
za|rgyeQ+7+bq;;&ODyIo)KJ&87?)-+kKU^6W*T%L4`7&jlI=8>bNV)mdP|#+>>X&b
zW<bbL@P3ma^N*CygMhfq)I#tmL8N#g)0x*$Z`x@DRo5omRc=o{JobnqxxRa0R;UR<
zuE@{huuW)>M|A%4H)P&*!Omtkr!H3R175Sdjt;xm>aQCwyida9^T2xEQstx?_$2yD
z3m(rc<b~k9wDND#9G~gl0)AXS_0H%`B(&b?M{t}et$CQOEnG~bEHtbu5(q%4O^*&m
zbW*J;AaWG|N$B>55xvAkMxPHqPA9(r5o%Kn{|tS9^u+#JZ~PB#`giF2XQKXpp*Q}q
z0p?%O_y3-s=lG*+`cJrHXZ-tJ=qajNazzX%zE5hk@Ow6Cl9;y43Q4mH4OtSd_{-!=
zBF2%4B9h;wSr|VbL7`wuwQ=%}IX^t7+-zylA2-LEEG3v(n3aX<eIT>Am>7l=%hDk#
zeoq=bT<okRR93w1eEX_=E>-+ga1N<C7Y%qhJw2ZKBpkyMO)bextdyOFp`M@HzZ#X%
z<%}LCaln+B^N1LMnu8$?Gm18CuU56ka=Q2S9Y)s!gvAuU;?Fd`yONqJX52h<MD&i8
zj{QQ(G9t(UIJrj&KRV)H2cP@+SnC6vd8d_NgS1VmL@+bk?nS47n%cn&&J}XFo!M7b
zn^n%RWGJnO!8SFfiJ~S9N~*1e@V3U9l-rVnJexRGDaAgEu_1oUu8tj3`Pr8#4C5cR
z76LphX!T~bOFYf!6>_7%Xvi{H0^1IXxPCFZ>Kh|AVF2w6-I+8zxVIZvM{+PhdeaY&
z<Dl=rbq&nKB^{VI{1pmjh0y%8PsX1hVsVX;@X+h}DvZqL=zoRYnF)5-*_(qdY{WLW
z5ic4?d_DEJpSKL?E3Pvod6IL)I*BI;1Z*O4sKP^*Yt9e_gw@18F^);a1Pd#5t1On9
ze^wk-P<t8HqNm}jUa|LyXECo126>a-aQO(QFJDkD?q)P!|2Es%G+ch?{@_S&7vJAx
zL0DxT-3@ob@Z;!?)YbgwDJ3r52^>jtyq<?-E+jE)bv}ib>bIbF(sdQaiHR%Kl2NJb
zc$P`l6MIp>s|4%*C^y05XJRjzq@zr+PFTbEP>f>;<ly*g+t!@YL3CEvy!)!8{T+W*
z0Zr0~*Y~r-186)ZQPF<O6!&uz^>AnO;tSU-7-p^W(Zc2>gqz!8f8fLxso1;kjzU6d
zp#8M_95T<b#B7hQE=n9|ekd(6>)6wi2PWK*F8bt4+ta@o;!P|qeVs#TCbCn+>Qo4x
zs?WQ=q<*vp|LKHt{IP)bFHiVC4$r@z@PB6R{ud|wkK@7rznt(tex3fOzs~Y|EBfF3
zd}~r$vt4IH@R?Slfx?&t(hynDfqUKNI3o~|M;YyA4H3ASv&z?$_}&^5)A+U7Cf}0c
zEiluquI<R-#Bua9-nYl&;c;9JJtJ$#w{v-&P8g%TJ1;_Hm$dqtxNiB}*X^4wMqygT
zXk7N)U7kn$m9mBV^ONym1-b`Me-65*-v_7ND{I}m(cOe0DGz&emvP-KFgvm?f89*2
z!Nh554?aD;m)XnYEX60~!>7A{`XuMe**fHoslt9zhsFCPh^vKjXv5YNpAW`lbmitx
zoYR{^o~SpCW%BUpQzhpwbm+YC;p4r<eU%pw$$GA#bT^Ex7=NF`I94q_gWGTP6`t0=
z%~TTw^Iy@G;H3+1ha#mN%bA5Vreopj7z=!d1x{<Yinx|{3}{oY$(ax9HSEAe(bHf!
z{R2w%8?vlq^rUmw6rBpPx%?bce$X915S|L<yD=;lm^D8P;Yy2L7Nvtdy~Y<k`B7tj
z=1_SoczHkRaVUrsmc-uh_?}0KXJ?Oq&5z?WJv4RK)KqwCo3m?<@g2$ARv?LUm$x-t
z@y4DNP!Ib-L@)It2w`kp-U>d9<l?mQC2sJGj7>!>61W=egwfXQ80j=~=6jN`&NA})
ze<*W$bE5LcH9Q46><&)WGh`O)-^o{;m8h<DM`_I9FEnEuxScP&8MrlEoFE?Ug6F_v
zp|b_%POR8hu-NahM3#WWzD$tQdWH4{a15isX?jTQlqx}ivl%6HbzyZAs^(?|t1B@a
zh^>qHR>3s?-j<$U{it}A3IuTFK-Qai0H_Xel&}4oVYL6j*@3px+rsYp_6vCo#UIz>
zad4Yk+6DpRyom>gA%1}eP{uW?#|7@Y<!KWOy<I9bpF??Z9@p=k>5lQ7q!<upAuXKN
zfrK6t4vJ{7YvS20k6W4@>lh|J^EkuIZafZ^j2s}r44$myyH!Q^6jMZ(v`$G%Ga15F
z=QAY}eirR?*Qbz30`>hh0T9XUgKh|gEFXOnp*9pg$*6(ir&uqoh1T->Nk^vRHPUdt
zY@lgCuPjYxYoyl!-9@QuXka3(A!Fqf;T6AMZ0Fql1`PB;pD^W-CdGDo$+pbB;Cq$(
zxr!G(Sv5N7N;+JjGjNLsLf90o@bGiEEe?+)gS%v3;lc}5;5817pJsJGjkB?Zjq%u-
zFjeQ4J+uOJaEN4wyc3a2b*e>gtpRjMyjEl9-sI$LN!X%Q1UZKMkZ3AowlbUPfF5T>
zo8<g_U@>HqyyH$ke&vSpwn><cnT3cxM-`@0o@ev9zI_HdU0o6U+{}DxDkb-Mw!VQR
zbKgUNdWG!0zRq~iZf)>td)~=d2v7=9B7uvpUO?6o&$r+0;KE>mfKvJklz77^Ifec7
zXz*|>cFZ}2k>nKiS$Cl^q(021Zde7wk#p&a+ngY$Y!@rV8ApR`o<KVz+0eZX)@N~W
zpwJun0D4mI%QK$auf>NAXOl1%nXXIqbpj+;t=4bo@tQ8Y@hl_j{bUw;D=eZ}9}dlR
zxD*C7o{zRvZ^bx$kJ(qjbPcRLQ_sm`!U08$*r*L$62s6Rm#dN)@C=1qfv`&$T{v3x
zLAn!jjmY7Xx?%FL+Cwx$y=^8ApvjicFb_A@d44ZV;SZRh7fl#4Ufgo?Ridx(Mns)E
zFGe;|sx41**xjSYibh#<K{DN8eul{#R4+>VRWPtZ`Kf@=Iu5<*&FEEmvXs3UF3o$7
zEYvjNl3}N-br7DI;g1`H{YR@f>M&ZNc<Y0;ED|`Wj0+D~m}_hJW>#<(JFcUyi#~Z#
zrm`BzSTlj`H7;ojB~^Xpjhg-Fq-Rw8_j@BL#t(QeL%mAxJ@hKMF0-QbyM??+kQCP$
zr?&%4Am$E01<*k3GU`r515IjYlNEk|xS81!f4;2#s0RM^W%bYUCPfn`I~PYI6DI<W
zf8??M2lh9||B*5O6^{AG6aH*}|0Ryni~dWR{9A)z9Dk)dvM~K^-LXpJ_h48v+U9f(
z1W-}!?=A+#BD{&lbifjdc1Z_xw@bk~R4oh*$A@$hen0Q&sAQUnmJ59}NXpyzFrMkF
z89v_bj;|j-WzdZ4V(swq?2;vdginsiAd~nlDs1uGzI1%xRO&ys_UNDR=OJky60_pP
z@!*F%kx5N|)wtAqYMeR$vZlgNVgT}6u*%p60ruEJx7oPqoyb2iZ_{xRZnZhZl~duL
z=m6k_PpLm`h?I7km~f4)q<&(xp?^DIMP?suq{q&zyk@e$j!_gatt!Dr@m@7j*xPy2
z@2aEH@&S0&r^j~_p6!ig<2B28`iwG*pl_Tkqc<oo3!sEWsVQBYcYV$~@_2MIAINSV
zHP;UHN~CixFW7tnUwM6b$Eu_@#1X0J6k+4sJb-mo0i?c`Uc*+{5fu<yJI<qed&2sq
z=-W4WqmM`-vTS=-e%iXm-Wij7nM4v0YeR;evs!<dN8ctw6|PtneA;y`Cg?vE5fjFD
z`M92_(kl?kdICVwxfgL%av-||%$~k6e_z0pEE%L8a>JJ@?rr+1^azZNg}-d&E%nuP
zvhC39tgf50=bz1Ob_QStOlddKN#9d2<26T-)F{Nt%Dv8Se6?`X08{voSKd;=b{)gM
zXmQ$=ftxL@S_%oBKN3*Cd55sUlICIWaNE$C9I&c$P)v0;))XI>6tz{%i6`RUDh7^L
z(BRJMoV$b^Q6-?)Cui<3BIOm`&k`=3JYIF_N0PVtyu-W&1q1;CrS1H%_YpWNh;B^B
z?ScZa<!_@R?PA2iF?XWil`_vJSCF8W%hZGsy|MTN{Zj>nq^w?Wc44UAN61}nz;EY9
zcI}HZnye!NCU~rKYZnw=wvQv-DJUSrW#gfRhozmyn}54NH5tf9Mi;7sZe7PjL%-5B
zZ3F^xR(<UkF+0Y3>yv>1IpcE!TN1yZH}vH>6kEwEC+*5v?ZxlivS3(?VRaHy%tKNd
zDmVpVl=jvmyxobOR%GhokFi=PVKjiFxWXM)tyS2V9IXJKzd$uL6|b#j&8~d10|?2T
zKRx>?PtqLmM(hb4tnXxr5*Q&H^5KTEkXse{ohV65Vmp+W<7dG3Zm7174k%Pwk~DQL
zGr3~TQCk<By2-e&`$#}-z%eEcgw{=S=jC2dytf_Di2Naw$Fu=jMcx97f>mAA)^#<L
zVS_lNazr912NBch#_@_15;+G^CP`HXcye}72kf<+VX!Gq22fsvtW67auR%t4$yhFb
z*pG*B#DgY8<}`HTK*dW>tfd*k&G7E$V6-*`#55dhTf+(YgHg=d;Yy!yibs^)OCQ`)
zpO%~i^-MFqZkha&uDa~D?})duSBGI5zo+>yBP>8D2=E35(6@(dIa0{854g2txh@h`
zb)2Gn#G4~ZbE5A{`ni*Vev#hOgD|)Ty2VKQwRle&7%g51uVg+uhG7xl_B4#nuh4zV
zg84o7#dBm|SCHY*VWN3_t@EiDwdB@y-+q{uPcjZi$~lxrs|R~rek2h62<S}mmS(|Q
z<=cQ?vJR6$qOmm^ZAF(!ZATsdox6Q1pfC)^ttU>tzc5k%2NeG3DUw3vwMU_%X>S~4
zU|(EX^F9@E@gO+t0;5VDidJ8vx?%KP(k~JYw3pZsap=_FyQ%q@DKV%_n&`o^i4}bk
zE5EgY*oYhyD-$PTkT|vSM>DgYg;~PL3h$+$H};`Br2AbskSFuYa3A_pU%z78ydp#5
zJZwD_aZT0-5`ts1C4wMFAlgiwg3S<8cjD69fhZKy=FM!q0qqzkbBRn8$CAf&nt)%X
z2s$SOEEs|%j(VojMotxeF|vIxW4~}`rXfbNWsB%BQ)|`S^)7^)0wf^N&wCjwMFh}v
zLF7jfptB-3Xfu*zbFKEjEreh8g_ll_hBF4#!gU7Io?}xPf+p$LVjZiE{@~V#cbZ3=
zaQRxF=0}vf6pFwy_6GCp@hYEJ2zNk4W^>7FbNMVM?zc@(C-WShtv4Faz_x7!Q|F8p
zQAe4&BtRJdfw0r)$N~3sPX1Ah1^;NcLsP=JpCccj#8vs7aCkoDd(H~gT>Cz>*l>Zo
z=oMb83Fg8){3UdzAaI3e_snk-!oF4cjS0RVY;-4oL(g&uz(4Tx3TA63A`eGZq{NzF
zvX?O=LAeshM23f%?g=bWnh~qFmBgtDt0)r`!wkqu=|bF-t_XAXt)JtN3twv-V!5w3
z80wehgF}v^eecaKD_?Fo5cB~F=9rF7GeMm^xWj&&z0`BWS!G8UskU|RCbF2X0y;-$
zhNu9J=;`icBye7xdyvJ3J|><~2MuWU&O%5RG_fZCEF-})i?f`(cg;jUV)*Vt7yrRC
z4y4HOX#|b6n0JgD;<;Uxs&s-7WZ&q9c{~Q9GD3#6YX0{qdrCC`PmTfM=fkGMr(tvB
zP#=#%8Z8gRBxew26g5iBpL@ZMSLVfjE`pl_vIPTykjFIQN_uD73CXd2mnmLY+R+hQ
zp-f!wp<%;e<(b(pFv(7|tq#lAG+Ywjcnjh~WyevjdP$_|kBm;Xq7F`A8+pbCvYTS7
zfee4UN3Y!9N)^x9pMQ#^ZX`c6o5U8FWy=gg)G_Oi3-L^$LL<oG4WyT3t8gpxxb>Hy
z`fArX^kB;xomzK=dC;(fv%#x`g=Pfb>LQx$bsR}(f4`s<1CF7GN2(kY71ry#egE<x
zH|UU=qn0z$Bn=ohJSyXRuf>o~sk<3WOViB=B)Pqs^ZR^p>u?5d-EfW1VlR!E0Aicr
znrp~I19)Yp?UQ6K`w@MB&ODKc4Ken5zB}NLSOeBx!Y2(J%m_oGGZiQ8O{t^ae9W6;
zz2dm`unnwKcotYZD67uHR^g*CP*wgEUEm{vxVBQm&EKw%#xpxJ4Pp20Q2co5K7W({
zGvUw?fu4rsjx9LMd?j<A%WzU^NJC=qoFb*whtu#O&tZ4Irtj(TnL?8C%QFUvkEZx3
zh}zN{fZvd3ek#Ow+fY<1UXTVG7xs0k%i&@s1`rMioGD&U$Q@4*k}tk>G?D<wvQO^8
zw2sQm;}8RHlXx8g!cg#RU$#f)o@alaiT7D5oXsHmG49U0l`ph-OT<2x0H9HC32jkX
zh;Rb&GkqqybIkRJVE@S-J6QHKw{4BGRa?3_powZ1?Ud4~`SK-tGc>P@k%6|}%j|fF
zl8L`v_HtHCOdyHWimP*Y($zPf?l<T;RyD#u!|8vkmHvbE{!K~wy^ryKHk<ipIQ?s_
z^j{SEf9)#z&6te;5O4opR}tr5XsC>=zZ=E>roz&NF=4wVdYxM%4_ibK6nUsrgu@b6
z#28O>JR}&<&luPwt|9!4Fq&fBV&2nrx0{$;)*rTjetCX*e%@)8dZkt~Mc-xL?3@bi
z$Eamvs+-PHcLd(B9D_R@*SSK~)!f~xYrR$J%iALj)(SGjoF@NSo77wW^vH8BWMwnW
zE2Y9i>5#aV``~{!YUxmIQ0*M5FR?ZLn3igbXkxH&<T(*GA8n2rzDbd@gvu}6S9es`
z(nxnf(s&vwflS)e{4uzCD+zVn*iLuMBYhUxg7W*EI>aFbvN%mUrT$i7)VYWs-5%HD
zcCdZ{JQCyF6Y1AeAV5`VEz871(AAuk|C+?R4tL5a?))5zS@#*?xmDP>3EedSmU<h<
zVb1PfB!&`h51DWs6^x+{d)L3~!c%;*RvahNfQ#OF7{-toaRsG~y0%wB08yQvWXGMk
z4y`s>r=pcty%fLHrEc|(qJh+=Y_vfLR;9b2J=fA;c5BK+KZT9`woZt_?TD1anliA-
z?)a<id21cGH!kqV^Au_nIh0TMMu$8)N!VT&pDtGs5M`Q~f;*(&Tp@8*f2{-hO$Ux9
zL~Qk^7T#Hodn1*2{|b*|j`<FlQGWbhThDcsj1G$N>l=>T#*U@^xYM=2CDSmY1HroT
zacX!1a*3FvUpXqhE=R991(V*QOxZmbeJ&NbHdho$BuHK57^|Z5Gtt?~Apek7#Qe8Z
zg``Q}DiNx=VElG*Z_ZdTmEv=fL<}&N83^IMOT&Jx&KZqRgHpAxwke_$(BhKTA>n<5
zXGG@J*b8@@JKDD^a8dFuK7huzTwCwV2Go%6Hv;?nJ(vsL+a|4V-nE6G9Pi>zXT-5k
z0-l(u-(Yjh=e~E!!ML7u*x%M&@dhnjZM&+aJ4<3qQ+ucrqEil}B|jx#mTRJv%aRXn
z8*^WvO78>b8T3gy!+!K+5#ov}={1z*?1Ao4=7f`u^2ogi#&juT6z?H$jZH^^D!j7z
z$J%gA@$@l7i(1Qy{q!OtErzF_NR<51<6Jf|=<)b{95)3k{d^6lgSx+BG^hbAD}rp#
zGv{`b(GG=E#|cxAuYJ{ZiNOO6>d0-5HKW~jbtQF(;lXrSTCxKbNDTj*k0`<A8i8qi
z^>n($rCS;C@Fs*9ou{@ow_%;L2}F~XN)wFZ7cBAS48_TW{lVfP9cOd*#$LUpA{q|n
z*)8N|sv2iWw>Iia9`H`A=YFM~5cbJCn3T9}uG%mm9!O#QVV=mr(AyMs?MK@F@G{xH
zfY7>t(m_x9vBrAcReJ7_hTe%{0|=h87c@KGgu=oZ<;~PB)N<5zS$rux%==FvXw5SA
z<>iVJg}8;F`QexS&nB<=!k-@3n{z1%d*BNXu$gynHoC^{%i3?Umo8pRemQ7I+O4hS
zb<pI#y@gCO9AJb~b!8(rs*l*mM3Bq+d7=LO<Z$`6py20h-~DYlSIGoQ8=qfK13N8t
zQ4^CQef5Ee1N=}(^E*lIBn&kA?5|CY^OrC;URk+~e`!Jfl+fuic-IpqR;h|1yJX^3
zMJHJgO|~cD=I|hk##c_NSQBL1%$AGv*_Sc><{D!W`t>d8seja={gcR%J%`c+LHFp&
zo#t1IH7I=RRtiSDcQCS5=vSZHnuy!X@kjW_*`}^p(MLm``@!u@0*k`UW8=;-&*~^n
z&+bioh<QlTZd>sqxV`;+l8YPyNg;OmuxRT|tyOoR3FMyD(X5aB1`loE_hS<r{4RXe
z1zUk~7#&%ibPFdMV1wg_m2b%ff;9%&4woY)HlG2`76@sKYKJn-i$lc7BVt&w%B(L8
zo8o?;k;$c+K1tb8BtPudlw!ATeKpuuPUb)&hM|8ne}}<3!!O#{vXptCGcc$fy%tv8
zfvuE*92D$~E@s%vEi1WS3?`Lap-9S*=R`KVZxn(G?Nk=>6dwPTERAWy{BVd{%k{u6
z=1k&~_-^jcG{1hqjXb(pTlMW`jzw7=6ymO%NfPsO&G4(Bhw#HG5OG}d)M~Yh*mToy
zhs5D{`cUAUL_zTV4JD%HTea>7G=uh4+MljZ&i~ek_{R<O@7L%5)QI@=_4(IE#D9Bz
z{w-~X^Dj&ZCdS_*ZGZR5{2guBYewuoQ#%${(O|jRrfzu{t{!YElSa}}Y=*~)nCq2_
zfP%bme?Oat2MA=*tb(J`A&EC<Y47p<KKpLK`0`1vA$!(HXUwQmSt?l8NJGU-+rWg%
zgg!rXnpPxk!j%;z+#5IAuy0XfJO_8?yUf;M!ktwiNj~ArJ|%1zZx0%T1`Z5^C3R(w
z1)%~o;jZsGI<jjV75tXpbP;)!+6l55>&ii6!x!DKg~sRirGzSxC393DsiH!SbZ0?U
zQ6wNsT+P<%8FYR-*j+2kv6&>zHag;X5P_+YfNFCVt_Mp~yafB@^Ll-<g_vjHyvsak
zI|K~uv}m*8E!w8pGO=uD0XnbIK*|ZQ*-4i)1fzVVpfD#><dQ2jH);JuVa1nZavSmt
z7z7lOzBf=iJf<I8z+nlq2O*84vA@qiN=Cy56Sy&x?$6CLr%7-yG#YcT^>`>(BOU<Y
z6#$T!>a!h)^)^hzM80gbLoy>sUSrIee!`VYSl7YstIp&e-g%<glKi!)!Kx|C)#&e_
z@M|p0_IyLKXQZvU)vxC+aZ(-~3*7y%wA~?@gHFoIzH0myB*t+$r%nWgxmIE?Jhv~9
zv=72Ai}!RE6DlZrMz|9uk}8p%tbQMY=Uz3Gk&qudNAPEMY$|&PY)^gHS}-p(t_3Q;
zIei9v-Qw!W0m?7U01SOKtl8D!F1T`w9CF-@%?Ocs@GFY@Mkb-_Z&F}l!@O7SmwgQU
zMIQBT@2VGSIJh)=sUr36jC-V2i$5CG#4O_R^Vhw0bdvW#2*JLlaa>|E^In6ZJc<Sw
ze1;fYpuMxXzme!H5%*O<n+k@A&lbfb4OZUpIqei5aI1-UdDc+|08U1}S9a|ehA|q8
zl*MfV@5T9v`Q}{<;Ob;3fk=O49$+GbT{qGT=%t$+Fp#pqiImB<iqQ>kvU;)<x$@(3
z!Lew24x*O`aSh)v^ceS{lIp{1L)0*>uw~`cQS6i-V1}-j%8UAl3(#^bIIEEQ-7NxS
zIR)Z&2c@)KFRS%In&2ujgrWl=iAv=m5o-WA5Hw%Z!oy9C;M9BD$zC5qW7$p~hAj8C
zGacca!=d>CE803J&j^6}>B-j~wmIENEu0s#*TwUjxW*a?DR$q?LoBl@bOZG-r7b3i
z1_VHfr~uqL?L&y#(YFzlHiohg;IDdgB@?k*&C84jbm4nKOUu(qzU;S~*C$&6{s00J
zRfZi!Do?Ao7lFR~UTd7-am#|yoKPSfJpfxV5QY!)DM`hP&xT!%$5si6#tJSzvF(>^
zF(av0Bg}Hq#h;cSlJZ_iUaPvl{tbA0aDEoO5?B|F6gnsf-@zBad<2$0JbRkWoV5rm
z-NYDi)bKoO1G}b>f;FeEPc8>UoADZB)<oCY^?L<Jz@xWed<0#n?kKrrSOXF*XQOuJ
zy|=%J@&!Y%qu@&>q-s0@N{C)Gw}nNnSr4W+M6^@XGLxcdnQ{g|+t?deL&Mn<m@-f$
zIqqyHGhrhNx)WV!&^)`8S_>hGQ(0sqh5koGsh@g2Rwz?JujQT%80nT9M3lexTST2+
zQ;(_O)zmw2v+SDv_3b<wz}VfsTP|%^Q!qVfMtPf|dZnH=Dk}z9Z0E++Tea~H<+pT>
zk|V*=Ce?>B`c4O;k#eGPkn5f8IOB2^meQPPxXi6-*Yl0!iq3{(f`AY?d$DW4ASc4M
zf^C`K|Lfy~5OEWWK1Z=@+Y#5znCs5U$pcC~-TTJ^PzSLM9G*uG+3`Kr%Ql6phVRfF
zIWspQ&<+c=N;&0$N#LzQFPj1z;kfsOCyM1Y<a~5w$Ez#K(jqCv@>4P{fEu--G_C8h
zpX@IOE!ORs#`AgP3|eY0_o#UF$_q`|w&YAz73H_n8~c1oexSZi)Ao2y?|@g)b@~O0
zWtA!}>*%D`U(3t@PGRY8&GDyWtlRjMT}iRTnP0q;_NpZwq>lY%Gwtta@&_{fCse3y
zl~)kTgEvs}xsmJRxOSgN0O~nHs?5fOsJV0=7@GBxcQB6YA2X30x&jkQ`N11$8gQtx
zZiRL`Wzf{u<zX6!Xtj}V{wXRJDnGo2^?yG|Jr{~}-T8wVm#5TRBx5{($WI)uG47U}
zB2|&HoLf}y=gk=cC{?n3qZSYHMaz4{SN}#sowqJWW|)BLf`zW7i`XbptQx_ca{l(+
z(iyQelvG87<z`rZo4c70h9#D{iO-07G^eh>q!Q>t^oJ@5SZ}L+QRBg@^}rs0l01{z
zYi<IjLnlyrX@P1|*GgCXf_@42@(6C2q;W4zhZ&71PL2P58IbrgJ&uhsm-b-fk(e9$
zcejP__Rslwyz@GBxcH&@l?{#6cif_;zuy%DjEag<Q0p{RXimu~@63Qd#h!Pvfm_u0
z=RbZk#bq<c-=9(vd3L5*GwZ==xkH7g3>i_4KO?zCEq?!reQxCIMBZ4&R6xhE!LkJ^
z=Vp6WQVFEm+s9boT3=@pI#q^gNUK@vf4tU7S-)E9S|V-&8+`R_QG6NN5U&vHt~)4+
z+>nV4A4}HbFf$?9w-ZvVb7_YihsabrmG`u6H9Y+Yl#$T5<hiGrHdeQ6I3I#FyUD!e
zipXy$+s}e#q~*hPlX2^LJ`*Uz6ZyQMQ1t|?v)2<d^1w_y=hyf#Ei4=JkW0>JnjYxb
zTF~7NS){BthfvSay0}|e18FgD_lUnnC&$bHBR=5PE>(&7YN<J6%0fhP4Br^N!F(cb
zL7=#nG)caSN)q459M9VWK<Hsv<$azM>r;xkg1&aarR|bt1`dX!*#|wQ8K%y}Fl$xL
z;s9QI!*o%frWScEkNJE#S$#Uri(=4<dnWW0%ktS!MG{ntQ{7)nG30(kC4b}pf*+<C
z{<HP=JCOO`^wRx<cK!{|IRDqy+drQ07uMT<Nf-aFZv0pB^xs>V|3!0u58M7I<ost8
zfSKuUw=y?rXxXj*BMML#r@37zn1DiBd>mxN5&+%85fbxA2n*y<+~iV_@_39ia<t?|
zS47t#iOVuVud6FMu)~gT7J8qx_N$^LK$qOtut;O;aw#D8gCgD%H)0gt7^Bjz;b}9E
zD4Y%7*3b8WEq7FrS`!+njYjgT6|%GB2OHB(dtNsVyH;^g%MktrE_V80+wz&cu!qG^
z&r6z7Qp<%Y^qtGl#82zh)sSXD7ULhEWfCpem>zNr0I30(oY>7K)M)2>FK}VG*GUlH
zJQlfL<f=M8J0WAzQl~Xc6sW7*^Lhvjuf|{D+O3mcvDI#;dBcOwCsv&1amgyanZYTP
zOLYjv!Y*D14(q7cEd8W)YB1Xj>g!z%TYT!cG%52_LEWggfXphXvOtoiZV$}XeUJ0E
z(v81I51wQnNOc8Kb66VKx+KlGg0Yf|B_?V>Akh>YkNx!~Vx`4mu+lqGVf9QB-3boT
zeeejUawwCA*6PJ^zQ}ThQX4cyDjjdkD_@S$nxfW0uFAGNX;4V1*a1y_YS(P=y{jcl
z-OFXb(juS!WJf&^#pM$eSrmx%ykDk!8e2V>?BWyXf?Shy2I8HhapCxMQZ))>r$6tF
zv08s=C0NMKWGV<edhw$c6>pzG8-8$zv9!ahR<HRa;JZ=UMA>u@$zzf@_1VL8t$9<;
zbX$Iionc`WMz$44zPVJAR;@IOd&_YZ(9ijR>)Y}R?69N|!SX?NQDHb}*%Dk%%r>F`
zYL%%NTn8MiAf)@!HOR@Cux8l!5CBXpfcQ3tiw!~sIaN|3@hFui6#L8R2j!DK-!YgB
zsO$l9;tQ*?z@u%YVfFy$Yd~#HtyYZO>>CAuC;+_4w)zUj_>!UI?_B;m1kcMH`#dTL
z2NFiZvbA2lWDS5==wIEtqN+-(TMw6S3zh_Kq5684s`j!nQbc+-Uhj8J^UcLF5y-o1
z#6KR6;p*MP$h=qWaRZMsjI)uyLkdWx>D>rrKi8oR&o-=dt@7@7$bIJXJcT6q8ap%G
zh!}TP@Y3G~gDvp7t#-SZz+o-lm_Nn4I_>mnLfKjTx;#7V)$gwryyrj)o?{ox;{3P*
z3oOl}a3H2mGS?@a1s2^6fDjtB$uZV-uwvn>Q;3&EbdI%Ht52;-(tzSaiV$+>Aca9U
z5-=wcJA4gK-tQ`)W&OI0M9O&>>}njh24M)GFFX!LrnA*Qbf=Nj(op~zYqJqhOByJ@
zZ*b6UW6qn0Z<sh#ZNW>yrpvkHjM4nehb=RqtnoS2<DrQz(ty`mB|b6PA91L(2pSek
z!TRil?eAEoP%kc2fqM5^ax+TKHi{`Fe^kk?EudyVxg?0kSNP224w|oH=D_8qY%jrX
z?iIp4KviR$sb?S_bE06Zxf*#vam&)k$Q&UfT#@{s6l5$?{%Jva<}XbtbAEwoV@3W;
zh2OG;pDhk!Ku7Ax<j@-$8U*9JAxNTC;@yY2_y!x#DPsUmSn#jaaQ0zI))Lh;tZS_i
zHcR;4L0gD&lA>M+%QWsaszphqaG~jg6$_q0W*r8L*-LfBrr;h79V6ChPmb+(hEefY
zFkT(d%jM2PVKt|?H6vD`bAFrS8f5>~2xVLJQ>{p;<$dA6nEA84{>R#AV>C9g@u^N!
zXCm@U2I<bITltOxQ4wK1;Y@CAXBiqR&c$AoG>C*E8Dxz*=4V73au-^;qQ`~|DR(g1
zj;qoqBEN`8r+ybB7opia2r-Ys3T#d7`JqtX2}TZ$n`T=sa+f2vO4Pk5pgT`+uphCD
zNeJOlxp#SrSVeYJIvS_j<>2o+_DUL!;av>!XQsAV-Z7mcSm=`eh^lDD%=vXA8Ig3>
zv~l0(%@p>5GWuz1iIT}c(0=Osey)`GkPbJ7*(~Ge2vjy`;*nwqi>tvZKftmK&H!bz
z8iU-i*Vmbw?YU0`39APaXhqXeFi{9;+$)6Mc8(}{Dde6yywf>>FG;Vn)thHHnxwH0
z23PB+OO9KQkt_*?#R0K+QlT~4=bzAI>d{!+4jT`#L%a{=I0QA0l!}>AS$1q~!@zLT
zg&U}X!rjMoSu<ClB;`qaHkLg(<7b1*f9!&uZ5)u|0YjvjB$cipyREw@imigB?kq&B
z1RD|i@)IAw7j{{&;>w-hD2l(z(KmV1!iZQ$0NorQf!|0*;qU7WgEpj&w1*kKG>?*)
zzn$EIh)wovUz%neq!U;0X!)Y(+xDdh0ZTxxyD<o`>BQ>&G>;X8w>ZOlfBres^*J_-
z2y*!#h=}>B2nl)spN=ognBmv6#^?~vN|?-FqxUr$6Nev`5r?0EAq>YJ{H;V8@HCiU
z_g#}4R~XgW*hMbQ*jgxYj5^)oF7=zX`+hi($>HOMyhv9=G?_ge?G|-E%dKzQ3+|Im
z80Xf)2Cy7mBFKR?q40yl)-6UWl`z__0Ab0mNmCB@cSWSh@u}nUg`wa<BfvAij}X8Y
zN}-(u3}p@b(K5bH9eIv|%Gd#t>K%ZAkAg<z@7@pd7f>~lhPai*h|w9!_GiCDtK7nV
z`Kev;g}XE(o#m<ZhrNlk`Ub~d2azP44M@I1CihkARoklez(TbI4PPi9V0#DW=}1T4
zA{+c{t%W5H*eKwwRnOR!=*3uHy@<7o97+(QtFG~=H~@k%N}#rG(o1f};}H<5K(JOg
z{R$iYeseWDWB(;twBW?@Xm0IePs)>{?yJ=Mr4{UnCqE?^EIrt{8SfxSV+47r)@0L)
z6QhT^^88IG4guR0NR&8v2nfP&s{_Y_Q+N5>H42)WMUvwS=t*^s-^m=!@;S-KwqK&w
zr#nW~3e^u<eD-E0mfd>;98qfvE{WwwnQ3_!et16u(J>J0Sc`EGA+8aJaak6PJAOz`
zGk3%O5Q_NVF#=4^F*9{EEInbyS{i>Xc97~TvJ9ox9CMx{_4Ma{;l5fL!#7~GiE+Sz
z{X~STr04x_UlXw5(Km{5wL1--rt=Ga2zSlcb6zY!;a^i3cvGat#zo%5LBY8U1L}iY
z_%Yf4@hf_;L|!w>3Gem4#|Hb0UqFXo0q~K+4iKg^e9)(1zheJc==-B%^_N3joc{q}
z|4x$sjF$fGiQ_*BeVl)+8Tr@5@xRdU-%0ZSJxI#<dws{hNclhUk>z)X%HLG|CN*T7
zelPXtdQ<!1SfGd|13)4`#tJ^vR5rel>{ha?MFy@}U_GT+M5I{9s`a+j(!-yCl5&2z
zUki>+FayvYaJd9O)A3f3^)yEFFt0w+@HQzO5@DCZ#*D45cOpJ{xs=!WR_dKMjm`zr
zRnW(Dn>k=x-HGc>qT3Z_N&SJE)`IW5BdO%H^38<EF?%l^*cZc&RgdELj4-}S$Or9|
zMw)G9W%s~hASl!i)wp$CyVjqpXqrz$!0&vGZO5-(2%s{tPDgjsPkhs8RQK~UMe+*1
zSR$FxowSlYV{2N;+`Z3W)EqipL#s6`jP$U-4z#tVt3r2a%YVSG7Id;MKImm6!alc_
zdqg?a3cTEjV5oDza)G4#v1Ye!(v5caVh)$GH(7wm4aaQmV4=m<9l&MdO_UEaPCp~&
zq>e4EuPtgnmZs&Fa@w-OdNq|-l=uwc>&=u`()hwFj}qxqyY@A+62+mdcP{yqF0kD;
zHKD->d6|o%VT%uSM<yeC4wW0Hm`9Z=ws^mj$@~78w|D<63V_rIs_5C!qfDntFT?zK
zIwDYRR;SV(JLlfKs_WDCde50&RTH=}trlQ6N0P}qAhunBLeio(tVT9_+0psx{-DL4
ze`A9~D*q96N284LGA!C4qSxStF(34yq_8VCo}L6~Y`0c$*8H-pi#yn@ih#$ruz3%@
zTmj55UNZIs19st4oS5Gg4)iQ`8MG7ZcVvsA$yY1N$$ksU*sCO%MIw~eCZ-J)gz|`l
z_&tt$p}q7ncrP?4+S`{k+@BSi(9zJn#tG_-X`pp{6=)%(H*RmCW5hMON)U~LgRIVz
zAACz6A_xrigt&cn7v+iCLVzQuUmz5kzk(srKn%hvep<H`_V6fj9+7oDDYifYr`A#4
zbh%@?;UQtfTL6R-fvnDL2q9deh(=Xo?E*xc3!?b7<bn{indd4BZuojl0~u!8RP1de
zJOrZ<7lWUaz5zU-v$Cq#ZI8;TWxJeY4}p^k1RU1`zjd^kW>rdE4-!;u3htZ~XRtC%
zh|PA<?6UK~RB-y$A<w3z(vsN(Cg&21ORKpLV_71UTGc=bTjH+8!y}tKKWv4laWk=z
zd&<F}mSeAG(0z#quO$r$%J<rJmPN}ll0(Pgq0gh%$}iC~mlYJ&Qn>6>u~U*3I(t4e
zB06Lycx{DLH9Z5^fyrshL`#`O0%X3OV6cR?d`_x+#@s8FWZ<}H14oQJcGQ?e0TJf`
zwQAx?%$7{SLF-*qkO={w6ID}9Z3!c8{0$h@cGb>4DGb^5JN_>anv%N@#P^W08tY@G
z9l0ZnG{J95W%o|<Sw&K71{e&w_Spj6pYtM!k#+8`dZ$H#7iSBtA~mJSlDiCvpWSrQ
z8?J$@Al0?f!$TlQ390@ijX9d2zLo_EemjHtPpviZ=P~*A;xq=sju4joQlsX_&SE0?
z@Y0iP`=gxDy0za__+<rY7rS^{@D>&X3||k;s-#x{x0`?b$RQ3)A%I8j67vvpOap5-
zGQ@?|v4r%sXi{@HS0AVY779Ru@CgzH6N#T_T}D8v!ig)s7<OHOn!8E}bH$^dRYr7Z
zd=-A#;6GEf3O=va9`Db$UB+*`>KbbI8OcYl?*+CQj%?%GA=?tFU97vY-h%pc`H6a(
z1$-dwN|~INED%-b5L}Q{JE;4Jr;z?g@1J~^XyXPkL&hL1!mweKgGkg{MJGkJzCo8e
z%&H`7(qzY-rco|Y8mN8dzrFfop!@YZ>9<EdJVsj)kr9ngmTx2?Y%Slhc!0*qVT;@6
zMqCx&My3h}BhQjD`qS-5ihRaS@Pr;K{~F9Z6KlYD7@YK*P5<3*&TW0;d<MZeM2075
zB-^t8wibS#KgPYpK|C&M!KWa=64m%%WBKJr2PQh?Yiz`<b+5urJ}z2pzX89O1iICU
znZEp*A2|7$5B3$F6#!ULgH%iggSTu|g&!7xx4MS&@|fARow7X{oJQ9uq5nOSA^*9o
z9@5JQR2~U1%4=u$@&W}cM?%NxB{Qn9(eVZuJz(_x<>c;u0fzBKD(i|m^;r|$s``Ll
zgt`Uy0iUvYOqJFsalVl~Im*v*2RKyzKu-yBoeCM=?Kl^pKq!oXEond2OEn#(c8(PE
z{rU5NGW1?~(HS4$<tXq6rJpkok*j{w*|d*26kZ8w+;H^3pohRufg2OkW<G=)GSV%3
zx|!Z?!=KHyteS(@7i3UC-He(0(wNp<#5I?)fj;WJ!^R-e5-hB`^-!Knj&Cf(_n5zg
z*~<EmgeIFesNsGt7i92)q$Rw?E{*+?%Av4LlR@5nFl=BAz_OK@zl5juzH9iI*BBEK
zuI6313w8;RM><sJHIWVY0na`4%+2<VBdkB}iVFe?b*;)f@C-7DiZUVzYfxYA<tYK2
z^GYD%MpOnAB^Mxgj*!~K5_x3MXjQ3c=XC2Uz+@1e_<0kJew_gqZ~5+AUEz(yXe>kD
z-pTYs@&`ktf@_o)dou@K2Rt{#3`PDVar%kEM`|93#}g_Zw#k&xfh+{7w{f*uv|Ib{
zP;a0-bvwO1xXj($%fShr6y5h={d_^hU_E`&h4L&wi$v}__9Wq;HUxgo-lU)NfSZaj
z0p5TSyw|q6@NW$p)iexTH^9@elItqvIBtqT5ug-lDZnO#{tL9s#&evbtqmlAu!XZ)
z^A+z_x?P4hK5%s^0IVWnU6p<EQaJP(MAYye#IIf52F}>D<zR%;5(U*^UUdugW_E3z
zZ9BI*F>qYVO_sbkfotxawGl~Hi8^MO;M0o5r9!Y078@g)IUu}dW<UK)5EoB{U1TLT
z)=92*cRMZ-Ejfx0C=pu_daq*xfyjdctM8r%pZV(;X?CjPfw0BT$<1+dCBIT{H8)ja
z8+mFp)97qP84+Hv(x2^HxZsZr!54Su?gQMLmC5P0r^efCj*Lit$OY~y6Jv0SWZ^M<
zr+X&T82>8TCe`p!a8)ua;gQIkSgh6U0+eEIJkmOh;c<5-iI#M8$?D0VuZ-*q3+Y+b
zKTY6twX1gsT<1q(W`oCROn_YPpn^lT8}Xc;M7FzL$08rtPGEg8;64<?pumVJVS|J$
z--Ffh+!h0FbJfV#U9RnXdk(N_ajd|v!@<^lhK)!nGC|tskld(}45pZUH&;uG$B}wE
zRT#VL&*j7+-?|JC@^y{!NB7m|CVR&^VJ<DuLV6XkO~SPrZ+`-n?2~!Ixv_D&23pf@
z9eval7D&RdWg<8tPvsR4yF7igtFvO`_%qc0(MSGEsQo`&`0rHv&+P2~f@=Sm9{3m4
z{;`ekzex6PX`hS?f7E&ZGf2nI&iQxg^_RMY(;6E}_mSH1f?{qs8KAwCoNP(11ALn@
zGcO0{43aTZs(4DUVMosAQ#a@~k%B5**FBM;$JNfo^Y^$3x22X7n!5(|!G;4<wDQsE
z<Z)Ap_~-oa{uM``D+#~u@W5UzG|z7NfNMviOpoIfc<^V|_92xM8+}D~4!EvtNOp1g
zDrpV1PTNDG2i>PTQ142Hk@^#NTANK4&V)P@9nQJ19ZM?<)jQB*2q<qz!Q!R6nu#sb
z{A*;);06(lR}B=%`m32#)Og-0bVVvVzL7$gkdX|*mIFNs@Mi-xPphugLmAuCk_QPx
zfO;Z5G6B(g+oLj~q<D4WBdP8+I{`A8Zv@j1RT!MSw|g+kNcs4Ki9_0Y0TUwo8`ow|
z_OgR3X#`NV{~v4b6sGCAWod_P+qN=n+qP}nwj;yN$gpkOkzw05JF5Dxf3K>&`l?-5
z_vv@=e24En=NNMg!DrYDTcs;^WmQvtB2OeGtvQ=)cnM=UN0*Hip{|`}cnsV9Yj<k+
z7l(YVbh(egQKY%)K7JX@#_9kGws}^Lkh^*~3{5q5Tx=USnLnDFmSfcDGM6%#STr<I
z8+AyJc|V<cpW3wbnl?^@M?W}iJUd$vCZsH*=Gi+zMtr{>Wd6{V8w)M!iZfwXxUQc0
zG)R9IZ9%1+rr$<Fv)_h*bc&_w!5Z;NX3nET$^OC3#bg$MFgiLOe3p0EzjV*SoSiwn
zSya{^8Go8xnio_oG)_#&9a6Xt+7QTga^s>aFLXtS!R1v@JbK5HOSb)i$jBJIynHt*
z5la87pi*ypf6uv9Vkjpztg9vmZECPT$F%U_wovBmLiRnidOFqV=)}q9JZt)3<Osct
z_=|5}@>;KG)WJtrHm3XzeLX6xWe1FdIbEqU)Q|bJhV7k!rr-7<X<UA)XYgmv#Y<R1
zKLR@q$czXRrcl^)<19V^WW+%G%R3i99GAb4#;MQlG?oGua1ojs6MU_ljXRrIQC%hC
z8~0tLz)To$pbBLFPnC$DmMKnT5j6SOK;1l&#EQo6cl?SGA(wF4&ib=4@V`L`SrbQX
z<sn3eZ3~r^G*|?~G`M-2ML4c{OPLI!q!oyfd}w~Qu)I$;Yu$ofb2oPkP@sUKMX#V>
zxWGW-)||%^GTo0LxB@Vm0RVha2uuhY`U%;H!<Z8lVpxIl!5@>i2jdOWQ!3)~yCrZq
zPPEX9)%u?HP>(UjN^p(I{}2na!NKx5<mgv!a0nxAaFw#EM1AGACFS!G!#9_;UvJ-&
zQ*a|pQ|RM_cS*kn4A{*QtUA#?(+iz4=JAfp!IGt3USUt>@iaz&=N#B|5l7|*Q}H`U
z*^?HS_|g_6o1uG=C=_hbt&;?Yk{WGdKF=MSG*Kw%V7cHK!&0LI_{ma4I>WvSWd#pD
zT@2fpeWh^sYEbSbobDl#R^enYt)GG=-pnrE*$(T}wM%8p9W^Mi`GTfebF$m);4wog
z+>gCgL!ia15`x2(h(Mm)bR#jlhvYVa_=oB$k)bIhbUXu3oUVAcsGR#AJK^!L=TcQ^
z#jlwz-eHw-yQP4o37N_>s9Fux17CrNw#7&i4q7pA!G$ZOcuGyx#a=;|$5OX&y^`A3
zK=fd2ncX0Y#~csawwcA*vTxZHg%#;+)fIIE&fIBUgux;DH}h~^>FCy3{}}FpvPtKw
zJx+FZ=HS9xFAIg2y4iM%aBn?+Zo^BGOG{!<S{Dkdcaxf;M+n}B9DtXYN4~WVHRK@T
zb=p>y__|v<Z`*=6a=M3GXoRNi{@M?xrz_uOFEZe0>edMT!;6JCtq|WbeG^1e-}vCu
zTdOiZDO|mg+FVl$a>>Nsaq2UIkZ?e$o$_-{IQiPulS|x%s_M<D2grVp9`ma}#mORo
zq~x-bC{~rNZu8bEYR;ui-hBN~Txnm(qwQ;AT!YSTvF!)iuuV-zITxTFLWI3u8f286
z(KpbK26^stgOKDtE7ow8P1fsh`V3uGag78>ZP?qHT8j!_au~Y|J}>GI=#I(8KgSbK
z5#>(T<)s&cqEeMt^3d<R%^M^sIWFB>$i{tHrJsU@;baksm1b)nQX?xHXoFwz<GIn>
z=6pa|CU!h|b1%V~OpnLpo9d}MIA3`gH6X-)(d}WC9^=zz0X5~P3Ogven<y6F71im$
zg{}J-+;3;lDxuTZo(lTKX*p~i`5UMx5uSU>14OM)ldm<L*@YWST2S|A4|rw|e-tN@
zzKa=(<yYqMez<l>@#o^i=QkyD94CF}n<f|YBuJNGJEp`iRHdTDV|l&j5pn+R`F*Kv
zXbDC!(Yls~Yg+%EYoybhe16$Il1A9(H60aVTah<cP*xzN8Z1J0wBEvNO<N_%7-J(K
z&7f>mmWDj}ELiguHr0pmYFYroGBY8U?^lpc)Ys|OO}F&{J<gDD{7)#r$ne*!_x}S6
z{M%RdKd}HK!@v2fzkm9dVSth0f8RR(<52N`zwys<>HiH5{GArc_Pt&ESC?6sqp@qE
zkDGdg_Y$}b=5=K)FQ#m!NZ?Zdz-(mT!(o;Qi4aOff{L{v@9!OzEfF?c;qa~E#+_wq
zc3aP{H;04WDs_^bEQ+(I4$V-zGf{yA>Vv-Lpj0rbaVu{w3NCJ$@*!txkzac6*O~aQ
z)j+;MN84fOSA6R}?(dk_gT&t0$nFsV#W6qwRN)X?a!q4nySB&`<sTcOBAz-|*IN~G
zlR7n1_3vza3@SM{yK(R}&pp^SOFJCvq7XS#I-9qHM!d<@9V2X(2lF9(yxR^bRW>X8
ztnJrQUc7)A$Q=V`Z6})UGra2nQ94T8y}3eg`&_}91lMy6%0xfgV`BRo54!6vuL+4<
z?E!DnT%&@4h=5v&F_|L$Z7i_YP_H%BD#4Lrf*y#0;5ve?RY*IupG~5Z)p&7n>V_)U
zO9uo3CUe9Ho6p4k<;;vz;FvPIjN%^PECYcxYu_7K&nn2I9fMP;if|CEI_Zon1zaD&
zNdyVx?BOU@|HRmXwzmmQWk63XgA|S^IbcPex-N~$a9>cDtipLT;~H6WNqG)n)6!qa
z$A}X{O7C<3ir@gs6u)0JG66R@72%9688an(2K%v?2mr;RME;r@AVLmLVcY>r<J<*$
z_4MQFcru!w0^e7isJ#<hf4g1B^J7>CqtZr6eLykxs>Yoa+rAglbke<)QE7;CVg7(+
zj%K}3k)Vd;WYJ8XG+Z)aXj>rY<2!fl`fjlf@<O5+T~}DD$FF7`I+v&Uu{3#)0#F-S
zOzg6)plW|4Hh{z^S;uM96)2H<)|Q&PM!#Wc-5*7oWXM{ORZ;!-h^0aPm`#xKZat~~
zc>&NakRFgUtVL1Q<!M$NP#bv1*`$_lI-<bS(<1{rZc96$tY4=Tj9t{|8EwvIe=7qG
zo=vKphstgqfZY3!NCje1MZmh09=*vPGIH!bh~0BnHv@!B=Uu&Y!#=MYeArPuodyAa
zW?FW(>(K_f!an2K2S&+DS4NwNO60*7=ypmiE?(}dF=S3nX>kh8nFTqHkO2kjSLYg}
zq*nsS^58kVgNq4|09MqEodd<6NMedzB|14Ev;#{!k~yO3BO#NYUB&7*b!jjrQ$J&y
zvzTTydc^t(O!}+_hCTzq06rDjfTnLlTn_4?^8u!8az-<dA><zsd+Id*h>uQo<Jkcb
z4C{eXX9wq03*Z=lobWvM|9N!3dz*ZN|D<ZaQRCb4m!2ch_6bDaf}T^ZjAa{>N+NN%
zI+$$F{Cb37;~AR7IIyaa8!A|k*nJsW>K{xDAz#Oj0M(}hZU32I>kNY7{Qe<+#ps*v
zT&Of17HKK@8oR*%N)q5ynE-$oUs58g(7FI=y;~Y8XDy8(lt<@z^{d!izzWK;cIKx(
zDi#4X#KV?p=Wq*VVTYj(=3a<qasS}RG+MtUK1!3hCw{efED}AG%RR1yD@M1VBaVB5
zf~h1E_F}Cqof;nCK^>&?>j%We_utD?fOGE&1@I7}I9~9guZ=KFr0x^r;B$zvQvi*>
z-vLp4b&&eXC1zjgIH0)KVnq_e`3z?u7<;s$G<_<$y-4+BylM-YGt8`s1a*n%bJO>|
zfROHDHK$@$b3Z_$P5J8@6CcI>`ej?-e;cd_3E(^2zfGg=vLD#r6h#RE?DXtC23f7x
zp<7W-2}^pmWL7HQ`g8k2T`X}NjjQz1pf(<)s(5TBztAL^u}>lu)zh+ThvFtv@CC>$
z#JD@FUnD`w_24c8n3A-|VQCx6G5~!TXf;(Kv5JN(j0L8<;|(9_nt)tvz!SRFSt!n2
zp|m7X*oQWK=+5|6CPkp*vwX$1IV3}?Wf&{;BBIVz>@cW9Lc>AI%dYmm<?1Z8@M6Ds
z^obm4S;3GcqHesYiRQp26E-A+CdH+37*}ebQ@{^uIWHa}sjLgV|EP<+2VI%&^3Za}
zoyu#Pc#A)NJvNX7_JgEf`zG`^iDCn&+BpQ>?^FcGA}3msF1aai<sJl=4bxHfYAIu9
zMNmaxW3xHXjti^vq!0ZMxR*||r?j4e#qZYUZ7ttXsW%c+Yc47hgB#+}2&=apIR2S7
zCUo6w5$NPKaPPc)K&Tq`E~iUuV3w&inwKt&GKmgPdR7Ozl1Db|900)sa;56$yH!#G
z-~r!^aJi1aaRNpuY!en2`GqD-=E?&^cIrh3xh;9*cNWVc>;9+$TR~q0VOle&)p1vr
z%a{WK$tl)AEZnl|b-3uHfRn3~*`9Uo95BO25(!J(avo3I@nkZ3p&Cazkt(wlL&)!V
z@RM+MuLn2+T${ya016=v|6ANbvYesXYBn4@3xdOjkS-Wn?`!l1C{n<?Bl4htmy-%1
z;O$*+Gj`Drc-u^Bbo%d0NKlTI&tundzj{oxI81k;`t@qZE@TTMQ#@gsTU;+Vv5BhX
z94Tsz@7e7fF^Qtgry6ZJ%WRA2-OjmGPdnexP#?9>Y)28+N#8Jc;@1J~)SmrI&xYfu
z>zEaV2y(HIatQOZF~d6VxPD7Ra_?o@uDq7A`at@K!k?K;`h`7MgVRtam>njl+_s=K
zd9}I$V_VXD;G%fH@#{qo`9}H!2<l)TyIv9o81?AGPbVh+nGQwgU11E}>|b>BsOwL#
zE7ZmN<k-2LqM~4w13As9ic4bXWhWG*AJBVNj#_lJg5vcZ7F^P3>Xdmhq80YAf}AZ`
zK~dTr!p20(A@dC+iN+c;74(selY3+{EiRa-3Jy&|G0~jjq1#nbdKX7gK^q?aGx;d-
z&-8~;)6FT!+|MY<Y#p3UKu{ZmE$@2*+5m1fVXKn5VKvBD6|N^+Owwi2YN|hA&QFiZ
z9Qm?tqLEdg>}G?to#7Q%Y4NduuqJnBqD4Vjte^L-(~NA`PwBQtnrt(?*AzO>!ls3p
z1_BeTOY0n##70v<9}QV{US$S7k9x^P1}O}w!(Z;gQI(2xxF;fOw$eDm-fEz$bJloY
z`!8#$AET6eM1?HX8PL;|`K(3*E~%b(7!M2^ek7z(WF+vsT?`jx)yZJ#`n@rh=8FP3
zo&wu7>hK-B>@MLSc=;y&qVqLMKYm3loZZv(JvQ!=(gU>LA#SxHtJRjO7=jm5thV)B
z*DKYkjR;+6eNG22f~aUseUXhMg}{L!5R;x9`BZ#oQf-OAU0Zb*B4GAiSzE&rZwx70
zx&)n(ls<;W?Me$UV-rd0c>*P7C5#2-qWm2#k#CnPBOJ&QfO9HFEzeB>=6Jy-E!==^
zPT`DBPP7_Th@f=4H6WCGD~*z`6D#iJ^FXWoLg;%N1r8?<ax8Q~xn;O{%N<8GO${7v
zNI!VOu(m}DJux|{pq-lLI>pI*b4yaQ)5rZ3rgrCo_dE!Rx->bHbz31?q6-wVMiZGj
ztjSv?t*MSxDW3hnug8R@d1j%<Bgs6cInA4+Xc5;i)1h55-*f9e0xrOxIq;HjOC}LP
zg-E;-8*QuoS<7;WzH6ClXD-Ezaj_nS@X|U6edJ^adRR`F16um{E?@kGarXmj0zJ-p
zs7NQXdRD&+VH+H7=+MiiKE4x(J_3p7N9sw5cFGXl={d#vZ<a(d1OlIm-Zb9Z#=)Eg
z(F?ZAk|}3)bXsQ%b{gfM^*2r*JbvdD#=j3XnJvqs_MDwt<Gb8}BpbZDasn0A06SVR
zNieNIN~wpcKcH|ZBp_lUvl8C%F;j4!{s#X4TXma};h*GfMuz{XzWsOb|Mv>_Ut>!C
zaq{_})b4+X;Q!i=kn!&n?jJw?<sD(R`daMT2%^uEn)IUyrT&NkTf2vbK0fOn&29*}
zZVxcH04oGL3Mr#d1eAma&Hj;6^P$MDdp38%#(7m$Srw;Cq@TC9)02~D5~xPSUgq$3
zR<cDr1?~ok0TPAHpUJ(~tIfSC?HA6;4jHATNy(B;DHrwcw2gX?sNDLQGdBjxD{Ob3
zodUxH>gwtYU^>}Oyyo0E_G@9w%_kdB>Ref#D>dC=Jx*`F-hD(i65aX7gA6{N1RP&K
ze^h+Foq-Sd0`tuWXM5eH>l@dHxM4k8Z<D|YVa$%-1of&(4ufq)DGwK8aRno1uPy=Y
z_QQi<k3;Qv=w!NoZtiAA2B0kgs4nd>yw-*|B2@9Ot+uX5Jg6e|hvy}0iw8?_OO~e4
zePX9dximTrPUzd~Xf>9DmZu7{Dk#T{wp!~Y6LozDA@?dt+<!-0>{fzM^MT@0;Mq?i
zcJ14U;cI0vS!=ksU%IP5blhT^!sBq_PDfkL+OwdWs5VxN!CN6V^vU&?lD92UE0`Ow
zv%y~Qr{plidZO!yl5T<>W%9u5UiVK?&bFmZ|8`ut&G3Ep9g0|9+vBoq+L*n#tt;t`
zp&~Uo>&VkFCvIVws(51OfO}FVu?%;-?=>J&>}X3FG~^5~f%o8J%i6o&A@;^15(<lN
zIIhP6gG#K*V-H~1VH{h(rXF+{y%LKAEP<MemR;tOK(Uu;cjXk7B+5>WDnk3v+Y`yB
zLm4XS_U`g~(jB1PSnBKi1SG%m1zQgckCm=K?ADhlBJ8q}v_e{jr6AiJN<xa-l*h{k
z3u@NK*KsP^m`qxxqzII+3{<Yy`f8Je-N=wR26DQeG;_d|Ra8WwZW%dBiRtvFc7w;K
z&9ty@OF9zBX}M5WgJX0GlxB4Zov}ds&90P(ny;p^bYzuM$PmuFJRGGRKO;bbD|`l%
za6n**BDB0mawe&yciTDLldpnSRNKbiZ$ulPV!YW!sII5vn~Do`iZU=t4iPI6c&N9Q
zn%+Z_j#hbQ`ZlNPvjY0|y4uGMS0Rg}@up?ok3(95E_uDa4S<6{m86JbUc$3NNhqr~
zlWK@Uyr>`?bXuRRFCL?U5PC!Ui!)jcz=*<ZBNcZ~dAL3cBw-lqJo9m4FJqd{F)R!L
zs$npCxu7Gzt%rrv(%&KrJdDC03)uW4?bpT;1}Q>wbC!!)nKC(VOxA><V};32$_vFI
zj%i1tel8UBj*nA~0=@RJ)F=D+CUdq_D+)D{dh+0Lh1N#Bq}#gU-kGZvQEjQ8)x=V*
z0m#~1l*3qceu;z)2)Gf@**eNG_JLFTJj{*d#S3jc(^a&WkMS^3J7!5ef(|LyLULgd
zPdok=MJ_Cy>Q<virhXM9D)xXo{)?V%io}9T?~B|HxZKzF`l>Y#&GPAO+JT`kNDEXY
z%6IqGT!CQ(SC0ZO#T`vVGC|TS&NYDr9FfWhE5g(Ce*T>pP{M2CH9Hi;;LmAueSrDb
zfE0Bx9rs*nP5SWWO6=;#cO{<5tcEHutyz5Vx12dx?*7t88yfp;b^1s&wro>!Mn)up
zhk-OWjtd9tt$ng4tU?_{-#OUfj9aj+qbliTG<4a(Vfmg^eesyPW2H&KQboG3nA*@5
z_N71=K0qPnvJl2Ax3+i&U<f7ReF*016ro{NrQw{fb^P#Uq#&y5Y=#kGC8zdJl0Ja;
zkjUT*6SIA@2KkSlF|lOYy$RP?1Ab)a7ol~Cqwxa4j?izoIzGR(2k3uekPBeJDSUbY
zDziGLI-^*l<cTHdMHGlQ^#lu2@HEb7+n3gB#2+(cfP)i?bM??E%TR&nz#miTqW~Uu
zDlY)4bEyKTdroXr7+o@q7J=)6b*-qJQLZ&f_BJY(0G7AN?kjfNhkk@8iiw8_5T2z9
z;Mn$x5U_HqOv_!$L=SAFlgCZyIQVh{9-d%@6o6GfN%Bd^iD1_7K>-yuD3Q~z&j=@_
zj>z9O2wm5ulI(?r`2TcfVJNk6M(pSU1v`Gz`E0#^bM!kmKBVRQdY`ZE{=CSA$LAec
z_8Xr5XyrtCu+SNM)q(7^lOHKCW%9uFiNbo}-8hY=r-D~8Je^L1YVen^yU5`EQCuNk
zl&-M`Ez#gWPS4LG>moPXidrTh?#0dMxf?C)b1?#uiiLC)Y|pmJ>6+XcBYdYdWcOvo
zLwbuzfu)YqtAfvO|EB0r?@rAJOa_~B+f}lgCXGdrZ4V4eOW~tVvo^NeGer02$`hi#
z9C}s(p@b?2C{@<bPG`~N>X<`zzoctLhz>oLA>o#h2*rvanH-N{7ZP#;$R_a_%7n5Y
zT~%Vh2xuu$|LN-b`N@~OTNp}>=Gqr(6QCL`ZsRuoq=Y19q=NiMMAy4n6TvN(GhcT>
zi#K&-HV&q4pJtyxlIG1Cn&;4&db2!J@|jo{dhLb>!NLnVAsQzfaMFr99vP5b_>c1d
zG(TKGGnX7EwC!o~cR>~7_eLOp6>;1w!C)rz3ERYoZU6mM1P>#wSYRTf_eQ}H%rq`r
z$ADDWDeMKpD%D$PA{buEb)uM+Knt2A+LWx2Ltu)WWQ0ml0~?Neh4_`Ey<oUGFCAM?
z-#4_t@o-gIlxg<x6xQ9yHPA4iLMUs)FSF*hV77deY0TQ;)UdPPkgW{c$T~GM)Pb?A
ztV(G9+-?bFzh{K$9^#aP%T5I7+spV-UAej2_%x$HBu@B679+g=gn)%7M`W$=Gl5VR
zG6WA1wvPaoI(G)YcMwU{6BMWCS*ETGH=VzHWy>j03)f=z7NkjAqJ5G7{0_Aj)hyFi
z0Uw-eq&A<;|HFE@`*5Y>&BT8>qmejg<CL+y%ig0_KLtoks>eby3hMInU^Kda#G-mX
zl+_}>Y(V=ZU-LGo$s)e!%k6pIW(J-Svjq*Y+HO11n%MIK=v=JH-I0|}ZAe&PWqgi0
zGh?t_#^6VMhFz0oi<WAD*Xz;P20T{%IPT=z;hJahPzm5bPPV3FWeR*J&5W<54mp{<
z7b2wveN{1Vz)V6!_ojk5#TBbdSJr!2Lau+TvYWRu&pYZ)P#ObFmD%%JqqY{|Se^6p
z(h`hxZP|FL?-favZyzE029qpeVo&`9*NY9VfLJe#A~g7s$%KKTb!J6&;k>)cL0Xy9
z;CB)q0rVoAt@lXoxJ=0XEfx;)F&?qmB2x)G;MUF8CX9JcUt+}5$4A^2EXo&Gj@Oqf
zD;o=`DIQ$)R<*<s!3aE1Yh(Eh(2(4OqN~$m3^jNk)6kQUN`uUjHAxenicpJ@mfUw;
zyT7C+$>$GyF2m<TAmHGxW~HgLW-S!j;-Q~CzwZm?CcX<qDyly41w?xQcVV`+*v@W;
z!{Tx;{jTINbPi<<^TbV|#&G>D$H=V$6WIJbz3=q=O%US$2AThR?fl<~^S|uN|EJ>l
z-y!pVFQ5OvIVoaf{2N)F=?C+_9P@Xfp%u5*g6f;AXRt2;JOE?YhB_j|YBNK_y3v4X
zUAwG<Qde2qNUfzSF=hOE=0!(hqme~I@mP919$r9sdwtEd^#XU4*`A4R=Uhu6l73?C
z;MOfa6wXb3PL$Rv&#4mCJ}Ea^#?hh9X7lFWF71**llEq-)b0JW6SlN|vpfC%epdc;
z<@dhSe%0-EMZbCL^tFt$cwwOg|K3%;)`V=ub}ZwwqUBd+=hyo7IG7osp_;sy992vu
zoSG=ZH?F*Sk)f5+Q$$9OY>ii=L9z$A%G0?&3XCzeA$DA;-|$u>PW9c`30N$w&_k4%
zszGOw$s8q3l`K<<{ZOxL(RlDMG=*6kbYR&8d%<D-j7t+F3QZR<%xWm00i}iFYkAxL
zJM?2cR5`NGI0V~$z{0>rhr~+L6yrK+aE^jDS{bUNL^%CdMkwET#sh8iMnK4rJH3FF
z-bd(%d26i%v*Q(H<;KDXgK7=pDHL|F!PU&0)v7j|^V4M^e#VY+tA*ZO5X~D%keDUz
z^Skn#b3P<_xgmHEM$Nno1BF@aYzTu!h6lW=KS-sEVk7XYSf(*(9CxW3>g9dm8r`S=
zb<YvR(7CssoL3M$gsm@oj?sW*VaQmDtCgA$$b{mu^r7v5llnkl?l)fDv+=B8w|v%O
zeYejK+4S3iU##XlP9?N~lpDEEiR5Gem_co*ef`WdaUygoT<71Z0mc}w=f1Nw<9*f&
zD>1VM!}u*~JNrT?WX~pGWGe$`06cpjM|OxyEP2A%X~u20ZaLW_=LkNua3c=B@<7Z9
z?kA|J{^T+Uc8IXM;B#I3)N`dWy>0hyp-4`+_Dez!f6em3%-q4~91cQ8!*m5D7~#F?
z;SQe88V6J1=YmhnPqbz!XmX#he%CZ@{ur<5&CQT`6LZ}D__$^aa`I*ntxb3gjs|%*
zzPRxhUIYF;Q}cF%eW%#L#mu!nvJ&5{pKZgU=ro>q9J|s`=_#j)T?L4m`*Tj(paXG_
zJOsN=N!+_qZoBCFO5U=|*j%Bp6{Rngr_JPc`aV67qHJ&<LdYDx6DQIwI~K6kAX|8b
z&K=5g{Gtr5SireQCZ+SY%pEX(h_IsM)iWcB_GRNVD~n-mVq*hocx(%cw)|(FxyuwV
zgmZoF0|pHv;y8@A)9|oa2i|_GScJuNKtjSsb5whUseK@6*JmQ$rp9Cye-6)%v5<7D
ze1>d>0@i~G4-h&Hp8mi!yPIwt7XUMNKG7BKarh~}=nH-pVd`uW{VLFx#@zQeo07?;
zx;;%;$LoKb%N!FF<|T|{)mgK_e>J@iG<yl=*Yu6y*L3}g;oS|cntz`Yp%9P_7tBTj
z;dsV8iE?1wveVU<y(ZtQu+*%vHU$dxvEVt5_yG}V&OhyZoF8e$Tsk+66Fs9Ze%1b&
zutm+{Hs5YkxlwYwG>beF;Gt10N>N;mVI4xvD=K~?PQG4IUhAOm9tm<a!<u9gAHkmY
zJXwspOM?RD5_j)o`Lg6?rxW6u<H-hk?IcZ4k&tHc3fe|vATRGZu%#j1r7=bY>nVOJ
zUud=FiAy7!&ihP!6ix#U#`B=t{Ks}~sGVh6*s?giF30E)Z<IPDNW}ctXtgb6ICrLp
z<!SSeSjPtCtC!+$=PRk9*pVW06Fn1U7t-uDr+++f6O*5F-23C}g<GH&VQGQgwN|y^
z1~q4RSIOikbyl#q>ereHiV+F4hr8|ioxxHFOSiG=*5e4q5Cw|Kb%_rSduv;4OeQ3_
zTG&q4*^}7>AYl4F>bR}Pl*hB+Y)}tp$we#AB*Gd@+-=#7p!7s7c%m>^FZft|thMe5
z|2&3|&I!iY#GOP8ie9J_nQ~bN(5Dj1$tn;LR`51xac_E?;?2WZ+O%l}moom@f%;Wk
z|2+3ZruQQ$n9IQDo{hnJItIGdPqHag|1-#%p9{#xZ}p<R4#9T0gR(R$?Z|0pzEJxe
z<lIQL*YHjeeil~GMV9SCAGcj+M4jbjevc}U5Rp#n7L*E3)QSVaF2^kd5K3k7Ff|v@
z^wzn|Nyv-WluL0mMX?n&HD2p3L2r@9v1iW8;GN}`5TIrUQzQi;judW@eL=W93|p3z
zbAlPrj3@>!=9(uZ8Y1OA%2_IP)lC(`Y==u6;ZI;cBT}&9kF(!k(3=3g&usmySD9<n
z(LA1C9N&Zo4tzVRF31t=;3i6KrT2WxhCCuWX%bVWdv^d>^(0$F60RLSVj&xND|E<H
z*g=iKrr37o0Q~l{a2AEDVBbRJR55JgYU{^RMwnE5bL#vTi{?Is*&YTh8;H$7{utJ*
z_E!zH#p!XcOMu$E{B9f*{sr|zrn-yCXv4mRlaub=d8Rzf)>%5=`n+I2kQ{*h#an6N
zmgRjh;=;#%2MxMFVsN>aJCs#k5I2`tUMjyffLT8zQ__R9tktnt^WjE1NRCRDc8vQj
zWXETIk+IgIVx$<(aK4xu2-J{Q8V<ER1czLqrle2&eRTs@)p=6*u}dsKJLzWtGpuEJ
zLNPPi@8uQ(lETtF!KT|FoY$SOi~AgiI9PKQ-Im#ATt0fq!AVMpdJH)eG;xaLpZmW|
zFMkzJDdtN@=ra(_i(oc&x4EF(><2W5#kX*}y|L*nq!!2zdH?AwqMUp<;jZOS-Dh-B
z<e$}$ZF&|y0W`~uQkMF$b@;lQ95j}>5Zy&oQWFK4fs>b0^0*rNvmF|;H;;I8(|dHS
zUMu%*FxV&tqmNRy6UB&p+Nu-6)0ocKz^v-R5MmCA2v>21#J?fx{^}U%t=WEdFeWG4
zvoDJg4DLiVNi!haOIBB$f-1#zjK&Ye2lsPY=gVpR!GNr7ueoIQx0=ADK5fUNGs}Rp
zAe2Z8j0pP*ZWIP6gTKGRP58@EaZMdoH6cYXM7io&(dPhQATLh23W_-t6h%_%%f2p|
zCnHPeg5MO|46PSnOPH$ghbZ;5F!rP3vgv5`=6NHwk4E_(pY*y2!8vCV#5FZy`!Er?
zxoie8Pq_*-fMvvSVBY|po{&-ILmqb27i}-(?~37ovzq~x0b;ibE-;Hf>>=im1rG-%
zG{cerfV7Stgham%en6K#vD2n3Hc`B&4x)ur^VQI!csvKr3IKa7_wd8aIczA~22#h2
z;1e3h6?H6mX9sr|K<&FIN^k^{={!xIa$kj#ySQ<vv4P;9K45%W<iUu|kwmbwt_;kF
zC2CS&&kck4u=%yN3p9*|XkyGvETXvPGwEyFUm13GzkD2)=<ORi5u<Ny=1Eh`4FY%Y
zCsImvE^lFkdsK8kcXqzm-#szxFio^{WZh=2_|+O96HV5icQ8?=+IB~dfdhBMEWKfY
z$ST;kp!u?W0e*0m|N3V*X8iBXB>&Eq{~3-M{~wr1{{4-AHk15ypZphN$^UqV{MSAC
ze_Tniv9kZG#*$(U38%dw)bDJh8nQ5X6;pUm(D<>UG1XM8v}R)zJ!^adq(pfzNGt%c
z!u{zZ+6`ELYcWZ0LhR#<&g!k(&LQ+>HM=j(3P}adgYRf`>Jvu=_LS;d8gxaC*0zn0
zn#EmDqk8L)Py5Qq2eJ1P-=VG7*OE2*txuK7GzQV%9W~|Azicy`e9->X93|WZup+my
z_^vPO*flJk8TrvJ&4doRk(=9AvmrGF@YYu$wXX<bXr%h447b^EDfkh!R((2pk>(R?
zji$JU*e_1quU=OBw!ZF^SU0whsp{$G(-7Pva~lJpDVKkwpedqLaW|{sSAF84uMeQI
z-H~?l^P>ZuYDeNMXalreJh}npA+AZOvr^3$EGSm8&OuS%1^&YD1KR?m@bNiEEL`tr
z-oEM~hzZ^zm2X9C9lem^FGY%vcRY}!)K1OZidIs$XV$wxB2%$6fRT>tM`Qm1nFSzY
z0Bx4WzM|Kx!c=oJtA(t&WZ)*V2pTU~=wl0a{nYbO!{&;!BQw9)nTtD_e3QF&OnOL_
z)VC_#3DTCJkFB_tGM+sWIrs5h)EAlgl9*P5odU@)X1MAB=#|DKR~}3!*&4jjiS}s8
zl~b0g*94mb2(JZT4e_`+3}~LyMCn~j9m3KkzT;&}BSNTbF;glDDAuRwHy=Zg$^^Av
zE^0mc5SPwE+m_5k!D>ClWBDPineG0)#R(AQ2WzmoG&p9C^S0DC6x6i}Y0|hn*sxx0
zdsSDnaT5<euZZ`6h*P;b;C9xPW}0gA`|Y-_kbm;}NT~iG22V=^2VPRiP-PDgfKuET
zsrt)bDhT{F<c@lY_=iKI;#|US#Y($PKhhSLH+4Rz^4t1epIOV;ZAxF&AJ<yW2z^l4
z?$<1|5L#5B%XX8@5^Bd5qqsq+A|4qGw%T<5?SJ-X15r{%lSR`6bYeSl`~71?JFcf^
zED8}5CHexkzzxc7gcDN3T%IEKXq-j>Jb0&_(}sWdtUF>()ndA1v$9$L`1FJRDNh{e
z!WIn+$>>Sgv{73cMiH+U4m#x4&pe461ogHB?|nN*QA66v?GBVCs1}uZ-ccxemv+WS
z;ylH`2PhKHL0ebt8|tCD@-R8s&gM3`L)*_^&6;^wV<Xq@xpaT^IQ_XZNh*3%<Zb~c
z*c=CuI>vnc3+-Yk<?O9$Yggi^;=pJUIQAz3vE4OCg7UE^9^<R7c}{4JU`?hr7_)hj
z0@#!WW#tE=sK}=8>;1_E!)1mnH<@#yr20Wt?t_sjb2vf~C=Lg1l&WZpW1T#2+N%<C
zGzs@af;|NsLeFq|ZdNN>455(YjMK7fNjmz|zCUCm0S<~r{FR$7C2uRAXXB@HshS1B
zKIch^!Ganbupre3Dv=wNuo*vffFh-Gtv%dK-fp+SIVB(WH8HOHLB5g)-B=xaP}PbI
z0w5E6VQ&&?31DMEJw?B&Afi<Pz)U{RZ)C?A^ETk8K^TAP;N>vtVTxfSU>Yz(mQ04&
zjW^{*cOmE-7<3tqg541mle=-4Ubr@;c4Cq`6Zh}$bA+RLqSV#$G^NPPf;TSZV=a~i
z0nIIjB9l$q1-A645d;!z;ZkGn6Cp$!E+!2I2`pC4b?A=jO%Z$KKG8HzyJswO$bJH6
zX52!${puKo(X51)WJ82WZvo*)h~f6y-tr6~ekcf`|Gg%F8=#@TwWyQhvYWY08I7p~
zDBQca<Sga(9gj##9RwrAjuwBne{VUuQc$wU2tIN<1y6M~+`BzD<86zHNa}|)7kJay
zts^IQrswetSU9yZ9vjx@%ncvS4s$TFsF~R(3T^*E0Nj<(>Ee{fr|KQB3CS~Grt_ix
zRNZgLi9Eps*3c-uVH$d!u5b+7jq^C;Ll-{hf6L)^Z<PR)=5#vsTM4R%hw3`>UJvz7
z(J+|`oEDcoCBq*;7^)8cBlweD6&QAG#knp2uq4)-8Vj?l41twt_ytJ1a7QGBIS-03
zXI;6_k0<N$`9s7-oKS+0uOy@lcW7+r>P3SpRoa1&Typ`iU3AaOQk?37ZXh&(kwVam
zJt3Y%aw!hS0|zuNGSeL2M&`SiMr2)Dh=s>?$hN**5PT*5h?P5T1Sz^=l{{Jnm1D4G
zK~P6@;L^5Y+0+N6qcCFqvXn?zN4_^Wz;q<{Vve6@Hehb=XWlgwQeFZwX#96NDt^`y
znW_+4!$G2^!27gPQIb}E;Ido$EAA(WYsp~WB`-Q4gqQGn1HUq|w1__?n$^#s*Fo{z
zM?Bd#jm92aaXZ74AyqXeJhC;XvnOAI_@SRhN)y5s9ZU)I2v+-_J>4od)R^(eCLv?K
zS*Qhn5a^PQZ}QW>)g`U`Si(|R2W(HjEd`JZ`@xbInO@&AC8N5bY|l7DJ-hZWp*#BA
zdve2Udc{zA4aBkeMCTW`Kn9a|);*u4t*)1&Nm#o&jfEAg_LiMDyVNC2h1MY{><XhP
zFxLm4kkGkUBElQ8kzIPA+ojR>AC4hci1*mRv_hjd^rqV8ej6Zdf+(S-@14_uGhaSV
z3MzeC+Vu3q^_dn>-;Lm2TWi^#RnC0<8V592f>(+9v((xpSOt|i!)ce>^HhP)4`F#2
zygnUGseA5w{jf|CR;DE9OvaAteW6C%=aWEPVE4N&d48Yp@<XY?Ki)+u@@)zHOozhi
zCQs~k(PkqQPfk>cTB{vyB7u9;4qn#)knD7wjCR-}IvW5E(Z{N6Ea_>P2<(`d{Ko}X
zBRI@N8&hc6`}K*(W)xy>X0|~Am<g9zr(-lkQS~fDBJtVj5^`GCRCt6U!gxb)>*0>p
z>KMVpG|7O%y+jhyO%U95@WjapY<eJw2tTVz)<p?91}IW5X?mv~G75TIZ)8t8)sZK0
zjQpi6&GJ@V7U}G^bxSse+q#A7?zg%LN$#!MXQi-Nb~}E+{1M`5|543u<4j)tg}gOA
z&;k)raMu9d!$I;8<Xv9r^cCmZ53x&9hGG=r%o+V==`kyJauNRuWF(?Gq83;Z<g%Xq
z>$R$~UnFtMn#x;90E4Q#ge8+cKPP^wL%cx-&j11w0`~Xbd&Yo<00NWAFJ1V1=bg4;
z?D^o_<i1fs+EPU@hgRD)6d^|bWu`M-x-0AVT|pSU)O&OQo)oZa?HHp@zE^O(eI>o6
z+ZYs;KkHizTeng!pG4wj_GIykhq>dwvNgZLAMnN4VXQ;A+u=yQYU*z%4;zkI+aO&M
zwfL=e?b&BC#io6<GaDGg)Oc;ZLroT(U&f&q!M9HP_KAHWC2j=YlYbR^yv*;C!SRg$
zX$i|Z`3<CGl7Xy&>r8_%$gP^Hk2x>=7^o-vU~sm@5RAm<ApIjjCF`KSDaMb3)Dw&8
zI$j6YR?C!|)ngu+Xc4rV=bTRHiFebCXFw9iXpMd0;v?}(hKBXFx|oK06*&$5M+{UN
zuO%!c$3gujtX}rAVy^fmsT~3|t+v7B0Gs1)md^=vJ+S+Hcrq|xzi0ivD@bzh?z87D
zc<Dd%@4i`RogQ(WdN;yjAEKG9{h)O%kh`=~m!oQ*b?RFxLLKv!kDsL3pzqy)AqTJX
z*bTffi$}$~n=RS+lMi4lsd{ub1IAM>@Xk44pYNg7fy9DbH<h4zZ*Td`Q`nA1#ykok
zI?wk&g*ult;=qzgcLC*0-p}vwuQr#@f5ZKMb#wf^iTu03@V}bKzbX9x+C={EZ~Qa&
z|AqDcIs*KoW}9A=nSp@y-^LY1g1^?_d}nd}|8ZUaqQB&?g1~>w229^}_kYoJ{@sb=
zw9bmu^`<7R0w-l-g22n~@2mnBfm4#@xLBIPnl_2YKw>t48kR-Go_c@PjJ>fPk2RLq
z*kvvbv~fJVM1OpA#>UqXw@-!M8u{ncvpv$7%o&B88rKqW(BeA+{0sLTRrGb2Z>js^
zns<sUb0bMN#CF<Kr&+{_ro8UbucN!W<YWFqgGf15a+98JF+DO+E|-3n=J)F-5!7j2
zo4OP(cz=wScpz36XVvw1E<f7Jj1`Lds$bZ2i(AVL3@4WfqY*ZEdxoq?9U7=kWvBfa
z1(HX`kn9jr#9LX9k5Cv9ueLE{B%KM4HgP+NYTR<G9ECk>GXJ;N$}*}OOT@Wvul|Qu
z(M~fO+C<mw+5~^F+sGP2BVS}3W1QbxqZ0YOXZ)AzFpoR{ZcTJOf^&dgc9Ot#KVTf*
z_x0D#&{|Uok6(y|d3JKgQ{+VemMg7IB#Cv@3|-F-upc)@!?Ha3@X-Aye^K2)xHB7V
zciRu<2|d#>?hBObGMIJrc#2Rb=?%?S%Q$Rq>=DmuOwZyf_f8kGxE>=oI&7noY8|Qe
zj-?{mpxtFI$PN)Xv#Z%y7o`U&N9LKzVap{>9El+XqTE}-L=u5nHPh?(;ZAd3AdW5`
zRoiHI0R#4^n;*j$oMRzVJ39x2z6~k{tdHDH#c27m1xnT>t#F(9sRa6|oYrm-$I@VF
z`0@>LTYK0T?<2W7d76rI$qmn2g$F7?Ne?@T5<v94EpZ!&K8niDSr+NNy$7gQlx`FH
zl)IfH%;X==E-|tKzQE?+<_>LQuQ;t}FRwi~E6LRreFhT&x3l*%zQyJ&q<BMNcy4@A
zx%_r7BDxW+BE0&aq@3hZaPsLRJAQG622HY6q}Ll8Ey)S{2s9Mu3A#8d;(qo4yZvi6
z+bqfZB^{*w7Dd@iTgUims5la0-D&u|NVt~XdqB}G3^OwA{pJI9`^tGYqxquy=c$RB
z&BZeqp#2bngl#%@kMsb(kElJ(hfa-nWgop=HBFQeBY+^BYv-d4I(9WUBk>(kQ&{8b
z7~rA#0n_9^muK6^wbBL#mYNuLSHXe_bWqmkhs7)aBhz38&`&qK)@K~X9E_h#{V)Wc
zKU#YUrDsa%LJdaWg1O<&++6kuPP%My7Rg7alK#+sV7;a<gSi=o(xGdkl(dd8T@`kJ
zn{I_2E;EE7Q3uJFXts$UQ{t&&b(4_fM%ei@2L-7)MkDDq=<|SZ-|Q8;O4-M~grk=~
zk%)e!Iv)f;`g9gNf|L`Z$5_PeCIF6={RxMxk@*!8Xlf6d7)b-zo=>GoQ2!Gm(Oxn>
zSdg@Isg*yRH9P=3Ai?%YDlCt9UY>EXq+ebsP=n!w6Fy`@5oTAKL__xW9Ym~RkHr;W
zKre2V9aNr(&+uqdE(WY)x%VD;cKuI{<K>n35YeKe^K+}T0*zxfSx5gLy#1r>u;B(=
z{J_yB+I(1y7VDO7=~{s+ZkkbqV*Nkjv8py1VNTzA1x2wahbQk^BWkL@lH&ca2c2Rm
zKB@9RtSTJWhGGY0LaDHv2|}Sz_X12-{aEnAj?*dth2upWbIgT!N6-#u1Y^OE3ihK*
z^=HyiL}pH<X{nr0qA15r@PwZk*`!^MBL`5MiY!Mjl$6o3wUT0a@4gR52SEPF{!&Os
zcN1KONWe*0i*R9>(FcpeK7#_XE<Ye`*WmWPVw1>=)s`}0=$48W=<TtVUFlH0kgD*w
zWY-ahb-Wmx(%`sT7+fL1b1Op2yvJA1B6KwaSv9Bsyf#{vZ?Y_S_y`iftrIRcOGT)M
z5Je|W92gY$JyYLan}t&<8;q7n<hYjz_6nMKAKb`rJkihvi0YU5+J)X^_S#v$op#~n
z#B)oec*@uTCfd~``H9~09ahqe%sB^TFKyr@!NU>li*Vrx1RK+ECyAn^oh5Y-=NbO!
zJk?q%WNMel^JPA`lHSVr<sti0j-8gwy$YBI%ZAE=_f*L|W$Us1!naRdKIzcBeg~*_
zoae2IxehS5+WHZXgT1VCK^#*D#S>?Jv}-vb$mt=&Hs`8`pe{xfF~s>Gt`7qB1RBL;
z<hwcxX3L09GEGF0vSM}KVH5jkn(q-L7VqEOX*Z-Xcrdg)4V^f@x#N!ba%{gAT5G}N
z73$fHTef(X68eiy&OrWk1N&Td7RVf;ZB1QX%`igpd$2AS^@++XYw?lY^20ldaRBtF
zZ~A-;!EOs5Vzk9SY6b@d8>aQbP-EYE5zR?@C%r6A#hn6rdq&h}+TeK>6c94BYti?%
z>TlRU{^bBEzzeR+m+`8xz~?_5RU%!~D@^B=1<Oc3O7>cw{8m`Kwqx|B%z6WOGgW%c
z#-}=2QgJ1JITSGgmj&yYv?l&$PNkl)J^-yaqej@ic9pxJILshyJZmVCln&KpWoheX
z{Od@~ry{kOl<yS?Hm2*Ep$sI*5=#oo(Da-c82P+JTU+X!H1mO8<mi&{F==IV&SgTW
z8T#}GnN=G((<98C+MjC*+mp-0#MRcYfHUW!eY))<i8_pV+*A)IYwtrG$&PsPV|!C>
z9j25mcCys9ePJlvp|1C@-OC}iNr~32>g^Y~=nX0SKhD5b>x1`08(jS5hhSEIX7oXB
ze->M$>I|wjtG}L?9Ep-<!hW4tWocfmR#h*)m2IgYpj<SSM)lIk#HEiIUm5|8)ciTo
znEqft%N=86*o)LwGN*ClnGqL45PSX6r}iXd*W{wKf`3yDyxO`?So9)1Ed78con;m+
zi+c0L{2o&Y1zB`$W$xoSSxDsf2jWabjIwvZmngu5%(BI=n2FCMQlHN1^=sG@#fEjq
zag=GYPbCV!>=-J+*2H3>A*r37YjZs#hkjq`RG2l1E33VB9*>F(34yE4FN!3*xS>x$
z+ZeNz4AS9Zl77kV6TEzX{N-;r@2?hw{{!d!8xH-K{qFx~A^yKP7G(VEY2QDx1OBnd
z{m&t)f91cwm?HkleE(C<WBTiE`#(63`MZ?nU*^2;pjB2h-|1?GS0vbY1L1^%BG5-d
z7pxwUNE*v4w5Um-6f+hhLM)3ssiDs&9yUu7Em_S%dc4HlgZ1a^@AkvZ4$n7%wJ2#5
zI!AQ2c4!-=l;aU?5`zL~l(VSJi?6`xd|B16?w6N~Fp6yHU#gCXb6F2<XLntD7V{cp
zN~KaU(r;?*a{?OG1uVyER>-Y+T9qyUQsY(hY`C$c0>15<{n4iWqdf2rZZmW>*<dZh
z^8LAO1KnQf3V2YqKiY?_61RUg>ja4H?6P%CgT28*B!TKF5Pfc@Fo0NUS9Bg*RjQy3
zBU;R`l{dN=*n2$Oz&1zbuqu|jV6ANHfP%*>GTlIYES5{>R?PPXz;Ur$07qBW@;tk|
zbZw_tV_}G%J-bSTxj3%+sg(+FRoZ0L@_J0-vV!A<0PWMhfvpp))>zFdv&II6p{}$a
z=mvEn+w2F*2u&^5(K?V^JwG)7^`ohT)S2UIAF7CKZrsu3_Ook4U|&Q>ekT)!w+z)N
z(AeM%_Fi?Xz1S#p`c7_a$lJA~G{2S178_M+Cz{k@;*<`$t(Hv$dtP=ZK@wHP0PFeb
z1cY-yaqs)o5}0L`Et4F@^rusN7PYcFRMZWqYa}meannF*y1F{>2N_tCBU#Zvhgt;X
z%C1*qu@E*<1kOGU1&H0zqZDTgYgyNCTMi=+`mOJ<^ZzLW?d%~?9pr3qnwNgBDN_A8
zRG^}TGmYhc()0)Tk(q&R=m^*CwLK6UXYP1|0yc;W{eilLTS0V5Ty?Jl$)w8Ne;Tk-
zQ#4?u>cw|jbmNEzl#D}XKTCw&vS?@q{A)QLm27^{BEIm10E?hX3I(2o0)ZgQWXFE0
zXL;7aZUD8#^r^HT3;+gFtAWee)NAA{W@4G8-~9#Dz#Th>V+(02-UOuN*d!Z_&F!FY
zZJbKqcv)F)7P`q}yVvNfc|Dot6MG#NNM0Y6yb(u+UGbq#OXKd!%;p@@E!3-XQyB&r
zJ9?g;oe(8FK>ZyMfIub?8;E#i8GovGuE9}1C|oBZoOmDg!c(F<h#!78He&b=#Ep<v
zW8H>YZ!mZfz?2Z>#=IUxAVF!hl>;PzGV;^noGV76XLO-XcU_hv={wzWWLy)sEJXS^
zc|HLgTp^GF2y`Q__{vezyg+2dPbkdA7zwp_aiZU+3>w&6*9BUQQ%2?2o^r5)BR>;Q
zk6eP5k@?}UsR>a_#gP9z#HoyBkenDCB}C3IG$aOMG%G@AE7%zE^|vE;kqvKaSrIQt
z>?e;-Va7UPjU#kxLQ@#=uu$uGZVYT?Gk+dEl#Iq59Ugpv%FAi=k~3ja{1QuvAF$e^
zqAS0%UZlo!{^-m;s)ZS;*p7WNU8S;sNP^WS`AUfePia!b{#L}Bp>3!(mr{===Pr+8
zq>^p)iJ)u$wSm&@>%Da8_nJXJ;Fs~6!8r%gS6yJe2deE8_l$qv-jD4@ls-eXXj%4|
zpbhdZdKI-#ocEUa8f}sQ4WgUtUEA*UMksdp9DE4L&~J-D{4g)Oa{y<p4j9E!_6pqD
zW)r&7dtcp#z@&I3886Bbqf{>ZHozaY9b~|b;zQnV=b76{k9<9~#*G>UqjHHA{8Ak2
z5F6&M*_;$1d6|NAUZDY##4etu^2e;e!;|hky@&&jrFi2SD2gjG*zIPRA93#t8hG0#
zFTCRZIx3FxzVACf*F4*yFN)2J&5upjoLni{d>Q+V{@^R;C{A*MY?<}kI3zZz4ZKeo
zD!o4{8t78nXr(MTE4Ocfc7gGbNr*dQgoxpcXyWsX)dhGxbr3istuDR9Nm>Ck{TAai
zK_%n#YY13ccEk~|^b0gBt{n3afcUL8-95_>e)45fO;-l0a>s+~cj09|Sg(8jZ$RD8
z&gW89Yn;nF_*?M3-Hv8)@pG@^b)HK)v@JmEIPHkR98en|!8$Y0Uj?i_aVv=CufX$!
z!uuP>8RSVbT?3c{90s_Ey9sEE-0ZYuquE{|gQ;-7Mz<R<JYFN?oYgu$90vU`v`9x@
zMTE!L+^Aytf(2~>oZpqRg$q1!3Ln_N_~}7)z)0Gj50=q<^w4Piz$NVe5RBWBir*x)
z;PPV-)6e3KGo(H#&hfeYDI9xnR#OE{HSugksb`euX5O(8?8U|psod_*A34AcxD+OZ
z3@dElpxbi)&EhYdkyiY^wfg?d6Og9(4!I;ieTzyoCQ*=kGfp!Y!!ZoY3$yUntwDPI
zz;|_Zg$^|=pFZ(??h5CEy`YR_IDT|;q6T9W-X>5Je8zwwHYNv}p;@qF-phUu;sxCJ
z*{_sPAiZJ?qE9B>$<L>gugGcS0R|-Q@ojBSsFlAryCe<eLb>Q#=C$flE+@ehNr7_O
zyD@%Z7<WG8Vm0XsI=W$NFgdU~B1eEC&%770@J`xtmC@m$DGzQjHmaUKXvbIhZ54Y8
zX&enCtD^N=;oY?!>i{c}M5B~khtT4j0`u^L|9wpFM9hL!lAEoQZoqWO2-4?QT<MG?
zJ~o~N!}l#4z8Rkqbq@!buY%($t4jUwm@DCrR&mm))7q?{HS56g*Z2JhR++vV#_DZ4
zQVVa*TL&N`yk#-ds)JN(58EY}3(-TxSgAhDj*&D6F&T`Zd`Mgf8A*BFUCiHdt*`0v
zFM4)n9$Q!u*iN&JjSl`U$@n=)?+Sp<$cX=ows#EAY|)m5W7~Gpv8|46r(@f;la6iM
z>e#m3v28oKIqU9o_qu1V^W3$+^L&5bAM@9I=crLtqpBD5O-$d&@htLpLweJI*XJU(
zS8dT0qY)DN)Yy^eQ_PQjee8}v+_*7Wt7SR{!Q>L^x`#6dXsPqsDJ#}n4o7t_bEJ(C
zdgYFf$PjKH<Cvt5&e<DrmHb<)QK~7Mm*|IyrXxHzlau~OqUVSV*YO=FaJt3k&<tda
z@Vv*Ykbo|lCl3<k9fzddv&*AYHtb}|-N9aq9ZS~7ye21zDj2O7D;H5prcy6RN9**j
zV?QnTpfF-10jB!~$N-%^eheLjT%yS!5q{aJ@(uFv6zyxpLpSM-+aW>XPn{fX;shX*
zcCy3gI0Mt`ISY=@FzSzr>t}HlknAoET6ZBT^wgmyco?91`x$I#Sv7POs+>B2>Tb|k
zaw8=MA$Xm4$J-P5J?1jie?^vze=h9%Yh?Kc0Q<j@CF6hGc76Ty_mL&z|IV`bQw+r)
z&-hmc@$VqZf0HTvVjurCYn6rl?_Z*+>)7lzBl>L0#)@L9F%VIN&URSM8OQeF%54Fm
z2v@^LkgN(AjwK#V6lHhbh9nqjBwN2C#piF^vS&O`z}yxe%05Ojc2EhYmcL!Nd3>7_
zz$m@T6px6ZjCYy3|DLyrY{vTO`SJWAj|y#!mD(2Qy3>3iYEr&bZNfD_-eJi4gFF!}
zOT%(Up#12#Id-Nw)MyV3BNHArDjHi^$Qrr0C9F}5SEcGaTB^iyDUy9Yc3^=eK4dTx
zoDR0DCF>X*#Z&`9T?Ec2)Lg!+jr|Bkl46uvv0z1vGlMSyw;~{vG9ao^U_v`JFzp^V
z+Ri1#ABbL>NMp$r2Z?!h);JKk_=kvWh$1@gwV77RVmpRoJ4?gYfs~Pg`)#D4)264(
z<LhA7%6S{RV-pyiBH^5-4A{5e@Uf^b$Ci2$7>rz4ea!Nw<0|;;3OBcR$2tcS(cH?o
zYNZ3_ySdJcE9}%-7FgIB_Z=5=G7o)eKsoT_N1{6X`xd&>IW^E_%uo1evDXt9{##Z_
zI&<@n8uJBq(-T}inZe2x>xGh3B+i**QIUy6Iga1&pTCYr;Hnzd;eRtLtKXT_CyZR%
zIxcPpIvd_9Zxj=Ff+2``p3T<-PNdtUQ%766G*%4+iIS}vOazpD7Z3}v6&h_6y{y!T
zsL$LYZ)GGBMbrUl`Pd<<*Y1KK4x+8jTwUD(K2*V94`5CmMpArx65f*}x3~uA>P57E
zn1lt9PNS_NVwkb%?&3#Z?+hqJY5s;)w#%>zh_mdIU;YfYDJ$6b<a>1>KM1XPZ>ZTG
z1#c@7kG@2<r-+l*SB7X57sfpjUWf{aB5`FGp95?X0}UmOkIyD7VH@HCLCfD|!fh`_
zusGCkFIMCP<&1%Qd#BN5oG;b?v6yFeCVA-Qk+6e?_B2if7C67qN0vJ6hM5Da-{67n
z3_@jsfMVBf(>ix<22FEAG)Aih#yg^9>PQMCRO+W=9w?&6C<Z&M;j5sqKSP%z8xGY8
z<J_&&EMvvUOZ3Le{oWg(LkL3Hws06#`>B$;M=K(v>U-4Ow>jMktIZ8Yo{l)=Gz_~5
z@x;lf?6J1J6o^nmy=-h+zR2<hh}ydeEC}eww-h1e=yB@0?RK{sv-3o=$BYARD56%h
ze&ucXIQeV`BP4O}nq_p?)+5t2!U*r&xm{1*fo3KzWOIZ88~unj^*oW!ePiWu<Db@*
z9WZSi-Up{&m>_=VVn4}rtCVmZy#(FcsHpvrpi3Obh6|gtXw~jqpIa)hc(L`N*#1fU
z*_pplaM>L=I%eIS&oo{4c$W!pQ4K}fMJrZE{Mk5k9azGxrt_A9Qn5|i4od?H+X6IB
zIK4UvH!f^j*Zy)mzH=j#aoMTM2uMvd<Y47=VJh?j@DA#-a-G5m3|EHdx8GKrh4E6B
zQ!25g^4{~~Fpc>3{$t4x8yWez6zT&!!1)eD^PMm0&dhS3%v<)CAt-J=`FO<SPG{Mq
zpyFoJQ0p`8!v(l60>~IBZy*grF$ri966lPDkak+aHGfW2oE(wC`gRFcCP?J;?k27G
z+0zf-k6`*(Q5|rPmFj>1>MyTM@P<iM;_MM%SlkRQy*9mn?kMPZ5WT;L_jf(-C~gCf
z3QlJ2NQUZLm^y8&jGS@~vY6PnP!&soG{8*OiaTXQewop=#P39l^MacL1iYtq_Zq+P
zQ{)@(?jOxb-1wd#4Fu)+uK8h$23kwe_L<6$sgQA`QbfxtYNH4xN`v7CSWl&j=`fo7
zSbTwIDLId7bd3{vk-(R-3o+LexvDam)OHbif$i})S|{@jqRC4TDdBR@*%iw~cc8Us
zqKlP$UCpO(FU)_DxUbwi0`M}s^^GVs69&ByJ{gTK-R9c8^>|fn4Mb@fMw_+DS=#2m
zIbU*bCzKe^Vd3)gGj8Ld^C&q)y`gF_{qW1vkj3Ho9k*UoozMmI;Q7hf)Yr~`+Aa}K
z69diCEJigPcA%T7q80C6-v}ka*)Kq;FLtS#W!t)>jiE{DzvCtkVizBf(H!=g5SbwX
z@1P9N*N_+(COC|#xD|&91QodsH~bnFpP+!Aj0ua3fEYc2T^Gmi_XMC3SHx#f`oj>y
z4j(|46Id21s8<pIy_tQ8WORk~$wYm2;*Q(U1xO?3xE%uBkj4ry&|eUcv~i1C=-FUn
z%rJ8Kd*aO0VGhb8zvEPg4XP^bqh1^Gf&kC&yv(@IzIxn)Q{qo|A1v2kUCu(KX+m&v
z6Gd^guKQ)AL7k76ekzC%z@p$q4SPc{bd`x}&?v|ROufRw<Y+q@7?W?Zw=G9Kq3Igu
z^R{GUbQ?^5`f)@sWKH|<g9yzyMj&FuP9^NcR{qCil&>5R=@B9Ea*{jEj}1{WUqBo=
zCtbi}Kdu7W3OEGGyvHix5>9|lfTr5Uw}s}OzvWS$o$6k6y;v%jKclq^i{QCYfLxf!
z$g~=*)QTp>AXP9mN4f=XeiZ!P<{ac%39J4{ZJrGMC#f7ixi{Kr8^Q*}7@yZ`b?(^j
z1V0@6FqqcTqO2REz5=hd)ex|%wi9O8dtjzKMkQ>`L-)4>hoJ#3ZD9&l$-{5yiL|sV
z({~}>mVsB*4^4-&rR2z{SYDgfnwvTljKsk3<j_&J*49P?oPJqUbhG80AbKda1-C;x
z)7v?QtIR#*O&*5|B)7<uRp5GTuVq3B62Wl^+CaIpu33F@&+aQM38s9>MFIXF5DkOF
z4zyNqunrEjORvQN==iO}qD?c)S4YD_5`*OZ&pSa5+M2$IVM^M)qXWp)Y=Ri$dm-Ri
z^p^Zv*=TewPkQb#K{lFCK_GsCkcqU0FcV5+PEq0oez+Pw&_dA1q-Q{pM_nD{<L-Fj
z*YYP!Z2XlP0f}~q4(Gop@i6ggaylLD_+m<Lt%gcjx=nyRL0V(ryh_N#RAS1>Z)|Jg
z5`Cj6YK?&B_8JYys1UC1wUIuP6e}YPblCBpX5dmd1*|_4<4z>bFewtUHW<EpP6XY>
zK$}UqAAh^M%RG$ex|0Ifw;Hgbp5@5gg;+)NKIL4dn3<Sr9KJE)+SjK;Bc0)Q))pJq
z&t#Vd<?J$H)m}6?$haX2y>_!3KrKO96z6}@O4`)knzI|z4$++a)JAa|dCTLAOS%t}
z8J9keX1>rvLQeZdzaI#yFzBEhbOl@Mem;0Bnc<_tL*s5_vl9j?)xJ#{)ffJeSZfmY
zc^Pa`<?k~wx4-Y8TXu{K<#Qk<2l}+<W6S*J<$ho9023TW9HhzMLSLrYzC-@myTJU0
zpTM&&ZYooy$S)72E(PCr$BdB$`u*x!0a`stZ$X0E9u$laltVIc3DWTU(%Wk1sTzMt
zd(yp_(=++*a;d(kx63+{B_V)*9QWNJu2#ZM8ZSg$z78>BqW4bQsDtOnbV(UGRNqwi
zkL@8@AGeP?d_VYG$-e;9|8GhD4?Ox`0QJ8u$^QkQ{*Pz;e*@HiqH6zbdiF15cm|fQ
zwc>BmvmI(*MFy-0UquE-V$vcIfH6cVGVoTKO~(b&#(9#(=YV7s&;|-hV&sjh$3B<d
zzDT4D$oR9`QV1(rXPxU_YA>$~3uD+u#x29i<{TQ8CXC{N3N0B%c4P$-`<BWdcrBIL
zbP9<gr;Ymq_;y(M&MsQYt-UW$&ZIW)Jf9Btw^D;d>Vsp;0ur&srJO7e!_hX+h(3ap
z*97C=9^og^(|1#K*eSVq%4)n&E4p?}RG+<?_8Ssz&c+>Rp3O(+t{#YnrCz-1bID`|
z#qe}YBetROj&i(Kl^?tn8Y>o^bzVai6BH_H*?~i}-b_YU)O0L(DyySj=xhcT;(zv=
z@@SAF#HSM0!lMS}IUzkyXo~2)zf5Ro*L(cF<9Z3_!jh=i1s!S2+J`FPG9pm(*6NeZ
z?6BBU7Flf><xg)1{0_%k)w3zICk_N>)Qb@xBM9ac=-(x`Im6PaZqs8O92#rJwZ!P&
z{b*#^geFrae^4swV!KdB{mi#=HVAyuQ19Ra3A<w%$jZT0yP`|N7+tk($&1?SvDE=)
zrQ5BpbaCpN7FKE*wu0*Lw2db$%?IrWcjS*_pse;Q;Kk_ob`k%zf0XWC#p*-5#dB>P
zZvP%d8C?Dcw5sw*7vlrYt$x`9K7B$XFg)@|slYd6@s>h-E7hCe_22;-F?F~zrM!Z*
zE%OK@tl%|W%NTUWD)ifdS?c`FgW$3-A?G8?V^4e1-GEhZrmv{%w(})rwgngq>M^Tr
zTmWG+*#a!hLHER&!Ju`r`EO_Er(vK#C&~zzjQt{(@BOT`gENogIhUMIw7C#`E}I@I
z<SWKakD|c4Z%$Sn7=BEMKLtMl-v$+^rv<{ojs=CC+tcG2%(;jS$&n+?av^F);X0rP
z5#%Ipc+9OYgM%ww?d0cjoS<S-P8MCuWbd10HOfqz8nQMxF9xR`(|8}!{8unMyXzPA
zE?cdJ@zPG+PJgl4x`=Jc=jp9LrBKF;oTp`1nKc_^+y|(L)ZUtbeA~xk%=VSEc~e?>
z@LGUhd&cKW2Ql45w&N&LP<!#-);Q?8r0+<2hSze|5%BD{7Ej7<0`*{3k%|=CpY;Wt
zUwww-5@f#LM>Hebp;qDlWm*cw@I9A>sT~*sg&-D<O^RGu$B7GsJB9!e-ECgaki3bw
z$|`_8BpQqcD@5kJy!*8o6C#pMBsFY4L#x8Jr6UbO*(?^jR1o0u<lZQPF$AYj9D%<m
zl^z*75y#NmviQtbstQgt6q3p|Mrz{Li!e)(QSKYH=~*}Lja)B1HDmTxeK3YKIgJZ-
zE7?^#B%NWNFqjh>oSzz*Vm08NB}X&RNNP<1Xa-%t@cJP&4Rb_;o%OHV(nI3Goz~n<
zY8PxRG3+w`HsV+598Bm+Fy>7MMA<+<$r{d4TEtqTK0iHD1s>k33wx*T>l-oRmURKH
zW~__&F-|q8)KSY4;2ozj4Gh>IaX(lY-K|`ZzVFo@AO;5T?cW(@DmB_8PW_T?l{hzG
z0EeRJ+}iERChs>;`~7m&4edq9uZsLl_}rF_T=fQK-dA>%Q&W!6f)C@8hsT~gC*XHN
zzF9vAiuUpPjBlZ;JFVw<j6w?9bADXMRHQ-R(fWGtI{Sqp5kwLAo_4P1pX)YOyky=k
zpscge^dKH=dEAu1Z0%0?Pc7-;d=*!~Q}6`XASM9{y=x+DT18`4mJ=>914efoJvK4d
zAZP3%y?@WdsPa8wAQ%kTYIND~vj375;EFIBf6^{P;VFFQf$uUw-=;H6!cL)m#`Wq)
z$<>iLg>Q1-Jco|nn^VqjyD#5z-7Ra~GcCn@y=q{N$Yg$qe8uDkYJ)5bYLt!QI9ve{
z?b-Gt6E)bTXA#Gm--hmZ8*OmYLagYQ-p?z5k2kQ3C|bc?zoi)%N9Xh^o0bCh^IQXd
zhI!{ggb+tg$E{2b$;&n2C}BIBP>s6#){gBegv;w3DnJ`@A1(*KY02}cN&@Ju-U|wi
ze+M-DQ)?Q_r~O6G>7H&3%Kl%Aei*)dV*eal{|y86uiEC<nEIbHP=Bp${@J+p-{_hD
zB&q(MSB>c}G|aEA$iLn3J@G@s=ByFX`>|T>P8^I#q+Qa@bOwi+KMc$){x)fke`8^#
zccuzQ+ym!-S4C<+qqXtrIFp89!Hw7$cVeELMx*O^$J;>3v+uLwKVqBNZx_yDXS)$5
zCZ<QXWyeReEf|$Kq$UjgYPmekx;z1-HB?}Ewe_Jub}xwYYQbHpS_uLll2j%U9GeQ3
zO#Jp0j&QR}BVh*LluXfx%P$c`^M(X_y|7=6|M|SnW?oe`E5TlQPDYIT$>Ugp>yq&}
zC&OMUb@TuVqkgn^QM8c<##RAnrpTJ@?&$?=jzM@!v{|4K*84-ay7Bih(?^UuuEc1Z
z-(peBNXX^K0D70<EOTxx_eJxnQ%YO}U0<Cat;a=+RWy$jU@~QhdO#Lg-QCCNd?Bj#
z2+{a4_;24jvoV3+YlE~_O++G;+g??I$u_Gj43x-0aqd5O=FL0ZbKEys?bIFpUa64P
zP_)HWe^TF)RgvtPaj1$!N`XKuar)BqHS`IGxdwoJOd)wk2U~uh>E`mb4bevk>Vsvw
zI_Mtw2<(M0W!Hu!*APrV{c&g<O3t7289?TE9UYC1glB@?!k|kDfYfH!f(8X+QpcnD
z=6royy=?3fYxUt43#ql|>;TS|8Y7&`8Ujs2lET++L+jo8G(}F2OIqX*tCJr|d&jH-
zRq4qa8F6xPTJ#d8swGKRK{Jljg?}QVTRb*TnO@+t|2bESH`#;>(zZ63=$mOL(=(}g
zLzXgLSxMfY(=!42n6n&|)d!ouVaUsm{V0wtpOq)u&AX)K7G4ASYa0pSb;~N*vwLQG
z93il0+_YDIeZX`1fieE>C=7xN&J(Q(6t)b`3yj>uC)GkEhabdQ`3O%FOVe7`v|ej~
zt`~aRd?Zh!6C_*ptM%;+G3(L}kDZ`W3HiM1tY-H*jSKXX-5qQ`6z>k0J(SKgYI!#B
z#d$p^5pTVh=}CDs45nfeldhiPE`1vtw8$a!@JN{wUE)i?!<lK@@rsZW5x$(;tpBFT
zzoue~avsYHSXBj~+-y|ivHHubtahwXe@TEoHWh87cN#h)rcXWy+WNR2_sYpqEsy1e
z0*Hn;i?1ANY)Zz~2V47;-dXQ^RNNU6*V+%uw?GkK2-4g#-w%(Z+f_3>67wiTj7G*t
zK1kLj-D=!*osbbsc?>P?8owf1#4eTWkwRl&W5YT@OhoASq-{*BvQ3+|Cv#bcQVKEf
z7FCo+s!oa#0Ew*Y3mXDW|8&5Kk<`oPxin<8IeHOM*T5h4Yy;XK!9Yi4MoMS#7yuq0
zHa}+VHQ?eed{Hx+Wr4!@gkM6Q<8p63M{4zM6)e6gXUv_pIl^WToDlfX@Y~^@!mi$`
zigZDz@{9Wxn{5ivQf&IQaj{P6{TSckhb*!3$Xy&pNhZcKYzx}~&=18#uX4Nx!lx5`
zwuIpJ-&28OW%gE5BPSAv30B&d{e=9ErFO!A0nHU%Qv}agfZnN6*a3owa4&X<rYl*s
z8_uDO5;g*eW~H~`gC#mwt6SDIQCi}1zqv-AFu*nF=ESBw>DRM$t87W(vB$G|LzWa*
z&=aIeV^|NfA6TMdyYY3yb!g%V+#X7v>fXyFssT!2(JH1C-3nh*Tdo2B=34``cg6Fl
z2Nyki2a8a__)3}>l1WIJ6t40eG6W)5VfcF4S+mEC;qcmZfIx8(c%NZnUz=@OYD-`J
zG}oYB7kepLL}RAn@yq?h`WX%|@m$;eP>gHm9KQP!Q}bY+p%;Me5sa0`%7UQ4_(kUE
zw3Je)092{GjX6zBLsXR#5*`T!-x)hD?3%KVmvRDQy$bzAjyLhZ5z69E=vukuh9;!1
z);xaWA!J5=MhVn!(#@7_&0Ye6Ah$XYq5YP^`#D?-yK9IZp+g~EggZ+^rBsDSQdLf1
zKg=&_csdbCFd@#_1CID0@D$^_8T-<09N8I)_rBRPfKv17cCmp->kup3ZFDB$`RLe=
z+lo#I)_PHP{yDfijP9Dj(|g`5d~jz?K-k{_M#7|q5OB?uq?|K;1li<-Uk*Tmhc_#9
zP?+W*5d@mT=$QR0RDgdGe0ewbBLLFs3}AW1%QgI4G-EX|cJYH<1w-cpb<O(JQLB1>
zRh<yv5^%T8*r|8qR3xK)tjS>Kib~WuM{#_wk+p#%7!C;Er?bou&|FJDi;M|CvWPVB
zoO?!9UJ!yjG4fGaB4grGjAEMS0ZpVwV2vB0*R@0^m?@an;QWX4nwcv?=~GqI&onpX
z@k@VJACoBzq}bMe>iF0#0{ARF{vfPnz&3n|QN;8Yc1#ryF8X!@_4z3_ESR+@3Wu~j
zgeztf>~lhBx`K5K0NJFjn0D;*eFJP<&?2VL_8EtJCE6g>Ef52``5VWI$CAVMQEfFn
zvg}4Anu3X-YniT${1@~^(LA3eVL~b6JuZ=mmf>$igTG-Hc<P593Ksz+{dtX`Ko=F+
zpOa>V97DA23p-j4ad5F!&Ie46491~hj8#Y$-GUcTWSsLi@m*1>U~yhKVF^bl^&&lE
zE?^M2uL23dz*1{-dp@JeV)(pU&NTW3bPzLW9o3VfOfKUX0pPUk_L0s_DUTiGt8)r@
z>(^;Q*vg<@_5?i$!VTRsXeHreO=&7n4mGPaN(cN4AE$nlI&UrE5CHBpQq=pjrHX_e
zYwm?*o(Qmu4Gd```ct*RUyPwXh!caZ&Lcp5coHq+k6N?S>A7EV=;khlYIcf3A%J{+
zE2+Ss_@TrSvcT{p5tKg#uxTP<1}CiML9wkE)`_rL)OG{YXGA85St<FGoT_2WTg1I%
zSMG3(Tes=BdudUgjTo^?(1VuX%TK`#c`=SpPLWY}pCGy!?D~C1u}|e-`uhNeW{|QY
zhx81G=-+WlCgF9v*R>{?A*RxxuvJ(L$w^SD9LS-F_GqHG1H~j|f!Q=lp=FdcX&D}7
zKqG2Bce3j8MXO{6e~Gi)p-j@qO}UqKM(j7MLo&n+%Z+pQ6HBZ3jo>bwKk)%*$gbZi
zr@So`IheXA-<BK$T>GQUcIF?ClkggG)?y=e0LJZ{ez)RG!Sd1ZhVsr})aMN-IE4&$
zWP^wOZL2F1Yyt8Z=9HSa@Rh{D=rTAN^)43-#A->Jgk+$S1Cyc)`oK5D<?4d$^4tw;
z<Z7g@P}Mq(Q_gNXGE`wSR1%L7sG?5j2&yuCXlrpT5^yui!3COOD~FMWp7aapXF-S(
zaPNT#KT>(2iVd7le!nB_4L5=~0h1#+m-DVzV7$ztZziBg93TCr^ql+-QyOKd5S)}n
zDMdGAQ&7cct4^JDi0$IR6dE@|nDQg$RinbaEf!jf??3>;cD;9qC#{6kA(84CPFxy{
z>oYSW^1D_;b@akTVG*s~xx@K_;b}|U$fIfR%v$7_hyz=r*f8G@YW*#(tG;kouu~Y1
zmmIOhr4Ti?BT;h*#9mkY$-0+0LIqA3;SIe!(d(W5Gqm)o^oKIbUWak>lFiu9(wJZ2
zlK}8FwSZ>SyqOE?y{8q>=Je(7Q=O5B7IqiKb9oogE4TQ;X^JS-4Z99PQEI#``M}41
z%@%l2+=Sji?)^M$+aN;#2TPQpM`by7BgrG+_yJF`SUNJ<4^QBSN_CZP33y{T3gFae
zTgliP&rNf?^7@?UEjx+!KcVpQdVkZ11eN6{06jqlI)cm}O4=$>1;Pv`$xRL$Js-3Y
zixP7BQx{KB9hCve6iBg;_GoXPHNbz%+6|YoGOwudQU{#G*;E}m=XnI$WZ0=0@cfx>
zAVtk_F~2?SjxM@u7?DS!niq0~+1FA%t4^kCmqo|1EETqf?wFz0>|!e~ugjV2dXZ~s
z4BD*D1B)XeQ?5Z8#P}S*w4ry84MY6P5~kkc3e>`I4brR-f8?nJ1Hyfy6<vig0|kLl
z57JIT{R1vBjGQ4eT=VuuM6Gb2`3Bi64>>hkMj~6M4Sf--0=tV=?YW>FVbS9@&hRTy
zs9oXUUBxcpX`B*EEe$8UAY2*dc<&hs0}@a4drM4;1_AnvWOpY-WIyvUG5MscfbpDk
zV&pXmroUV0OcCa!EVQ5q3OwSVivS0gcPy}T;`7_tYA7w5{Z5VRdOr{)s@Ic^&ieHn
zL9)$H_yk~=)E%5PsR6Ge=Mw|SP@t^wCtz$WGK3JTw-gZ0>tapeVGzOtdAV2Os<;eS
z2yGW-AM;@E`(2!kZ8IxleDAAA)5mxJh(LI0oUMLr7@6)c`=YQFA%ahIadXRmt+HZZ
z`hOb-{@8l{Z=UnZ2>L%>+x~dQzw(@aUe*3joz?&B#E9w7T<(8bPg&UhJ?m*JqW7jw
zEvy_Lv{0Dq42_$_Y{5PMOnfh`9Ki@MjhPi;+pNm$;1I>jCKtLwvKB`z;CEMH`8`|q
zw}W)dm-U5{1<~9k^_T%hZ5^v6fnt85f*;@XkRUKa@0G8YUy;HLZ|_gO4*!ifF{LUE
zac5Ixy)4Y@pu=unTmu5W@&HtTc!Mo!lNccllOhyu-%q}mPwDhI)j}<GRrc~3nbmiG
zrOhFzlP$d_LIp|`dTdtGs(#|^J<H^LPke%FVw#gHqo1baT%O!m%cdyVB?wh|h`{0u
z?NX38;ZGB1P@OrWoJ+*T_TtnW;HNHV6oF^;PLsHt6LGatwlO@o$JY6F)lAb;yZO}1
zgq`aC$P2lD(YTh{X>OkKd;6z`sS^0dqUCj}JE`;p8>8P;&hQGl?!A&RV!cp|a4ZQa
zTv6{mn=N@9*>2t2?z8~i$dPHN9t%Yx_-L<UO&0sdG%Fi>PfTwO9WL3%tMSy!?zq0{
z0yQEiGq~w4oVJE88B;o$pMPDg%8eI_{n6^2;u4Z2K1FR*9XZ0t?xbe95V!3?0Jjgy
z@HgHC87k1<u!S0lge~&3Tmgkq%ov)+Q$;!Pj}D;u%)X04JbZAOeT*c+F^1-RBwpFE
zVb%2zC^+O>VD6+(yNc@j09P0I`ibnJK&4JMo)wIVPsl2m!MSB_iY_@cN6Q^x20`*i
zT5J>6yP}LhKC4;SGC#>7_y>>1Azs4I{pEEHGs4EB&Q=ZFXk~(RHMUE(NuNR&^8<1*
zFEiUzaa}fMpzki6Ct+hD%=f~xyznw$S*iNh4kd@6I~B~=IH&S?4Y3ND#V?17&N~S8
zOK=5a4j<>KS@ki68lO!e24wwXRQ$pkJVhX+Nj_i%tT8fA-*Y{wT@^ro{v`7wkm)lz
z1E4h|%l?VWZjUY059C~PTO}~9drA-geL8@NL*EdgdWXaL=U|i3Y7(emVeu8n3^;-^
zBQJf#Rx!t9r%m2(CM%;V#9z+j!AOO!(kBE?1ZgQe+Yk?X0k4Lfd;92C31F#Vb;$kG
zjXnvIEdm*41Y!u~yUbomntmiNim~u}P*8n-*dn$0rRhP)K?KD5Lo`LSNou5^KcWUk
z8r4@Eha^t<#1S4Wx$sCn^oO8`TB7{)Ot>zhmY^-uK-94$o3_#1Wc{#vi0{)rob^5_
zVTDTazWp)}%&M&=fwG>(iQR#_v*2Kg@@Ixo4Dpyewrw9Jn#MDwnxvBSJ7amuwYe(o
z*>regHa7XHWMgpY+X||IvvN)wWVAV~`#B7Jmyf+hMAz-Rc^W6Yq-<?sEjfp86&8Fc
z!?luj3_g|0PV1%LIVjG#Cw|5JMleO?@nEvb0!eN(=B06DZs{S0<e(6YdB6qNB$*Kd
z4C5Axe>Ob`_bcr>48tT?F3{o%vgHo(n?ZsZ1g6mt&r_}X+Cvn$!r=4IVUlc|)Ei?T
z_J>36e54YBI73`vb%bwId`w^e(AegFMnWYLdDe>X)<z?jH6G5o5l4c%t#E)|a>NZ#
zyx-2L!3vq9qRqKj>vDy)g>NJWK!C%o#C!rn)U`cP>Jj?iP#G{RU}Vk;CJ_0N%McZE
zwI3KU1QDpuL7>#Ha7K#~dR3ZH8U<v6&6|`)VC~VcTL^$eHxhR-GkO4%leWUj4816U
z-~Gcw6wjQ`s!&slU-XCzU=zbw!G`g0gZFMewr+=sJWa3NV>$*(Pz?!J;LCfN7wUDf
zasnZ|bCT|9JuF~yMr;U<tDoGNHEHwEvoe`Z;N>YM)Yec7tNAoNoO^eM$+*E0RahyV
zNH?v_;1(Wue_u`}|0FO|1x_GvDa=eCO)Tc~4@M{5U~y`)s_7{-)nRa&J|2PLlRF2m
zNnMn&eA2j_w=rKOmteG$5$&xlrM9dh=_Qa7utQ=opB(RkD5Q%WWG5!Fz=J(eZWpl`
zZg1+hpTJWZZxQnjXEuR*=PMyUq5}!_-qLCXt04uF*nKGWOL40TO2ZyC>b%;R@#~e_
z;u21=eBX2vf!0D?hMMot06Nr&<5)&WJs6PWWhBopCN)DCFdtT0kq-3V{x+0t|3p!t
z0eJ~Fr<8eP6<nm&t%t0G<h`5hqxX8#_x;KaaPBj5J=H}Vh=W@BohRCBb3UeJ*1kc@
zo$xk}A7q^ImktpBQJzS0(uIg&i4XaF@>`|-d_sY5AbV>1SPS34!6Hfv5)UJ4y(n0Z
z%K!x^H)dOYHuh*5vUn`^fzy6Zy^`Pdku^KAJMIokJz;yiu(>yjFh4`KOcdJ!;rh_Z
zYmMFS?aE02-P*_misAJuzq_9;vA<Xd9nFKIg;5Im8#3pJ14Vgq!_VUn;o@nq#QO97
za;$DXOr5!TZB`iGk6NN1RBvZ*C$2pS^c)?FYiy8FU5_W4LY&7An+ofexu6<3`P27S
zVL}qB#ROS+Aky6{Kx3)~H3m|N&&4zy+FOJp1ymgk>M-VTQlV^xNZuZ>$$nvy$uyD=
z*<8|nOu~jRGqVj+A(?^OIRz<nss`2J#SPjni;)Mo#}=hd@>+N&`CP$n_5=%{EL+k5
z?rhxQ5H;1$XBH|-mg6*zCi%6P7_$K5;)~fD?=q44SZS{eAINf5UdE1x9>z4ANiaB~
zsKhS9jI=2CY88WpONAJsh!}#x=B{mMUzFo>M{?P5uE6Rvmgq|Ft=Y-?Sh!nD3!*t;
zc%u}|PuS+q;++3#BU~-SC2lpvf-{etSgZ|!pWboR!ymdR;LYy&jVF20n=5F?C4}Ql
z(~c`}gi?pS(}PUr&C~M+Ny}@kAYDMh(6lq8#<D*N(r!PpdH7opUhHZT6?f<7*Nd8!
zro%pz*8-^(qd`tfQsW8_A?8d0N@D()f&1z`lY{Kjr`8d30nvUJjl{CoY0`XRDK?Bm
zp2F0j8Jm0FIAP5es3Bo&{d*B0JUz~Wz~W#nNrwIxxelEbd7wV_r3EQ9nI)v}l1V+q
zx0+X=LV!2Oiw`>dq;$>&rmlf;2=LTKmd9-2r~3&7z9V}@8~Ky)?=E!OvuX*S!H1ph
z15<)?P75rY9GzPDO&D>d>z*M5b`_t7&xYcOpDj*>{*^)IoeezCD2;d>Z0HPVG`9z;
zY2({Dz?qaRY_CS@Ss^fa=Jx%^`@p!5NdgVG6Qj5-g^u88H*e|hcX0X?LoQWplGn%I
znQNu5KZ8?Qx9>mfmfL|?WPrv6SmB?wQwF2Q4)R^wAC{e9>Fko042rjh`rN#%z;zb_
z9Lu|fAI@knu30a70gU8Xf@zrxwKn%}fEd{`v(S=p@gqAFhH(XnW<!I|&F-as7Z*o4
zcaO?h(C_cDu3xOIdnL`)kEuA-Lq+HA@?OM#tKvAW@wF@P=8-)*ADRJ(((IYTQCH84
z+9i;#*9_3|r<Q+<Mnr8%kNgA%S5~Y3SGNGupEdix7C-&~q5lO%|Dzc0e`3F7`g7Lo
zzjxU6f9$tkw_ks94t#9{3`~FI?GpSwRfPG^E5twGH3RckitpdF4y>zA+3Yc+bUs#N
zs0c_1?XK7%aiOrwSs_9|f^?i;^kmvO=S`3Z#vNbyK5e>PE{_<d)ob)b_C?^nK0m*|
zb?&{kg_mn|jH+i1ET2@Vg$gl|>bEFpG9VV~J2kl>uLW~Lrm;pKjR5ZkJ7I+8lnQPe
z(@0UvxSu{8ZzETv;Z8o#m!FZI6^h%!7~nF8gc2$C31)!f@~TzqujZ@`eI0bmsy1Dx
zrgEAH6pw_(d!7C&i_%LNG(!+hH@2AQq>j2+yHlf8Ka0Mr<X=7R1R|4eJH6_r409MT
z%otN90U4WPcD~U#%t;WJV^$6l?NtNCmsGmNV>7H_xc6A~Hz>dmUXsS}gU5cok3-KO
z#Z<K=)g(zM3LkBC$$}YeZQ|a)LbiUU`!$O@0fw!Wwx}`3NjTSd@Fa5OvP3d5<#oJR
zL@Re%PS>WIOcMT5y}n#d#deWiMRiGansos$tk>~y(9?LH`_VgKai{M-u-Vs93$oPA
z?P6s@V9xBZ(j*F{v5LR)5<09&_k&0#DI=M`7l~%y?YB=8Z_Av}=G#+Ux}3x-&wHB^
z`foUP!si>iR<GP{6^o6_67&;<leR~rm`agDs2Vmsw>V$^FtbWUMzLMYqAmOt`lmvX
zL`rDyIv#6XYGZG`G?sWym+j8g9ZZ;}Ca4MyKHkHilp<>JgqzBld9=I<=Y_Z61f~&L
zEAVr8cMruEmEN%kY<Cb4MHhtP%wx%zz<qH?{{F@F+=dSftCWpX-wz@?m@U12424~$
zOvXeBJ8j~}ts<!Qx_tmKSHS3iN`4LetEpDhR@gzUxo367*Gl9xz0ukWl1JT{K87xi
z2`a&134(*du4*cmSExwWF<}91d-0xaM<MVK+>g!phTrPVGbkI(cgspclO8qG{g19M
zN9G7U4Wu=m<P2j*=YS*4dcJBPXZBW<O(zIg(r3irGbo+2q^L=$7NR;Cb46H?dXAKX
z=4wr}ro2O*&3$J$Z@Yb@)<?*o(=&cR<hG01USJ=I#y^bBF+T{yf0NejEMSh=A61z^
z_+H$zoDA~;7nN}HM)M#5yzHI>gJSd(9z<bKBz=NCgcot}?>4vEoP#kgt)lxGsb?rf
zd|RJo+ibmdD4{Ygc?B7TbCqRmJUR2Jz2IUiFkB0-2+OWBrzEfbE~)w{3N(|&=M76*
zuO_)Cj|5c0>>4QxuLs7XiCB(dg8!5GLIjEFeo)$a&3sAlRO}G4Vk5W(21}uaf6on)
zZlVoHpP~WdhdX?cf9e=XLM^jOuO!@_^A$uqfYli|eP9EuzRk{0$VZ6ej*Jk_Rd)bk
zVT&*pJ5qVIePt}qld<h(-as?3HgE#AUS(B&iP{VcFKsPaZ_ey?CKq5Ctmwwr@s^>)
zi6;q2N$k0F2yznKZZLFdE4eGNA0>{aGn>DBEu;JpXY!>AV*GOV>=}&AQ>MpSLz6Iu
z>ev&`#G-w4Q%0R78j9gk4%G^!Y+2fQ2~;k}!95&a`?yCiO|HDNVXH|zB2d?+Jo5z_
zY;&^-NCB+IS>c!z!dPI$#O@f70zQe62cQ@YJ=b>w40KMJd4@#7>?-#dv0?F|pgZdi
zX+?>mF_U+$lZS}pNx89O!4B&c-6XJ}AlMd*lfTo2HA`Lsb!48_D!1hC29ErOfUd;q
z6U~bQjt9z`@&x3QxFPg-tm<7fT}7+Dj)}9aKs{9<gFQ%L^NVhvmYoXNhSp<?xyV+k
z5`<Q;V;%4xQHL9*wYNdAKU>>F(S`?8;s^S%b0J1bfI1`_|A=Yj)9Sd}Z0m`59<>wl
zBDn5Zf!?)K#C)=kH)H(3jE&c2-~UVwg2W3l%r&B36;vl;Ozw95a<PNY6afM9uj7pQ
z&z(PiJ<k64=>L~-_78dge>BeiY(x9!IQwr%p?{98zd5P?Jf{D1QgJY`{@qEHs3!Rz
zCbzG?^CvMDG(iLae%86k0=v1^xnsh`%45JJ@^D27CGj%rv@eevFF+WIUbI6^=n#;a
z=j%D}i{AaoL<n;i<<3|ALHWXigej_tn_iWazJ9E^UBk*7UW1X3Ied7bjMLqe#k2GE
z&`EN6p_qOmDHs+JZM}^6-S;%fs-)5g=vXnV3OF9Rjnz@BTZ$RTFIeZ5tK0({((v%|
z;r_m8GeuO9W#o7HRA+^?rm2&D`%(Q(5mQ#{Y+z_z_CbL^^<HSO@@eqiA4_HRwleeW
z@l8EGPIkjP;_co39p}bqJux@(fUMo;oJ}IWSu6-D<!T~?fkvsqo`N5*KX63+tcn_4
zl0td@5{=0I{IRLaKA)pU*Qel<oe1zP37bU6iMq)eZHzgZ)%qQ+=*MeKNYzic@Os~c
z0@x#lqh?SqWli#FE*872!!VRlJ88{s9|G$;M2|u(x`Ln13)_GXZ0e4R-V%YFO6<#X
zp9j+um*EFv2C3-nx8|yxG=l;F!SY0)dSJh+t}~=t&Ud_cHkp#`i1?M!HrqUi`B>Ie
zjEH)jMa^B<V*nIL*;pH!a+<;XjAPS|VnZ-#z)tM|S6R-pxeegy8@3-_;o0wzT_`j7
z6n~l?j}+(|gjtRzcbu1lJ>?<Ms|D!PBvvlDq8wYk#))=3E9Y$snTJ8h2eSf1vJ(%Q
zsINMJBleA*Jtde$+aB@HTd~s<McYzqQ!`}>Un2Nr75&g|vVQo@)%#Sc6WpGR;L2yV
z3lKbrNqm%(yzv~cgcmZ72tx)Uik8q20xOHe*eGHeW985a0SqGdgA2$vZ%9$cyB%^`
z)}(fRkX@X2LpP-_pz&Kf0B(qwlDB)ex7I3JMTjPcCOC?Ekr^Ve$}viEbW}InKI_Gc
zm(S8_V;A7g#67aYQ0aJ~;#F;##WX)^g>s*_WG)`KyiF!Rev~Pyy)e#3qbX&^arY!?
zYNaDs(e`S36n6J_<FfD0z4NfK{dqop;CWOrB^-Lw43L~q&EN4(M}qPl(m0zrH;nqF
zP_iGyG>S+ppf%^a2UdZn@BvwQZEX`Du!_S<PTW4ja5GU3;C+!vP7#G68T5XyLoy!)
zeqDNl!D8*z6A|ClhU4krQq1cvaaGcT2&}f;^IQzn27>>-eqitY{i~@(F^wksrn&rQ
z!ld8z+M<=uiRr)rq>dxpL>p0^m6nh89+Z}5Df16EX#HS5y<f&{J$U9#Lrg<y*MT7z
zDr(;(;KES2Ul4rzqy#PBJElvVL2-6cBElhMj}t7LIr@V;cN2dC;f^j*;E%E@fijC8
z*5Gc?B+k%ONHU=Z&r-Y0bRAA^NqMqADWXGB_4bRvnH^OvCu4L`>ZnTbs2bamDP#v$
zF@T5q!C>eVzgT*<?vYOhOyo2;rMd6PjlHf^k}l;Za^W?1K!OriuouQHgE9a;GcC>@
z$u}DP;+QDS5X+QN2qW~9@(g4LZQh+u+Mis2Cc$l_v}tgj*3g$kc;SvlE=kIi>0$}7
zuVPJByNO^g=MczfAYY9;Y-WrT(m2ASFt}Lb6czAMq}}la<YYnL-=dc4VJxIb6)Wu4
z`^GO{8Y@#N2+}W(`GmLDBk>)R``t>H>IQrbX>gff8ZeFzQC1H^Y=@0M90R$dd_)^|
zC;zv{J04f@DCr0g92kto=-%1eG&k<U*{zawA_gl#NSsWD!ZlNPVM(xVv&+6;5I4xK
zl1J)y*R(45VweRuxJgeC@Bn6+@ft=1M&RR+FmF|aXkpcGO-3zEo}lHQRV^mMAB9vp
zb^STe#W*@cvul&iw?FXb<Q11-jbN&3_~(bZ(TZsXYHl=~p<PX-BrT5$WmNfQK{Ur3
zw3Qh7{q`k`=yD{pL@z@XJ-mZpo_d8OaocU8qJfiPZ+23F(5Pf$`4aDzO3jB3M#B-O
z-g7%M`u*HS&J#1$##Gk=+4K(ynpo6~Z&SaCgjPBJiVsVM;PtkQG)Fh=;U<`*sdJPz
z!GG3&^)v!a9i#rfDhb@2OqdK7(AXPl(mpM_yF6dJ8zMjs?dDYk|9%Kjyi2XjTLnL*
zUZOoJjj$j!#5omKUHp!ray7a-fvfvkckWE6wp~aY%m&s9NOJO+T+=H|ao4lfOgZ!+
zXP|GA^kH|EG{ZN(riVQKGT3#arBG<-(PtGF@$n4+T|^)>Y!|{S_m|<EjwRQUv_cK=
z%)Oj@)A}3;8{M~Ncq(`!{5_yfNqbU}5_Aeto!4(CQI~Ewzuq7dF4(1(%MsoR`oZ3f
z1NxoEhL-(d!35yIaqQW*2oUi#Fd&A1Xb+Xv2E**bUjN$C)t=Ok##O5J!WNP>`xz_}
zIUVmFj0dCsF|WMj5WZYMBx})Aoq_y)SxY(vwkyc?gVODs)KcaLJZeE27#^EAC?N33
zLKc98O({Qi#m&7MPr+W!1`Aq#%PT0LPiFttg1v|P-2iRA<SfbutwS%q;gx)n@!=3|
zeZV75U@xf%mo%0U3oUF2i4MD}YU~ut#L-e`UGZw2;1u0fI66BIQ;dBMA@oRBtN6}*
zIlgN32e@@`4(MOtmOn4U{|#>WheKb%$ic?R-oVI#fPwjs7`uPx3YPgl1SJKiKV8B8
z@r-{Jv;KeZATs~iXZfFE7V{Sp`kUMKzPh;0t_a#!miCbtAWd*XO<79%+!z5rZ9J>J
zxV^4qf-o~FC5cfJgAcDw>5jg<mCFtwSW38Z#r{Hhlc&u!d{g)(FGR=q&iGd&>^e=5
zb1kX@jg`Iup<-?O`Ul#37DU_27qfcFE5^1WMcgK3DqHv7U^!N0y`kc^dUJ7YY@r`(
zcI@(L(vXxIZv9lORVnPK9eRZ9xoR4aEd;7kSF*8P9T{~G+1NfXfCQG<6)o=Qkuu8l
zK>+j|8%-#Uj@quUHH!XwW#$MX->UXrGlPw)*(<u8Zpm-60l_Y*DDL-#jl4LL6a5A{
z_eKWxlX=)K)Wu24WzlddfxSoj?uZp&@4Tzca^iig&BlS&<XEAPLlpR>YH8@ruU@Y2
z%AnQU1e?RbKHYcf#YF^qjba)(y0LBT6i4#nuCV3zc%VP4RVA+H(q2599yi}wB`dj*
zS3!)`VqJtoJkTy}(1D8L3e_Zt_2V%+m}Lf#sLfkAs6RB{9z=hw(Z=n|hLfnIN+!c!
z#rnoDwQy4_Q76Q2xBc+cd~5sGd_hq)MB>ADnpr~@8I?Kf+>EI%w9aib6RK7q(LogM
zx8p#~i904$polisx~|h25m<@k8B6L#KpLNB&S+N6?ij7@XBs6TihYI081S2Fn%aYD
z!w*pnS0mn^yD&1-A&u6S0S^)K4RuzC?U5>f_-(Q0BSAX<F`#t2#I$FA7|FyF?|fol
z)X1~vyn;s@^IIr1ecWbW<Uq0_Hh!6;|KOm=5w%$V7+@^$^4z4zVN(D6jcU{5+?L*v
z@Ro;JB<)N0TpQVU6!;?xmX}MDtchq1oRp(;@U>UEESi~I=lV-NB6TLYW@=W2)Ng$J
zov;T;PAs2{WVv)UKr6}|c`^2s<`zWijyx(`hzfdc<mK(Dv!l;SA?<ssNZDYIfOcI_
zQozmyIoz%Liu*Lclk^H15EWTOpwx$aMm!;?(N>Uy_0Fu}*3Mcp<K&E>hhsu=lSRB4
zlUjDS-h;FX*xv>NGk?0RfX!Ex`C4gYZRGZ-qLxP{*oHv=jIHM-hcw$;IDoMq2+0St
zy?7*%<^{{cUWA!!Q|pfNO=M%L_FLM$%}l3!06RzS*ydR=UBzvU*4l8qMChU0pr{AK
z@dFrx_adiKiUnY`fJ1R}+Y8O``CTK&ReYt8vB6@B&rX!+q{{{l|A}L5dpzV)A{d*S
z7^C;lB#XDj0|*=d)>P!Hk<Intjj@v+)eW6a(3oUp2SJ(U4+Y=eAzy(N0jtVgXf4%v
zZV%T9j!)B5Q7-|A8ytXxU?;R9dMn$0evnV_-Y-H&PRtDvRT{Ms@jc`%5D4z(t7p^*
zkrvb1))tuNx-HHAXAk}JF4xDoIj;zP05be5=UHlOR+IRF5fKx-ZvCuu_5;avj2TiU
z#Dlp%l>4_I>_6h>Qx8F%ouoU@=V1Kt(#TZ83^ZcS=ajM)60{o?1^7XL(<$0f=mrS_
zxIF8x&#e0D80Pr#D0&2<%s-6sspKwuMUK+$)61hp&MAoVtswW5W}c>Sp_1Es>G67H
zqeH08dIgEA_7q&V(xTpQA%d^oe^)=b+5ZTrO|e|riam)HwFG1ud`7j2!`mMoy9TCN
zSixKk5YOh@DUc=5V|*+y@}1#Jd)`2k=2J40p5N2T=3|xeJ*ScrOzG`WewO<Ic!g&2
z!$`4k{lW{5F~wx&>_$4pibG>W<6~n1<ca0vDEB>!!BHVD2WMNd=wzT_Sk*ul3p@W_
zE`;2urNmdT8#04<aZMA4#`RUzzvSn11;0(#bkTQ)$z*8)4uD)NP+Ag>QCd%JM2t+e
z8N$a@(4R4;ZVU&gO4zHS+E*U~QIm?;GW0R~7dQ&u{yaE=0zq96BJdx~z;}fzi`rY8
z73nrGIh2zX<08t$zb`dxwi)vwR&LJvC%`N8naGrDF_T%cYe1AV-FiacnR)GBEWRc2
z5Eq)&5Vm#3;TSO{ji#YvmCO^KZXTZJD3RX@EEFeXh^I`y7(0>@Y}+do^K0CwTczf<
zryD8oSA82ONmIoldV*pao}xO2o=qxt_-ILL?M50@ToJ!#k513aPfP1oOQ%9aR;8UE
z0|^!ae~4(ncI{GFrh2Er)78EJ<S){#)ncMj&J+MU7g1OU%@jjr+7H|Tu2M2uy@s&h
zdm|kOJvo$KB1Xc!@*m&<d`+EJD^Z5WX;$F|ZBCkc1u?=+=|CYy0-$)g+C+%g?J<In
zMJe&X+a%D9auqVXQP0lujaRvWLi}-a0r332^j9^oXamD9mfNaSTQAbmpj$xi4znln
zFv$H(x?$ilZ$Bv#!)w=TknirwL1EL9yUIPRbRX4e_9<~8MK}?Hij#fPBDTQCFNuNl
zd!J0s(H5O#e)7w_qKA3nqWwC?u1YF?ezq=?#a0lH>z$?Y_+BAVbj{3wu_YKVw67B3
zldWpv$v{!*?6It`hws&Vc06PpOP@%!tb?#@Iu<iVtc|n_)x-KZPcY$>;@x8jslU|5
zzg8U}|K2xrEJrvsIfB9#u*@si*6gv@#9oB`*eKvC>HKtqsH&fJ(d=3`FPj!qfO~2d
zf}9G8kG47<g<Q$H&`O%elj8Xz>l|-8P{?3R>l_()E{D9k344n;a1eF^Ks1qO$VV}R
zyP8LVYFqN8vI=IFsM1_^3X~VVFitfIxlny(j#o*K_o(O*{N%icJ@0`oS6s&`-7wBl
zr(Bfs@SYd_6Up|b0er3<%lCZj$)XYl-BSu|(j-0)<}LFht>5W;r2K1g4-b_4<pM@*
zr4=<3?-?Sf6j?4>C^j9iA>)wg2?V^F^pVMGw!yec4j+sg;m`E*m9NM=XG6-oU8{uD
z9uLXjVLDhBmijt>Y>A&VnVo>%<Ek>8u!f2^qun0!TIP+TCY3T#Ip&NRZ(L(NeU4iI
zYE;w!=3nNHf4?|M6<X~V8J4SR%#uEkhpkMFX|)pr?COJvDJdO*ca}&DlXa%hKj`$#
zb;qwjkw!t!PBYbcIQ`5l+iagl&xpAG&YXY7*;et^ASUA9OS1+90Wke2*sT+(EO!`f
z?#Vr_MVPnlQnbDMtNZaxYVQf^{=LPc<7LCsW8g`l3$=HUGIn=O@uX!I&v*zReX@SQ
z@Cak~XL^hMS@)CEwYkm-I4haCFQvC>%mjON*c`K4%Q_@P?m;%n9SAU%J;qbvr#J!W
zzQE)idN0EX!(X7)Ki{qVH)!<_9R`Z-&uH}@LC}AnW%~=X`sXB-f3j@<Jcs!kX@Gx^
zabx)lZHSTaD>LSAqSdc-=lC^NxG!yJT7LHj!;WNh!Nb>G6ixB3h7osbaX5Q6j~~hk
z<us){SrX?yI=%o4v-QS1k%x?i@dyw|-62DsK5fqjR)~pt<4S1j7sOvV_L7D9+!H}c
zDk4p7I=f$0_Uj~rdv;!HtcTc`mus}tTPXv(xxxE@J}7q3^JPC>#Fp8~_Bz76t=k$q
z#0@oZW3ek)hIfw02D|kg-|^7OX=ZOGT}wpL)|X(jx^Z~gn8f}1yEZ>CNN0b}9wCt_
zBrH<;WEXt|j<3(a@|8D)x-6(|OAQ%_?t=S(ihh^rK#wF@nShk$j##h@VSH$x$%P@F
zc+`?bKJYGkL3FmDtMJJRgM4^8ZN@#l7`Ai;u2!pMj_lU(x>ZRFn%oK_lR#OMI|%C9
zwkaJCRhn2BtDB!A8L0|L&QZOpcbKI{mp}!b``{n-aKRbG1HHeAu2A?4P`c)$GGJRh
zUP0y^UY=PwyS7`pB{%r&{9mlSQ;?<YnysC-ZQHhO+nJTNot3t2+pM&WO53*W%)i#^
z-O;Oee>?i?{qNIx@VpT-V$S!v#~9B&%Fb%+s69dKXcIl$OZ18bnbauLPs&HkNMZZ5
zDN%``anRpxv8(X2V!_1|<=K~jAeqYfc2seoOHs=Gic5km-?AtiE<uFx+-L@RLy6JX
zZedzj&4)prXl6pORfplJ&y?B_m#|nVVHSg(Gx2TNk<{iT#K;<jP79(MWS~@!W}7#?
zH$L9HurApw9`?yl+i9$w;rW#aCzM1l#h}ZfQGc>$K4<Ea{Tv%)NO$<ai#H<78iUHe
z*O5Ce2z$SG@UoE(my?b!m7?23cy#o!&;-)Pgt5CECTOZFrY-mlPz|_N+jTd{nBLgg
z-6)kj`l}7+LbQsn_2_Mm3VCik>zZ&TME1j$Upy7Aey0~;mb)JrVAvBR=@on6cON4G
zPI#wSYAdnUuuj$#ZtvxiJrU*39R;tBdeZnAzi7mV=0KteRYU)QVu_TYv8lcQ?C*a(
zNiC4(7ex{kJvqOPmsBA1;a$KFs>WNJ8|^gw$`rFrJn?}%0O&CBW52OhC*KpWE$v|h
zoqUV{X0?f|W0Wa~M=?PSQ^JiB*HbhDVqZyos^Dejwiu>#=tTdk9yNUA5#uSxN!q4S
zXsbU@I7ZKF@P-n4ya`$ak22nWhQKp=KvCrdB>}%_x)6J4&sni+{tbfQ`XS8+3}KCc
zp|@gYoeo{e{2IW=Z1x&8En_@=4v}Yd#G-}1!xBRVA)q>eiAm>-x9I4Iqhs#f-_KZ^
zKWSOi<&{erFy%O>xx2{f<B^QJb0+f+YU%?!*-w~+h7oTPt7D<sXFn7U#!^M#Bh?5)
z)<zK#VBLb?-mY?^UP1E(j)`?h#MN?(ox9SjBS<A9&CkLIdv~pbf7{I9YV4y9pB0dW
zz!#Yib1z@%{Knzb-OLzi4+bWbvD#+Ya_Kt7>O#GSDhhOP43;E!a15xgYQf3NnX}pv
z@ykD8+fYsk$V^5>VV<>rTcC&!w=yF%{|Hp(!CnN=+d!zLa8MgN-+zcnwi2v%=?%_e
zEJ$c7Wb0fr4!ZDYN}CV+`N{#)<RWD3!FfYD$8{LR#<=B3K?-qRehT<ln+arZy*Ikh
zRst8(B}Fw9otEKv_P9cJe%I_-ufQ&Me6s%IW$u8d7o6_|)!mORnJHejnt@AIKNj~l
zL%NfWe~b`xHl+(E$I6xqM8JE%NM}|U@(6#tVsWs9tVIe_fn8Mzh?pd|G-Oqj?^E5p
z6J)@VO)@)%qmRs@%{VCRD@7@S09)fvDOA4%F%Ve(-^!3oLg^#lx1IcZYMc6&aM%2t
z#u>#vDy?sI8V&?r_h_PD$G@GPQuic*nQ#ND)nxfQ!h*DZ=<VtCS7ku4=@SKGfm--V
z+r05Hq^p(#B>5%QQL7J-%lB}2hBO(p=+0sjkZDw=pHJ3pbxzMggBW0%Z)cY0R-aBa
zTv6#KCr-)W3`d9$m*o+Ez|1;OA$M^>D;$q74>xa3PL<k%P6c#B;Jwm8KX!*9u|BDx
zL5To<Z;zI8-gTAwxmtQBP3-w{eq$puAQ7_P_Q>-gwEskW2r(<j$tl>9nuSg?W}4K(
zJ42hY-Sl)1l=@YdILl+pZ2^gB1vaZS{xaE-YhLId!5?_ph;8nV65MDb{#H}h23kxF
zUeSDxpLUu;1YArZxSj*~Oc5bdWO6&|RhlJ%&89i!VozEMhft)z`&lG_S%s-h5p9R}
z@`ZfiTS1)>q=VV!h#@SU&I{&Z6{kM(=T`yCZI1DxJ5NIV^O@mX<%Y7*ik>#ArW6ix
z6QjC&bpKC(re#-;dwYO7p<|2>Yw)v4>Bw@=#<;LlmXa`-Sy4Wv*gN}q#!SrZHWN|v
zW-oJW1I}7Gh{2`dIKqZGzo?hn23N(X5VK8AQ)d??%&&dpBW#a3rZk*^{U=-JrfWWR
z^k7aJGZHp8g(GG~Yecm;@I%IrP5<A{)r1MD1*0;f!!2=N{jyaJ-GSn80k$5|spUv&
zV>?pR*VFZ4f|7Zv7HUZ&cCDc*BkM{1HRlWdGt_xpq(T$YMG6=tuS|#)vBbJXk2N98
zQOp>!C(HOni8q%>)UWI6wR+K^TW!}VU=;Yu(a)Q1R%}?^<n2BB@#K{w-_LJt(G0;$
z6WHBuAAa{EBrrnMk9fXX=jil2W)tuibmeCHo3v8vtlqg;1IstIIeyRU!t!G2om-be
zIK<AG>bx)Te)Lq9YCF16i5Z}s%kQBs&Z$K7N{=Az*bJh%s*lLlSgnfJuE(@QU{~(}
zDC)v`%)uAazkHoRcnbtX25%SK+<4JjNBe#Fbd?%|W^t94`d5m}VRb4n&apFpI*u$>
z=}((7_=&L8ks|^2F=<UWmq?d{!9!uD%^$dOn)d@cKnd_DUDPq3_xVopM0X5>ZRk2g
z{V99Iav71nCrR4P2m%HLQNAvjGGRDVy<xb0m;snp{ifygN(l$DRJ-64t{1Q|(G8K>
z_bu0QME$RP$NJy9sQ<*H|Lmf&{EuDKzu>$7)<yk4q2B-0QDyxrN0pg@>F@Ggmzs3!
zzd5QHoG6a$rXum4mqek)@c@u>SA@3ok_z^up0p}xu##KiYhTY(fp_CpLlB-PLpVzJ
zId-NWrmq)=9Tb^|MDhj3%{r4s<03g`r!=t2goPSYDTl{9YtE_;Kff%$TwV>ye#9R*
zHpeL)IN%@-6kE0b><%mBcnM7F-{q!u*G;L`_JQ2LahqrQa{-^v*G0Wj)y(UK0$x<}
zv2?5HbI~{P)7|P!Qm{oRcy9Y@srgrqe{9A6{EPa$+EIHmaK|~11p(c<OQ=xvefh~`
zZZlzzBW;n~fuWL&@>Q2%fxWC<#qha<>}T(S6IHL1(yur}I;P}+28nQ;kc_0&_e*Dg
zF;t%90{x2+8^mMyqi5Mg9UH~BH5+}LNMs+H3B1oEQMb^7ZDtpX_AlDI=fsUjLi4F`
zqI4{yA4ke7yqK>^)XL^>`f-C%KNj-bBuVB(_{*Q+2~H0?9QNs%NE2w5^2pE?6XH{z
z4V23vvMZ06PN<hVZ|Genx!_8~6CjK4K#)S_bRQ?%7wajD^C2uQ+8A<v$nFG5A@SZU
zEXp#MLyb~Q@~n^l+96d@2E%PH2MUBov%r1e&RY+`H&$>YQ2q12mgnY8eG@6116RIv
zv%E`p1YPZN(@wxAZI^B06(vLwqNIcm6w)LOxzz;r$eZVeln@poRbqGS(0_%*#}f(;
z!I(<=b{&1EeJJk-ekK}LhfBXN+)UaNYZSch1jLu67iL7ofrX!xmUXD$DRq^qa7LKv
za*E6s1mY~()OCzq>e?up>KUl8wtOPuFCm@u4rDP3bY=~nQ*%E}yX(}Izl=u@iXPRj
z7pcQvKGxw;0^B<xR1B4=T#S`jVs2yiYI;3ss;v#;T@nB;lfBN!f6A72$zo)zLEq#$
z>c$>?A`{601ulWE%KLC&q}W~qq`i2yi?QcH)nII%(#`5+U*l(gIZR9s#D{t)AK&tG
z@OxZvSHKvrxDR*n$W$l&6$pnubTCI=6agwbh;k)?=r^*M@Zt;NFMo%?`*bm;u8*NH
z{G#EXE<PR9V11#tHcBVqlunGSDbKmJ^dX|0hOhW`4@OXHUZ}sQWqj74SnkapA6cfS
z*Sj~JqS%o;nMbJke!g}0MKgd`4UQdP;`5j>K4*>`<nnrA`eehP#dTYKDghFgCc1)1
z(>j+d5Tfy|<|m5Rb$EZrLyBile@^#mD}DnCek5NX_6s}s(ZYc`4P;L?_Woc_zw`<E
zWM%P4icl#%kQXBs7`7j!@aHeD5|T`7X1I|2vA%D&Xh2`o8z_$R&`lcGE%J78!2y~k
zui>sa#j0B~yU(!)8YEaG*jDL7W^}?lKVw<$?!A+Gh7Ai}U#{sat#q-{-6PrB*s{{v
z%sNPAf#O^kZDxLUs{$&^!mw{x_^XM_y!ZJ-4jPxNl?Z%o2<5?ge;F{sxQ~^4`94T^
zZW*MzB#D#b<T^Y8IhT#WF$9@Kk*5jANwH6sUxx<UJpkcF#bX}A7R8|u#PFvphX^BF
z5HHgmRyB1`@C-c#F5*xbjhf6*hfZRb!T>`d?_}zEADLc7$)CPfPv7rMcsUj6j_UrX
zpicbjKbe5g?PVRGnP$_J&+kNpuM5~lx0Sw<M>qx~jey41+ohK34nb7Y`xo*9$;|i1
zikE2;q^5Cq#Wz%FK-l3CpQGiQpV4IDqe{5D4Tzd4M@9OfFSo1fhmF2~r8KGcfAJ>y
z?|rR*{t^G@Hwo+i17GW(XZ&CIT7Od=_*Vtw-@PoRKhOM|>cFJNzxBf2tJe*K2eJ;h
z(rfrMmR=a^Bo-;9$T!2&0u(6(1`jhO+@0U2*die0JG42D2^!VbZohRs-+XRfW#Z5K
zkTqzGym!p&1(!=CvAv6s37tw@UPtH$>W5VD;>Q?bfbR=?ynJ4j+WlOZureePs_yS9
z+8_Bb+tp&Ttkzat`P~XVac@DD1j+2y-4O+js-im~&x04k5SV=HkG{3v9~w*VdX9yj
zu;a*aMndtfygXnz5IIT)D_6I)=;AhGaTBHlK>uDCQ506Rz@S7FNhIri08a1#fNt$Y
z7dkMT#(=^7!P>`+bW)OIhR(6zcD%*5jU-qcEVbwEyC5ZzNGc*1K7fb^*===u#k~FD
z9k$o|MB&#}d#rx47*CEI1)kJ!Kuz+s4*WIyMNXp5$B!iL(^u*+(7p||EY&GWpXlhD
zNJZo2TgT6FW;l~tZF9n~g+vkq(q&8}C6pk{&FKdZdr-A}<abZQvAoIasDIA}fpH6*
zjEn%EkLB>(hj#)a)yoYVQ;IdIt7~}#y&TCTUSdD=<SKGaAm}jN44UYaD%mfsd$(uD
zlt40rU&o`G8@nYEuDQOxL`n@|OVMh@(ist9IrhFY1}Flb40ScbhuRJIgyFUBi5&0s
z7(H}*F(^?+4wqp|Np}yALL;SmkKw`|%|nJMjb}G1AEfANSC~x0>J?dP7M8<&cY#2G
z8)XI<90^{URXGcLdGWJ#ozh+EYEe%#odIc&J;cqVV9saj;%nvetz!e7yY1V8Ja}x*
z{2Kz9QYGcor;!=qxcuqf^ZEX2n^}-JfkVphg@2B-Vg&-TboZ;(_|j{z8C9yB15Imq
zOcf}p$@08nvzG!nLc}swF&R3$)>cImt;*W|R@)#-IGze)oSwfJM51(~+)ZX0)6)W|
zP!OKr`#T#nDy9!L@nM?AAPR*kavAJo!tkQfyK_+*1G3KMLtRFIoFS_H7BIV$mm3{?
z13@e}{Mm8JdKYy)YFuq4<bFP==uXvnpX)fQ#^}XBC-`s#N*OIC3>Xj29b=FGIXp5i
z4G<j;An)looEbfA2nDxmHoo;31ss_c{WO0^*A(icm4~@7TZNus?}@M#QnH~Y1TmgY
zHn2n3GR#S%B=9Lwm>#*L@4dy&V<LftGu(g7{@`<VpG59NLc9u{l*^?ka0Ilz0(X2%
zw@D_YW~Gldhhl;)$GL5omu&}<)Y55qL?MK|WLI^8<V))#+)sC5VW=`W#T#l^^2Z2H
zERVt0o~~OI)4GSHx98-jMjA(~LlVe0*DW_^5)?2Lt|e@$ASrg5u5*q*XK*c#+vx%r
z-mf(Gn<2*<IJM$HLpBGOd{E!5WI8r{@+tlrB9FQOv|>$RgIbdmg3|V*@KMkiemH3L
zT@mzjf|jDJSy}lq9u^8Ys%w9&kAO2^4da%qjripBFfoiI`4c;rWc7mvs(f$$)G&z)
z6I}7-G=>iTda*4|^1IooUvoE}ARgMkJNHRKx%%|+x9aIqHCqj6(p2YvUa~C(<8hMD
zI!Pf1p(>=?YlY`?pp!+h674I75+!OlVC^tN|1hEt^ipVY8iHuRgpz?Fq9U~vBDkvr
zsjyU7hTW5*GE}BzCVJ`H#cc~2z_0O<#Ebbh+=;##<Tzl3&T*^u_UxDU#CAyW#W^D)
zFuH9H;yH+6eB8-{9~Rx#eSvj#*2pmJsQI%&1*anwFUY%FNibR6w0=Q~xrxa$gMOT;
zEgk-*h#K4BRI40`A}BAI8)q7oB<@stO|0g8wpuj?CABGvuT#hjTS6AXw6*t5tNUhm
zkh@0OFk<W4V6?7*lohZcdsA}^G-Tl5D?$N9L1jt}*C<@1g+d!|5`Mo(FmaL$)8p1C
z)bO@f4ZVC$WRQ&63H!C2hF+N)*2Lkw+<|0{;g<H;)iQA_mn1#XN6d42n;0&PAv)1T
zsvbR*q5It6CGccID6x9+Sr?YFgmj~7#TP-%1&dY&5P8aqR-UeVPri_|&KV1w{6u-o
zIIm0muASK~j(MHg71O=c@^jNsFq^ocH9=UTs^%qRhFdU4XD0ixjuOj)PF1Ie1AnwU
zHmD{iL7Xa(dM_27kB=H_xc1RrK>}<+81-ty>T<02J&2~<SrHz3qRRJNoJ(4yKuDim
zXy)i_$v+S8cR$4)+<^cf0#Fu1HxU1Okli{hkXP4XCz(GMpCnG(bn`N{yi~k}$&yR=
z#Oe{4NNX^6*YA-r*9!?!=ZqJ;y#<$+Y2mdLDHG^$|E8Q=jn}b-9;713AQ=oVqGtv8
z&2Hpyj{7VFuy@zMDa8?kVutautQm!z`P*8$sd?hjA0DbLy83LJ$4FhTu$p(1+*{s(
zTsh?X_r(W<VSKehKL8tUKs0>rwYZYcc`8Uq=Qv)lP5w+Bk|-a3`=x;s<tE%JNowo6
z^7ALSnHUs4z1a93j`?*MHACq^T2Tf4KIn6T^NO_AIuIC-pf^EJJmX5WPfj^@7-XoL
z8J?;1xnil8IAR714!<!EH-)*J|9q*Jh0ZrsNzvFYay&Kt-fd|`L{jx)n*C7cMDq}C
z7}6VdugB#AezFI!s4^S98&6ki>-j=V!4*^#XwX{%;JYlxaxw5K6Q+?RKO`ae<=O&q
zzmIhH*VD(ZSF3XhkH`SHfdqm@4I%5>B+^zqMG!UNd_UQRo49y`ei0et(=nUoWkKmv
z?2=w_8{E`qY<uh_Q$IXax4<CTtCXXIx)_x7?VCXJhTBExpskdFdkX<Q;ShD)eBQB7
z`8skky~*Kdw~V!zbVF=~yrAdeEWTwDFD-pGQMG&jXtMllwXZohJclm1)ma-p=C5ek
z<h7;rRR0asRvW6GN$@)U3=9$1?!9N#9qRur?S{d|aeq0#{i&-Uzp(1C;z{Eg>MM4*
z^<Fml9>Hb5Jmg`bK+`mm!K}`k94X(!yXY`2r%nY0Sc}|bO*Y43_!}zu`|UwL$@&cD
zFPQINJ(|CEhgkpD^0a?(hgknDne;!{=>K2UgMXg!UzzX!Q3jjsUsaKRXFe8=zs-En
zn%Z{ft%yJQdx&D0Jgbr^lu|(>j50SHCE_pnvhqY{pZx1Fv^yG5B<>^|db*v6NjYO?
z(IZoL<CwE1MsD@-`Fx&>JInW|)L$nD=4C5nbu4r@Q6v#d$BWqEAA1Ukwyb3nMD*E;
zW8QX63dcv`9!)b%G#{EI3zb_kGrITv%`oZ$dD|!1qRH5A%r9MOqmVSQqBFnwJ}$+E
zMD<QGtEKj-Xr<Q9cX#al$+~^kpITR?10$b!cJ;`YqkGK`x^WHU&~RyxmS|%Ips{j2
zEQQ4EW_)d3n{BpVG-7$AE_HneS>3-%Y<61K?+2aj#aAQc8WllXwz|nVoAu&QSjuI@
z0*VTn@Z;<=ZsI2QEdr_fba!sJ%q|~+n^hm2`v<NiY$RZj`d3{{3hc1|EWnQT3A$Yx
z(^_Bbj1%?RvfkDCjq^mujJoO4zj{SxD4Kel*5@De(u`66vHA<HDWag5Kr5w)0Ba+j
zF+v2}fm%aYTvYUvT=FsI8f{8JaGQiUd+@eby(Bws1^KWZtUZbQ6WJGDqE{+}Hepn6
z0Y_;~&^^#5FJ$wE=fx^l2Nr9F3fyUr@qqR2G9l%JLmP?lw!glfog%6S99u5RRiIO!
zyazfx17kPneI@)<0K?#86aAMX?F~gXDd<J$`h^=enbvF?N3BwR*lP3K@4;fpiC-?1
z^)>pl3+I=kVu7Xv&9xIMI?O9c=%Rsimh?dq>#SP`?m3@f>n8}p{Ew-VRlf_sFK~E9
zW+5X5vE~g{j}8C4*TU^=S#`D-e67v1y;hN=5hp#eL5!3jk<AJc-gBxFvvKG(_W*1n
z1V?wLs3NuOO9`YS`%%ine+s}-;PNW#q_+khg-esgD^UycK_x_2WAIHre{^*T=RD`O
zp?kw|Tn3&h022|h)|UIxMzK7P#w@?hus8I%OjQ>R4x6afKbqH8B!j)gG!U6}-vqb*
zAc{mLKQ3iBF%CA&Jd2&aNMoJ8@<J&Ue-h<d7u`pHcfWf7Fa%x~p4#ENjVt-oO%m@K
za4}iMBE{dJa3Ep^)y4fu>#Js&gjw%my$`zgY|ibBo=`&?I4L7pZ<`=W4Buy@stD#U
z7&Cu4<}v)I4|n+Ir0=dM@Uh>1u|ZJiR7IXuC&UsfOhAp|ESG$tukCo0@{Y{91i`3t
zzh|Me-&7$#1A_LFO5^pBx4P)m6~hp2EBZ#!;nzeye(-gAw>r>G^h`<Jws)-g2aEA5
zv(g;s#136{ATU?QI04KN0QCD+iK1424<xXA0he(=d`yVtoaO^^)KBOUfed!Nu4a>`
zyk|t6WREP;@F&F1<C$M@yHX=m{^pY`ahapgjV$4^1q)i7$`W#9Mz~HV727w74oWnS
z5w@T$aS*IgB7yfi#lN`m4dQo(%q$Fqlb)1ZsbqDMBuS6)^fN5n-05|}=8DU2RT6{l
z3iqiCi?qeu9Ix1MF66&3DiG|_L0AnXDw6avdAuYjEwXDW;TZvj$$`R3Jg>)09)jE=
zDBzB5mgNa4VTJ4|iHQV$qnDDl;2Cp|f0jHn_J<ax$q=rk6VIm`HIhWmv&=8geX$`_
z|1P{5BReTGPd}h2IAvuZBsLQ{yM_4eNy4k8hl#xL#zBoS2F2eo1&i{S$!~5rsaW#3
zOUr?N<h$~qkMUE%iAx@Y-KF!u#C)(AA>?YXGyBHsK##sPL#lU?3O+?)0Ig<BV9m#P
zCTx=bGri}iOUem!I(4oipWqOrAH;4l-vnz2;hu^v;cf$gKZy2$EDi_st*fg;pKSe?
zl9S?@&9<Sj<pH2EV=#5Au04yhv|q(%eL6*}vN!=-ZoZi8c@YrDgo75E{$gIlgeGup
zRe6seNZ!PW*K2pz@}Ic_B3#fZsKJmrU^mKDht`r=73L}@7xY&SDha{~meKw7IKCH4
z`ACY8&UkzQJ{wZsoZro}EyONP{U?xX#oY&{GvP2Msyb+sW>fQscc@nW5~*lX@RBrg
zzdFcpF0`$!kuIpcudgrQx>^0Wa?h(f&`x$wgE!7NDaB*o3E3P+_!TTG^*&SWLNE@r
zYnar<8Rwn{+b7d61*!#ei2&TsvrP+(qf}Tii*K<Ue2t`w&)JkMgJ8*;mRRG%^W^u(
z@EXDSJKPBI32+oH7{cCD5;KvUPA{x`<MVc2QDcLYzz%*KjDpdoS`35ra~_@`@H;_c
zSpz%?xvve|t@nTdRne?I;mLJqfz9l$I6>t+C83Aa!ayFmhCN_=1r%?Cczp4@XQO=r
zLBJQdE01tMfGX)E{}dA>IQmZ@8(5ycr3CtB^0X<!y2n%|+H`FuoJhTQGU9BR@WxKB
zAJc5M!fd9O6%%W$JNjH>ozE=3tzY2{0n-*%w3#e&5j^@}jK((S+Xw(rjzdy48lp~z
z0Q6qH7s*91toEKsA{cP3IeOFpr3!%7`;vH>EVWa3E}sX~(oUC_TOyVa-A{w_ILmJ#
zKFk~otojv$sb6x8!Fc`L?z{3xDt`I1_u0)W?B48gB`E*~c^`=>vt9BWB2syu-^YDU
z^A!pL)?gM@Q1%HXQ(GQ=KPCL)0%-TWS&n_&9vGt})d)+&B3XEA7f1=k@rUS1lICFJ
zU>f^rRiT>LP*k&O1>eNZ-I7>1vh5X*&s0S&d{z#ATz4?Lvk&*#q<}xN4&iSK=}atT
z5j)lFt)PAE)9l$!{I+*cJqFQi?HgK~{b5`I7y@+=eqO}Ek&`n706tqjB`c6VdK#WH
zPMfHF^$i8wb4LpHi@q|<4#-4b5tAxOsGb)aVf+O4gjv2jsG<KuCi$55<YDDrm%@X|
zbtC?H(YY0+J&{SRL_uBJiL_I-0u-awj~;+CeQy5a?h(HQJtq`W$E-p)Ja)=;1V74*
zzvJgh2WDAiXP9hCCbPNJoLf(zOnQ3mFxA9yDWB^HJBX7xz84^R(^8MOwi<ad4|*G}
zq!1yD`g|fwrXAjh?W-_G+j=49N|%fS5x`q2a3}=1<daf$o~uR}L=F?}7Mlth->*yn
zj)P5d+;tZ-zk_fosS(l5B|DmLF&dmdge@ffYVHdJ=^brj7rtW&a(lR<ExkCcVrXK2
z-FbZ|+SX4{p1}ywBs?bO$hj=04AzZGPDy}00FD1GacfmAfV>8#4`CZe+3EA)ibEc*
zrLdzTrtL+RsUGdt$`t;Z4>SIL$wI6G_XCN7Hm!ytO(zq-ddD@AYTv$E#8!$!R$!J}
z<!A^fQthk|X^?5n%Dx$?#vJ-2zYOUsP?9?9<6(ZF^c(OXp={+Z$o5~|slO)Me?sE_
zre^-HDAfO-+!O1+X6OGS_w<)!`}Y(~wtrP-|D9%88UHrTPHIZV?hm8>$u}V&5ajPD
z2LG~ej1M&10bFCtlH~+xW-Lpg2*-#>lC0=R*3WHGafs)bhg}J63;VUazWpp^x9sNY
zlS{`GKSZTh<pymbWPa`*9~2%(l@R&(bSz+5uOn)RQI%Q_mr)F3y_jR2s4krhw&_?b
zi<4#8N_7Uscj-t9ykew;S_LmU0sXOj7mDWMy~1}~uWQ@E45!Es*$yn%0d1|h<i4#u
zk%)e=V0IxQsD58y^Ce9o%Zg)|+Ede`KPp0^lrbbF6)zf3)a)v9S0Y@X&NbgRpKt4+
zZ5p5(ZHyByrhQjs^VGVVwr?=aDT8A@kxBFH3t2eB2qt8tWG;^8%s}qpKu^Cmzw41Y
z?^v8b;0s&;-M9m&mbHnyNk}dxG!0}mJRgMqu*NV90$SPUXU;~@>OC>g>@v^&ah7L4
zk!w#Ke|j<$P2#gGRxVU)u?eQ7?YR|04Cm3kb?fF0<^;p<0y-Q|QqK%WRF>T^g0;3V
zxC;4%G8h;mP+<%roos*JUkG35YUS`0&{4q)?*h(5Y{|JFwxDvx6BMLRzfL$g84m*p
z36PHuz8;FmWW!V2qRwX#Qv9WpE)!H?BJ<g~(T||vr$&f@&=hZj84vnUiFIvaYX<%)
z>|goJqoAVRQ8En24ByN80)N}xb%P<fXtT0&`v~dc>5v*FfiJ@JBRM!RdT{@j>BtNh
z2eCh>B|dvKSm|#On4{kM;Z_Z&*vN?jqR^;b$MEfsFp>hZq*PVOyVcxFzED|4h4v>B
zQ^t6AF=X1;pr?N0RWnxsC9IhJHi~RyY@tnOW6P77WGj?SXL!g^?+!|XTbVG2uhj;C
zwR^B@zB(KU&Kn=M@BK~+A~ewhk=vi?SZH{g>-F$}^-`e8CdXE7R;QJL%~mToZyGpc
z1ld{YsM==T!OVSIk7Kac-P+rd3YM*L(6E?-;}m)#nlwV$V?#&o&+D7hJt2{ox~(r?
zbSPZXg+s{B1|})xL$`9!<;sWehnqduUz|7;e+1V2SMF*5lN!;Cf|=o>uA!uoVNTcv
zKL``HJ%Hf%FMj?m?d|W+QtY4eGHDmk2W;~~qV@~4Ey$*gDuadzvgxAS-Fx$XWBxYj
z^s&l?MG6j8dUKVEVrerX%4*-Ywbx7M-&^+BL;VuO-wd|upW*b1m?l6*Js#PQqWMVq
zN@J;|$rMo{3H>S4>$y?AUj#oz%MlGLm_wBu;oN1f<~=Of7q;#Om1h;LRfsi4+px(d
z3MR0%n{%U+>m!r-572>_T^b*EFQkYWM?qphn<?=1<v7jGsKpb2f(SP&*qx360?YY_
zQ--=Tc*)V~K^}YTV;rF)B9yi+8O2EQ$3JZJ@*3NuTcwTs?tujA`+?P%qD8QPNd0I)
z%tLm=Kv<}XBN);9;{QlG8VCi2+i>+TCDs9Mm$aI3FMZm|s0{^#eFP>{i82M_LS&4-
zSpYI3O08ua3A7wAr*q80C>!mM>E(^0V`1QKgdzi{ZXChJKSBZVnq!8(cIq%)C{=x(
zpXaNk#}a9{+MhPoz`@N<BTV5sl0D9qXvgtvojp2FAW6d@h+$$|WjVR+{J`6zp0&76
zf4s9!p#1jG2@3!1cb;dinu67ijpX7;?Q2OoMWqouM_?&z4K6oNI23k4qqM*YIzyD?
zotTRyW>J@QY7B?TO<+A^Vc)ZlE8GW~J>Dpz0SQ(H6lgb5xM7IkfwL?_YowhHN0d;L
z;Vw2nU{ie*<a<^b&0bb$O#uF@^Us|lmDq<hF0MLxiAc0=Uha-GTk=EBM(&oa5N<dT
z_+vfyDG*+UkwX%p4l`~maO6s@Eu&ekK^*CAq)rv!hN}sB*rqllxj^j}nqlvSOfFt|
z_d(c6VZEG}3qh+H&Q;q$fH#INbT^d65+1uyJ|bZzcUiwon21WF767Tp32)hmN4>oO
z<tr6<;tKjX`{r60WV=W{c9to;Y}zH*GP-Ek0RtAyjU4{<{qjL2PAFx*D9bV9GM{{p
z9dzKWy-Mu%>>Nxgaf;ORR~h^6xs}}JS6e<l`TkDfPhrlo&~*nRX@D>K>}k81M?k1j
z-A@(x`hyL1TMUJ~Ji8&89gTDi5y&#b1T1}APNlF`8c!uJs<AvQ?O&f(5U`$w{!byx
zcA<zBHVIKud>nNJ;Q6Sj6&kd>Xmnru7p)QCn?_Lb#B_U5;sMVADqQ7<oyk}J^oq@s
zX8Wv?3`~9X@ZVe!0Y5g?r{WFen-7a0uc8AlT5RIkgQ)g)s@*tSDpzjZ>}y6XR^HSR
zvYtR5{)Btr>7f<rdpPHnC1Gq%U6Q1mTu?#V-p(queQMqgk<CEZcQX(RkAp8q(2Ii`
z`Mu8c1#}eGpIlFvvI{YWJtMYX+BT}OjQx8L6qGM7Z*)~VIw+d=IJ=*^*bL256WRTj
zwd!UKXL?$2#~#5qX76}j;8+AiizAtq9wo)GbGbe(qh>hX$L3#r0M}zDD8Oz}Q}oC`
zAkBeZOz82X+?`F^mwFoGzy@^$x=KgDo93F2)YeC&B00CT>1uZ6;U(BeYi{7dI1ck%
z#cHKlgvKgPRv06{9|;JdN8(RZLy@z%r@IelZ4#78h@yO49_=N~2Y8jt%P}$;rB2FZ
zv-V)RZ!Oo_PPcn8(DqvP(ap+j2hhd#b96Lz0-<XT!G%`%nW8Y+Y=6n<?cN09(0m$<
zpb4J>;GZ7x;8tJ~4$PoqXJX|IRCiU%2*5>e7Hm&d)r<j8k;nOF^-sxo9bDr*CJTS@
zt2`=6%Ot?a=YzRN4!1v>f&!y)u6H*GypW^~d7dSIdB<KM#%$#gLa4tY!^cE~H-C=+
zs=okPQ|XqKCsy%$=%c}Brh~wl*k!x{S%Hi?b~oCqYh1-7-aSGqC4|8Ur%J)_Dfn>8
zOO&I8&w@FL%CG+R(v(V+l;?*!*wsnWbr`5rl#*c8dVk0F-SE#Xoh_3nqnIFL;akJL
z14yv|PW?1Icm>uckPoZ{GR}@O%lxcf70i%U(f{=7mAJ<Fv(mPx@daw0gNFHY;`A*x
zD(d^Jue`u1+BGcg*SEgmmmRIA%rYG69KKFd_d_aNYsy!80n%M(X;lG_s53U9wtn<9
zU{gt66oiT|%7^$&i~3Gb;)dT;Q+jVaw*5tf7u@*E!PGZm)bl!^m>0kl)2An!Cj@e+
zc`R0h!}F9w=T0NyK)u=5M>Ib^ABX(wjXA%c`E5^cp$*?rw6I-g@)ua=kp29G?YB%D
zDg1^&sAq$r&<4Ack#GDcnu0)A;cku&`{S|Mg*Wq$u^p^%xwsS<Yd%9s%uAoU@6tK}
z>i^2RZ2#IA@qb|5e<0+4W?i;_q~`y8^!Hhp?cc7o{>zQjf1dGwq2m7Qs@1>Az<=T5
zGcz%={%sduOFD7C8L@l1R)H<lzCulBZ%EwsNiD0&3R&H<^dj&QSiFEFg;I%(ayrV_
z=M9vPWJ<1?2Rs+VPoU8Mr_bihvK#w#x1_pe+7OrC=B3(rv0+xLDiUe_oLu!)Ge4MH
z=$>meGqTE`?r7Q;H(9UB0Ag2b1);|Mqc-Yhp28|S7p&d@tnMS#N0Nb=%C^_9fsr`v
zZ%g~Dfoi#cJ$CE<7%KDatr}Sr&@Qtb-k6^+quIy^mXX~fr$X-wOfFl`Psbg0>a&*B
zDruahr!?>;s(^|=0`Oja`<r1s&Dl0+Vp_oyPX8n@`I}FFA9hzc5jOa%)~z-}gih+D
zt%k9`tK6Y7c2U{w!YN^Q4z;m=w{|Gj5onbs$H<h;|E}I6f&Mj>uz2Kte?A$@FJ5^m
z+w}HC1|^%)z6k7GpkR`&hifNOCR5?l)BfswzwMs~nYdCs^AYI0g!Mq+I90WzywolB
zYgV~y7HT<j4D#mV`MBXs5SA|1Dscwu-g8739!1}1UNm1?g~_bZmkV_hHBk}?i@|Ss
zUlF2v&<HD-?N2MgkgOBWp^t|?YN~etS_m4-$s-0XMR#vGqr-{LpJj&g^6`<Lpeg4~
z(4Mfm!93HSFr(B`Ft*`VqrX*e>?zpI+rin6_`ZXA{5jB??~$F6p5T~r5>Ix1{sLu=
z-EZqUzWlm~t}_^!>2qBRm=^+C12LZ$iNl48PbpszbSqgL%=W(xWG$SS)oRX_6zP~*
z;m{s(Ksp;7_QkSd<AP3}gOqUXUrR7{fhb|(>@%xc9n>^$Jb8@iz@z9MG%Xm=FteOG
zDqziokq|5Q5hddtLQf0QK;XhAcOuJeF+0~WPbBf+l>?8UcZjIhZ-XvR<aIl|7Hvf4
z4h$3ynmBT0)994>ta>CzxN4FmUxLqn_`3K}v+EZNh+du#3na?qjx(YC%7JkeKQj=9
z-7IssyF<RfBLGI{8s*=)75Y1?0r_f)QpXI6z`WW(LHI_P&No8E(Fe(r)DdA=@<cPH
zw1Q)NssU4?qx_Y5`(Ws@lA>SwneMjxqC?*P<=S;QlM9>7pn%C~{kJZWwE{aYn;3co
zFM8BU*{;W{sc@<n9^Z}oHGBYiiXB4orxH=bdLtCYOc}(-vks^nMXa}c4cj%qN^$y6
zxRuQsn~K1O<8AN{fEW}mu`FBm7riV$nEh+s{OSO5pyy+@>*CPVNM$zp_t1u)E!);h
z5(2=!gf}KzQ?mrb>#<cZ?qA|M0n|%PgLT6PtfvWNcN{muki-yZrz)c-9lpK+{?`tE
zJEsLw;W^&rVxNBYicLQ24B#X>*3M=q)8REie&yg*AWF;cZ2Y*!rnl#9W$b#Q_7K%?
z1Etrk`$D)>out7}ZyDe($6l?-Rs{gE@gy*pS-$Pvlal37SJx3Zm?A$oTbP>tI|1(@
zD;synO=xg;>z`dWmp;N-I*3q<Z`t#F42S@wjxHF3x3P|{CHC2^6F3ACrq7F`cDFK9
zRm)-<fU`D<V2$KNqvY_Uy7zkm-zShV=3W0lAcfZf;rL3seHh%sN~CC9YQG`Z@B;(S
zhHTz+iO5=7#4dWf=yd1{k8$&U8?5<7z|}LUCq*KZ)d`q_KT_)?Ud^;Wt<TD>Kwt#e
z{lxZIqzljZPmHB!_sq-QYc({$$dF9?y|os1G&=0V@P*PA0htBVwv)Zd1chc$JpfzH
z2>nSWAm=o?{_qY*?WU|SQwnDsvhRh5NzgcvgYYGRrXZkqOxLRQQqD(5efCRtH7yu6
z;4_n#euJsSU|JmiT6t|>pV8{si&1lTw5}%1Yd9k63R&v?0omL3bldso7=D=h=8b8u
zuN-BuDoVQB06jH(#|hi`G#z?MC2kj5I#>pkmdSW-;CVXemvL--KSP>bUPC<64WS*W
zR*v{K=hL)U?r`ch6aafPu!w2v%-iO=8-=FeTrHY#a8;qf6^1=>8enM_Jd`r03zYSN
zUFu_namNpst3#Ihoz5YMQvvm_`5Vh8W+nN!IS`n{haETl1yC{WRcLz5g}AjgYx_$a
z^eNV7Ix<F)Ga9JCU8_qYRPW&Jlys?}a*@PyvCju?q$$j7zXB@6Nt~h-86>)jf?gWL
zmxFdBUUyb4+1<ipIc0QdOARO<9%iK=S`e@lr1sL_EdOA+0J78kS>ihsOtm3|dHPE3
z>v{x}sDTWmDU|Vn<bwnK-FIXvb0^#4-UHd?mB`j$r_z25pkH|i+***oc^bX0MQC@a
zLoosXLgS6xLJ9|CQ$0dzA2c&V6wx~PWfLllaJ5FO2prPuT(fJ+R)XpLFYMAng#6cO
zZ^a^yE#ZJ<5C}xrS_h~HCxkBRxe|l~^`u+)^Og*uYk!W&#*>4s(r_HiZwy$HD(s{H
zLrh(Fev^>+?DUysgBA%dRg6tVu|v9ZBb!PV&>0y@PC*9J##uvO>s3eiLzS=K#TF(&
zDuwaFgcE8+$4A(NmLP!yipeS}mms;3rGt}KW|gMYsqSo0uAxT`!lLQS)o<W?OY~+?
zy)F{JZ8^~|rTr;4j~Q3!+Gi;|{L)XceyXgnV%T;zkVf(NV^lvWWt^zQCK0IcUU^qQ
z=`{ifJ3O)=4OG#FLf}lSk3ABtdN_xUUC8PjP%p%&!u1Usd1K9)uu1{11D_1aF}Iom
zQJm^*JA`~6Rsju)1z5V@;Bjuhu?^9IjTgoq#)903>ujSg#;jWd9ZPMzh$PqP?w)$P
zS|$<reG@;==*Ptr!dW3VGW{q#KXqk&8OrkI03@N5c3r&#kAisd@)bMp8~Qo~%0P*w
zK&~QTG`*Wtv<3B=?CK$tP_YX&9Ch-Pun#KR2CHGvNw{ZE12RJS6)zAf9zok}Fa`)U
ziDa+~3}}<Z`9^UfGZg%}ZHv1lnZ6AVvZShb%_-a`Pa9Yfb24nSP^VO9N!|tAo#I!U
zlZ^JK56=RJDkIvs--L8Jgsrh20*;J5^Fym$EEt8Y6S$=wkZ@uhc`k>;Zp~5vb|wGh
zdoWvP(ErlL|DACz+YdcacPW-^6`Cfq-}-J6A!g2)hTqG2Bk{yazvC{?G-I@Jq4nx;
zzZn)R=b$_swVd-62_gno<Hx$L0Ls)%PtOn+<Rb9h`*^Nt9BZ5G$Jr1sb)Bp<EMEX*
zkj>gwVP$9LF6mm{TFfFBnA)({%~a{jr3djKw!?~<(1+}22A==}7D#eu%KXVrQj7Ap
zXsW&ZDj49(lSMgCDe6*@kH=MQDcd%Fsx!)KWEYuor{$`}6KN>w;OCNDp7<_4#35cg
zd2`W6{3@@J3bu^KRGn2t#JR$Wc^efva3q!7Q3<(fb&m^9!CiMLyAm8eQkg0DnzcJz
z@R5SU0GuQQ(s_+t2uS)p5RWn$C~)S~k28co2@{&*eYSnes#^3IZ2T1?=00AlSR%AU
z^MrCyCu@kn_jVkjGG1Kof$TBFRqbKQ5H>MkR{&462@nd+PI?`6_^D<Do#um{rf{KD
zAdu*w%F2qLARH^El)TrZYZd%@i_a*_$_dif@MKM=#y_YQh2A_q?*Kw)7zqxR_h*&8
z!^OQFqIA6b4xGr2gnE0o244iv0tf)05G0Bob+p@E?`@aaTzWiO$|FV!U}FtL)v+l|
z`ZZv$kyVuQB2X%%#{>h;^nR#i_?HTjzK&*J39vp&Nf~~o-99C9rCmpXi@KUzYhv8W
zsb!timuFUx{Geq2Q@3cUd+h<%J2{Y+99vKN>|f%O5TcSy@3Y6U+!R?`mOBwn`>GxL
zl;+JIdY4$W4Az|#0GiQRRZ4z~b1ytC`E^;plh=sCQ|q}ZIAY(k21j8;xMY6byFBt1
zS-I)`22%G!m)9XuPhrjW!2sQw9Blh&Lt00h$@RIdF5rErK-pHwE<BL^U|RkoKZ9pL
z#f|}83in)$l4M*?EYm60MTK+DR%J#-A0)l=iIpQMN#Lvn8u6P)Bfy&!Whi}iofBt8
zv1#>XQCRSxfr~<`qbx=z7I&5b8yLnq15hAUl`xQ4rbNk(OQcNaEdgL>LwQL4N8&2%
zb{j&VpO7-?Yzbin`CMaCs!(vKnkN#2;T9u)(g)L)?m?+kJs|b>aj^1)=(#`Ru%VQ!
zqX;L7{)jtJajR0vNwRU8YsP^OsiC6x@3ckTTS{R3aL(cR@GSjhwK;lEB1FfwaiODq
zPP<6rJ`B!9Aq%^&28y#jQq!L_IYw=W6F&~K7lkzQ(8w9P^+G8{go`YzWBtB?IgX8l
z{$hmt?}IpO|22ri_CF5d{KW|Ok2C)E2=^aXdj8(n#{O4997a~ozdN>7YiP&ri=h3?
z)t_Ap9nuUNQ9Yz4#!K14WtoUl3($K4L~tCDGg@;1UC-zK&T*pFM|yrBxHVY3R9S5M
zd7RYK?e+Lp4Q0o~AL-)l)Y7GBct$RjnMoqyT}<rar2cX8iBe|#c)#hZ*CR{bv><H@
zMAYW<{PP#wuO~K-`KqKpbzfB1X)U^A)Sq~NHn{$BiB_S`c8^81T^V!j&^lkB7Msfr
zpa1~tCr_)$z{Ov`rp9oUaj?EEdvE8td2s+GUs2X&u$eHUylz3pn@ypBs_Rl4pDvI<
z{ytQeXMx3scAj~~g%7a!A!L_pXaDf$S~zFN&=O3-?#8=s_jin$o6S#-9Ysz@0HZQ`
z&2Y~O(H&uIer10`z6vlD^wZIfY3(F$j7BV?;BD+2&(DnY4xdGb>y@>wr{f=E!cD<0
z$748{MH)(djq3b92Ul*|w$o38*_{+c1G0(u2S-~{9jW1$<*N_LHr+dhq|3Z(Px+b5
zWqM1K{6T%G$w|xE*;_0)@$5rc$SwN@+J>C`0THn_$<L%)eNS1UGg|#ZRajr;08IIa
zPjxMX$AZ4Z)ENpL_E>5Y&C|2W*g5Y{*E8QS@6B{ey0Ls-H73yDQ0@>Ro0xCnP|Xed
zhvLW2JJT!<W$lD$40ranVI_|V;hr${&GB`46SpxzE#3>?n#$Z}{brNT<#Il|%=Gvd
zYkv|@i>9zYgu_h1UG`xl5r@~f^TQ(>E<NuAvd(D4V3k(iV`yX}lG~zr^FXg55%2M^
z*GJ34Bn_)NrLpfV+3SZ(gfxP!QXj<Dl*leBbd}M3fdfqu-;MfwbVPD8IEN7Jsw$Pr
z7>>$G)iK&A$8E@|-#guSkF`Q$GBR#cA$}mV_wAlsyKf@J5DF967+{Rnl7w91Xom4J
z0E9xwf^8@+?POz1;?IyiY-KC>3sPL{eWV2#WY`LQjra(o1s!^g0K?t2H@hzr|5-BI
z5@&z>m>`fe?PxYFFGG?BDll;|XH6WQ%PS$$rT_DEj$Imk4=6D!<8%r6>T;sSmoen%
zeVDpMjjLnw=#YXr7t6#gO-Uxn6G6yFQnJO^PE$c8>t&6CSUWc@x3-mW!<#N#UMyE%
zAAh8KR*@={M@?Z00C;R+eT~*rz{_BYK?*ljMK}%~&fGKZOxR3sS_ENqxs$rkC+y1F
z;46Z$Y@3O8;+dHFcjN|rd`Jp-z>Iuy2DboRYmcy4=~<9UHSs8lyMSscG!9vL?fe3z
zDZ{-?*aG|lfw1Bd=PRF1d3hRD8}qCZXBjvuWaZjKi_dC1Zj~tPp*o*wl`ivoF%Q0w
zEakN>{kmM)r`X*v7jPt)AXBKIS3iW>+7R!f&PF9+-7`twHL553oJtc6Bue0uh>?KV
zbfn1?O^Q$yM)=_3u7*AY6+8Qeuu1=(nInfkdc3bc1Q?YC+If2eP;$R6nFNND#wL${
zRt5oRuNAod#zSWar=KP+jp7~DDntwID1T0dy{Q*ku!YJfoX7)#*d<qt;}lSsn>i=4
z$F_Q?B_g2}(CJ&J6fD&MMi^toWFq2{!_A7?C$k*3s2HtKKLC(j4KF9u2ZI#RDmz(S
zNbP<GTpFS`!}M;TB)J{LVCZD=#QxTVJsw~Xj>aj>9#t4U6%#s+W<Z~!YynZBI~(Az
z)9M^edr64#JFIp4P`EaZ_<`2K>kV(!ho7GFL=pj3MGm;~sR7z-&JFN#UD+_3_?B0G
zK69<64$GY?OC#<N_og?nKT8@2xE>k_z;FQ+ObwG}<v{Cdl482PUBa}TVNx0)(a5a&
zOfVScesSB@Oh!|xy_Ul<rMi?61-A1X!-;f~IOYsnmi>A`KxrTox5=g?DT9Ln?S{}D
z4rIAEA|;E5!NVa5RaYW;ng^$<353Pok}5VOo=+h|4Zcvasc(7UVtC;Kkc&rc&sd18
zn9SqI=s+>kPKJFWa`tBorfcG4=Uwh-PRUP11}6bdsrMsX1TePsrPV(1kJi?`TL65+
zm2-Jour-#tDJoGy90nnya`E;vKp2RBt~8fR)8#a4K;n1OBt>qp6~owAyqoDcMD6UL
zL(J=+@c^Maw&C;uMZD5VH~8>1Fc;A(_cxTS$)sG8xsx~s5%AIlUEh^v%Xm^n5+{IY
zr7N<E0W@HQ0=m{W;V%<Bk5l%b12)RwG6$?CZ$qt=kj8Y{&q9YxcPTp1$A#aEcZOic
z0YOLW#f71I+uP-ok-;25hc`i_;?^QJH3DLNp6uMrrn5|$`YfWHE-*GLd@T>YwqMBR
zR?J0v^s%pj8jhdGSerbsQ{Z&Kl7?@I-Wc5?GOfi3tmcTauE@xalsMKNMPooE-_0s-
zsbqO5JAz=<kHp<rl=BWoyT95Eus-|25pwtAO5yiUVKw_%Nra(ZpmA=bCvFNezkT#Q
zfzqyw{^8eP1tl%`D@^>}GkjP9p2N)bbu(Lqtx(JPwJBTCC48z8o(epGR8y08!!KXP
zr0491j(LYeOH^q3?0}zlI-Alp<GM(v7TzlnzL5<u=x)9HU7h{tzKROBA}&ys<@QrZ
zpzBLY{s{HHA`d70@mtV2Cn2FCE*BmV;|#}2agC%@W7%1K8cYSYK^eHOTvO5ELu~_+
z=}58uxL!Rmzla45k3M~sU}(Rrb&$AH_`znTejpzkC6LF6oy6|P<DcMzEpKwl3p*ZM
zE<DNz^Q3+dN69crK#~y~p3W%Qwuc!U<Rgl8c*hA8{1E(on!DSKlhuF*fluJ`QOVN>
z|K-B<WxlkJq;A!dZ|rS3Ef@G5iD6+j^kI_ohNV757ws)VtlX^=Q-G8WfPvR%fn-V1
zyaSs)q=OoaNZ0-LyjjT)Fb)XO@E2J2-=|3aNjU$Tvi?6#k^BXg{dJ1uKlqDY>@O1~
z|5~%~Hxccx(j^?6e_L7q$M&2;F{FR&dZe&vGB4XZZIfL=*2BlCXT+@sUkAsE!-5Bb
z%}aUTw(G8-K<MJe&WTh((NxuZeYxu!DV^Leb<XtAtlGPrcfdBkBz3^DMdrT+LIqtf
zy=&Rj$gTV&To|+UUIpjI%zXyOcrL9tKE~36<@ue9-3UO&jd`U1M8#Tp?poWhNpXEw
z(7V}A9oHhkdiQb87vbgs-{``(q|1#9c)rUI7Gpe6KpZl~iImK<ywl&j_I>*>v9ygB
z&^u8eF`Iq&6%=|)`XaHSX$8xDL>zm!{VAX>p*SPc+R>ZP-Tu(q96)Sw>(?V3J(81F
z!F~6J6x-tUK+}F2Ai?Ck++F65sSqMCk1)G~xGZ>Ll0OA=T@~xwBcqM$oDiR+2*>s4
zW~K-^wG2GHC{|VbGLOj{m*t$0fECwWzE00G{u+x`pS9CH?QGS^xry{`$Q9x0t40zN
zPkyNj1J0!HEK3{|c=Of&#z|8%ZrQF;9)F^Eby{Np33~*UkFO!v;QtaKi^>`f&))8!
ze~WBkeQ~kWFjO7F%F<v8H)!+IwPi?~Uh;~>4}`)$BzhmvG{8Bv<uHSE$t?qO1@AW^
z2cI@F*I3x^&|pWyu9;47v*6vUW!tK&-><ld@Z_4BmE>5J3TviDVmh$!wb)P6Y2cg>
z_wV(;*bcDtb-+0jHDMbbnJE_=s6$~$+;DKY+ibR25|?{zFMOeo3Bzl-;3MDX`C#Mc
zh0BuiLXi@8pxwX(ZhZK>Jq*I3%A4Uru7?nC!<RS%<o-X_-YGuwb;}lxZQB*wR>ig}
zwr$&1#WpIoom6bwwv&^+d-u0j_g;N^_1EY2y_oOK|2OA&#u#(V+ri6XShK_!<@A`r
zGq8<GcDm@zA#{ehM;@aC0M5w%3_GPg(`U}e<!Qaa9-^%i%e~P0WP?~!CG`AxZ0aUK
zUIOL5rD!<u6bsjonX@0vZn90Fz=&DikHnviCI$_~H5%JtmXY+(6Z*5f73xZQ164ie
zVp}OGZ*q<aWa=)2$AlkoaUwtyaioC}OV(I@48PEQfrY)>Js2P0$kfC@U)nJ_F{2EO
z-hH_tNk!e3Z_6i)APyz(x+N94&}xDqi^1rHh01hMHA!#6h#LIlsG2)dsivjT356T(
zhgI<*(EQg;z$u|%r1b!2eEQ}G?@>6l`dUF}(&zcwhcOWiWq+O;&7*8CS9o_v@OVQB
zvUTx~!8U>KdvKy!0ii=CwEhf@^n6%eDLdkaq9Oe~TT`QN@m3=nJeW@DvdDauhr%7w
zgewwjWarZeM!Ty9nKU2NV~;yjwK*JSsCvbhhp-_x24iv4S|PV$6_ggv2qC7Qtb6-t
z308A6L&Cg>ze%gCj;o3h)xj>88_Pq_c|`EwnF$i%Sxkdj!10u8p%rnxq8hW9`~$@s
zzxd5C9L3aj&<7#sc2?JOpdYp8Lh=1X4Ipztg>BFTCLhV_WS6@Dq>U{L09^atMUZHh
z0fAX*54v^R)Q@d}ozP<)7gA_K%JsN>F-_rjkLxUU!nl0|=Eh8~dUM<p5F)NX-VUrr
zUtg4}?ToJtz=X=%tJnzm7&^Q-Lkm$`uAR5tTjJZQYp#SM6&nsRo2tku#*ojpU3zvF
zD`3X4O+e+SzU*u1hDh#%QoMD<?ZN3m6W^Ov%XL$iWjAsi^UB6n&!a!J;_9u4ho4N6
zn>A}T+h^^oo*zOX{Ttq^p^r~?z(WH#>R3<9rf7wQF<#;O(iqZGpIk25ibqU1H|VQ+
z2xkcl!PE*x$he0OX!liukV@rQn!7g|rp+KgNZFYB;vyQ&!>KX~r4u5qr~tUx$&4X7
z&{;CJETcd54HBRB6L+c!*H~HoZj1xK?DpQEuGd#0J(Pfj;!ukj#coQ0u?(JEY~7tQ
zml5&NoktG{*+AWKU=tE09JAC{+zDLbi%v~%=%*?GBA~NxFN%Q)6MR~Hcpm}7ugJwr
zMT87sz&t(yKAMDfaq#86n@BgFguaGv2uU8nkeTPaSY)`1zqX8Lff1x*<S-~kh?x%%
zQG#`FiPoOOW9R3Dc}EQwH4MXZNS?zi!+TX|5W^l=mM6o2+Sg#RPW4vW^ix?%I5oI@
z?<Xg;6~HP4AA%wtk_o8vlggP7+@q<o;^OE?V=rEq_y_`?Y-;s!>fl_-V9xGK&lj2w
zHS+bV31wRqDha=dOe!g*JkBTnmeRAx`PH~U#~z)qX_v!>Nkl@Rg;|H3X!Dk3Ue@EK
zBc91$eG8@>YF2Kz)?Ja%8m(wIDiNe~37KsbjZ?kQ|CX0r(I?hQlc|wXhw^Z^bS#Op
zaKXdImm~&Xf?Z(T{qvF0+cV^)tR2}MXl+XjHp^d9Bq@i-(V!`w@#h<mS+oCu{Nf@R
z5E7%u+DGV`qA%G*8H*;4r5`d_xL=8BRWGy5xH-TUv&_u;;g@!Z)7?QJ8QhB)A%Lrv
zJutslr-xw61pQH7#Jkuy@f|7QzOHTNw^xz%K=5VTu0(2!1rGDfTC1cEvd&MEMbs8U
zUU&uJ#Y!_C=~Uj~NHtV+3SjC+r^>+4kvxYmK)C)za=qW08`Tpjw)nx?INxL6e6Bx6
z0$Cf0$W9wG*;$<6)_S4194}E-eyN<8R2ChHudR0Ww>t+fE?`h(q!F7`(udViMISIL
z`wDI)YvLpJGKj6(A$tFSZx5Zix>3Le&8C0?X~UNX@2K3OufiY#@c`QW=K0G_Xhwa2
z#X287d(6C^rXAHKKO)3?6k!8)j$|yk9V#5K8dwopC;_cSSob7!O18kfXH{-~r%}!m
z@=%Pm4$!*^YdelmKL$InR33_5>!!2setyv+s<owVm|l?5Aikhsif!C%DT@=LabE0~
z%gKPJm=f--%`S)x>pX=GLUhi?n`a>qh<0Zv|KNwYB$0vxi+H94Gckq)0&GCttJI9d
zMXSJqT4p1DDP5Bo2TGAQp_r+pBIpE>xyL3S4o)@X`p!G{P4||j-8S(pL@AR<9(61U
zA#^h8FA|ua@iS=RM~sxWDMW&0EwQGVX4x|{+R*|Q+d}y$V4NR5&MtMltC?-yEI@VD
zC`U=+TZXu&(%Whd-y<LQ!fL8<Lwb@}-wc@8(A8)SS0CHN-m<uGA2UJRtgsboI-7pY
zo2$jL-oPG!6un}Xf{wPb@bE6lQb)=sy*DB~&-e}f1`cn|<^oK1Om5(_4VetA3KcjA
zn$<%P=Vd3;TqY)GB&gcjthB}w=WmMxS2PHO>Pj}Le0Z6da})h&Qtr5R&Cmj6T&Yfp
zvWt$9THH!ry9fRSe=k6jvCNBdn{n|W<OEk6cAiurQc-)**_U}%GvT;mhk+>#?IXcF
zu~~QYO6CO{>D<vn^~P+f*|j_07)0;W_vUK&LX;9j_iO}J#W>_f7H$8Lz8@AMLPU0e
z^t7Nv!H(w9n+v+Ik1q3qW90q<J-s8|=po(B_>3BD@iSjr5KTI5vR4@LrTgVVWA*~b
z{Ms8Q{*yk|W$b|CT%>gRXku-xI)=SwhG%y)GWDW4{&dsq4AW2HHiJ)Dc#i1EXy$;5
z1khbF<P#LgQkoK+E`+Uk<`k=ld3dKEpCogpIg~3Qkxtl9MCvSqlET(Vk=Sy*;wX|L
ze4@W6V$P=yEfi+b&Ft2a>fU=APrcXU>#X}Xr%TtB60hfd+XrPg<9gP7uXLZSbF5=Z
zOcTepd%ik-=2bj!?+=s8y~BvUjAtZkzy5cqr_C;#QSiXR#BA*|Q8C5URvkvw(;|{9
ze-eiGCWCb)zovzU5JGy3RY$%GOD71WvuF9#Uh?}L>I5W*{`SQ3JA*~9t?6CjPoI+)
z&5e||t%rP-3)Pw*$jADscy9rA2Yo!BvnB!|b(h3+_v1G!!JR2!nBKc1?ab1Q?wEr`
zH1GKS=OMEH`UGM7@6A1I|7z}G`+s2W`FoB3D>MAZ*T^4J=o$aNt8aht3Gzqw`yU2(
z2Kujxe=(xtTvgI$_uo$DkfWpag=BqMV*J3wVuEbeh502TX{c#H>)XZU&V1-XzOU5&
zzAswUoDS$7^2{LPV0v+Ka`2ce7nVNpM~|4F^@kJ~%^OAgMgzIap;@uQm+)>1H{LAe
zkVR%;W_z=EvwQL=EYqB$AIB(i@<p6%+~d8vAJQ|&R@=Vjs#X*C&SFf`F{w0LOp?zM
zhp?|k;VmfmD8>})xi%@=eDX^>E05<ZEyM4s{49ye4yh8JlW~3rPg8uYDQ&C+*3rFv
z_@J)9EM=0XQ?RzHsKBu{`d0Rp_Q)8gSF2M*EuWpzE`cI79{){&_}plO21(4uW9`@-
z16s0XsxrtKR=2U4>n`gUZaDLsO{1-Q|N0<1q<uXIctr*FRRM8(8CY<@w;20M*%C4?
zmOi)^wWiz&jD-AL#YdkU>f1y0+E2*!zS<TaMvqbJYpp=VZ-SHBq1o~w%gj+RhQ+AF
z383&1%z>#eAq+&E_p_HNnS+iH`gRVX>j~t*cm~~vFjLj7JSkraY&AAMV<f&~lgO`j
z`}iT+aRigAuG5Y4R;4y#oqJ8E?Z%rmD|pt+C9N!S%p3HIU^1K`ngcjmwH<}{H3L$C
zTCLR@2{17$LOY;4*n>Vm0WLM12jX}sF_B5<JfmG%vC0m^p&E_@J_DuA3`0h_bH>s3
z9HA-3^#12sgv5d>r~|@U8)8p2VM`=9jCGM_TZIF+V??^l`>Ai~N>`B(^0&8JY?%u-
zyh_J1Kciarbkt}F@rgh2t%@c&P{5PxJLOEHkgt@&<jvp?j#PbHrS~b7aa}O-V;{_L
z+x3W&p*$o{&RPpI5-9Uqz=dI8B65}aK5s;SXD42*BpdDVPc?=hTBIQ)PDNOQz>NLu
zvO9oPl{0j4t?8x<!2HVfIhUyV)|O6P42|j#(E;El-3R()p2#SHLDL+vJeM#A`>P1D
z6C%id3&<eMI*!wN+}3v87kgsf?)DxKW*YC)l2m@syo;=J?GTmXME@Wi{M8l|y%?RG
z{c(M48atUAjy=zwAkBn~<!o(vU4~yqXV#Um9yO<^HI{U%BZX|NgTJ&dI0a@>=i<H1
znbOJta2vJZv7UQyH$h=iyJ_qVt@{=ZB7nGk8OW$5>|(3M^TZt<pt6y7C^y^W2P*tI
z@m8H8>neVIO!0cq8RQzjJeh95D{^&BAfjgpzpvq*3=U#d5kM)l^s1XbM=8t5ep6GY
zU^AMX#wO9d;X>r*HubM&{NEAGog-$-`Gs)?Y<HXUJCmP6&EwRpfIp^xPC9+KbkS71
zTwZlIc@HinW!GSq4-E|+>x@$GqJox={$2p<5mR>KGpurJdA4%8Wg|e#Q2CR-`A1#r
z&rOkRe``Dck-A~~$K{UyjVbc)HU714{;@&+fx7u;5B-b1@{g3%zxPUZ`oDadqd`r)
z`X6C<$HHLd>d*~^(6J!m(?Dhc2ZaK0Abwdwt3u!8r{W(saz8ujVrz}Y%-oN}XKdNW
z*!s33v(~v+I$>s%4~*>)s;!-=_@vgUB@>i)zE$B1eVi0|UX~cE+2j$}<8^BKv_Bg)
zgsl<W_0A7Iu2Y8t>A$2ea!c-4-gw9U=xck;#fBy}E50w5&G!5l#^%8>6b0(eaovYz
zL$UKk^J}NKO^_lXnMAjU#qXb3^*-l<;>|Gb+6WZigL$%xeVabGQ?KarHSL_Oxl^<e
zaNcS&+cF|~ZOY>xY*%ds+;&su@%_baf3YC2le5L{4A<<xnY}1r9yTl^VMrml!DOmk
zwhbBiO{0zJ#@(<oww5m^v4;{1j+#6YnV(9u#%KdG42loB&51gu0-xI#bT}TQ4WR5Q
zlZ}6RbHboEu9Ybnn$B6mf}>6G811)osuEEIfXz0bNI6y*4TU}uqM@HD0(I1hg*GN!
zDBpP%WmMj!y9zr{zMF7pY~j`w#`l{Z3ASO1-HlS|AnPP%{X1)lYwAP+EFA*Ty-?lq
zimfa&H^rR@+rbUXMt@I7bagQ-LZ0DvL#!qKw%~xc@ly~eAzSHS<lRI{o_=v(AG$@e
zqoe2)yCDHgO^yDtU0+iq)4+63EeNYkB;)uD<zJZ!aO50(TWTm6QNTV~1PEZ5T=@QH
z6x)8q*w~~8zXKtsj=fSA+b2wl7|s0rNG=vjg6r+<aTW>CV{?8Z$)CK@jdo=@X+ggG
z_pu`O%E=-0(rZDn#gC|ujhRHC-!vBXncf1Jp@<m@xyY{BjzE;i{)DJ=8(h~~W^{`#
zs*D2jQ}K^*JY(jv8E1gulFqp~CY;Sm1#;8qV-?k8WP{L!wQ5lwM>Bv`PLe$HScj8a
zc!@#lCvariMAmw8J%@ZfXd!xtZ?Q=q7f_*5P9Jt#?+Kc!Tl1?$-Ao1CG+%yv_GaK?
zOP{Q5n|EyVoJ<cJeU>+K5Y}bCE=|k4IKh!-j%;#g=5|ps2^|w_NrIvS@uYEb7zou!
zxe0lF_26d#3fYiW0E5j*XY(F)ugD=`U=@czh+wkxez`xtJ=~IoS;O7{A@TML0tMFY
zcm`$-^xj*Bt=_moK7OK(L=CFaR33@0{-Kh+vK2I#uJF(o#+Dee$2X<y0HjsQsSeZX
zVf*}=Sr&=M?qiIsKj^FR1RhbujKIb!c%yya$Jm?bIY<uw<{7nlaH5(de+{S--d^L!
z^h1yex<SzuYq+)sOUc3o1}Yx9@maOL(XHuHou-zr0dw|zNQ1SHyI#d0{jo#YWDyKn
ze|4mB7PO%LqI1-onOY_%0%@9CwsUVJ*d_G2WzA9q<P>DExE+(W*g8KgFK>qx{C<Xu
z8hC&DAvYm*DmXSh)%)uE^|;iI!PLtWlDQ`Qi_zFih<EJ$r`76X&f}2c>Ol!=QvZ`&
z&C8F4m%8QTRY%bXcg-IYK;G|j)WGu5PSC=Y*-xcKnUI+b%x*Nr?8%Mz7ZZ&r28+@Z
zT-CsH-r4)3il^x`=?MfUm4}DjDr*;ASpbUcA9MMTj{-5uZYZ_vK+NuI_-L@*v63#A
z-WCRSNCwbtj6;F<(u4bl2$NN9$DS8Tig=jl;UeHXPrq_LNQA2lD?K>m46S!UuHPuV
zlO0Zjo7%GVfgvU%xp+n{JqFfY>TJ7;<FLv60P0GEy9b;~SrMvIgmbsIY2lQlXF*DG
zoI_v4#VFG_Qio(1)_fBR!=<HKvNhrZM%Ygu-x3AgT;%55es)GTG9F>$TS|HIWd+12
zrmg$tLJQ6|>pc++5kAW0v0$W>BB!mC1&4X;aklE03|>e|d2P3eV`$3B%3gss${!Tz
zVX0XX`Yd*0dM;7ROdxw*;o)Fgoi5<6HzWkq*@YlLac@Q;*##rO>BQN-Tqh3#u%kE=
zr;un2@Q0Dtn`XPE3osUi-2;rR3W5n&A@mx{h1oiD3;Ciw(TCFyClYhKJp9U`j$UKV
z+**nDYT`N4u*O#B$8VrfYG@cb>xIzi*A+%fABUixte%1+t3o%~ZvS<+n`l1AO4l&7
z@kZ}Gl5^fk&I?Mg0n0WW?^MT|?t}TZwgq!ycjUHrFH=mpjXMjpSsewYJ{TrFRHn~B
zzd}DM3M(?oj0XsrG!pOj1mf6{1j55ZC+D95ss54aOEr55k`?mwMk~#YK6_v&1w|Z@
zhZKT8lJr|D2pf7cFkK^4a_Rf#eLFK}sa1+S(BybK2@Ci8B80!4sdORSknPf0`|!DL
z<O7nfWfN}uG+ER&_S2)>WI?GG;cMlyTW_p@Ec$@_3mtOn0E|QPV1GAIKxQ5!V6^`n
z^-UKp*7VMjG%_OpwC_nGX+{Lmz<?;7HQqb00s^l5pP+_6$}ax}YWUj#{!ggkAJ&}z
z6>9ifjsH7p_-AhJAH<)(h8n)2Z~j^RAE<$m^{+?hj;nw9a2ip+d^md4FFAnv!UbYK
z!ZU@j2%t&GW6?4Pcnc`HYm8!AllPMLU5l3RH@_lr+!Dv~UZ=>k9mTR7p03yK&fmuu
zZ6cI0Q+`gUJhmk<3TIGdR^5=qBsH2lb-h!x`czmiiWp5#!=`Kg5Q^b`Gs*j184h>H
z5|S$|Gql<;L7XZ-UG(MbjL@-i>?y?>23Loz1nSMc^m%%z%wo`U$~YXXK;p!O_cE-d
zP)_S_tuI7y8Ul1KZ$nF!Yv;4Rl=+>uTZ${?<h2Wiw?GpqJG_X9{`lJ*jVC8^(sj?g
za+C;+g85EKOQZalecLOuh}3;?K^9s8168wd&IUSnY-w)=YI@4=CcK2J`+(t>K6QyV
zH$;P5jyD!ho*_HOeqcWr4yPesN!$8uxYuPG7}*c_Iv?#V*Gw`y^@3&dN&%%L^!~Zi
z#cG>Hl~q$0+gD_YZ`Y%8+Kss<tK~KoC2ehOg~y$ocxy%GWzK3V*W>AIbWVj*T0rE+
zzZn>v!dh#F@nE%L>dXWe;dZ4({n;3~l|M#*Tn3xJqDrkYudw?IHXIc3%zuA}E~`ZX
z%KCIQ4hk^Nt;^-uXj-*<^+V&)vEC+hEIF&Z0tFsS6l0tp9uxMoa#?$`x3Jnnz&JDq
z#Nz6O+3>{s0kL3zDnKVD%tl8ghJms_OxJiSfb0)tgf>^DE3ulG8ua596hJ(tr@b70
ze!c2+2Xsjj+hnCcu*Eo<mSv<n0M3Y=yAI*PH6yYpG#i8D4Wzt%?n*)EWX!+?$$o8)
z#okCvEgP+WioiU6zXjb;9V~NTlu{Oj&eS@yjD$9x`rUKij{{f}?D2g^&A=eR*f_6M
zsz%}j8D5QdF^hC_YG*sAh!wJ)&pXyFXIc7)>cWOw?4{FOezG=WJ}Y5GuUWY5dr`zj
z&{@>z#oihzbq@GeP%4l6V(s#N`WlUvGycT#mB1TOQ-b89&27Ca;mrHl>C)r+bEvL%
za|~l+P|dEFX}RdG2m4jvs&!4kO6Brl_jQQ~BVmPj0WrL9WoVQV@|5-SX%>nd@8H>5
z=Vnlctkl*j+I<YJ{g^Ee_GGH7aVIRI-gMtKkH6QHsiaeu$RS#a54S3}(0C5wHex39
zc~Nl^3Eq8UJ9t>grd<`X5a5sXo42m%&P*^om>B!PgS9W?O{CzOl@MW@q*dNyOp@jP
zQYtlj3Wp2;SJ1rxKoD&OahMhNqnRGPR!%ZTpE9+`Y_keEoD)^{(KMmMnSkq!USw2R
za`7;9l>V?CB~VI2GH53xQMnlK7P{%2)YRp}e0)G5xHSN!vSwVu?)Jo`zV0{w1XB<h
znBQ{+OpLvZH^DL}BdgJ?Mdq>RVRE(la26ZDFEVPJuQ}x_JC#O8cOQ*n;-YoclKP<E
zO&p2LAzB@*&KJL~V%aj41)2t|JD$@4^VPbQu`#wI*vGoNCYCO*UlrrUEL{p~aKch>
zZ27|R1nZsKAfimJgJNi(2(+sJJf0=N=>xQ-1plg}T`T<#AsE-w*lO=X`I2XRb?1py
zb^w>Qz%nnXnR;kfbsJ{GXbNr7kNMy)JJeGY0AQhc&y96CZ;mg!<68kD&1wB$AHujg
zk`5XwIrklHoQbgy?w7QCC6;d{D2x16s&Nio64uM0f5(pcL!2$oyeSTWL>g9*)T@>s
zx#*&q=_DT_8|QS5Oyv(VF$k#d?QfDmJ?u0yID#wJV=?xeAfA|8P}c`|aJ}T}1nhS<
z1pyzvDqkt#Ct=rKd%EtG$e~=iLmXR!`~bBzk0qDMxNL)w<mHUib-iM@{-W$iG6!!_
zaWsG$f~55^La1jra_+uU0H^|IJiG6aX5w#926sg69?-!Fk+5g?i)k?2oq5HDk3J7^
zI2Z0YUZEe5?$w^jh6zzz3Ps0o_dYlx3U9PnAPalPdD!(Q5xj`5*9fiD`)-ZDW=mj!
zo-X5P4Ek+$BV`3#QMN$5K1ut9G+8;8N*@hJUH~MPrW@k<w`ixlP&Bfg!@%QxWkO8@
ziv3)+x-oJ{A}6i4Ll*|EJjL`AquC4bfYI~2^O|nrkcbQWYbkkx&%K`u;`uwdsp5|^
z7eOyIX+%!MGmHpF1``bg9$94^51>Ia5Uz`m?)4urmjO?ufd@Mm;c+*^I2DGq!plSE
z>q>=jAMTA~+t<o}AUzVSi!;La?CsZN8PgN;_B+}C*qa_al^9^w6XL%Al3W(qj+DB{
zvt%V*WfCy(w&rHY!bo-@3&8>9@aotnt&uo=m#ea|W{~0^R5$?z!?1o3fAbYUM}kat
z<oUHJ$0J^yoFB-$2kz>tCOY|QFF=+u=bB^awuLz=a^on%(nl{7s44OozkKvVtzK<!
zR7vZo_l?z2I^(At-py2@G?(@BayC0Xq+LKvRvb-889QFD%de28J(Xo(RCUXnf(&B!
zWUnaQ^x*HaOZ|3zD;MCZvNN{R!_@+epS!Vlr4Nm~xuR>d2ZNN7b#Ch0nJ$=2dU7e`
zliENONUr)|M`j9hoL(;4TUMdW>jB(nry6UfzYG@YK@aYnXneD!k|XR}B1Mp~Vcw;a
zYgSQ#zatw;=k7D2y{>QIy3QOL)J7B=sj81qV=oXBatD?O9p+=6eVTi*Dw}2O{cLK@
z=Jj%SLp@bO*L6OOsj%ZoX>q62J3it<x6C%~QIO+EpV)%bGycse%862zS!BnrDtVgf
zdxNayigDtUBjS&sPqd7Iv5lqx=|^iMU~(zpG{~Bcrqq?7Cc$&sZ3{^;(_do4Gf4WC
zhi{M651-FBcyf;MI1_<gRq|cH-s1-!qJIeR{ze9^m#&n886C}GisNO6$}a4hnk@5l
zKUYw1OX{-IdKM6NF@dUB>ziaV)bWR)h6G0W662USgWs4!Qk7gyLn8u$e$tE407iz>
zvEIvkFCHsxxGo)<-J6@HSi`G%1kr@mRq?s=2xel9LY8666VE!y)=E04QhI`*^}f4G
zHg?q=$H?5HA^ggf4?w5;J=f<ZafDOWBqDDoVY5%Y=OJRqBr@673h374r_9#df?|{t
zU#&R&J%3T@BkJZTA27_tcY!=SuQ<41p1{6Ugw^WglXDP<AEZ7c{rrpv0_gkXxwPTx
z-^T2C1%(1Oy+6Lgj5B+GAZ&mb3oG2|2!erSY-M>tT*1b#dAj%n#7e1{CnZB_DXQ})
zL+V*8l*|{kJiFe`PL7y+Bvg1ei|^D^pPc{!hkAUaW~Qa10Obh2UT+`Zv-#k&Mczhg
z&wn<<2WpYZL=JR`BQJCg@I^b=C>+#Kc0+;Ij_?&)*h!n~=NI>X((MRRLhC0!Uxr!0
zki6R(IM{WmKZzopGBfnt0Hi`mp$(2=f!9e4xydI(&+{=)ABIdz=-z*FgA6Ig;F%yb
zh+*t7g)bzyhRjl<Qtc-hscY>$70>yrjQJDeD86vL(NQoMPyQ>SX8)TK@$b0y&k^<C
z!RdcQ)a-xrjeq_0*AX@Qzlk7!SWf<Xjeq~=|0am%f4-2+{wJCRBNH>*U)3xM)g)tf
zoBy_uY`Ry=h~RPWy@zDTRTltf%oM^vuWo3syIM<AZ;6>#zy5yNRMtuK?a|Z)c~3tj
z+^|ONYZnK<@v`%iVd65+F`>ZCvx#R-SiF|vhOvXHS08ym-LYx?lPk1#o-=%h`^iIE
z=!zXL=515!h>qf>yDCq&UHh0At~Dzpc;2V+^XX&grfNlr!%85pugwX^YLvY~=s-3T
z*Hj=8WZm!6Km!@H7^^*(gX+FLe2o9t>z#e3Aiv6>6};nA#UibVEP4W$X3n5T=EOsL
zYF2iLlhMw&_k{a76(s7MWV}8z;b9G?SezC&K^9FoopMZ{W4U37v$nT;v}?wa@plrN
z4Q+WdRPf4qmwM$aGpzTP4ex|+%Q)a?b$ix?I6k6g9>nh;bxy0Jt4S)Fh>|29g`L^x
zmV>pO+2zZU*N7#>^|3P&Q-Wae6%my=k-ZbdJzAIvM+e((p}CO}*O$o~FiyQ>l^&D4
zs5-DHSTZKxw24&oS<G_&kdCS2i(B(vC>vtZXW{<g{qx^bj_5E@&0@bW{87y{s{zXk
z+EP1f^ij&k279V?n)TJGR3rnwFE#>E%)I?{^out9zFf-%T?TXe=;No_Z?i^}SIsUd
zbW?>0TE`B(!1b1W(s<6=X2TQy)+mv1qS8HCuAmhF6Nj89P7xFB_fyzb*GilO`|PKB
zAsgAOWkCe4)M^=~y4?4SEYNd;P|M{X)O)bFAJ`QNMH->sYF8Vg=FcnpIKg2Qs!yG^
zEHDbW6)*k9JF}wM`<DF-q!f%lS_k@RTn}o&3A+jBh1a0J%agZ2M6&PopoZ3zP8uJ|
z@oyeb%B+TovKf~gn-8~w9CJtd(@b)6=yd5W1_Y)s`Jh0c;*c>sY)I<(&i$T8hU8nv
z57@WCZ#wk>BspAUS<W@0<M>DsTh7AbHBpJn^0bn|eErI^B%_+&QZMxj3dU{JJBNW=
z_QR=UH-^Z$*M)MWO-UNVYVYSjlz!jK2~rcz_b^!!g&RPrec2S~U!;c~xKGPvIEy;_
zZWsT3o1KExt|Ae06>yiGLoo(OB=em`LIJ*NAt;MaFE$2b8Om;_VX&;<rUTE@M()Fu
zIh?7v$g>U^^k>1XQ2Mt-*GuEXwcz*up!d6lzT((Kg*23oy_LKz9~jY7Yr&;Y#2gf7
zyE9!;6s~bsbvd$fR&|`Bf`x){w$=XmU<AbzlKdG_E-ci`3qLbMUBd`6Rn7j9K#@GY
zbAUcq3Zub{uuXSf20bqg`vh~}W%}G+vM6f-O`T|aw)To)AgHW&U5+0Ltt(kYfOVfn
zN&CFF$Q99?L?e}Ah@AsvcYY`*3N#G#R4pS3vUsTNTFhiSt9?kb%Aoa|iHuJ3K!T6l
zUDa`9oSka&`7p6M(sWrel=g_qC_VF`N)h5B=7@YA-8f8e>pyF!CkQ;y2OJ9r5<5~a
z++KG_P{nP&iL>wQzuP(P>%jJvfsN}sc4Aq~b8VYvI<%A`xLWX3UHBfQBc+p&F+2;a
z<TXw-G=A8h$VvOKQqjK89Xvi+XlW3Q`6S2OHlUt=zJwG$q;M$hQbOWg4awhrU%wwp
z+l6%{N7+jTbJ=PZEX7m}q!kb1?$>#Q$2UPzOwGq${!r*<s1{Hks{@dR{-{Zi*bOBd
zF80~YP}s{A*{1A~B)3a^8KD&!e#|(DGYL_dMz@=%^r`mlh@0@!CBOC$ehL@9!UIO5
ziI$XNF-AP0!w@|oUI@6b9qhtISRhhjrrVe`g#n0zr9#ozV$&j3EC}3W<J=~12z(!p
z*F(Y2xxr0YVCPR4sCDFB<{F6w9Kx#aW=mJVxP>!jJ1TK;NV}om-8SA<XLdwQRYSjs
zU36f9K{R0s!bH;Zdf!h#v)e>l3XKYUNeo~iWjbz(Bi8oH6$_^7wU>xAi=6KCV2;s%
zEI`T<P9b|#E?0BNig+fnf}C{iX4kA-4sbeltnhAWHTRoh&?QYHo_{EqzwfQgL>$&(
z=}P?&pA}iuIoX(~mCwho1Zmq1ZI*>;!DkrG{uw8T$fa5~Er)5rggKcmUR`NJYG6ew
z&W=5Kr_yw?O?@VAQDpdIvFUa5%(KnFW}?DPVgc8yL^hZ46TVoce>U*26BF#3d?)`m
z$qsN>%i;RP_4$*1Jabwm$$Vtq&Q#ANh6rbls8Vnyn$%ZXT;_-dz;<QS3<9e}>0MVZ
ze=jG+HDc1hlRrfTQ(af6#hD*C^afwkQ`7p=rPk^QO!P3h5SO<h0tfipEboMs>j4VH
zeZ5)gFBXoaRuPl!;Cf;K4^5$-zybfdM*h&f3(wKWBFau%7MblAaT2{2-;RW05UYOm
z=W)h6{cuG~eG+T&Hd>}AYstcs2D4>Cv=~CdWTanotA*{LOKMRD@1%;v-<pA3%UThs
z6YfZpWcjlwuLlMVsG9JFZ6q&<9r{Wind?f7Y6Si3+B>e$K{u!C(|)DO>o~7J9W)Go
zGeneTQ-929>Dl}2JP1!Iwb&GY=<XaFXO>z%W{Pzo_U4-*p^o978@ivFBAxy%Vt3Uo
z%bDHXRZWS|)VyTSvARQ`w;WL>;Mv^uIY9~ENq>g02H@&OB<Y{6%^<1+>CQzB7(h+$
zle>kH3_96V=uXKI^|UaY4$CVi^zyrZOpE_9Qvqo_J-uL!#4X8m^_sv>xD1bWkY&bD
z&$df0r|_CoHe4-b6w+oBS%_yE^u54FmvJf~JZ<aPKz@XNJ<v}6NJh-20yP9ZDjt>1
zcFy?<Ied$RwoY11;0EmkrI&FHvJ1pid5GlOROAoq?Toq3ByqJThwvxn^+Y4>4ehl)
zK)dk}=V-SXSo%fG9uHvjuCunQdIY!D+3F*(4;&28*dninD6o|P=*h<?gOcIs80VuA
z^hMW){^)~!mp7B6Qw>e<O4!nlW-s-4=OE|Df%ti2LlqfRjYQM|>H@p(cSqW}5i^tQ
zJv}S#8=tO6oN(rJhu<-s(6X0EwHOm`O%?@pM8}ONAa_{ErZw<w`mi)s-2n(&R$vp}
zJ);&kz?NQMpptB~Ubd)Tn^?3nh4Hkh4q{$bWY&e<Iw_z<Ob~5GsRd&ag1Db9-XGSh
zXRzs({{&M0_tNg)(b<23l>cLC_fH_@A1{&p6H@*uG5a6S+cGf_FfjdnFM!}LGPZxB
z^Kx+f16~q9(TSK@IvUv%(1}>;IT{HW8Q2&aL48$raI`nlvx0J68CQ|CSrtL(d{w<N
zq>hT;08dHOClN?n;137jQR9cVg0HVngqYRxgCDY<{@nPPStvECl#b&s<XhjjzU=0;
z8Tqt(a(1Ip<cDyrV1Zc?&QFeNa!drtm^C11j#$Ck#S|ADr(5HzL#XIHyMIq=V{3yf
zLOFZp^>lcWGIlEbD>8*bO-PavO+5`PPOaa(M#+#Ij(D8o)e3#|n}`2cm?1W{h<%S#
zL`=9-n;iXjd%(O(O6=a};@XXwAeJ9X819xZA~SyGn{)L8W_F9%@t5)=jkr8Kft*He
z^YAiO0+_>gP>eyn5T!sD{yv^R3!)2m`kq(mB^Y}?w$iGdjU=Nr93wE7J6Cf22;w=z
zkV}XYjmf#!I)gG8Q<@}F$H;B6dxd-T>B)`rkhx_PvT{3INA_pbDJ;a~B**cpGnjbU
z2??-gTd+7_HMF~mQ2WqGva&s3?>z4rPfZu@qpo}K0YIMLLt;pl@L1bAUI%cy7YOsY
zx2m*r*ap$?5PL{BH`@H?#L}X}A?`*|&<Xgp6p%ai7&_vqfx`u_;bHnRtxe>_2m?*5
z{T7m=MG13e<d_mUXgJJm#Hy@B1p^782zrPVtI{q{9uz}US*v>?{GAZKqnx(ejN{~l
zB#P9Vj&=R!pQx#w0q7BQJ<+>I>QRsJ;}}g^O_M{Y0^sZBK(h&1e$Y-o0T47;!v!fm
zF@^SY$7M`_pkLc`hKsqMvMsC>KaT*mC4du`V&^QH%=H-UtqXR|Q!{GX=d6}t39<PN
zDKNAr>M0T#W16eK%X^2Y;k>Xuoz7NI=~hNjM2o&DDNDYI%w{{bZTx7uGOl1d$38W_
zH8P%=7EOv=YH_uI_3SBX00|(CbU>B~Kh`6AMqYE?{!P`*wW^~m`ZMC=_V%|dmB!t)
zV}jy-Z{KOn>na6)@ItC3*;%>zYn}7aFt@Yu)<VkfEvlHcjB%fjOG^p<59N}>uN&D{
zZg=VNbk}=rB7^M&A&(4Fis+ysO4V)lITIVtjr7^Mz&V3`nFk!DH{Lo)0mn!~3im=O
z6z(qffId>Qn3pAW^)r0uSh6nl271)2WRULuSz^r*UfU*MKEL)4=*glX=?jl@ICIOQ
zXTLf7`#-{GHEX`=_fFmJga?jEYLp_%msND!=5?e)Zw=243=GuNWJ?)9JuO&#$8L#f
zCbQg_Xc+pKau!|Sor8a{-az0v2h{0yUMMT4_RNYn<$*wer{(26TyvJzw&`eF-B^5C
zT$X?t6wNkZ+ZEbSuFOo004v~aV(aQDj~63oWDZ!At~8J<AUM{!Jv*FV?y?O#3Hp=H
z_}|M{?EflXvHy?dt3T<C|Al<TO7N9a`}LInYE*wPz5LS)^Vgao$Dhbo{}Y4Y{8uyl
zH-jLC2YCt6K{y=`R=u#rm#yN?E_4cS4X2*b3c99{KR&@J{OxhVmVDrbk_PIm5IjBq
z=l0NcJ3F5-y3OXdy2RqRNaJO9()#Vvg=1<s1KI+_I?D#bU~mWI;ImdJ5UMuD%_M$q
zP=_8%<ljy>bwjnl3(34H{2Gak`(RCbKi2C>MzJM@e#FJ+FE)!*thx`Pv9Zw6<JMf_
zww>nkf;m8@!{eTJc0Naig2G$Z!7~xMRR}VqL-!~e6ts<2HwG$pn-+e57=s1)z#9&v
ziTz4q0ZOWUi~u!D^x(#yTvr!eftu%vcV6A-<zZL=pIgHX5MsLe84cqBp8;Ct+Mh?7
zkt{>)>|_z<XnL;~0KHCdW>rl8w!P+WQl6>@qCu3oni#&6ojWzL$%VuXLh2s_tR9AQ
z#SGBpMJ6hMo`#J{#SR}s;byctQS}t(D61T`9XGAbP_3e9O0k$rf2b>qtQ%i0cW=5G
z&=ncXm3kEtPD{2#?7qsnnL}+DPaBuNgv*mIN#hzXWRJ5y*oeX=g`i2Wp4*3qgX1k2
z2_RVmF@fy4gSF*R+Pq+kEM(bsAm@7;#e7C5L1!!Mp8UgTUzzuZH0YHB0_Kep)H~GZ
zb^JmxmCrK8xycM6o5w(n)s9ki!T#z7R8zaqo093<b)3#~ah#fKW5NFO$t^@S$Ms+<
z^W67sf{x~opP^W{^=&SnC>bpC`9$xv-#YSwf00`5KUNFO?WK1>Qz@B1wT(c2e=pVw
z<g_Cd>P#|P&Go(WJ<IvUyUyTnq=Bn3t5#uTHJGkdsVb~0Nai5I>cx~Jtt@#qa)xEe
z<s|FU-bB?#>hhw6X@m&6R;)AZgfeI#Uo(!q@^PQZBXh77HVRx1wrcVlB}4Y76pWaz
zHKpKv(C_v6`QS$41#~7=>9ll6q{FdQ-l)&?h6JM8oALB93i>mnC$1Kd#`J1;@1m<&
zRec>9WNgn49^&)P&k=A%#!bMgqDY+9ab7wqo1afjA}JI$8(zgC(tcI@6%#4jG<=XN
z>W0{>xM|_efTM41@}6W9o*#U7DNB#&kAd^d=BWs9)zpae<W^x{>CNR}cSnA;R6Cbz
z<onSUTi+h(2)Bx^(oDo27t*F+98hNZfkE1O5CKNk^w1lyizHO7yU$M+$qIU0#CHyJ
zKu9@n#O;<|0m&b|=)#snak}M7D@VkwqanBUy+}TM6$oa<FM~sxzajb!(E3Qk9O8Yp
zw%k${s`mKG>|N9Iw!AsP<!8OSn@(~)NIIk_O0U{N-j1^G%hWZ~o#y5xH<>~!HMT3I
ztR!73tjV+|2nr*FVbmyMnCv7DT8E{f^BJN00Ar6WKL2a4<oNH2$-lRq|A-<v{vQyN
zf3NWuiOIj%AODDm|J@YGM9=V7$;kPC7^p9+>D|?)*3}3p!s3xopqY<o8;?rw3r*c~
ztd`M;B7#ZSCTL$ax%vq2LmLD%P(a;l#3o+v<37Bf4_>}=j`>T8vuIkI5Xk^1_16WG
z`Nh_x(y(>a=-haALiB|;yte3Cdp#bLX`~|KG>X1PkP)t?rJ*HvnTFa}9YFuAjY`-A
zDqUy;wgmk;9SeNCnZh@LCI}`z3`$)~utQl#ThQZ)=rF;nOh7|&1=T1jO=S42jvrlk
z3-dtrD}lbeiP?ev`N;6WEpv9}1*D?rWMJVS^tWukUgHz$nRei`#Ny^usmMo^OHUb?
zVlW)PfWQfeMX*M}yuB76B8y(4S1i%+j@k;rrQ7dxm8OBT8J7xy-ugiecg_br7NJGf
z&G<?Q12YT913y#P;DF}|vzVkQu}^~y{0#@h9=GF0*b`C?lcR7L?wyr|nL7P@&m@+E
z&Vq((8lZu1%aDf*fNLQ#Gz$?t96l_g_Y)#8v#JX4mDf+(y=J;WDB%FGT0XJ)od*I1
zu8f+)<PiBJ4I&XxNEl-nSPQxr@~Lp0a&bHSMw8}yrvX}1=-Ow_lqH08jNTq3kPNI3
zKZ?&6q<!nC`UsG@Yg<3=z>erWM}Eq~@LuU5IBjH|gf9iMaT=p2s^t41pmi16!<5&!
zszmQ?24bFpr-dvEjANKGf-{eao-uGOL*9`z5KdgK!MgO`HI7dM=K_SUS;~I`T?=`_
z{Xhx<f!b}!OHdAB4bN;Jh0{TaR?ub}rUrZr?WAa5X~3KS?@!@kIB$S<UYW)UD#LRg
z?3nt-m2g&aN?J__EMaKLLGTm|$ppx1@Jk`fy(|iryi(Xu%~JX}wyE3Kxj)#5eS0Ih
zgeFq4`8xlSKW~Lu=n4k+?Z}zi7{xD0yj<7Hhs!II23(^ta!S;>jw*O-28;8DMf&;z
zi=rw#f%>A;`PDH%oS&=eK{~pCD42v0Gf#0Dg)^!Oba6iO{Dl!r8rInMTi#URg!XuE
z6o*&Uae@qd$63fnIWQN*J|DiC%u=cXTJn-L<ADsYvp}Yz&9s|9-UX}whkv`-2^Xf(
zQMb@Iz_CKofbN*iNcFg_&rY4^Pcg(Bf-uEuydq6XmS&xE)XvMdIz7`jIgq;&zXAUf
zvR!hyt<Mr~1fmA#u#VC1DkttCKlc&8-8%B$gj@f{LJT&6!N%wK9XB||Y@J#Gl^PSK
zH6Y#{6baViP9ZCneIYV-8?Kd`9rN0&{ppe7#|#-CXtIm)w6XI+lVgnQW?_>VNd+1~
zA~!k$5p)fP<Q=4Rwu@`MO(vxuQ4sso`(Uuaj65;QPg0^#AdqUzOz@S9fqy9%vjw6L
zTj_!;;sjeZw&Rd}ADLuO0a^kWBww;realQj0!+Jl)0!t;j?Z1;7iCSaSILIWMJWBq
zyC1lw=4monzk6F$Ndw|vjlMXvwXLGmc5q<R)jFYi=ViY+*`#>H+uz!>Bxs`1_4OsS
z*iq6J-B@jU9J*X)6goT_zHYWl?v*6*yZuC-Y4HJ`esX3C$-9?fw_u*MP_#PIlYzrM
z+O{nFn5p-cv((g||G?J@qES+V7_ctfee=X&Mw=?a+X5&j^4NfS#?+RpYJ4|%qp~>}
zb6$$3`~8@&qUOu(7y12XcBSEW>~vHu-__z7^+DT8?U#%)B+<-v2kM~JTZ(2RfyjN0
zVQR72z!S8P;pc;p{q!yXl*6_^iP`1&<KzF&m8`F=`Ty(<<M_vN&i_Wq`g@JPI57U_
z0RS9-d^G&~@Stb>>*poDhR44#4dmzn)Rbvsi{WVg1gL35e$$f5cd=NYG&F@yPYA<C
zmWx+Dm%k^f$R!-hzJKkXaMdwwayzp#eHgjf-RrT6cYJ-;BaGR<To1l+XW3?ZP=_uX
zwtSqu5e9O>_6^Hxrf?jzKe>JnX$3A?Iqn*U%xt$l%Go!Pv@c)D1Y<I>x^rkYua$-*
zaiC-q6L@ugHe)pM8~UEz1GomYBiDxDe!=|UWg?$qC|+I(7#=jiL*Hs2;*7C0LaD!L
z=HcHAH9nGrZF>lflf9;X1YnF}Z{jD%i6y5&2q;1Vfx03liEd6M;XkV7>%~vv<(}tZ
zR$)vMxNTHRQBQMIj<AIpyd*l@&de(A&0hf{pFMRs*TRGetAMX&3mLY6u1*}PsoMXm
z2_d&-3NKCbCww7uE|!7te1Uz;$$m5hOsAlo2Xypz6#`ILvwd7f$13`o8TY)#s}+nq
zn*eAT|8(J4*VvX91RNDSQ;?dJ7lASsjU)=!Dl?q^iA9a7<Gb08(F<PiCI_PGs-s7q
z_ca#`fGmC}Jew^DF2AItyuQ}t6C1vV$4JqfC8my~OX0A|o|Y-epZFco{#Eb9RA$3X
zce|5AYq1<F9(Ae$9weXKk!QqOqZP5AP{>Ov?Rcjfi+yvak<U%Q#k6!0ZT{m!+7c0U
zh}XKzvDZ1UcaC$pDGYV#Sdx`KJ43r<A9F)(RwveVJfou7K?db}<Y1of?#WoWtwmVe
z%gv9eVe&Z6{tnt`B~>M3=N6^E4TDhqllT-OLinHD@}a_41s`7B-3?BEnS_bP>knhm
z_%ld3hmTD375r9%>`HkOF%DKdE@AU5b}QiGxufwukg7!vTZ{ZH<iCM@y`=8M9#53T
z4(cph2=zUDsA5eWD1Dz*u^>-0w1vEmCCFc>DS)YalHK7$Fh!hr+N*^{OjCe7>emkp
zXjy}!o=_K^b#}Yjyt*@&_b1E)9Q*?>;iJgb1{G6ZCs?&Ox3g!l-RKU2z)p7Zy}n6+
zn(WuhS7Yn0+LTUDS~_?`o2sx-aeZ$M_}Sd?qoLApSIhdi3>#kHZ<fY}%EJ;F!9zcX
zc0;jY&oQ%)2mBq}2|LCO=S8NJt?}9OIqA<h$&xmGpI@{4HC_8Pk7&Yfy=nOMXTugQ
zxC!2LBj6zuRB&6qE{h7eMXkyRjDhDJvFLvn#~V2<qm2t2fWw!4z4%P=kJ~$T&|VB#
zx2G46;jI1e!pt0Ld_Jf(Q(g?OBZxAioFjbFv%|BZtW=wye=)&^G}H&j29=@L5EF`K
zQm$4OTYTPFYU1Hzg73*K7ySef0?4>B1cL2P2c61rQWqt6yFR_y;nU3r@BR~5{YN6;
zzvz;G=Ru+9{%}%~;~%Ry|En(fM@9ah<m~@{+JW&4K>yRb@b8_G`78ANFYYA{ppQkb
zvR++OBe=&;t07V-#L&8nuhc`jL+)r|VMLNtFAvYC<h9xPzkhKKV(N`aR(>GoJ!l+E
z8ILd_lM4~Wbgp<P@^LrJYBs>6x8&o7u><P;&4xX#?${>_)T;4gw$+ZW9@GX;4E~<l
zotj-xt~jU}VY&lqN@64DrJbxHo!@G$7BjP7H+r1-Qv2jQ_M(iMTDL?sxCt(fBT5??
zVn<6t-Sj9n=I-s2NQju*zCo|QJdbUfPU8ZYUYzj>B2ASQ2Nf;?PbaP058VE;KWy?n
znLo#Cq_#|H_nj>v88#-+>^D4jKRi-~1_vYQ)B#Fg2`f3_8f&zs>eWor5Zt&luPYZd
zGS_f)5xKl4Gjd$ankd=84okkHQ6KFc#TDeQ*McPMO@Y`X${=3cEqNr7=%)n-Vs9#!
z&&}Y#1#mZmt#Z$smLbcLI0}#_VfCH_IWe8Y=2Uj`!mXVL!*r7Q<&48JYUQY@3Zi<^
zY>uTN7dwiit}c4#q^U93*YY!w8$3M2dWwl*nG6JBmDmVez9zIxq(iRR*?OoR#K+i-
z^Cf{jmT-8FQx2jbtHD(F=higYFWI_l@}gPL>afY*TJ^N^b-DLp<u-`Z&u_n`k2=VW
z%u@)XKDGqIxP<#%$m^Ig1?CVHS)eT_7a2;+Bi@wG0mS2?C@$_1rnUT*IQQJ}HY_3u
zs~+54Wrb@L$sg&8(RZfU-&Q;YCz@-LJwZZOcA=82%@5VJ3vxGP;M_!1d$!#GdkBZN
zURq;avz|)`0o`X>JsW+oG%*)^^KX5vyi(V!v(;qvf2=$Vx+Z>O2mq~Tq(vSh3nEFd
z!}+**<G>4NnCCKd=bQQn#WvM<HsE|oHm9cL_QwQt+wjvYg!wEPgREUeQs97_6(bG}
zvgkD}LnZ5p!?&D~9|fE`o^w1u=jh*OTybN(ZATF06%XwnWn%@>^Iwd*G+q@CXygIF
z-c-89KT_FBSrkM<rACt}ND6rz*K@ZJa4s4Ma^F=hwmI<UN&S%H4BsAWe*&d@=%;CJ
z+d2^9V{fb@>A%)f3O|$V)ZG+)c@x8z+N6LbHE{0{e`|}#8i*6yJ=40zEXJ8cc{)2k
zgs;=)Ve|D{yPD<Gu)Xu<R1M=}rIN~c$ew_@Ma`C`(x$glx%MAX9Dq*#I^>%Nto@b6
zr@XRrc<=A$XV(ps1wD*S2sA|&pAnI>M)#rB?u8CMPXwn;vqMf{kGa-I8m%UOrQ0P&
z1eQ{@$riyDu}IuUGOF;i?}qAGmuXP!T9-xne0d&X6dFz3kS9L3?%{`%kwq_m&TwZ<
z<pA3+7CnjrjriY7oGdKcMEdH^dS#3cD+`xaFVCiJSMb)6^_jS2#piJdy9j{&0Uv=!
zY4l4%WGIQTrICie_l<^nBbh!(+i`6koaq}{Pe!caa<D^1K;~7MV1Is7CvlDQb&!*4
z2{?T$<A0x$WtKHwDv-}O%o_Q1>dw?x7%Bwjj2LH5l@?bKorxcJNDE6YZ3!=x^%z$3
z&6*Vh9U{DxEnQKwchfjvnIou`wsE=Ln*)&P)1gU#cNMlvVW&DqJmc=&hWuvSfC$-}
zi7nQra5x(e`Db{#=u6kr=PREZkIVZeFRmMu1F2-7c`T2#(<UK%(>nl_*BQ8&#i4=F
z4B9vRm3TZ*2>eZTqkMOk&ab>{YMgy$;7nF+V5;`_E&QtFRtM&U;=sPMBS?0p)91x-
zWb2`hUf3|u{6nF`tabn!)K(aVy@Q=QQo$|$zRt`qr)-Pr%+pm6@E+h({!i7{5Zh4&
zbk!{o8+hh))_j2n+*}FspG^DPPJZ3F(hD9BfZI~LNF2aPKPX;Owa>*5tESJxdeHLO
zMI_w&I2S!=jw=nOr{hZB%0Fxl_eXK%-mR>Tl6pYYVvWrJ=={j3cGl8}3cG|p!ASNE
zLH}i-G1C7r!t_rE+P}?-|HKphgJ%EB1C8-(8RKtnhd&tDIQ}RB{&S%HlRW<er~a3C
zB1ZZ@<B3>V|9Tv&s=CA1@~HRM6^&bkvIbos5`o$*ak6P<QL+n1EH*b&E<81V5>}Mb
zZA8uEyDk@a-y*|(*Q0=O&|ga)=-F96csPBkYQ<^oEARHqS>nuS<F$qon5BZ0!ZNgI
zJ|R{n90&9{C6$m+l!yAG%syZeY}Gb1uU%>wU==;sQ=~qa-cL^s!(fCf`WzV(6!ygP
z#9R&9I!iNPK0Gfkbfzkor&$`0bvU8Pm{7yCf*Gu`va3&4mX|plPReMK8*3!B)5|Vc
z7u3~$RvMWrvju4OM&O-dzk$H&Tt4169JdxVA9HzlMJ--UCI*?sxx$R%5!ZbZhfHS2
zFfl6T4ktzW$q~g<aD6$(*X2>b*NrKGMJIJSjPow^>Q<+H*20!}NJ8-q0z6|CF!|e+
zu&6U5QE}Leqx9kgSd=-$2-3UL2rW#Nsc+;g2o!RSelx^l*@QuSNEQZ+0i{F~4a#zT
zQ)X1l6*og_&lI6dC9Vwc{;?x3uRgiL8wo;6f-Ilx08#aSczdTPO}i~yH*DLsZQHhu
z4BNJC+s?3UGs8xP?TDSLxT@+ut=4M0?Q{2iH?zHW^O?Q((Ffaw*x}~d6;zvgBFG8N
z+mGxzYOl%Q?sJ-CkmO-Zr)D}RVfXBC!dgBZ)Q&mE?wm@RQ}h?VgW45h2Qc`j87K-q
zI?9S*8A^+SaFuL_Ign&246ti944aN55a}r?G>wI7am|%Kcj#xe;vlUkZ0d66HSbvY
zQ>*}`0k1(Bq45}g5Fc$u?OH2I`Z#`B6GsBz%IRWcBjB^0Vv&un|DWWWtpp^bUV4wq
z#P5`(^H15LLEBzI;uUxFeXZMPBx%RJAU!8OHJvW^ua<n;E=#HHOz5v3N1Clt0q&jF
zHksW*7&bGG1BhM0PD-&r=+W530+JO}I7prsY__)*hb?=mF@eQ*i#26oqp_r5uHCgI
z)KK-x{B4IJtVKoU0k!^t_)h$R=qw9JcMS0gs~-lo65DW2W5W$1#OSrg;h=@~^tWJf
ztKRmV4Jpc!`j|RB9#Lo6_@4co>s+sDa|8!Z_-;l-Dkvj7o=%v&7za(^z4Ey?=;sv1
zcidk;hsCw)HgP^TACf5NMmv(NGIkg(cm~@eU7$KlE~xRaO(XW^Fx?=VFuoLic7_&0
zv~0}RmYi#ETUJv}c5`21{m5uGt<W&mvs!euP_M3_5^rqb6SePGKPF#4K$<>OE8oBp
zFPUIr6Od1Vf5_&K7ne|6ZPUB{WUbtVAqPWcS2&!|Ju!CFH)l;`09LIPcdFahrZ?an
zZC-4pwpi&d!`vN^b#1eqQ2Jendu?Q7_wvfAsIL+v>ApidE~wj?X#1MKb|q!E@uG_5
z2p5=*IOe+%uYK+q=R`FPW_mc6oiP&0=+vT<Tka^pui%&fazFq3bMW_+NM%0TYc|+j
z7$KjAddaWmY9EZH{I`PAjD-RT(_|dEq|Pub-IIn9yL!tZN{=!u6e;xIA5r!fc&j?u
z6I+m!5p(SyAR6o3_7AsKAwDa`+mi1$ng*wEnC!TZY5Wg>TpUgSxBE*b_;KvSa1ND-
z??sQJMJ|3nzw8~5wxbsx`3ZUWCwhUlhKV8{5j&!i=PH(9RFuNbbDy?C^L3oCN+>Cr
zP><nC6!VT|oC#b@EfM{QW#a=8GU3j6i3i&vq`nQ{VshIPZ0cLNJa1NM%$Jw6OZAX?
zPHU1l*=gbT>^78fYnc;D;(f2k<CR>Z!stX1Vn}4c=s+lWe9Z?XbRBg?4M`d$a8VhK
z#7aQi5EauC$pA?my8F8!o}|dG_M|TGn-*HSN<Rv!f~{^S8^|{kC233wo9H`9g$XjO
zG+)93a)$y(+4+!6PzBF!gYU=2NXNMN#D+?>n3E%M{F>ZwvrL6ZJ-pX+AjaW$N-J<;
zl-#|WI0Sf#Nl=oZ<6=LEEwJMNc1zDT4aebK>{e_Cjde>9DcfbWv7QRSbVjxZ7(aG#
zZCP^()}|k9gqt?CeT;rOq!=iMDzpH%vBpCvv=G{-wOs+k))cr=$zU1^*|2my_`|vD
zt#xQ}f9YeyK0S<ObH=lK8lPT4$f4CHVhlO1rCaVvW$<7nZu_p3VE`Or)7M;aZ9+nh
zEY8$%Xi%^me`1=^!fzXbz3N^|b)G=iLqbxt40@fV=e-6Bm9CnoYdT-uBo>~k^svY>
zgRzYvhxFTh+*?Vnal_s3La{EF9d{7A!}W^f+3H$Yg!668#cOsZ%G+Dq1DCKyM{D#a
zPl~4A%D0Ie{3^<;#rp(zf#o;;iwpXH)#d*6-uo{XG!w%=tIPe*3;JKr_@BDmUtZAv
zv@XZQ@E5uq6Z0P}@E?4Ac56sG?Mop2S^H`~B`JbYO`e|-8#9ctk=Zu}T<C?%?G-QB
z(hM9PFXHui&E7jj6HvCy+nv@epsHr3#@913v0!?)x9{nW_B7D5!7rUVgX6b`%~9*d
zRu9fQ3Y*<z@+nX4F<vFN>IQt?d;nKn_#td2bg3POJ1S*)q47&g4enhIJ-buP+8xDs
z26+4;rK&ncrxxh_XYu2Dxts90><DXuJ`?8b0#_NX#dVAXt(pheR({P|_DpZ0{%l9=
z4zv$_alj&UP@id8Ew}Iv6<jAPN_}CiUD6SPo_WcX?SwP<hL!t|#Z=L{#mi@0Y8*Hq
z^WAJ?<JrbbLxi`2o8r!92;^nRP~juXvDsJTE`u20^N3K>22)`h<AUH%I(FY=QB@v7
ztXQjQ<_Kr4+W2Vn{Qz0vRjh^zy8*QeOTryN(S|C6pcAd$jo4YZlbgE?)H9_C-zb`E
zO%}yXoFN?~WSiYP3Y!64vw_|%wtoGxt!FsNF;-pF#w)E~eoqoi(5kSWn}FKl-z}=W
zhvH8*TFlfYjwU$SmKo#uzLb?R7*XWHNSFB~_5tn$ADy^sUAV9~szo!#U37=|#f2*k
zZ4?Q03rv6J9ksKfOvM=Cf^&j-XRR)7cy`_r&FfNN43G2Db_lV8L&gPdiChA0ju{w^
z%U2T#6r(@Jz%r05idkHTvga!)s_?Sg+e)bf!iMkP=_&zVkK4O@&Ot7+m`NzZ;I>)x
zBWP8{XV>1TgdA%Zu{&JH9E}Hv{KqrAeE052%m`4cjHv`1Z8pvp<n8G^aldsv3WF|`
zhr)PwFrPHJhrMo^A-Nhej>xDd%wtyD$ls?(#QTQHQcB`-$QFgZ-Xjl|ybc9SReHxB
ztOt8~39q`XVP|@q)7O^`S0TMrC<gGGT^gu<#LR5{&SjVR=2#yEvr!*?nE%n4;q3_f
z1Iy}rUFBJv_7f(@(Q~+m7?5F;NdnalUmrW`&PEL@Dgssv{#(AGdkJ}nOxE!5fNa&k
zPo(-z{HrF$r_Q69DYTL1N7+z3ft<n5_s?ew92>U6x?oSx&XE(1%S@rC63EHSa}Jc&
zZMFMQ%DUf7qcL6_oR^;G26HIqGRN&q3^jc}+V@KW5+JL^d*B!DWHs{I<Q#z<octeI
z%eaQ4l+@nxcj@Thnx|Sp%@bvZco%KDy^hSZ9dfwSBub7N0IpDBH@c2<0nWX82ocNa
zU)K@Zf0Q;$WRwCJZ<Y<44Sv+UUTLnW58K9A7;a2hS0Opt2#(I~#P$Ypvt9H~0!KM0
zdhwLocCY3Trn&84YN#6ih77}%rjALLYh`#;SRT+fbD7XZh-r5;j-Q}RAfPZ2QPwsM
z8LBPMx+3KMmct$jm_jYc>RLE3uq`vDzES;fJ+Gs$Cx_xi@}D_W&4e-3I+q;yk!fXP
zG2BTobeUmmKJ7oM$x9$^<X_b{@@G2^b95nl0n3XEWc%oiQN>i-*&Gax9G!BtV;`eL
zNopfL*>1ix$J1tfD$ebk()732&=$j?J4K=Z!e-l^zhL3?lH_iGe*k!thBQhf*A;bt
zS4FQsA6lG-u8k6kKB3ctTuL=5S=At0QmT5E5ktu)i=KjpwpQ){003!B(r1}k4U_r%
zAr3w?m9zz;$7=n{<<S*){;j=)?uJzUuY9Hlj>xl?_DZ2M#9RG5d&L-o-f35uLaCLO
zik20G^#a-<0eYPboXU}c_&ZgI$2BD7q>^kM!885%G4q1*-e(odkm?>n4mr&XXerig
zc`;`7(M9B$Ylu)tO<ygK_P&F_^4{MFC8Ya>bXiVpob9Ef-n114_}VHp8(6r211kW^
znWrDv87Of{8y53tU=P+p;5ho^dEBuF8bz-lDyvLY&p)}ss2Q{0P;_O(?MbcD;P3J_
z<xCi2`@b0CY;BPXHb<0G(+7)(-RP?4qmw;<-eP1kMoeLt+@CsT4Bdy&e6j2YfZyYs
zlVh?M7X1oRs6XJpI(gA9H{nt5=O)^gFN&DJXw}YBzMrRwAcN-F1=@%-J2<<e%G^5r
zKzgD@&X_X7<5*$oh(fXeXN^cn^ASwfn2&%>{|<*Wq1ENOZT{GimC+h${ke^)ghE$j
zIkdq85f>Z+wyMaKMWZsvx_}`q#?!GYCe&k&>hv?Dniz||jK#)-d58W)!m*3MoM#7Z
z$ek~MNGrOmC|tJlHzaN5_%}`J_jp-^*~-1H*!HCbS4uOP$lQAVuHO6-5~kSUNyflr
z$>GT89!D-|G;WauqC`}zi7nBACCmPq$_Wy|N@4iGE>&h!v~diw&r%THv_(h-0ojR-
zE0XQ$nnh|U6~xXpc7J&RvopCH1S66F5qyV{HPI~E?wbv#r5xmVRZhLHGyA{}>_IPW
zm^*52A!q)LQ#sHKD*Od;qM#{BkSG5MKup>_qybECI^f*Un~?|P&QP_Q2>B!kctCAJ
z7Dh(9)))-jz8@jxaK;Nt40)9PTzT*c3s@-QfSQ30(@DF`kQ0aukk6OiSwpPuq68e&
z#Yc&uRl|d0d-&<8Jw|6woHKb6C%Az}p2)3?-f~Zz(5S@)M)Yh5&#_E=fqJ1oJSo_%
z3<icFfdb-X%MleCLO!VDFQ*Uex&1L_zEifo?N($Z<}}V3Joi@;{|s47@`-H{OFY1N
zf<N`JA~P<dD}5wJs8YF?U13S_FDlzI#3Q@bJcv}}gQ@oxv7M5SC*e&Mh|P-dMIpbN
zeqoX+wP{_<Lq*<&*mL!uIvKhGZJ%pdj1pbA!{Ff!nLV;CAOZdkbQnNVxGJ2<fhL~%
zV96LKQ97GX*^EoH#OQl(AxXBA*4cSx+>u8d{Sc({p}Wb<Ax#U_CiHfx_dE4cD&I+>
zgLfx|0eXmA624G;puO^&)XHqJ^EGnZ_KDmTw^>|LK;Cl3zbhZ$PQjj5!LKQ+sah;8
zsC4p}KQ})&s)C+2_RYHE7SGGP!{OvnFN?btm^}SS&OCFN6utAZ_#(L0Jj^tEXOz}l
zVzJ}BBKewCc8=K}Bd1K+`a$E9>X4D+eJ89Tc<2@g6D90H^U0!FLG{`*mN#2pX+vnU
z)s+=4xh?qkW!{BEC)dlukkmDr%Y091nzoGY<q72+)c4lvOI<^!_A16b;M>cN^Fmj`
zaRD19?8>zp$Bj=m9`+3s!F+N07XbRdS|0z(a{moL|5?l9uK@Iaw><tXfcZ~WjWIF)
zh5f<A_9w~y4+3cOpJw<CHl#lzj&li>Sp7p$@H^QR?p8|UYK^&DOQ{FIq5Bdv_XY9E
zqe=R`TNVIBq!XQVb@aptvsWXlTl&Vn?rk2AY}!XO@*<6%?ph8h4av~$QU}Qn1+Tvi
z-}&C2xsnv!bnJ>{iUxkJjTQ16)voaTXkFsJ+AGqrb6-kh>3=rpWHaX6-IZvP-54-%
zvyN))ziQNl)?nP+x5vZOVs#$HD@An$bFta$EX=Vl_v9JaY4~l=-TH!<If^TL-K~)I
z7#5bNhFz;sYXS#5<5&~2d|kgC&hpzcUKRrJ*OtS^Xeri(ct~Rli&pdC8h*D5@x)v+
za17>!kYvjqwjY-AGOFwKjkegMB)CO4m}FCS%V5y&X$Jysxa%17iuGoE`)Vw)&iHAW
z`z1p!bM=OmDjudPr;C)5$&coz1F*OR$}=u^>@t#NJkX)IiuyT3abxjbvlodN{<tHC
zL`3Uv;<0Q(y@5n-9pCT!8hwf06l@>3%+)1DPv+39(;O3et6nF0Wo+&=+i`zDGpNN&
zEz#mgz5*iGH|8rPtxYKbXzwnCjX4<*g&j=x{#}QSN|17`_kGN|?Z94u)M6=+H&`4>
zPy%W5Ckezs8M?$%Tf6m~<_m$zwoDIf8pW!ZT^eL(?p>7%Zi1XC=bE*d*Wv1tdZHlh
zNQ|0HN{b=LnrtrTKlRFe(~A?U(Aq(HCkB+6H}KR}x<D)~KflR&sxH7;@Zbuu4fxFy
z_geMltdb~8Lj>r9<o2%is#Jm|quk*t&vf(^X^*1MA9R{ES)vF-Nr^5#8@wxjC!(rO
z_u<mBPo*#PtJR^g1;0<U>8#n!-)N1lPj6w1{34I)d=xW9(6*kU#9b<&28(Yk1?<$%
z?L_paOBgYVy&&jMWWxgShj?jT*Rd@I$bqVjKJG7}E-7TcOw1-SZ;<=UKzP#n>C$9?
zSEEUk40DXx#cXs6p_Tv;$|nLWJk#TBKcYzm5L6a~E}sG^-KHRz0(vS1hewQj)<E5h
z*GV-_lndypil^^1nH@o*4%i9cgxLMd*2e<uMA;$mR$^Eah3Jjhw@h(Sli7xmVVQKg
z-K+2;&?b5Zmo=)E6GvRjF6@c)Qjx<Pjgw@dcH2L+L)e>7x$psL2B7tP8qf*YpJ1Nr
z&0Jd@pSRQ)6{#oEWyx@REtNNB6A;F`MJR%SRU_tVd;hI>t0+<)cU{JwzL-l{hZFoa
zxXg2lv2>=<wZMs%79$-gpB?KIi#*-#MpC_C;yj4oDG{H}J@y>nv()MCo#)(4<8DVC
zBNv58Sj@PVm<W6}ql|2h&1*C)=+Z>~r9MRwylXocJJT@MA7@1|gcEYrTAIYcqH#iz
zq7#BSa)t=KiDkFG64&ppaN58S54TJ~NBrnSm_Rp{ciL4g-oUC07$5faEYpGSicz_M
zOWQi$q42h)q=D9@qZ@@Q2g7AqW5!g08N@nO?D|8Hw8l#vjoj894BZMLD(2!HK(JJj
zgobpYZqJ{2+KI0}VBcI(C~#s-EBNRD>v4;AXjBAv5rJ>hmd(a(2hNm#n?0<9s`7S*
zpsowSKPo+f2gDisUG(9-$NKCrL1X`QFTPG?LMhxbO-81~bAY`yeeZy$qw^axY$*_b
zKkx*qf-qK_VwwH{@T{cea7vaM=60zco*NIh5O#o+SCKDUqyY>KpXMwGVwJ^knJD0i
z%_(3o1i!a9oe=L=@tJP4C3o)#H&MK>yfAH5=&xPA)RR0og32q4Z&i}gZ*C+XDnF-F
zY8X7uIQKw-sUw%l5`tZM|MJCCbmys-^NQ2TOyQjziJ9v1Ak2wn*q12GVx2-Oq`A~v
zo_uGFX(TFAmir;;pfP4{r2ROJ(U~$`LoxBvbZ?Mo$KzYb;Jre)4<A?uG<xcy^us$s
z@6m*s@%r0y5^KY|>R4D<1ys!^m1s@ibXTqJfovcuJ*y-IYIv5LaIbC!?icn_XQ%2>
z?T+H#5rM;95RK%-&a`mQ=;DH*pr>%7gB2^V0HEj=J>d2JGU7Os$SILleMs?gFUjDf
zmJh_?PaZTImqh3*NacD2D>0N$8+Uz?ppoO6IMltZqWDWl20&}RO1H-5%Bb7ExLfdg
zhU%+h`u0F`6yN^wr8E(={MkJODzTA@2m*tSh`iU*=kIeQg@7@y2Y}A~sH+NFUSk}2
z1qoLXzSO^I+^#@2IM*qT70m5&<kFppE(-bvc_~JL)UR?34r55PAJGk60J+pqCeuHP
zVmp%iP{HB7pg-d9^l@oFJ29U}j+VF+>zn3kfcCwxM0edjF-5uE`+K3)1V4uo8>_}S
z42jTQNx+2KytRGAYLms})pRT_eqSX}Xkw|xYGO{hjkT=o1?Xsc4bTS`lsuEN-^rY*
z%Hz%1>z(5l+)Q?NYi4N{Uan;%IfPD+E`Gj<Q&c31?zPyC32Kz&%57W`z&&sSzV*kr
z1PmJ1D{+SKwd%LYS;*%tt#6%mp^0c}>%W|%U^p26OahvjdrNBpwdYEboeu;`biOL8
z)-A0GZF0t0St{L;)uWU@?@`_lu}<=SeH3HPkzyqEpD?_dlE$mL1wx+rq*9mQW=%2e
zx4W*`%5Ga}phIt#5rn9?x03+IY)8A>vU-d~FvK(il)(5N5I0}cUcy&Q;pzKwI_nuf
zcf9E+%*SJv%L}2TX(X);uq3(7{xFD)<NGz04rY#|e{8XGiPRAKftni~+E}kT=;z^P
z-<)Temgng>-AKYM%~0ygMvwN+&d;~G8*m$0=Z@DzqI?D=<&t{rsLI0bx83!PP}jnK
z`@1YFJwW#1HzuFah|})Dbc_j(^WDzlbZ6GifNxg)o>}7o{EL2I`=jGHllSg@6HTYx
zd8Mv9e`2I0u9q^sE`k6;9h?&>o7QaS&4Iz2a<hQ0=;||hBKR->04OuO!G|obGYe$F
z-LJZQnu8ZCG2Dybv3-3m6fH~JYf;AeMQ_zpN`jCZGeY98Z_Ic4P$`%>XZh=$1-|c6
z^$2eFRH-t0NG2yh5&Lt#Gzb#UORM1?%*kU08vcDqGGoqwW)vtR#`WnGj;Hkat@DL1
zWC<ul+@Pa@<$aZ`<WoOVQd#dt$i|xsXgX=(X13nyvkg!Hz;NEB@~^qn_`N&{^U6}B
z%j<R$umot_0w6H7vzom@(v|2jBkNy3oFal~e3wcDFDnqR%4gSr(3)mtguQ3`7<^$u
z1|-pOnlcj5)*I&(7#*Zn#uPtzxDQ@Xzlx0ZY}6Q0&Gna1cQNi2{9=48M-+&H$+6Nz
zrgqPl8!j%nrFA>So8^}kc)|F(P5}^nOvzr^y#P$)YVAJ#glgRZ5Skw*DV_IhaPawn
zevYOI|Kc@tIZNJC5Ate%nadrcfq$$#PBSutxtb;Sls2b>M}pLelQ{;Tb_PW`JbTT0
zqa-t(To9xh3k=|QS$3U=zFU0npf0?1p%}l7(V&(AcaGw^*Zj>tzpaD#KXIG!e>Y_R
zg<Ss|ZvWpKvP=wrZOHz8!sst?`;YefAC2gLesd5o{f(^uHWT&dLz(_y`QQHhV-7Ck
z-@i5fEt15<%KQ(9HM=#n|AaNsd{^rb(4d2XWXx*29;RI`tOH4=*SAFjS_CK~Qrikd
zXhlaH{62FhVMJGyGHqdd!?U5yXCArHef+pRJV>Wmq8c@Z7dJX9SS*tzO3ET6h$^bH
zx9R+#e9@RPJ{{kmj#8w+vd(BTpw{pC?97-nrhY=LG$~B7%$eUT5h(}_eYkMFa3Chg
zDxLRy*`i@t2Hk(sB=`4hpfo9vIw;syA<1oZ7|u+Be%YE)!5*Vl^SyN6$YE<07i<4C
z?cTayC)&B2#H~J54FSgfd0u*DVARY<vjUsQ1<UJEkgRA{LqxT~df~spYQ4ROI}O(h
z^MlMXj+(9f`Xz(ja58aB>sChjr*6}*+X02Bqt<blZ!2>OC~b{s)7*%redo+=u>93c
z%kfEA*Dxs8Z=lvyneke|09t4>VfQ!9IJZ9Ba*@SuD-#iHBN97w<`=AAQ5vemRS-F)
z!Wm)?Z_{KBtdsls=}ByN$AGHVKq>y37$tJ)qGZGw;noIdnpir7^7{Up8XS1LB`*tT
zBr@*g#1#@tW2!WgX<Ml@NJr7wKhPM?AzL=NZTA1HK#&GS8)sO@{k)?pPoWu9=19C4
z&T^xfUdVy3a~n=9;hjadsLpc-Q5o=mfGCP$m+0#xPkz&8fVLM(ZIg4!2jw#QAt%Ap
zoS>M2C9#PS|AJl`S6xIHL_%2So*4pY60M^pwr(Lm`qg8Nem?qaiA*Zw0Xs;hBD~cs
zr)ELRNm*lWYcIkiH8y79C?7AIXgW)sb6;7h81Y<vsvmIJ+iRbzdan~3DC{f|L}ceV
zeV@ehuzN*{U>j-Xw+Ufg%$)JbN?lJB4>HQeJ6sl_R1|6tGv?Ey<B2Y)jOMSkH6y6E
zcn9-N+*K`M8HH}~2{Z>U4l!$bWxn1*d2*T-?#`iXw}lBTKTHqMO6<xezXB0z2L-On
zp361hiB=m;?BW{V1gxGb@jW;F6;0Vqg*I$fYRWL`J{rt|Gs-l;(Mah9av)+7pQg8>
zHnwXNldAt@Sg>7#8DTq@I8iu|AT$6IXjq4`HXlZ+;is$a#*<~Ybq8M_!mYQxWRh6E
zQcLy3(|+>Oe|l`;h4bvF(l#BqDuJU5G$Im!s();P3Tk)u#OuK(NN;#!vD(#IhThT`
zwG>Pn9Q7VgqHwPk>ErQOPye1y(X@*nqFwXEia*$p3V?p>mW!bP0seTS!LfO`5z<70
za*l2%3)g#Q3%&<!H~o`v2W|@}mD|-72q3nKOQW$IeT$*-#H3sv%TzwSKu(nae$I6W
zW|2lJIc9Y33GZWNeV3n4*&_12)H(|9F^mT*x}P3BUcLsRdEChG7dEC;2~})UCSX*>
zn`>Fr_t+WJ{)&B%$L3k}_~G2y!mjb+`DPAD(5yx1p{#@bT=pW-?O7jLOFvM2<#f*8
z9l7=R&-GDPtnNE?MYwfUTKOPDuTkQ+Sn_Ow^Nzc-q5h6>`rD^j)4cU%J%>)J=i{xX
zikVPyf(xTY<_U>N)!F^Cv2(rNd9m(4<FFXfd<U}<Ugezi@{#>&xhlBZDaGK+!}&Jh
zvZq&Kkfo_Q_6S+giF^fR&#+Zz0pfM^bT_%<N0%V7LNZ570>eoW99fwn;+m;vXGYAg
z*N0{LL(ZIti>=6j0T@cLUKrsLX7MQ2WL$~67QQ;Nwq)NI@JotF+Qo15xxgc|{gMcn
zp~XIN!y6Refe&0#B|HrN`<ZU0%YmWzlFQ)~sCt5K6g`)LhD<7&IHqDT^9zKl%$cEb
z#nQ8hNd+i{-4YKBHiC<%K>=7xTsOY22bYhp%cN7;vjoqbpR12Yu(cEqCg@t~x(BYS
z7#_GA<}=b;KE(7}hk0*Q@X`Qj6KEcJY|r^T_H*86AFn^a==vN=N(vk80mrT{geP#C
zRXlM7eq*7VU<~%ivipJA_8zwh6buwEq(3CPB2g3$3vi>2`3kFAA$5&jT<)AEp>re<
zvAi<5YThg*PO^D#t<d_dqSz7-<c|IhRswyp+f?Cf7YOaEdbXlj&<u;MOn_^BE#*jU
zzs_m&mg|f2VZY9TEe}a}(<PG1KpeA~8_Y-6knRJyi6~QnFaI`Q)XL_lDfwmDwoJqd
zTw_Y)4hqCdWX8G+ZLV{bgWuC_2=Yv6e<kr_7W$IQjlAZ*fXZXKY9fJ2O?6BB5)HTT
z7RXK$y>`f*F2V@0Vo9BuRsfcQ2tH%wU=j)7tB0tK47dV-A7XIVy9Xm0aStTMZ}MKj
zUYvt%)ICK>oK1ELnW#|+jj{@b+=Ero`jDY2c>kD~a`kAR?oy3x4@)#79X9x39mSf)
zCo<+M(2G)(e$&5F?qklJ4NBmYnCyoOXC<*&*u)4TTVu(+jU4R|UPVq`oU(?xr-3hz
z^(ZWXr%JctrhWTzzGu*U0U*1?h3k@!G@%49ukUxgg_TO4(FypghLE*OC0TsJ+@Q)N
z)p@2iLQpG-tSBjN?D(R>k7dVMW|MTt`cFi`%a6?6&m&pgBk)%R<HcC)EV;y+4+SK>
zKGHlL=)MG&1#E1U4FzjD-rbHq_i03<JuSvOb2e8C7)$`xhRDk6_W+ArU268>S|1Q%
zG#)CxgTzk~2I?FbUFdN0BLUhbmj)!gsz3G7FWvV6k&RFZxOapaACD5~@=}1;D+hir
zWZp6nKNUAumFQn+3^t888~67%#f|$7Kb}kCB*bAgX1GyF>VIAD`mPpzCIpu~z)Jom
zUfB52@X|5x6{j}q(fa!dqn0T=7c2@DHSdl9w`3iz&>Uul&9)emmeRyXzhK+?Ep~wE
zLVK;vRf1n~o?qH#U{1QhRs&@9dM0a`G^NJkXn7}lk%LO^rvno+7YHr!qPP+3?8!7#
zO*jNC+%O%^0$0}LR6Za`(17CN5p4(qNAOpgM$OrIea)bvFldA&Ai5DK#5wfFg6_T{
z=CxBq00wgl&6T6jk3-sK5$L`_PYtX=7E`mEVy#h0H{~xeYg&(SRz?Q|d@O<bo3Bvi
zWoEs7oS-xg-Z05Xed!rUBiqzINBXEDUW!$jJ|?u+;q~O7^)w9Iu<tT$N86JlgXnTk
zcvnpdJjL7det6jUtG)+sMhb)N90IMXFpjbQ;D<l2-22Y#AN$;zt;%3Oz`+Yn!r9iz
zuIX<Pd+oeJ7(dHIySU~Ah8POvpEzL;rA2-t%Z*(d*13)Y&bqg;`TuZf!dcQ(m`wU`
zK%dwFLpkQAzuaRA0)?RC8kx#=bh|2)4&jpoVe`;t2bTN+Dd?~jM)wA;0?zAb<M@4D
zoO&D_$T>VmDFMFaEFGZO;fa|0$?q#LviN<#o&v@fMc5(mh+jfk7R7e2oA?d5?9HwF
z7r^}YD)C<@82<$;|0^&v{@X0m|3!k4>0i$Hp8<*g6r%qt8UH;<{|6-hV_eMi_m6`A
z;9|Cac!kik)*r2U1hMD3&fqoPzm}AT-T;iVctWX~s-kenwPgZ)5<DD4QiMPdINxox
zm+v#ZKS<{XsTKRtBv3ZypK|}6tFMj*dfVEbKXgnJ)ud9=l=Ucsg|1!kFa?Dzoig@o
z`uE9cPQ2^a<aCyu9woPyjGHT&#dPcFbi?H_bd653?x3o90us^Q$>u4e)jmne1pjmE
z>i`8}H`Vnq6V)*^X3a75k<8D*_rhPvUg>MQ8c18VQM@}Y8}(h3?j-Q+otf7Q<w2|)
zoBRbJ`qCJi_^~&w2Y_=kDu%6WW&z}Cnj8q4XVxw84CP3lztk9o#NM###!0J49L%aQ
zHHR}#$rseI*)@PmcJh6YQB!c`Q)%^@AZS%*Q(|mAc%I>#ats<Pu<_1*^wdU@&Zv3}
zg7xWk)bv{3>jnhQpb55xBs-+Kt5{dQ@$#goyRUJ*+2rmL_DN*)K0ht3`=<aRw!WYx
z=jff7+e&j0_<E}b^19GdZe5&E4Jr=|7rXyTc^J8K(|ftGd_{h_81!_iwqNyfFIY@y
zv@iwOA3RAZWqb+8&Piho-!~e5%eRch?xBD7zRbjlD<5vfQAhxbMXz4GeLy6i^!%<@
zV~bIyPNY|)mPA&gPPs#Z5w*@~3DROi6{JlXKmAPTo;QhH8fY-pRgEU*nO*gE%$HO@
z4iCC>8?oilH(3y6-%Y?@gKC2$Lad{Y{PdeA0dZc-a5yQsZBr&$+Q4#~<&G<44eYrE
z+kO*lv~3m9?-RI%WKi@&Av-%6JOsroK8K=b0|bKg;t-H%%#Rfx;-XO7bQ$(#jf@AO
zc8-YLFH+~Wv#c@-izEiBdZz?pm*y%v0ZMOK!5%V8gH43uYzd3(5uH{$<lKer%+B85
z{w}nrB}B--sNY(4V^@FaN*~88N8z^Gq;cSq%Vusmy869ZmFI`pw49RO-Hy~Sqr=o0
zf=`sHS!&ivjcPvAe$(0UHoFWz7+No#IdF-71w7KyAlcs+)nGx-u=ghr785Q@w3H8!
z8IoOHO|f>_YsOveVBLE$u^xuN0vY0v?*00f$GFp7L%0=xEkSN<1-OcQvPV<VfBi-Q
zof}N4KBznCL~n`V)4Ctf2(Nv*H|;<Y8ok@r@58a{;!EsnjjQJ{*(;p7_k8l+g0-#d
zNK*ZZ&g&AUw~6wQh;~54|7)c<Kb=Y}m|*modOD)FZ4^IJ8Lj~!M5!<cwd(>yg@6!6
zoTY@Mgl)>o_kt%?Fg#Spwn*Ix0`RoBt+8#=Ev!<&%Ri|%X+3)%b-~X%8>EX2lOyXL
zCH+j}M;TrJa%sdnOPjAX{v2skN&{t|OMLWP<%m72((pQI&_}dd@b51fbzo_gJChE&
zH(2}xMnwZuX2b@)x{boB)oT%=4yz~llnjkF>j}#hQ^gvC6drgTtq~IJns=x!T4TCj
zcQ%6p<X^xEKC?ybd9Vf?38*?MkQuMC-+}uH;rc}o?$qdh<Oz5ZOK?EqNI+-mW3(lw
zmW(~fJl4Z=N5Pu6H?(h>ctkWXOIBT(78&Z$_*_hw&^fZW)*c{srf=izB+r~BV*6rz
zTF$dWqez!TX9A-j$Wx^IL^ar?Xw)w9I!deej9ujWiCU%59QDDw3r7J_dt)79Zu%kn
zz+rQ8?l!F!Aug+T@`WuM0gX@G;9$Z=vI;8;O70c%hbZXmqq+ot$|DY&esH#5N5SIs
z*>M~$`pA2QKMOMk`8gC4Ikr>g#^9NI<8UFTEp{zB4iU=+K42VnU{ge2o{^|UwF*n3
zW5^x{xosrC&aGi|WAjTs%8fF6p!(YginvN^FqzaAo~37T&xX<*F8NSM^4tZjEiMJZ
ziG+gv@xaK*lDvip4&^E5!fM*0uTiL4`tv0{%@p$Iy9Jr$-<Wuzpmq<VlT;B)8BF(s
zhC1)zgKJY)Q@LgORNITWkk!~l-G-Wey@L*K6^e60vNLW3ARRNQ`07p_K9kF26aYOK
z<SuzLy;X&Mr%sfpqIT7vOek>D-74yH_tgE6Iv;xGcX!iVk?lQe1SW#P`Hc7kjDxG_
z?RskN8?4PY{`02qJ@D3sex-wi_9dxT6WvDA!Bt!7^YnMh=X6M%gE)wfH~Of-x7G~j
zP!#j+(Xw;$-s0tMC0lNcs{F+<FBI3knfudm4)Waz=GP#^4A<$Pi=Py(QR}aJ_iY#0
zT5<v98uLSi^L{XQ{ug>vGA0<ASE>o+iPzmNy-i65u|c}SMIqyQLYyQt{5k~MKH`Kp
z79^f>PRELZInovB6hik1H$=9Y<LVV0FXV(0a%^5Dgg}!C-_W<SZ{1JX2Kr1M5R2t1
zJcuqknUZ+e3a5vjJNTY2@pl<6VDV$Js04H?19a$wSnhlT89y4K;?0mR1y%cvI0qRt
z$!v8zJF!cWU9(M|eac2)9r>K#lN$Ld)g!<J6AjgQ)+NOY2EDn6!QlKD)TQ#4-_mV`
znrMPSvDCy!4co6_rxFEb0s+qji5-wEP+1vm6HZngTe#_41peT;q1<)Cx5K16mbxeG
z08ZIz<N_xl&6sm<C{WilpNr0L(QFQxnI<h5QLZbT4C^D7g^&4tnkTz5<~OVbDc(#u
z=%2B1V^ALg6bZ7XIq_G>ipYiq3TWet5$o444vGaAk+PXN>5qL^`N)_XQ>T=(kOj`w
zvx|vCk~}`u^q&empI2AK4Qt9m7b!~33Rn86?)N^*jvL)&rmN)LW2*fmi+&j%BTKj9
zD&2E|*Zcy`xy*RwN+*k0FD18_LvAs@6?dYjo0-)DaZe2}D-W=0Yw~Eji?`{H8+98s
z$RwGlP_y|AO~qhJ0ugnncGpTzc0X_5FCv>%0HLSzoUh;uQbL7IiX8`YUX7XGvRnKq
zP(Q1l^aD<Bd*(WyEk~ev9I9Nk@hiYiYW2$>mrkt_N;w}d@GLPyV;g5{fR7%!CtHqP
zp4+PV?m~ragYZXF-%|5W(-jd7OT-Kjc2|l0@{N!mSx4t;4skr2O6*);=F4zfA1Vr<
z)$_l}iNE=BK_x@r2vRaBN%yBXK8FPxcN`eE?`R~b!cVlu_PRHXxsztO062pu%aZ6X
zUc$ZMWN05F{OzK2w_dIZVN$=m4h=VFedioXRv6tk@+b-)@lnfW#!9YjUxqYV4#7CK
z?+YEU<HA>?`mkptgXD}zY5ipYjFsLXUt)Ib8P{(CJrDY}Ex*-%f+N4)^ECwx<^C!|
zX0U#701SY}fX0p^t)6(=Ln}vHOO`uA?;izwF-hAqUa;h>EnMZ6a(VCr+~j%aZtY9I
z{bJcT5=LKeT-H^j&k!{Jvka*E$D0}xjQRoHOzB1oPqtGLGwfDZA^oW2rsNv^6`b&s
zL49u9u?&_*-u@_5%J2+e#3;BjV*D+CZU||@U$FDvOTK^2&i{g*|BaphZNl~cik<&H
z{`;TPKmRY-`EOC^f2Z_+XJ>{#?Ea7DJpKfY5B}sl&eh8u3oD7h?EKqJyUv$n@RYM&
zQV#{Be-5#VQjwU(-JiE&!zvWpc$&G6kOu-lIQxA*M%mS(?dUo-Pc2MAG<9`oIvy!a
zhUjRSDbum&>)Cuue3@+4esy?0Z<W*+P5YXpO<li|>Psf@RIf;Fh^*Ne8psl1EIyQA
z`&cw4Lk<t7?bNNTPaK9_x(+89H6M?=Hm7FDzIEsM&!T_#XzjYT97^w5Pskk45ZS^-
z^`iTI45w~@YWHZ@tC-2rU+;yK@JtTf)yGq&$qhaKxP9N}9}Hk>7URb7-Q%=MXjqc8
zNj-0{utP9mRMR(Mny#KICD6~CsH8t1{Vg@F+&`Mtt1`7W6c<ieB2|LsO?51rg`c}7
zf(6G8l+=?Oe>)ThX{kabV^%73ykVp5yrq0hnfjwj#XxU|U|wedc=ic2hMUA-eo@*<
zSZ33P%^fXWBO@8xKlYwwQ43_U|Jj1aeMwiURc`YKu8!%nA;Exo-jV8p<Q>)7Qnvap
z6)fI6s*)w+x<n>V)M!=5+b44@9K%{rmY;H8+Sc}N_^#{^AKika+Px||wF2R#Td&4>
z%d3Gj18`82aa7iUYy3DHjZj(>=*!JKDfYW6TU9=D)=AGk(uIS~mF0m?&(wQ~T}862
z<x3ANJ;K<Y2Wg*}4VaHO?(u+FK8>E{UM=>=U@;x!M^ml+ZB9}`_DIU4-$x;xVgdJ=
zOG58QSt<47mr_|IJ1LK`Y8}Y6xawAOotE#IHr4gNPOO~TCuEd#iloZAU}=tyMVkbp
zRoJ{tTJ)g^7RPk(BW+W)vil*Sl$OZ3lQNLi&uI2=lv9kI_9K%!X|T(vvUCc|{5Z-g
zX~y?pM!IC>xHAhCz9@7w)1W2`1<oH^IFD`gkCzv-nq`}l>8xedt%^u)xa;ip65*~7
z`0QDoAL~5etq7$cv&=FQ7a3gU5g=nB1lnWVcUTN}iwrPzfNT7vX2hBAUuQnyKtPVc
zZ&2ln!S!dCA!h&>e}#WywI}Wr!lR2cUM-;wb^79$N;#hshgRj11=6YNT%Q8tPga&v
zw>(^3dYsJGT9$Sdn9JdNl3Q^*)51HU*abSyw;(DEFyZKU^@at&7qjXuqF+uLnngCf
zeA_?qjq5*1mMN1qGSA4zg>7cS8lL{y3#57o?Cj>QJMSt%Q)di-Amki*z3(B8R^j>t
zZCM;b_V_d7-ta_e@FiS~%y@SYU%`_EpA#fwD9K#>KK=6+GZkvWjaJq+v*X-J>#Y2D
z_vqBR0-zxC(XS<rD8|@yWRgsVla-xrTqp3CZaakzK0RKJAJHGT5kh8?-;q2@Y&Q^*
z!I=4~KWdzc*5E3ILH8{O;=kkbpFoc&RpKKK!5FP9bw-CeCw&-Q&~bAF@u<HciSvXu
za8~gK2t9CZ$Fy~(ZUe!gl3qa37#S8pZi12*vEZ&Ze1tBa&VD%r=GqG=hn_ZQ(kE9i
z%EZk9hm<~M0bmOV@h5V{Pk%<o?Q*=_?gN1<>=KB+wLH8+v<D^mIacr#${wvwR=$L)
zg#vrxXR)0Fs32GXspzx02&|MrP8+eNgasZHJaJC|%ff?&Hg{M?eFc+M?n!^CN*`G|
zCS>obNzIU>r?fjb0?O>*A)G0|0;?nh9Hyz|RGCK+?gISkBw-Pn3!?3@toIyH&Lo6G
zcE9oLeU1PVvtRHWqtvT}JRZ#^QlU5lOI+;tcaT5OIO$g4^+9E#z69!6nJ$3FG+x-X
zqUaR>$9Hbv5yF|bAxs!bk6K)E5X5ewuZ%2(6O}Ki`7WLo_Co3^ycB9b5~gi-TADN+
zFRiW&^RG%X52W&s1;?Rq2dG7bT3Z@EpGQ(=5C#0xD>s~Je(<(t(3t7$FtG|_b0GZ=
z$cNb$b_s7g-8r|B{CG3;1U4z_{&n#DQ2g+49|=U3qcjW#i5=AvEduK(M=)Ji<>cg{
z|MXr)Yc72_B%mCEmt>p5=)ajAsx@vNKxWcL0qgzZxs)0S3T?@jcZ4@=X()DxHfQ22
zQbW|`q3XTSP;eTSz7K^O9Jafoiwr#smu4gJz<b$^FQkY)^Oz&!#67ht?CXWqGWk|P
zxovkR%s`iH$zyo+m|mAcpz~;52Q7-oLQ8zC-H+d_HE}nu-!I;c$|5te{_<I2n^oE2
z$$>W8q81(Tf_@sBm@9AX4BVok2Ga{}FQaL#9=zHGZ%cqdB3XqGda-Q|`mG;M)p~^*
z)Bq73g5=A$9B~^*IIVLxGP(TR1Ixlih=t1dsn{6cF}v|%)j#X*7IH!&5j_E997-F$
z?z9af-E(UDcAWjJFhm*2SEbm%d?>4b7wXTOELJdBHEA#U9GN0Y!bH~p+M=q>ZmVr`
z!On04?+0n%ef`aLd1h)aXP&qpWXFCU8`uQhCJY4G1GmD5E2ND8ySvI>fU!4@sZBo%
zvgvT|ID<HL;k5PgI2rz&)zcmtRj)l%*+;Som|Bn8pfdYKXS80as9-OAUD~i)7UtHB
z8!K83!UFwsvd%cfm3`@lX&m4z_}PTpj#W6%`0z$#Pp5dtyI42W^JeQS<MydwOrWfQ
z&;9*-RGv}7O19Xi4o&Rm5uc$tA=HVFQ~t0rFN*;7Ku?f2G%5_nvbNzks*V}WPe%s(
zNPBjkuh?&VYE~S*|A|C@nt}ck7ydtx=--B`{<GnO>0d4He`2Et6Vt!=;(s>~{jX>I
zJE;7>MWVm7*%|)f?H+&j<=JhHp#HJh*Z5HOfV485_TrKADR2nsjD{?+p?w_g7}iT%
zBOE0|&?hJAX4|LYbt1I6TR<No4sYy_H)q}8dOLgEZ>3ICVrml1Tzoo_xZ;=zm#L&1
zHO5q`Yu&C3^^p>4{JMQV_fw|KhMd!CkP1CGFT!f|?Nn+DFOcfE5+w^?JH4MYQ%5W_
zHNUr7p|J<&*-~<MPaefYL{-~r*KVJ#SEa;6H)=#x_9sh^T@b4<@<8o8h}K4=5NM{=
zu?>wahs+^LWs4Q-S$N6QWA7ub?N+gA?@v`<1774r4qqIBz2Uuj=&gEO-Bckbec+*q
z3e%W=*xqJ};6g38zWi#re%YGykUI9A2^|xqc^DftYqILNg8<*;qoEYTLMD$u^3!9k
z3xneH(y&`l5nBj!RPtK+Em`ekOm<{K6}26YAPZeNkz~=Cs_E<xs(u{>w<>S}R+|y?
zCfqObiIx0j-?|N8vu7!nCh~yBYdrhVOJaF<h+Vhn7&qGKE3mbYh8v&sUd<M;7lY6M
z3K(H$BCd&y>cajLbmw`<5g#uSyl2BhDRHiM%hN4|Af9;RfZXXSoL-?AEzrXn4bG#F
zKC}P&?1QiKQNm}RktC-|qLL(hP;Hw{ytqp^u;qdxJ~{Gg@(W<2$n4DHq)R<8RZEX(
zCzx7NotU4O5@EKGcRt5zH4Rp2C<<}B=K<8VEIQI8meKM8vlaM6&63QFu|noywuXBE
zPYPp<w2#YaJB5UwMhFX0G4VhcEd`gpW!O%blWQWjIB?7QVG+TEPHRDH6h9F$w)T$P
z=C&BPlZ{iu;Bu({3f^?soT7x-HL^5k0f;6MKJa%CO8p_GFCD8NOGy?<ONJ`G^jW~J
zxzb))iL)f-7L8=;QG-Ip8__(7J3=H_izXUvvjbU4CTINI{Bpmdf+Ei|1~O9;f~?Cb
zH(V%On#vL^UqwIioSXES);dQTA){~8=P@NbQJhO5uq1dx1YhHUGCUkSjBj*UZfR#3
zxey>4ne?Zt=@xx<`p8IVIpC)RgU{9jbe2u=^ns4QsoaNq6qaXW4G4b%5d|_$))|jy
z`-ZF{C}K&2!oKM#V}uIn<e*h6uo%#J_u*z!u@b5@bzrc%DJn6)x<%gkaTsZUAVf}y
z;IMJaGF1#01#;Ft@CiGQ&k3-`56mo{)i}rB8pG?cMNa%?u&ZGozwjw+f>xnt3<SdN
zf`4j7Ynr9n=8|_bA0bFgzn-dz9Xjb4lj{^=td^geLClHHPN4E^7JcfB!fUU_j8r{;
z9KEv|P=)dFqU1&=>I`u0h2Mqc(~Aw;9JoZXT){zWJTedxNz~?^EdKVn!4F_ppYDOl
zJ*1jpb5VHS20bZ!Gz+Drxbh07c{!$MG{QsG#V?oXgR(oF1h76q#&KL@gZQLcKRz9|
z8~ih(h7#xO;}0+qsPqHQnaH%<S!tvM-f%@>*Vnm`5%DmXW^UXT0{gO?CRfJ5Pz#EL
z(Ab9Q@m7U!Bwf#5senLP`c@O6NzBVslLV!bgj@UMe(iW1$IB`pBjf?Th4>>}6Hjhg
zv{_p!N;BI`GQK%z;LmQ49&HN9U2Q6SC(%J{Za$0Le1+vh;TunwBioJCQ&@<YKf4%d
z$1Fow9dflDG8N!rW}hsmLy_$lLy&REON->?A!xfRCb<qXAr&_Z%~v)~`b{mUaji=(
zIkipa@=Wg4`bfa6Lxc+3>-$!Qd3WMf@WobZg>@Le*GR%yM8JINow^S?5fm{%o@FHV
z4lBcAX&ufcWo6488JM1)adK0CLeju93xM6Uai+2!fy{0)m!m4DO3-m4XF~#FldGBE
zBh1ZLu^!j4wV5!gW_A?goK)Vqg`SbOef<u@&scht&w)^o+u$#BW6vojhUlgHK>!T4
zDB~9ab@9F8A6RU6SOF%t2O2Wt&vy7zqVl%Uo-Q=YPe*s}7=1@y-#|}V&8Q?9^r!8E
z6ggSTE>6|u?S5;NTQ6DFmT04=4<Kj%@!4-YJfyx3wc1#8s2fYVK_{2nr~RG9PzN(5
zoIvkAK84;rR-&cp?B;9xpH7L}$!z(LBsnAkr0qR+lUW7yxe(T<-c*O`$nMNnFN|U~
zV6oPZltsW#P;u@{0MRisy^V@@bp|N31@=(gB<FWsvPYWMN=d$N8oz64so^5y9?U3{
zSxNJZH%GcPJ5bKsqnRH$QFkUmKjFqpL>+sY<co8LJ#$6q8J|@M52{q|yp5h@mbpwZ
z*z*Z2k%s99bi@#N){J9{&)^XB_NuCSZK!>505Lb6P|scsr{e6#u-kmz@p&G9SU)DL
zIvo{PLo@(VPw62U)avuRWa&Dbmp`66JOJF>aCLbg#~O1b*Jj7CxxeNrISs=<7NaHy
zE1tFJb0PBoPO~?^jO`%`W)e_Xs2d&z_Y0GH97D%Xh`Q^|<<7LYA&*S?B;Mg)m{qT-
zAaqBX>?fX8L&23!D7(MX4_*<^gb~bRd0l(k<t?Q1M#TYIb)`*RZx?j;BtgwWuzcI+
zpq8xl*|kw{Lk)B*cCcAPfLVFZ9Kk!r<Q0r%?{V<e>HQXs{^>;0P6~JJP3pa1>Qk8D
zo{$ACRxlA)_0tWO==<Gi?M|M2fcey*wmb%WI+#ALEPS;2eNQ8LG56KPR%Mxn29cc3
zvmZ$TNKW+!zdkybp{|A3c3sm42=&B60$p*5V018xQ<Q~{7BVijqkslb_)kKZ%g#xg
z^w+{(+YGZzp|rKL1Eks3R=S7cw9Vy%_^(7i>#k0nxo{OGuxq%MP9LiH&?h?_npfR#
z&+&!=q-aPGy!*pPpO5c@5W{q#f|GB!Jsds?RPV$=o2PI8tgisBKExjNBaXqFJ@m{z
z_7`Om_XFnFoKzyFG#-2|{@7N>V>ipd-ZB4Xcw-o>ok!e+U)ZZ1wZz|wWH~>9pGh!v
zMl+40zmw);_KxIt{Xy0{9Z*_%aqE}w;UFQhHY_FV#tDy0HfHO+*W%IvmSnd0N$n<3
zp@WFO=UGq&Lw_`~#KA{xIk}gml1b6O;*V**7te{zTo5;sKQ*wNk0oZXR_6&SI$Bje
z6CU5fo=*t+KodjdF&c&yxp@=ZvzD1_1Zq+LAj69JS+i-z0)6YDbhXaVOk7i{{PV_o
zD&=vhIq4lB$>;2J_Wb(eyL7M;M)ST5jI+&r;vKP40L&TL{ua|#Bx>SCQES$&Ov(t)
zZSyM*dC^c+UqGEU=7(I7yI%HK8g`!Kpk2GGiW>Ll<U!{d`N<SD<n8Nk9H>XjGW-$g
zqAl+`|83B8*12ESH}GP)n)~Zxb0wdEAOf}6e}TXMyPN(e?fJJVpT8@(V`BQJ-Soe}
z-@l#l{|o*y|CO80_UDWKK}E0|bKLe|?D0?Wog*fcg@Xq5I6;`Z=eobwK0#CfPANHn
ztRm8Aayel|OHSRac4cHTsp+PGn_RVLbGOd{{ImMb4g~My!KM^<r~Y*C%)W{Qt8@|z
z+CuoR&%2XTWuk>w`e*#!-h?v~=9mRdA+OqJ-K{BfvCOfqpgPn98Kmja#&Jq$`qLr&
z_XBUkdy<Zdyc43zV`xO$6KET2m75d5zA)Cfb6h`ge;X>CviX+ZE6&xx27k<7A<<{?
zC|rEc%t;n1&s?4v(~&w=uQpW?t0AYBn>O0ua3^Dug0;mF-V3S@Bmamc25W?RO7|6y
z!`oV;sG>ikT&(o)qQFhy>3vnagM6f9zfiTaJ0_(E!j9`H?6r|<)?>l*PDTKL>Ko|r
zu)cFUtNYy2t{96iP2rQ4w!p0Chf+JpnULl2rQM|2=TYl*OUSU;!e{-FahI<;YgVzl
z)@7@<kie<9E?(acD?%547VZ97TWK3I8%isXg=^`Q70+ply{F7*%iGk-RT@nC7%Y!U
zahm2)O8kF#d&e$O0<23jZQHhO+ct07wr$(CZQIVgY1?+*%(-v%^i1{J)vK!q{Rd*j
zmx%S8z4tj=ML0p^8S3m+1+j)6hC-V}w~S3|fAcz(TzVK-MXy0mm0O$@53oM;I5guH
zk6`ltp>w#6y<JrtUXU_!ELR?#`}?=HsrV-B$kWSfn;)mRnygo;%z-c?_G$tkeYPT<
z2%dJ%8vEuguCDHE3JH)58st6Pf)xFlLutR@nsu`gu*fcf=Nw5J5Aprr>AnD(m{GIA
zmnZh<y;mKltWK+!QW|#hu7Nt7i!}J6c}N-qz|(qV^mKOhZzIRyW?fK2MJaJ}YT67u
zOpJ6Q{}eNFz9_EM$CI)>jO-_bb}Mkcp<FOUe9LB=;F`enPgr4FzpK6iV`I9B0V;*=
z$3V#>4TwD<glIVyE{)_!7O0Xye0o$17H(=VcnZ|u1o*WAMwVGoq;}o=USA5Zc{eP1
z;~{_E^`-gVMjvMe62`a#D^`7qDLFtsc;$hCcX6;+k`Y%&^70@>%E}>VJI*J*_&sa$
zZJz;P%^)>h>uowWVYELjqRx5l+#}F!pXx9|fBKUex1XOEp?jR-Kz18>PYqXPqXMeU
zck(gLvrrFBb2rP0_?;-YNcfcVk;`#@@t&p-%NypL7(Ma&03G<^HJ{=iS!Gq8O_VY>
zW6uv&UM|c_B5{XCX^e8Lo>HL1%WB;1*s1$^C5S<=2EqX7Jd0wf77h;s5cu})Dg<kT
zuf%7%=n9Sw4)nkyrO4U*sxZ&YM`NhT4XfS5MbWN8xYDH0`aPz|(}hLwhal#a1J{B_
zEU8knaT9_{l`Y+jz)x_gx00OG#FU7*U?S@%ZOa>voGFJZ=_@#GQR<YvI+AbiS$EUs
zlNFe3r@##z1RnZxr$ATB{zc;cx0x`Atk1`oZ7w6{0f8iBI=YUt`ttP8UJv8hfz-23
zs7NdiD!JH(NE^4GaXA!uOh6B0v@dV4D%jJCF;fBC4hn@Z{QGF(Qbc(0AVg03lxuv6
zqa}E{QN6zSI%Q5=1#0x`FQA>3Lmb_nMTF6?fP<qUgY=^u=gwnX-I0wxGQ#gMCwy1?
zmtYzl5MhGi*x`0qD8=@0_-aw{%f})+8*r>_C{8(Ix=lgLz4wF+1bkb@9YIH-3&Hi`
zX(#)HbP)jh9(n-+hNK3r#Q5lfg9py#P8#{$zkR<w%uj=ZpQ8vMI6#uiM>6A^IzH`v
zLKWo9j7#=<`RnFM!;-0Ulh-SD>ij>6)2ZqcSBI$WB|OYc<mm!3vre3wdJ`OT2$Z?(
z>Ob8dUhQ^>bUHG&U;D-J%SywNbTaPf_xd@BW&1V#s)coj*&Y+wH4#3TT8tHO&6K~g
zPwJGyD497rp1uIqrPS>O97H(505%wZxy|YaK`B%KS3N^eVGM#ELX(2h=4uq)N+g|m
zc4VW}wznK*o19-q@_rUPf)ZXkBq%FDXcT!kSHGJjg5MsduJqpzbmW%7{>IikTAbY|
zsUIjbn8viz_gQH^BpwHH^k+Pl_%Rzz2;3)`*kpz)yq9Kzb4lgEHY01&zrl{J2trgW
zTOqw@<d`X?Q=446OE*DYk|nwTyQ*-DH%U@ycG8v%cwjUbiKyc6%8mILN~k@wG%a6$
z&bJMeZ$IW3!DK)5(4kv}MH2>dSnD(vD?RMWh8}R-fA!&`iaWdBJ4$vy1nvd3GaF2n
zZQm-21**<P(*!UU%7%TcGHzzTxVLtjfsUJ;aEQiQ;hdt>aom$0Xy87)0=98HuAVsk
zWB^+jPgpBLiVyNT7E<Z@>@0mYQVoPbd5&DxFu;IlfEr4gs5nzL8x$!#(2+S*hU)wT
zJoCb<++G$ph%(w+d{<?Wa>*{86fZ(*|91R{mpb5Cn6$Hu$k9$j-QIGX^Iz;B)wuST
zzUoZkVbipYHDOt3H6ZYV^*)Y#bSNaJBVMx=uA3yay!I8K6solkB`V0jVTd5NSg783
zNhYx{G6+r^&<u!F8L41BxF%}pBUX}#ZisA<^c5`R>`srA^dkjr;fG_#S~k#jj>FJ@
z;lTy{YvS}O(`iuDpXDG7z6`j7)h?o^W4LWuVNIch4Lh`+5N!o;8PG-a+IEYZ?{Zo=
zFh@7dFxH$5kQY4V{XBt_+YTCqM7#sJTMCW#Ksx3j91r3WZ^+dWCl{bah?bf$wKAEZ
zezMa-NND$yK+5gi_Ht8OLKdcqt=ExTA~62e00a5~Rh(MW;I@g-M*ahRxQ$d&Qt%sx
zD=*^^#X}d~XmRTahMud<PrL`2PTOG?(PBLxhozLn1;LLqUtV+%_&fl)TljojZPzGF
zA6jz8YF3kNSsxt1%iY>Oa{dC2Vu-6JME2XqDVd;w2znoMQWl>_(HZxBKMiklf9+{1
z@htbFn)mi@*KiK>iv*V}GdSD1L2tH2t)i#4IQ&KkQoe>-&3I8lCyiip&PB7s;q<_I
z?D4Yi@5V_kIdB*!WjkyLfjFj_KQG%10vB!6AH`kQFv<8iyY{-9S+?#hE*0Y(J8QWq
zGV~3B7&M&$rO&lCx~N#Dxtb{RK4r6Ydb=GR28f)=aH`cUJtl~NAA{v#g8YphJtYZ;
z3!x{1kI#AOQ&1$zYmCky^a}yXR{p8Zw@O?AYB^o3F)}vLuxZ58s#C(RyK^7ta8k%~
zpuaV(J&qo3F6%8mU0B^-#hDKJVLy<BWgmSIfK<A+cjRdy1lP?mrdJL@c~!)3Tc|jd
z4e1Vjr7E>UecW4vK7OlYLj9c^syTHp1_4TAIx)x4I{x3IQT_@ZC13DIL7kjG3yh<m
zq_)s?Mi<06rl4q4O2{8X@u$PbtsF_`Yim&F%v9f`WihU3vBclI%a5BT4rde1_9d>|
z6c1R}xJ2@B1>{1Dba>u4Gl|i-It@koV%~sG0PzhUsy9!_CvJIGY0*0c=9#6w*<D=d
zKXUH0&SFel>wBOZLwl$z9cs(JQgx>jl!vm|K(~`TqH_SfH>q|l-{@cYm74wqbN|m>
z_<tble`4<cWf%TmF!%p97oPcFx$vz2{<Vb}O-ZM}n_Yih_<EKwz^Z9DPw<lyibKk-
zY=@YdNzw^GGD0Y$_+J3?iC>qewA&gYjFK^`wK~P7b#=QBJ-4jAeZ6ltDJ)SsM{*q_
z&oe@qGVT>mgJpUWCdUV!k4_KLRDT{;FWGl{lzf>ow0sj5v;EkmYZB+)%C=}*WccXR
z@7k=>sEt$$x1i16SQITPJ?gAGQ_wroJk~Dpr&3(VJUTQdjg@VG73q*~JCY_5KjFYl
zr94P3z3|ur`^ZjRcWw;T$xB-$8EVU+J!Cq@TtnR${lfY~@d34Z%boirZMlT>dFypn
zs@5g$fnG&%C?%DkU8TXQlvO3IK?=HSSvsq#upo6ZNby6n(QGka8WPLAF)e!0gV}O!
z&9zXvKzDBU?kN^TCdjVYNay;TkgWKaEW09xTK!q-)32BH1RIz5kogBm?FF=U!^v;;
z%Dxze3p#Py*;Qmk%|$e9;k(@1Ch?{fBUYr!DrZZTfU;R-@u|(-=ZdG903`jb&w8%+
zQ>}9~LoV4T0M<$F6;5tyJO6WOh@jqa9z@<<ezJ0^keEO0&--4hFfJ&ravzG+p561Z
zZpreXX|Z`{&BxGYC%=dGBN5B&u3E*yQZ(a4)rGIAXbOsTTO3BOw(V=1=v+-<EhA7G
zLY~{1oC$-E#_}^lp_T3Gg6d_x<j~LR4Bm}p6~?m9T`z&|9iMB!nc@)OX6HKuw1<4q
z;oT*hlqT3JjcY**z7~qGH+0h8`alf(RjPYcVN6>^6kn%ZOP)<^KC!HBuAAX&wJEDu
zqh^fD>HZouGa!PM^+Rv*xb3`H9=NcHH$0kIXV_H8tatF!%7yY@RZ)IXtz6}jp^6iM
zMI_D6*7p^Fa*-uQsJ5!pmt$LBaB1wCJ)918YNs)(Tn9RZ7wFj#|Eraj)6JhT>KP?<
ze&f#`eVe>Qnsh-Jg?>%vfm6rD)OG=P$^zwnPJ+Qrk}W|FAi+$dnJ9CTwkt^0Y@sHZ
zqs=x+(wTRvq!NIUn4b(tvQOI@{e(M*uXsRgP1S1oK-<@0Db0rww<JJ2*<ham=YpJp
zbnGd?%(Mn=;N*9fi9Wvb$ug%*vIW!v@pC!LEpH%^1<f3yn{_6fdAN<3Fpl+9z}d2o
zGbfI~a{h{sJXYDU&oZ9PI8GSFtcX<*4|9tm4NHKuY{N$>rU8@<mTYs(-HOrcP{54v
zpl{dHB{C%?;qfVQVhUdt2?@14Qlin>E9Akq!<3EKaRR1A3<G#&F||^Elj+wuM}cl)
z>O9)Cm)5wN?3yLAJZ!L&eog4Gh|(;L(53Oi7nTqB6KqO3$3+R$9sL|7qmvLfIl0s{
zV^xs-YY<WmIq3$>I>trA=u<u|Hx-<dXAoopRU=+2%Cn+0!`1?aAoBo!Jq~nX&yB|$
zT!i34!$F}j^T>5pKZ#iHhV|=8TDX{SEu6<Eu7a-Id^6Qi5M8<~IdT*ge@rC;K+(I4
zNJVe@4eISs?xSpVWCC?WMy6AHGG;=_tbBFlGI3QUjc}EaP;oJMXibrn+g8lzh$eH1
z0r;ZwgcF!vFn{=Bz`OfWD-J7&<t(EKNP6VKj7-;w<$(a`5P~LEM5(76D{~22g@+oc
z9|im$<z|f!NksoIh`<XUO=KXHZ4_%Uu{gaulA<5xlA;f)1Vx@?42vzyt!5&1%fzPa
zDIteO$}Y>UvLnzb%E}mriS*~Gm(VrD7p0ee4=bEblinR?BR)@&B;!=5(+7&L-F$!g
zyk8NND(oJ`p4dEG1QnxhkurRh44VoVvCi;+m+gmC2ay3!S%sLSDt}?ysW_tU_o0CU
zQR;oCUg(bKAY!Yl(%!ikIu39CQEfVGMsTE@>82HfnmGkWfiws}mp&Dpvh7d4jt+H%
zVU4yT030Om3z%=lS4d?`z7s^of6EpA#c#EK|Ip6s8a^sVh8Y^pt#0T}UEH!XiD-KV
zyd#q7f5wDSie+p<doTx{8{V&A-M)<jOd0k9n=tsCuGG@3!S)+BE{q64j$-3Fz1!m_
z-l{P8kp!1&7Pk*qaRBn%fC7DtMtFAdX(pPEmzo21GBhayHN%Nz2YcVYW47RjG(5R%
zFH8Xp%|;dMr%aCI7Gf>E{+65scdYZ!b*j6Lo}K6V(D)p@uw<c2l`e^T61;2zrHbl7
z6-k2GA_j#r@++JO)%@!MTA7xq6h2y&Yv<KBf5d&TS9pYiMi~pGNT^cjxf@{@W?n+{
zO;_FDL=?A`6fdZY34bjlMnftYB<M1lWQ_1sU0<l54{=3QS_K025n&7E;MjJQQ0nF=
z+&=VNVab<>M9A^bT4_1kWCF_B06w<obifpft($x&tMk@<GJ0UZz}bnNP^!5Es#foc
zoPniFm0?j5;jReQBGP$LHUks&{S7N<0Hg%g;h`7CjuJV{U;}m6$g}bjX!=ojp~Gzl
z65ng|%*(0RSzgZ$S@PCcq9zYU09>PRQPPvO0@{V8It<`T!})Ez#Gl<wT!a-Yy3|Bw
z=v#u@;iIp%_It<Sl{DA&e(n<b=<-~Mu6b!NbD1u=g(wL@_;P#14xRrela3Aj{9s0u
z$~kv^1oulKWZJ1^O_w6UOcTv-6&;`Mo7om(VwG^v@0f2-`ArefxjQrRh1WME-NXxi
zs$^yi8pd{{qgr4@w~_4cR-^pWK^)cl^*BSo3%xd?o@c*!j3hqqbGKOjBi(xFRl8q+
z=PL-}nxFa#Yg^<3mB~UVUvog26oj817-rOr35K6e)zVSDOEmJ;Wfrg-n;@QNP;^j2
zdhind%+XlG*jgjy>hs%2c*@|>fX<!p^)pizimYf~*4;yr`V40<kBnjM1|T~=9yrC0
z!$49j<nLtY62W;C^AY_q#+*AjASfA8ZWoy}XgkKngX;2g<g0;O3844<emmi`$FN;|
zM)B|9k8V$>gyck`m5eVe874AvAk%Dqa7ihQw25=_wkL;#xb<8rG|z|GcSZOg@UkpT
zb<1B51l5W4PA@dAEprCi=OK+7gg_z#a<o-S1<_23?vt~u$-Gndvq@S{Yv}t0SXCh8
zP2?!--dE!lrh8=^<RLDHuM8fE4D82uTg}_(KAZ?Xp8i6M_aW<G)3|yUXY0+d=XqoE
zKYDVVjEf`jZNj58o2>?XcV2n)KXFXIo`kR0;RkZ&-VLZ6D@wPP&yG+nUvus7DbNEs
zmFbmG{q!N9j{{C)<~%4V_kgh~2!20Ac<qL`MU8)*6(Q^SaX@hB;q^@eaMpHG@qCsr
z0`fn2SupPth)V*1TkOgCp(-RH>`zLv?20raucr0OCd<ya2Xs6-eI#!TzQ57R9s|t{
zOU{aze8CUD7X0^huS|c}{{L@5_+KY6{y~-hEf)Vp%73WS|9&|2zsKT#JmY_l6#dU~
z`+p6mvj1&n{5PfOzgTRy^$#p&@rJ~<XReN!!U3}f@fsCFGUgGYbAVGxvUC`<eX(Ci
z)X!@}MVGu*qyfhOR!eH(>Ghm?P5rnzxY~4^tZih7a_R1D*P_e{jaW2I5s@r!R<4RV
zNZV5`PJFII$M5wiOIkPdlu|>id1qL@jDfmY#kNw3?+w+r0>%{$bt`R(X@D!zC~17O
zyNp?~xU21?j(Q#?p=;Nv`n7iN<g&N>jRhv{9UDaJTftfFg0@v{U=?v|qt5DUGt_r_
z+Xw%C4r|vfGzk7CjPhYAYiusM^kBEs%DLDr-l~p0cOh26;3S7U=Fx@y>k=;_8C++3
z$YF`Zy!MVA%v2ihZS0+Mk<-h|p>(f(L8`{tdPw5j8r6(WWx}$H|MPa8zE7;`fJV!Q
zBT6W##MT9xUa`DUrtZazYkHC8`Sy9eZ|<8lk-0$H2t1CyxM{%wsgtJ3{v@H{c3$8l
zb4e0pSGvUvuVf*qJ@zt2P6HV>@?H6e=&eozuFWcan%lP{J5{Yb8W*0wW+iu}Hc&`p
z^Um^14~wN-=r;g;nkccf0GY8Y)p9<QXT{`eSS|e{(DVuhvI_5ys{}M`Enrot{NWkt
z(qUR=Zy0$Bug5lyRKa6jLDE9!hs`y+rj}gjNngO#kDTeUPRJDnwBJ^EoDB+(xmj;N
zF6=lLVQ(Yy&DkE}mye@(Rngwq16tf=U|T=YedkP^9sozL-C2!5TBXG_*jVep(#~E(
zWaD9ouzmpowHg$Cccus7EGxL?6=`sk#2_whpnOrol}1YLeh68cxnX%z_e|RkR=7*D
zw=V*ztB*8WQxYT_!EXW|%gts{K1cG6-sedmjKTn?9bK=>?y9fY?h{m6AralbdPRZO
zAJ9q{DoB>{-yLTti&*i=ElHM#B#?ZmF1}%J*?>Ys6}No`f|~hDaEBSj!&M-wyPjkD
zpx}5UBRdCqp>7OhaG#AcUO>kVD>!7q-aAN~V%i376&eh&l@!{MaA>H_{6O2%Nc4MM
zF-d#m?iN#7m6+Wvzs*0`1~K;9XeVgeM*-(t$RC+_3RAqXBkaPr%_qniLc}~Zqh?gp
zzc%9@I$uXw3boJEAOxJ>^>Rh}0YZoH;4O6TjD~2uh$evkb{O*UD)G!UV(vT{uY*o>
zzfG!nP-q@t1@$$Q&6CLq7pd@wV}momD9z$D)iiOqw}AneZ}{xsPn2*wi0Oz>nM=@)
z7}vZlj3el@tfZ=cGvm9ien~K4A%HrQ+4~RKvv{$GV6+PD+habGg2CX_LvTT`Kap4o
z<pC2JUISypu^U1>&uonN!w*dl*mrkmolS$N+uQqo6i3(CvH6L!O?5)N%4+w1Oa=r#
zohU76TgzS2vJpf}+V$^hC+pI;MyAKjmMkaNP+pfPK?g4J;A)Bv#1f`~a{{j2VpbXW
zw-E#r;WBM(*XQvR-HL@ET0w`XhLwC4kogkLS%DUCHWRE|thxCGu&+sgZ~UUd87V8y
z3}JI(_HTvs0_K_@<K^<WRh}sdW(JrsxfAW-<dARS|BZUA_lp*E2_p`^YllFl_w=56
zQrLP@3E!Z}?q%iHu$xBPz@AWBewj-6!N?YCI#5s%*P<MJIZ_#5uQL&+<M7-kwro&H
za6<h4Qk+NEXHMGjn-i%LeTD5-8t=T$>0RP7r+jStT962XVfk>G0Q)TcjZiB~I`Iy~
zvkivA9SoS!F|2h}=Y%zTkd*ArfX76UFnKEu4$cJht;Ogu7-0Dx!?RXHvXi1-CY|b1
zWZ%XE6!E;CHi~?a2^T2eW67P=7!%@%Sd=x=U{iTGXh4b#9`;8_uajC^GO&q5g=*q!
zy`%Rslz8meG}o4&+U9*p0C=qy$uZ)rSvs90>u+snETLHe3=GT`GshTUvoShPCFovC
zBO`?fc;w7;dhmgU^tuo{#A9-ye+<SqB=)H)ZYpkZ|M8F~oMSqJ>qZStzd~_=nztCK
zsgOy2q-Q4*Hl^(eNd=mAy?G8~63oM%17?Zzs>i2BITw%(rJalt5+-U`g5>fdGR4zL
zG*}4=wb2L7x&nX1TXVwj9DAa>1&IO##b+kI99G1lD_)E>Qa8T=UaxO4jFo^&!bQXL
z@ur45k3wyO21-^6>mEA*9sLR|1&!<ZW99SQMz{l2aDGl;%(RA=HSwrszn#K;dvsz3
zUS<ANfuHqsLg*an#LsSk&C#C1=$|^^O$ZudAbky-b}wr|i!-vWDNul^?i?m|_FEPE
z$-V_T*d`V)4ET~%{}xiy#tKM1!2-@`)*EV^<wV!gM5cqr5vq(SHy*cqLx8;cjKo#l
zAv@(5YYJz)`q9F>FjZ!=H<`&#0jbNEqouWEkC=(NRJ7sh-@3!1v9MjVCySDu;mb(W
zT)73-`H5*dzR<B{My`x@sRp)%gyV*hp?%p~^j?k}wuAsotkdWY!{m4zY$vgAfk=yl
zGNyDaTW*5}<D`Gi36Z=<%wL3iL#Oe9At?q#f>p^kb0p0T%T6>*Nb^@rc4W_*Wz;qu
zR~<hExUx9rfP3Uub3t}Ndcg-j9?!ZsP||?s_?C?pA>Zyb=)Fl$mmHu={epI>3hIYO
zC&jQD7;1%354wCW%qw7Xey>Bvo-o{oH&__*CHWhlcbfqf9Lom$5ub<hyg9T6Bx;SV
zN#M;6*WczRvjI#(I*l1OyWgS|`j|CqzYF$>jl`08bB$#h&;#pDcFV?cV>VWDz|pe7
zH+J39WTp}}6W+CYgVlH<6_pjl8*NVr!Q*S=ZeU>nt8vg*J#8#FEnYhdhi$u8<&s?#
zyraw`vORB8aw%1!sxs(WKN4lct?;4}P6K`e*u5!W${+N%y!;a2efL)P?cGP~>vz2~
z4YD5Fm{Xbfedg}lk^sVAH&BcI49Jf6YtPmiWN$l2fPLHRN^)dN9v53|>cGumePA2d
z9l_m~f-ZabEM7Q=fUBnTBO_fe+{+?+o4KU255Srzp>n|WWJ$@zAd}2CG+!~2PBMT5
zY=~QGtKS(P{7ZMxeI758=8AXB(-OsLJ6P#s2HYpRED<r{$%ap9FTLy3_rz=fUBe~8
zGa`jlGar{o#aNy=d1;|qB(h)-)k7oxpp`S+=NgQKdp9(sg7W9sF%GOmDmG}!atvNs
zx@;1jr}-7t8A~Urd(C;ML0*7{*4q3^LknFQQnaR_w+^2)7i+jgC$YA<g`l6s_uVJ8
ztUV*i+q<ZQ@Gu0*>4Sku4=*xuLv6e>X|%UHT9OdY(mFf-47ZC|E;=@hU68|`J9BFp
z!PX?suB^SRB>GTwtj{}z2&p)>Ll*Ca%4|#7PcgDxc*$>tZ1re>4X(MAZh69!7A}c`
z`LXua`4}3&-+^FpX~wRYLqtT%pLTKTrIMyl%#cLWS{K*&JPEx=cbxER5P7%@FtyOW
z4Wz$ecsmBda$4yyIf?awyIEP-Jvw+X*Kc}yO<0V^?hQ6eOc#Eq(}$EjqHPs*GjNMi
zW|L>U1%<6`(eaa7Ne5OiWVx#8iA6vgd1l$Fk;GkE6Uu6uykkR#R#JAA*%@#I*;$l0
z20YXXhoqhEJnU9Un{bH%GB%dB?bzKiy?0&J=KS+x@JMKC+l3B2(9uTyH*|d2#tDVt
z>vo)G2l?x-_7;NTnUcABimQHr4NVwbK?A5p>3%zx&;nXwJ;PIjdwA5iPlNwnGH3qh
zu*m;lHuw*;{!g>Pf5}|a|G%0I{<)9i|JRf@^FP}H|8+KC<@~o(+AWxxcAMkxynTaf
z<WTh(v-a-KK#e<|38IT&ny&zzJ{VEWBI!siJl@TIy}PW$i>ZMSGri$X-pr5NX}x_O
zk1tvoQA9LKIeJ@Lx)e!a8H@L#XeI@V5uNRnKd4_w71sB+S$R8pm)1ZsMOQ>b>2a=z
zmwO%!(ZtB+K9ImQK)9ledDG<JOC&Uj%i|Nfw5ejE11^7>6$D!}D)V({Tr2}O9b$q=
z$_<Rhh75!SqNkr`d7z4jRvpc{syZ#*|2SF?N?5%<tbD?IU!v*T7-WMUuW_(|G<g2X
z9}AfU-jtVH{xf<5&^b)}Y#Vc{OM_aNXu_Z%U|M)yfx5j03t(=QPa1oe-_Z6%V#A7j
z;LzmsXb`MOF8(n9*W6j-8a_LJNMbBxmZ%fyoC*b|RnH+G?}0-?F}9VRSOm4iA=`ta
zzY8O!LLx_zmoY#2qB^n4zo)FaO8hAS!mX!nfO4QyVU%o=UlbyVV{!jpoIydj7|m5t
zh_&38UTIz%)b|Z@M#}X@?rZ4I6!AhbfMx>t0oZuuZt~pPyloV-0r)Et{^=0!1R@@s
z7Rr6^nHys;`=-}3F4zyk<E1IAPOaFXoF6t%NEhf&SD5@<=4pJc#m;==#h1tyINJzM
zpB_Nbrf+$tw4Qq#^?s#Uu6JDjik3=Js>X_k_hJ0{!4?QURbcl|Y37^l?h5RsK8}wf
zA~Wi!{l19SC<G)h!Z=47D&|yWl_HezcBE{J+n4AZQ6Nbs&f#e90jMK7$K6BVwi(Yt
z>~^qttH;gdQfNjMLU$IYzE21~mn3kGexcf#@`iSBLgWE3|3NoEK+t&Z{8RJqfMfVi
z4Gf;&ds=awEA8PaTg^JDwC%s=#&oO<2SrS7WT7XYKG;%-&qt10Wldh6w;vNO8yO;u
z#682=vOwAOb^|)ns-L*135-$ibuRf6Nj7ppM{~i|FDk1(>*g1mN|4I96euk%GIJLf
zDQJk~c`Yrn0W6Q$$8ooc=-vtP4P%+Am8~2;Wy0yk-6)1Opmz(1e%*`bjC|(q{>CA#
zwAD^w4T0lghLbkU6_#`#+xO*<v{J(2{DpSbeE*QUN`iBEhio`l0P6v8(>xq@2`(==
zHuWcxyuJ<J6U8hWlpg^^E2*TM+D@*JXroy4n`ck5kyB8>e%&J~1X7d6+vjR)u~rz2
z)ABwibl}4wL_KLENWt_Y$oVr~<}FaXgD`D^YNW9;_>^%t1+q>v*q^Zpr~lNu+k0QL
zzx1Tnd~JMCcaueiXe5z!NL}8AUj}{eBe=QvuXWin3*^8xd3y0@*N6-&1d~K*N94B3
zvahDoMHSD1*#hG@!heS|PQpPF;*ya1!CFTyJu<7f-u*e-byK3BP)ke7Pp#0e?p({1
z(iB(%(>R4}(M<7WjGy6GHMzf7NXPw)?(gk}smA%U@qw>%R=Wp;Y018$nIWKT_I1<k
z*n?~>({uqH!U7y~!-v9dPgYlYBoV{uJsZ|oO|z;)86antk!<FS<;^fl$X=6OeAz=6
z#u9|5NyTt7DU^$0kjs@waB^7?_EWM~uV_2PJ4ELEzM>4h`#;#!X^DQP2G5t_x4hxX
zM%|_-*4PtiA#R@m2wRd6fD$P^46$w$c*vk$o3K2FprCVI4shcFTmh>>8d~aU-Thio
zAP3Ptq=?rz1XVtg6<Y+q>b7Wj+8UToL8%XF8Az%rLqb_8!x?ZdF?w>g@v4vaR@d5I
zWqWoI_+ZJsxF&*nkLkBfz;my*dg6dsfD+G@S00yLQ(&;@qVG;M*<STD)%E@+rKFke
z?jWX(sKwXL-CU&4>2d|?s-PrQxI=4mtA{y{ejhWg#<T`*F^YZ<O4ysMX<)|CCD`|4
z@ZDL#YkGpVN?B<%We`F8DmHLtt{EFtI~~>(=n^9BUq~1h5vs@F9=Un<z#Dz_G7Jfs
zfKZ2+BVJnS2rQI5pzmLBXpzx4qT<Ix$s38Dr#5}w#+piGz{$EYBsC#>6v@ULtbn4q
z6WPfMClx2bPzJ>NjEKH$aQCr1YT=i8%&UIZUg#Qv7&gzgLnc?V&6tVTUXXny;6Rt7
zMPdN1%6dt+phl}J#R$zK<q@UNwC})gw_|P49Z5aV%Y|cgd(Kda59RhHW+lu%Ki8~v
zr78jU6{&YGdVp{2sDw$oJ@>2r`h%bL%i<Ts$?dhf`_r$0Yq)zI3bM%(SaFy!r}5%p
z7<H@6V5#jf*_qkcwDKrG{b)VnXL17JN^rfSY&3iuDZTr*ugEGF^$ACpU#yI#0s?zf
zt;%oTkZQ|j1`InS`-5HKHxKE3O|Y2?$#~w_a;?8hHaLPRv$=p$`H#9cT+G@uI)bd1
zR6u_OWD(t=v`K+KHT<#LlBBlrwxI1Ih2|CZv}Jt27j$~zh_2H}f+x&UL6^E5Vn4q2
zJcQ|WI~1LCKg%NrlK+@J7a`lvsoPg3lq7mimN*dyi0*<6MS$D5A<5c1D&#10nS#%H
ztI?MHNu0mZikRj55l>I3DFrb?;8^7=Liokm|3&5l9*=<P{9&A7Bb0(l|B;>-(evzj
z+rdY>0rzJHgc&*+#RWwY^X&2ocWmpiAn_Qp1fkH+{OzeagHT-i8*drgtmVpfvlhvW
z%zchzDPeikH{EGnod}tnx^@_qKC!J%E5E}t5z<WXbHj|aRydHQZj4gCw>8W|uBeWf
zq=0JEepkW)_*`Xgf*^<f;Hru{L*$z?XZnD`gG>fF<-70coCo!zKPWq&9<s@z3@tkb
z?pq8NQHHmI(%5nLV90^;-DS2B$LECVyqbG3FZ4K)$_y%Y$Xm#4$rCRqWj{T-tayDQ
z3BH`VZLuT%B{-kg=^S65^}>sUf)PjbEyuF`$huuz`e;X@C56?tsy?Rr=69o14MqDN
zoXiZ!4F@Q;bil1IFOp-)Rl%{KgTf{lGQhaOE^E9bzJn*Jk#}MoGq=%^PTWX_k}~&V
zsf!G+16BAsZild?;)kWT6Gb~I;Js=(H508nIwZwzJEv<8#bSPENxCgJ1VRLu?#PKr
zVs7II5!@1wEL>+M+I^H?7|bf{xRaxn6(01G{aW*-I8_t4x>ANkKoBzir2PYtY1a<a
zHrHJc@RaNMT~<VT5}4ffXhu+U$;I(tdxf<ADgGA;b+aAV{cmE_1w22bQkFd12qsFb
z4sm_1W!<{SrW3Cl){MO{O>)`zHxZh%8}wa{z+NQojzRjL3>6UtU6j58=-D{M@<N!&
zimPb;q{Sr`G$Eq``K9zqA=xeaM36iMmenhz_KjO_EbtC)JNx*VoGbu*)Ab3ZP`uMx
zRS>zeC9lx>oTjfqNj%p0MM$qr3A#OnOpC|vwAD_w<3q7;B#(rhL%)m`Y0gs5NW8`>
zpRP<P%skW%w%-DkZUry|@uquME{G={Y6xT&ky&=%-j64KQ6|>l{{pQ4IT7+d0PFwY
z(*Fe3|7Rrp{}ovO^HSpfL$Ib7`)e97vHXW|@b8`+X8Gqy;{T#-j(@u}_8&DM?TEdf
z>N3|R70IH=1QPKboO;~HHMCumx!P>t;e{lrl!~HCxfy?+&(YuJjSklC4aA0n1d2W{
z>$(Q~w))(k<ubZ>rj>Jcw(V|`Cxoh;z0HWRsdCD@KA-yn`H4;bUU&HUv%+mdo^(F3
zBg%5RO(Y-WxI(95?|8jrh-v1KKP~Oe5D;6Ku0CE0EmF|Xp}&6{Rl-Q-{^;AFGJt=l
zhXW3-QLAZ=&12uy-(afmy2dha0dg3|`c);3qxo1JRvA`{%dVr#nQ>#!sm|}h(gCem
zm;sbZ1ylfI{;NU&RnzjP3T#mui=hEF83;CAWOvaYYKbRS9G1iZty`~7nnw~1bo(4)
z3Kv~E2Nbq;%cu{EtvoIDwEekLh}BxZ<v2I_88vgoU}|WlVQl|oKBlg9Mo*3z)%3hX
zlM3}jvQV=8PIUo?ZRKS-HSK|%P3B-t`>s+*89S4QRWI*6j*!Y1O(6r)rtm3$b_y3@
z#p8h7n+RvQ<Wl2rLn+;F!FAVifxrzxe;hHw)@zq>|IR`kA8un?e8w4I5gF^lO>q{^
zE7lJff)nO;knUoa`oWU<2dx4Su*|q<*PAN1FKIZU+pBr%wJ55mcv?4h?5`LBa!IWA
zR!8c4W*ldV$Cu`^7I<iXv$)0`+8%Fa7@KkVs9sBZpL;PRQSa<jMEsw~Dn;?BB*BYw
zFM?H4*A%vb#s<V5>!<@I7b<w-632`OEIIFvST%#xi(z_Y^(t!Ua~72dPqb$&h61IU
zA2*pVI2up_V;&Mj0baj|?)WVr5i~0QGl*~&##|u;>_4&3RtG%gSvIQenb>vwU!%<7
zXeKXX@;qw<ryBO4tL(H4$BU(kcW4VosfOn3Zl-6%b)sIU_w8=BfxRx^c5_&W;^uo6
zus^*XKV#iSr(lj_q%X4C5B|de#B?f(L(jg-gZ3-xv0y)gf=}isTn~#M?WrOxU3Wq`
z!BUtJe`*I50`iNJ+H<i5!h_w%5PlcwLFO^94B%Z*2@Rj|hr%C`<?zl$NSZ$dGuYZ2
zer;!`>z#_=l4Yp!NBX%JK9UMVv)|hhTE@P$C5U}_sR^nSdm>5Fip=J6vttO~8vs~B
zd8_c<4Wa4{+a8H}k3AC2YONffp^?l^)9Q4If^8wAh0sD8>`F&(vojb*CKliS1Wd}L
z3-Y}Mm9mgQq9|nml64qNvP>7!<QWS`a50-?m&g#7w;v8?JD8GdCcuWKMQ#L;(@}&w
z^N2x(hETDIt`o6nWp3wPt3n*8?p;$e&4w3WZYmRsL~vGfBzR@lqQ!ZKiye|U-)e+b
zV%T^vK1)2j3d`_}Z|!%3#FFfn!vu7`e7f?-dCDY%P8Ra6FfS)<YSscx`t`gZ5`jff
z>Q^Z2_(~?=#f=FYCzslJs>~<FQ|01p*>ZRUF6%r%V?0?Tql@-krx{zNw{XIW+|p7m
z&hWTAiJ;~)5*qk674^5^!axd)^3v<l1zB_8&U$^BZC4Xe=#-C$7$g_#Rb&e#bYM?D
znm{Azv<8N;a3nhL8gt(aOGpNl)8I@;XxR?~kFVw1(-IqLKdh&;5*Bl=<BZy@=V>tl
zsL25}g$1}-vMkR9sr;>aWfG}erWF|}Xwi}%#~VLNiYHl-(3jAV0%eHija(97CSoe{
zT~4*)mV@;*@ygQqdygzth_|QR=K!5&=MEDo1Bm^dNHAc4BygsGnYFA{0C_Dt(ZNC5
z8gI*2VyfU=xqi(Q!&=IhNIUQ4%};dxSJRL;6Zdp}xKKzzHMcPnY+kKzri?Q$Wba`u
zp7aQLvEqcTz4-Vf$+XTyT4ZRd;I*m?<uGyLHBRqKiqwpn`5m5_y!(~aimEUoBKGVn
z#R081qGBty`ndhdJzN=Z6tB}zUW9P80!l?=R)UnEk_lM=l(X9avd8SK6_Lwv@S3!T
zElSL}c<?K7xxNB<j6@}8U4-YNJ=D=%!QU#s0Rm{&pgm-d5y;|z5@@%*u%b(aws;E8
zn{sM-PhK~kD=C=pH;wn&%G&n|+9*Ibs~aL$UG@hsHZ~TT_Cst4ylXc(wQLA<M#mn1
za{5_JxR7FOFfr}ibCbj>=ujvSPI5<WKP#50<Es0f9;1i5B`o|1pWzc_X_7?Azstb=
zZy6rGAJ&<6kMm*)e>~LjCsu|8*^-UV<8tBJ18x7F6?r)?q{tw72a~xQU4q^~lPl;M
zBFrX1gIhz;iV&mAll5x@m|?rdqeNPY&m4P2N|ZM?E@lN72Jc89DSJ$u33n7AaK~6F
zk5!{}ljS`saqI|CrdURXeRG4z7eGCLbC&2`H~RaRKoAnCUS$nX@UHjHUOu>TEs{Aa
zuh-f~wxE<rRnL)yazTktTxx2WWev+b(DXtCcSQpIsFq4jS2RIB@94EB!;G4Pr8=xf
zpSWIG|JG9%cJ$UYQI`va`cmtY?PE?f7gbLs>&28TWME99o-#o?9@re~<(Zz$eNvmX
zC_-rD&2wt~^!2-<bBjn~Sag-(G%FunAx#L@S9g0D23_dQ7{$NhchF*Dc+ygmnl4ji
zQg^sk%cbR{B^2I(1Qi~7{{qczI|ihe!)UI+@J^f_Os*nyXeSG%gv19c6$(Ur0DA4R
z-0Gn{Kf6j&jxY|}_y26r;TW1d(nth<AB=fWSjBsT>wRP#mK@<9<uSLG#&^7@+dCQI
zQ8_CJ9aNoG*Xh|_CR;X@h}kwRH`Y!t=l#vPN@snSJ3hQCc-)sF+Mz!T<$_eDNUm|a
znWp0d`0|`mhYyx`!jseJiPl{e%6-Y&6nmH_``%wGtMAjA%iS|2jss6o5-g@2iypHy
zf`J9RYRKed9p<>MZzgPf_nNIY&N+a*>|8j0#kJrLx<?;Tuc_X@Q=6NbI0*zLopF7O
zl~3Z3D5l77vLKJ!daxjEKhE0)&kAzzR*8I{e|JclP$C-n>OD?f4(8_(aeLg1Z9LGl
z{cvu}SzM0G9}UXIN#Z(zUM2aPx_s{)2Te)lgQ6iU5(-W1-WfznX!YD(h}6sbD=<(K
z*db>7Wi2Y7X+f8FJ|?P7rF#WT_ZdCnw>6q|3CI+hgclZO-wPleTIU{+sQF$4K*rn4
z9;q8Yjd!j&Fl8K1j8Gi*t)P8R=y9g^9~s`myfg!Z4e?>Q@VSkNzkNuPi!&%`Zh8C7
z`0RQ280FU>P@@SL4KOuUkW;zZC1kuYPTuF|eRK|1E<|C?D2trXXC<@AmG@LJcn<r%
zG{tk_^s$3H*n9{@HJPw_8$XQ}0+Ax*1CuR%d#In!@>RdhqHiw7@P2j5j9eIcd{G0W
z_zk7>nb4OsDV!$IL)`n|%d?pOQi2j(k*O|J9$&5D>S8D_ei}al8r_AGsfzbZy`9%!
z)dS7i_ZrG!s&}*`B)a68X3APZqr88QYI~*s27W%6ruy&cn&qFx<9|)p|KQR8mabX;
zm&=@4{)_g_$4Bt@9sUMcpqT#gjQ=f>7M6b{TeJN8N$<Zv{Wt0TANSVkU*dtP1}Av#
z*RpEXw52#DuccbjIKab$C9DO600pESkH_rzO+x`hxm>Gt#yuL!%JTHt^>=l=U)9z%
z2_sd?nzFhw8au|5*_vcbg)GWU*{k#uUzJQA_3eD$Zfa)5!Yq<!NOInLwbV8{6eq5|
z0rOV83leR6>uV(*?Dn~-k!VXyncmYQk$!_v{bbYYq>|cQj&+nZ06B^#Bnt>l9?{Y8
z-+iH-e7ejfd5)Qd$&NtFK5Mw}(6~KHT=rgl^yANVRZ@mw!B;2rtPeIdD@dWtS{zuL
z2gJ8dlzJWsc4*%NusP?_gf;GSCfuYQ^VX=3XS)vL+`I^%))iVP!>g*Z^`z4?rI6QQ
ztz9Je_rZzSjWzbS7z{y6xT@~6V%{!cS8X?%qMb1^@dT-QcyaJf2lRk{<y(X-GKZFg
z1%;*_9^=-D2@Ya_V6N404OHf&FAZjm3k?WxKeqfXek5}EB`cQORLX<Ccmi(KxJYIf
zF!9j<RNAsM5yo|=15dl?Y(Is^x_CHT?>-eEALK2dqdU?>`dz&x4#col<56YTMgpFj
z0$lEK0|`&;Lc<e;yt&a5l;$(Ft0+CH@v9x2SQGUA6L9PF)o)k*vtG7Tv>UcO^N(Y>
zc3-gg*wdqcALys97ku81p?Y3{)Ss0A!WpEX0K&OB@KBWrLljJ?jBc%(yBf7p93&<N
zqkQ$7k1jNQ87Tm}P=l^Rr=t#gdrdg$<&)5~&w}D}J06<_L_QHa0j)bO@hNx`MZ_TB
z2G)f=#eOC-E=nnP<QJ)AN1xZDxINN-&YNGqth#K@pPvh7pB^2}72mi9%*`8l6wz|d
ztR-f1BnDQ*^o(5`J)Yq#P$ah>*&ikj_B|$$oarbPzhph45JBALAziB+2m+E61?=}&
zYxRe|ymHwkeoZJ=yqfJulXEV=fx@U<DdlcQi0!OQVIX_mW*o7zkZmkT+4o$N?Z*+*
z^9{-G>gx8sLuz^hM^iWmolwny)F*g0{0XbIt8Dzc#|=9ksxn^$s}R0>--)EOx0S2Z
zIq6>+6#X?4>sIVKFCCyIzk*p~7E<rQH93st`$4>JGD7%zjnjS|h*!0`T27bIR61^}
zXnx7N&Z^nCOI9bWt*=hvcO)D@_wt(Evthee<W>xZSrhbxjgfWss-Kn?_4oQeW3OI!
zM~A{45T`OTZH#^6xY=w#0E%hrmfn}|{ZyS}YiE2DK3y?`=#42nLxK=$NUjZiv;x_x
z!H$lO{ulQmGm$hd*NFO}rg^^_m(yK7qFEhc)OiD6bK)SCvdH)Sx=+te057j{u7gl1
z(;A*>gpozD+>w|GJypyXX>kJDAZo@ZvxTvi@#rzKg||6k2kVNHhX$!5wl3fn^c7jh
zI)djrEU*R{Cw8gm!$pIoyEAT0gf+Sv2i@b^Ce@J!jJ{ESxqq1u7CY;LE5D2rAVx(T
z*=w?sT~>WBuW>qY+AMT}wEa&Xmdf;mj8gtfFI%w&Ky~o7Ae9+X1d1lx?B1dQLIXg@
zIU$aq(j!fvg4`=232wmbG8v;G$WsV71ev;CIJDW8$SNfv{w(VBf{47{Pk#BOC-#G&
z3eSPgplI<M5Nh8G<stpWt4ZUB%U==SANANZi$b#FPqtJfPPa|s25BKW6L~o~2IL`!
ziTl)$Nf-BCQLWiXzk?&;Tkr6xZVxig=Q#lMqK3hqdk9BTY%)dWC^40(MPbtGq(*x)
z{&&Dj3efn-*TOO%HFNx#$8BtI&+$Y7hg8R)2iB^A|Km-&y`}d$SPOb)J#FHJ|F^66
z2^{izKz$jPX@MqVH;3%I3Lw}se!e4<y*`@EUfAnxjTtcT3}EjetO|&8vH@ca-?Lwr
zBBx0bjPcQxW-;6XJ+0U{;f(Xc31cdsP8yMQ8)h2wn@+ZST4elZt;n+JKAF(9y`kzW
z-}23+FR}!VRJ+6a&3ZbRfqSdLJi9w1USx45#^DNBJ~ayJ4Btm1JczMYF);~hw@wVI
z^6iJGOaG^{An!8i{#u+4{%0Xp?qf%TfS)dnKZ(C3GlK10`3wZ49_Gr+S0W4(Tm8Nh
ze9xh@V;mQxIqCtxxgN#AfXg|04-(CIpaY!X%mN4b*-tKkwMgwD+_*3-W2pSl>}XIN
zq=w>eAxT4G9BeB4ZL@5P{+0~aZv?fh<BwuZ^KwArf@|mqm`KjbpREq5{COet3akj2
z!7O>C&T+%Uc~LnZS{-Nyb#w&Df|p0l4~57>17}MfZ;z0NVdsD*YWcuVz0Jru$GVa_
z?_H8R76;o&gcA6qs~XynBjMOy?t<JcsI1CgtA1biIzUi+Hnp*PPYsFC227})vb)}o
zW-1hjseFbEd+R$+e&gD^!Vp2%H_e0;{w@9iQGdV8lPMqa{E#9t@Um)KT%zqtQsn%w
z8{q0%4fQ;0CyEMDMUKbg-`|#fJFmchU86j2&Dwl5`RiTu&!cmIJZOZ1@2|2Fad{`H
z`=xB&PZnwwW1J+1Ohr2rimrg9dK2RTEkN9u%t2jyJRVk?Fo#i?YZ0rQxM26jqY#^j
z5VZ$>x!Zj#>qW22x8FtfrVa;Fo1Uw=XN+#BKwx)H10?XM2o=M5nLx@zmhtqNMnw(*
zujZCQ!Z^IzFBs%wy5==wx@TYWe+FY+X}E5E`XEPGT~Rnv5Z}1JNm+ki>^3ZE-`n;)
z^koy7{KotqUS%!7AmStU)L_4+HL$rdMu#jatfjLfcH+HNpw{Z*8D)ZdN7Q(4WxtS}
z5|;Jn$7Qq8zrS08DMPw>AtyGPL8gz^|0$&4DBmzd4XIe1aH?Qp9~3y|e_+cPA!~62
zLDb?e1_A=xD$+ZsVh2GzpNLu`@cE95mA8L0lJL+|xco!W^#EF6=9*lA7BCf2`1wKH
zp9pW`Q<!tq%&@p7{5foyq_giwgh}0YS};gI@s8WOY78a41FaX0?dW+kcKLIVL<cG_
zp90k`hXl<Y%X8#GMd$=4BY#no1R!8h;EaXy)Mz_w!~3*K5T7T%$0DE~4+4x+I4EMV
zJFnwW*Pmi=NE(D}t-cBzXLK?)!7J9x_8k`Na)*37JWG`p)-}J^-;?MZ?a>vr1AVt}
zUex(+fc!IdnL8>#@%79MiuY|-pokTB^U26IbB#%8NGvCc;j$6m46>?BW~j5vl_&Uw
zLf6vob0KmfVAY;?QegA$r?a9C^)Hb1e=Z3BgZTavvi>g%!v6wU|346f|Gjz*)_+c#
z|5pu|@!vlP(xUNSs-Q2`&7J<92o41R3|!lEPn67l;DVPgv80{|K&wEUM5!R9oRjnQ
z`2f6QB(@pRz83`w0Gpqy>$<=2eO}2?u)^MyF}?i!qgBqsCRA#bl&&E``}_5{Zow{s
zA#3-x@8?1;6O%D!nu{<q>v5<9pG`aELZXu1Am5rKN#tSFyOlnzVNvQm=4Z>A^{Rsx
zW#(^{?TRUNp<|P*EFLU)dWF4pQ7oDq!-6U=T$L$tKrsf+bPKF<i`ULN{5EE(n*>L;
z1u`;93_mtG_Ub_nZ)5uoSZk}$u$q<R7A$SN^xpV$5HZ+XE&tut=Zsor_#0Myn)p`*
zkDZ9aD6R?Uhcax`VB^3dD4ds0LarzQ;k`B*+cXMr9262n`IJ4KULcdIft$1;sURNP
z@puzU{jEFEXx<%j0J5{vvc1^0r-Ogv5vxl5wDpq!%&ou5@GqkbvDdIjNzYgChDf%2
zTJqj1>d@B1?b_2Q$#-<lu^2Cuu0scVz)ZU?qZQf`L+XY}rSl$Rf8NtrS?DDysXO`+
zV0Q*CwCa@+1{K|D+fInk8n?R||A6Il^07b`rbHw|K`kFrwCETU+a^jhr7ThQvy(Ec
znM6~?0KZV3J`7j$WMKOI+|HNrDgG{8tZM~l(mG%C$Dh7G{GLomf8*o0e2&XZmQg3S
zY#l&<5`gr3g5K*mX@J6@*&X#d>a%#k2J3N8=b4j%=JMme1)TI7Pfo2P&+zkvFE=73
z@_#d@=m`_xY6ApFUV0Q3alh_rMq4Hnp0p?|csZ|v;|1+Cqwq*T<HDAY6rT4Wnd1fl
z{NUenh*Q*;jNdP!cMWtsurV~<nfrr>X5}jwsXVocUh)^ZCIF9ph^fNsGFtZK5+I((
za)`$QqpJtx`h%n;DDuUE4ywXy>;4G_XN8v$OxVSf=TJ||RJeIVn(PL6G-EuCE#o@-
zkmv(AN$t;$=P~KcwcBhNiwDuseb=C)emS-TN+tuSf@c1+i?#bh#pch7kZS>lSGv$b
z=t|e6WqQB@+!9?I3e`(F<-r9&DY1||FE*3gDZs3f8!5{$f(O*^0e*Mk5ZkN=*7GZ}
zU?ge~`<G0nd_12QT~Dee35-NtlU0CeqDI!V+@cv<jBUaz@W?c<ROwUlMM~=e#p{T*
zyl)LGH{F#83Qru`Ywhl*vi3K>(w_IzyN4@2akiNwqJLk6iXzBwTbXVB{+(f_Hv=Z9
zEs}3C4QvK%s)T+MtbA-y2Ut>;@O_wvfj@vr1c^$%wBFy($kX`N<OWcFZxL~Xu+wz`
zfK8f9p3fsC8r6KUCK2$otM-jFRk(+s`{<L4%mYRY@zCdF?d7jc;<duR7FU6Hj<sS%
z;xzM!59(F^cGqr{U-Fsdhvs<C`a|iz>6G>$HNjYuma`c2=UalVz8dUdWx9!8f0r}-
zwnx^)LBrJN2ie@8)PQOAEhL!UioFs0qTQ-7(pDf`>snA2tVn)^9P$ih${jVdfx&t^
z8PSbOi3if<lvj6OIf<g$9Tf^kNVUsvjp4paLa$WOq#=m%=p@RPg$O=|^i8&5cG!Oj
z7?f}J1uD4MJCxPHouWxWmx2<P3I$9{47Nfm0{lN{dkdgCmNi-!cY-@1xWmRZxVuAe
zcXxM7aCdiimjJ=tgG+FC*Poo6+;gtIy6;u}>?&ryo}TWWo=vgV^jhDn*d!=;JSRhM
zgTfS(b{ag}c3vf-W}(%wFAiT@kvn~eGP@pqhKc4-4RtJu`2?g^u4JWGI^yQ6@wQ}s
zcskgkL2`JiB9^wOQTgEqC{%g;;U;CcP|EO`X60(R7xws41f-QQ+1GFHEV|T6rr4w;
zSyn@FU(TuzZX6$7y7)O*rh=}%fm>P87s$yK#RpynEi(x1VTbTUk)RlvMx?e_d)7ca
z(4RWZU`s}A99qGU5Z^FCfpR*{t?B~P%j~PrNDaul#(}74X$jR+VhBk}v}4Jxe)YO^
z?G(mFV42#Pn`(_vN-1`Iw$kzmSF9C==zFZ#b~7F>4ySY)M&qCcxY2bioPNCZ0%~bn
z|IXf2FQ=d5bvt}45kc~h2>;dFKt29tUZ_Url+LuwFelMQ=r{{{y}y1tj;wfi*dzLj
zK^&$|f$4KkcG41hqL1oROZfe?bG)hpHQQY=?*?{D+5xB;U1|+XGm<l+j#KYsqO_(r
z1yw}(dLysYP0Mxj_$+f|pE8!`@$&e}3Uf9aysM3hP4Y$Zfg}wPLDksI9G+4Q^;oRM
z_o*UOgA{h%6a#Ka-HGSZ2g*RF&pBwKw=={w*@qdsqA$ema_)icpeaYD7L29r%V5G7
zFIOyYX?m{9w$`Q<x~vXh@47aa8pAIQhbcZ@@m_WA4YEEnLLfOW78Jeu#c#a=W2lMT
zU69zj_KGg{6;IVpfxQ`k^Q>U`c!!|L3|dg}Fs$FhpnE&C<LG#>*6YnzxhKA&n=alO
zP-Cse+N`_F*g-M~=@{$6u(5h6BTg!P)s^5A1<@)e=fALxdAsSDjOQmG3vje&d3_Fh
z1aI}j7cSAA`q*D=ZVFPL6hOt!eD{sN6oE4CPx||$rGdX7usM4b(Y9m#C{=i-c>bY%
z`?)oIH0OXz+>5q_?8M9<A~I)3jj);lU3m0C&_pcZ+}v{^(tnkUX{;kPP`NAeBX}Ud
z5;}Y=6kD{1V_d-288+S1-D+qq9EUb1)Yq+lnj;fO9yncr5Wt3*T`yq4#4Q85hjE=W
zbH@1b^2gnt+f8)TYIsIG^c@cs%2|=`YaxanSN#i#_oX@=bMModWA@TFnc%0cuFw|p
zuUi!3t=Fo}_LoFuZ8x%x#Yop^;!yb<tBvH+_XUdxMRs06IBNpdW__gOlfJ$q>$Nz<
z>x!xpWd<xW#oi!mghN&Tj=z|H`q_RzxckqK4F7;H|BSzwf2KHlEBfCT<o_Li{n5tn
zp8p>g<o`GP#q{@U{Dr^h@mX1!VF14Z27G!Z2KwI-BmUbPfqw`1^z3Z^bK<sRdGn8o
zhj_xI*c6H6win6{^AX9aMqv_`k|>0XTguIbDfLxJ$%cK{$uy0c(KNHwgZVl9?-d(1
zrz+rLa?0ak<aHf#ZHS3m<^@`{JEmV;#tJVvPaiJ0Utce|Pir%7t=p!$htq)dIT6Vu
zeNqL82hizMX;)Vf!Fh>cCg+nV_}SP(pjm8edeC`USP*qS3jiCy<5Q`p)R*U{fhB#)
z6ATCn`q3F+${|q$0>@3r-;4{aV|zvy0GM01bLoWL%z>gM0EUQ!{AesA2rNSkgCs;m
z_XUa%NVu78-ZvlzgwXYSOej7WsB-3T72Aab6*iL4pcF7lvzP*YBa}W!23V&kRP;#S
zmNS7J*(<!lS_tPC*N-g0JXEjj1w2S>9&u#%{(k2~y=;Ua)NsOre%8h6QR63{pu$4#
z*PJwM-XUx=fMtIKOA=s04!miO5N6M&hdT1zSf=v{?HSO(Lh4+@jxJ<1_HX;Lzc+Bh
z^mtKWuZi%Eva_8e8Y;^pe_VHuDxr{=U*Cr(P%xX<F6Zg72KH%(MFbebUyhHwswxjO
zLbN9uaT|qLBmo~CqzFh@4+xpaS&|f*PQwdqAodF=LDFZo$1=n~kbyIcV+0fEfjt$d
zNg!1w$k(UH!#REW>We}8#;mu$Xe-b?ma8W3T-#nkB*M;JBhid$3|zmVSfMD)0Ewf6
zo+k6#0OL90#2!xcRa%lHVXUo;Rr_2kYo!ylDV=e(@^_Q>>Z=1GtSRoy-IEOA-QB5U
zF+UI`lC|LVRqV?!Tu(tqjjl-w$S&Fxg`50=`NV0!=ddv@BlB;ZvA9D&TC-f(Tnkz|
zyw6@fCNXf7x4t9Wj(JS~(7!>1Y&Fy}W4As#j(`FROWSNn@D;Q@SgkNPt(w2Aw8_wv
zcQxRqkhZ<=gcB)p*4}ao<`Ybrj)Q8nn%mJ;<b#~&a2$pK>h<jIMkqo82T$&{OFcDv
z3)}Hvsw3uXS(llnU0TRk=T%sRrOo}ZO!`3khg!=TP>@H__!8BwviKkyeD%~4FT4uZ
zgVFY{%96tHt*N-RUhFRy_q1?hsuNd5_mj%ur+(=s_pa)=@|M?}ZG?8g52Fb^F#B$o
zHi1#Olm*zOtIe$n@vB(X1EKXO>0n|tW>~f((x%Ph?=}#4BE>XQ;=g3W2RovC6t#wW
z$e{b-7tTGMZDS<b{VpW<>1Jhi`>K~QPDYE)>Xdc?yN`YA#i@YiiFf0qeLMwq<ynJe
zLuOSQsW7+LP*=+GbN~w@X(9Oou7;E~8G^_YvvZ+gdHJNd@nhs&Z#Fava`9K@+)L4^
z*{as$0DR=_tLgJ_WZ*}Y-ZtUnc}m?vn?|N>efJ$7nT0yTd()DO+>pFJ*@CZDc|<pz
zs-x2ajI%nu$o2l#8tJV05e@OmfFy<|Oa9Wx4v|N_Zsxm9sR44Gr61>>ir-d#OeWl5
zR8l=$?oj26xp#+_I=U5OAdHobX$Ul&9*%P0<g}N3bus-K=<VLyv8XZ8I9AN~0Lle?
z%lZHnxyesaX|cHmP%bO6x1Yrjj$BA5&ynIF-G|kFW)f4tB0{T@c%+p{6#Y0y!?{oE
zlzU`GbfzBosyMXgvc{p5;7z>$qZ>BV?~tL1W9a^+l5A%`;3Iysjk+ft7n#70C}FSS
zVVKc8x5`Qw<I;h7@`J<}s&~?wVuR&lbz|GEf01?0HAKhL2^nnR2#k`<)P;xfjLN74
z;yb+e7zxJ;@aiAh)`|&oxJS1jEP3@KAGUXH)R7xaZU&yIW=_$rYZm+S8&;XGGM)2D
z)ZBNkyh9#k7pq?9;oId9gj6*Wwc^p`zg_3=)~tSg{V|K!&BL=4ELo)wkyry8p)t(F
zezo*1nChq!UE4W!RQ9p;>?2h2!5S_Pvs5`L1`d{l6D@O@#nGD0!3<*CIlvqabc~A@
zmRsM0xni@ZZmgB21j31p7H`Fh&e6qwV*Qgan(L(FtRh(hEaS)5V(rO^3J6aB1W#p4
zXH=@2$nz)4)cNLjKRUjb-yR*(iob|hi`EgjwTs&iZ!(8_<-&l<3@xejxV2+#F&AAg
zGs+hyw>hRN^}jb(6wGf5Zhpup8}+u8U{<BdO|q5d@Yt;9hjhH;&u*xQsAi*CbJ<Bs
zCr}t7=%-G7n0c0^h_uXW^PG1q^y4%A2D^DX;<_Eb8ZLq=JmCe4fU#OM30#_ZQ~gw1
zd781?zTVEzIuk9O)t|qFsCJ_d4wkQ1HIZcp?lhFciXTgQ0~;}xBCi}Ca`#R>VS~r4
zG&-YhUs}9y_9fc?Fnm!xxTTIQbT(%UjG3%^n1pfPy&vRrAwtoD8F>L__4knv<_hAj
zuU9)ZXzgF!Nb-Xv#>3Yb6)Iz%pDzLxyX#wI%B38ZsaO=EmDIR}MBtoQ%`6%_vQ-{g
z_hEHqQ!x^a9lW{(A@`a&yuzEin-k6j3%(E1-{t3Bc`1ju;&cHFo#VejMpA~(roZn>
zzY)Ksl(4gN+k<`y$l6nvryx1+MEkN$oc;ZivKobc5=Gj)936c#)C^0c^z!P1iNsK|
zb0Q<tW^0dGq8b`@<R~jVwFl`EArc1_v+yFBf8CuKr*r&p+^Y@JE8vWWpmUo57b)VL
zJqK#zR51xN;@`2+A40$12;~<x`iWCu01A$J4z4za_<)~<Z@@vwO5fVR)XEs2f%(t1
zRAEy)dj|m%T|0bwI=VM7q5C_cXMzE!m>M{k*uPc&xm^2(qWE>~4gUZ@00{vhA!&Ik
z0Vy#>Mf$h%ewGRv+Uwhy+BjI-y-5#$;jX_gy#6ftJw`rzeM2h;d=~n*F$w6}h#Hz2
zoBSF6Y~|-M8U}_paPzZWX<f^=EBMzQ#T;}kO!fJ!j4cfDY3P|~>E6bx;9zK}jL*Uj
z1Nii3lW*&-zZ&7^w|2o-r>B2w_bpih3k&;OH5SdcV-~u`_V{n-{+t5^LkE0vfC0c1
zU`O%mG-1=X<{AFLW%7T2N5vmA@^&>a>db%S{QY@xbohVY|5fs<O!MdS#Gkc)P5bXz
z_;sg#-xC;spsA6Op`D?XzM(z7`df1VS}SV@14E;qw+3MF_M851CCmWRw-T1WO6ZvY
zZ#R*i`FDxt-^WY;?`g;0kR{XGO#K5{(y_eF!msFGkR=N}-T#`0;W)<flY${;KRkiy
z6(JxHWyE+Rj?co_9~cK1gdv$O)q;{7%6@l&?c@lTBW)7>bAb+sp^={yKpSWj(M~I&
zO~bb+nMfO^I_@p4sif4TM;D?zXO@=cWdFm=EW38b<JZ^m*ZcHW`zG9cO5%4UiM&{1
z69oKUWnqv}VVV(vN3i)mX;^`PGcySzGcq&9fn*CJzcWg;!G{4C4N%0TL=&lM!uK7i
zmrddhhVX@M)0G4J%*YQjZ3dM!F~L4D;9|neCL65=H-*mqx!X31qm2k5@7qVwZGpIP
zWEkKOQ`0K21A0FaOrsbS4rIZPX1N8+WVs%q+w`*dHej)kn4)pSHn6<e5hO_h4266_
z+iRWJmb8pN?r_6x=e>xFJ4Ts>;Tk_GNA+o-z*A)5%ZVc8=EJTNv4IQH$J$;gN}JnA
z;)v|oLh%RadJrGUeHf0_HTq0Rua*kxfc+66;)=jGf>iec=LaISXo!rs3IxyB#prB#
zf26v_7+BzoLbp8h7ga_Axg;!V{yQi_gMg7ogLw9XDnWjU9L#J;LR+>8*|@%MdR~MD
z$o?P%olvMLz)XxiAl!UYBj}yPwQzf)A<Q0?{C!G5!R}=p-hv(<O=+Q^(R>l3ljw!M
z5%L9Ks@`B^e;1UC$`bKHB@H2~f2Tj?KLJ-y-H#=Yqtxc0-+i!{(~}ahV%7H1`><jI
z1yY>5R`|TqNyODtg4ruK2(WfReXbEQ8(w)N@gnGR(1S4#ZyR_65}%bfJpGb}P-zxx
zwhVtf8`evEycB`w)zy@L6{BCn*hqiZcMJTydx_ArAYTDRRI=b{SW$00zTBZ{@X71K
zuX|H~X<d(m%6@5=0?p=S`|>aXK`T}0dsIaF@mH+WhxQL_^TFee*j^rEloV?Pn2+hq
z54XmM8LD&kF(k_tNk^hfl*#2WEsw$8oZhWyVab@I)djswtRz$wt+yE)Vs7l;jXAfe
z5|v14qQ+Yf8(W7Y)DMG2-efvnFehAXRil^!xNb|$&L`r4?$vj4R}i{Z`rxe0kE@<1
z<;ABhtAn`M2QSCE?5)Q^4L*!U-|!N_yP{L|FG2k)FQoA;8mG;V(j275AQShR=JTu~
zv9?9Rwfk>SSrEv1Q?^>sxQ)5BP}UKvD@0GRSgpK;s_9&`V?8~Eb6mrSpP|mpWUeba
za80S!sMV+?KFy@B<Z$CGYjwQpj7pw9G-@&)OEIX9&X79Sl(McSqHG?2xZb#Hf-A({
zDs#j=V5)3Qm{!{(!E0kJmd5^?e|cLJx~4c*%X)JRlc~7nWE-EUOY@q-QG|c-Fb_I-
zy^s(w@E~)n-Ol7mR6+}v+&U?%lB&_VXwppKTA<fxa9a7TdI?tjw1?TVcuBY%w4rlr
z`<bsTcezaensxvDFiv20!Gn^kA^(_;4{40+7Un{Trqb|BF2fZ9hrUz($-L^>>IDw#
zc#st3sGb;?TZ<dX(Q*$fRVW_%+Hs2E#hIi9NA&=o#-b(H?JT(DRBMT2a3KXg$8oGF
zy`{xcS0;qf2t1PO!3;Q52A;-^;y6BrWd+OkM;o~h#_nyxANG=TR9w6XIv9PcSa%aD
z6DF4<PrTI>*tKQ1j#AE5*@C69iV~1ZOfMilnuHCr&-pIJqoh60sH;np2_3C{MGt?j
z7H>YYn$@|wSMV=DTkU@sl72aJE#fb9X%bb6J}w=uG`}+Ue90l$9(eG#X|WUk!90vZ
z>t=ml+Gn~c``FK^mDENtL-sWB*tVpuUI^J%amd3Ei^7!qdWU-X^=p{Kv9Nven&s}r
zSs!G-#E7c11m`=XUPswA+3csHaaB7K?(5+%p^Ztk7E>orJ6RzF%S92(jE(|ha|%?k
zGI{pbRGy6GhNm(bLn#WjVbjU1&xTIAec0xWl=tFGmyc^|jv-oah8l0{vAAc5F5bT2
zd@-v7@>Jp>PXVR*>D4FKV*136DrWrBMDk!O=I5hx3nzH%>?!o=lXNBfm7R+*J`LrN
zHtA<Y6yi}Qif3Jm;@9t_(e6Tdi=_q{YT4FdPc<VeuSV7lV(z70<8cvmN@E3arD*}^
zy#Sg6y}8Z-&#r9UjE08X!f5Zisu$Kf8B7z~qHL3?qHMS_9-tOZg_D2BIB##n{0l$)
zj~M5trQr>>{2k-`e0uT^j6?Sp{R89tX_Nj7<EV)8i>k`LVH_#3{{(U9|8Q6Q(?8k2
zFQ5H}IP5>M#a|GIjq&aO{BMXu|MTEq5a(Yy{O<^d^$i*Q7lcFeX8fRGcza|;PshZD
z&&o{qpD~W%KjE7{(7`|Bn?Lh0!KgE_u;Bj<zx>@L@_&I}=mCarBVzbZ*o2<(@9Uet
zpL)FknYWqx4Nh3;SlNC@{|ru8+5Y$C$>Uf<4Moej8zitil6<Tdte|(mx={NNVqdUy
zJ_83ONJB%LMx8+H)0z_J3&>;hA)2~0S3EXbdsgmlK6<%%jjuj-zf{_%AF|zW%o*h=
zO>e~o%%}1h9{(6i!>5gc0xBybLD+!sX=-ZDr^CYPf+{Lz9KoZtJb*(3_6Z1d1*(y)
z4NeRe3DD*RBla1D0$Sp9!PiMp9s@$BJJc5Q0}|sT2QjjOfh14mQ0F_wGfPTc1YtTJ
z)s;0yp!LZsr{UeKd@l_IUxb4C118W$*N+znYGfHp2ckZpi{97UH6~bn9u({qEvSj@
z$$bzl#Kw&dT<3m?lxn?;xChVb5ZH&8hR&Dr2El9s67b4n@m$+f7Fu2&QoN$Q{dzLv
zt<GBSzu@+y64ajVAIgXdEZY#wi*)8)aKQg+D2)Z<+dThlue7=_gKk6%-B=e0!p7&J
zvF!00(w%0Ydm{T8dt_l5Mn~7|5bT-rU7*0r{#LfP_ao3ydz`|gg8pk|?z6kxC@O^W
z_X`^zkS1^A*U_xCrwL-Pk@q^C&l83d0vp}Wr>wc&p9ecfj|u3SNPL2|fpkK6liYN;
z;U+=PK|k^VVd8=~Lh`PBzy)nyzZpYN2SP|chxjy4MEA-u7tEA}GJ^*5O7-L{=z{^|
z;NZ*g%<R$O?+1i`#|jPV!|+Pb6%2pTAqEAcc#i;W3+iLmu}`3I$;u^a{#pPDzOr^D
zyFKf@r|acY(6P_A^27tS;T7fc<ckl4_yBnU<b&?L{$`Hji9!IXdjS1_+x5~3iPG>^
zR<UC3!6u9Ugy1nz{|fqnlIW$gWAO<R2FPd3d%gR%`AIk<SRT)N(>s%jg2LTdMtY)~
z!1m(I{xzQn2oW9e=B0ySR1*=3eEI$~^H%rc>nM6v@RuO|mF%6QOU9d>9KP>j*95)X
z49%M)MP<@)6oGu1OaA5xg3UJ_A;^*h*nM?bGh}yNci*d~3cm!0Z1a8wf2CAy&r|6r
zB&BnC*YP3vGc%_W%JYE7+61O6er+YrI4zfjdxp_;w(qlv?~6rm{rh@(Qw-uH0Vm9t
zCKsojo0<MTX9Gt(DlGn28l-9RS|JMHlG<8iMh{1P<4kj&OrEn5y6dnrtBf*t*C``t
zG9flX1uR1jp(6<Y)Y%n1OE8qHt{|fqrJ%Fn$C5?Mk7^Zsb6E9p>}a@M-}w7wWQxnk
z%H^QJb4?MzI`^<3Oa1fJ>a8?{1%Njd44-*?>upIQ?Kx4&jV9iG=jRnZHf`+QA}8n6
zc4|r%5v<6mE}#x^3bJ`mpufocQANQ6cr03Bp&J<xWEw^@I1egXvvbk}h=h+28#~}e
z(WA^E^AedBj{;#aZ#;DxDdb5|lJ=Trq?mu+q6CA@lyIL>pu<<GPL;6OOuq5hj)ZeP
zBDcvsul0YwmP4Ae&Wju*rqm_#fi{*cz46_aAEGr!^%Sb$S8Ca*`YuUNI*hTpJ?Z(N
zuy~O;fHmprjyjWux@@-HF!|=l)wSMNB)ff_uWUB{={1vYNopJkQ##(Y^vWD>5T4go
zak+<$Ak4|60@AyWe&|m_Eqf>ppq8F1gw}xP$i>o^kC+Dwq2t7}$PFptH6aYFAE<PX
z`$8e*gkaa>59_(K=aq9}8O$t_d|RYjKf)BdkqF0bbB(-Z1|<{h8_q5hH-1Hq<ZEW^
zFcfzmg?e`ZDrXv2tmNpT|G+O@3tB{vpx*qE>R{`%XeP6b2wiet9lkU*gT6rVhXJI1
z<%GthcLj?$oni(ogf7SYnT|4!Fo*qoE$NwwrYVi0#SiJ`_G?n}^f2*q`|?HijZ>G<
z07C|<2aQ{eQZ!HRs_wvVsp%r5TtWkN*@b2=>8Lnfk9*DSL+~dPw{!tb$JskUhIuHJ
z?7P)Uz31t-^%Yfn{24ZUtA#zVC>eS@VeQNiGN<q5CZ$?qtJb&N^_Tp>5E+wbCPf@W
z>=q1+ViB3IXX9C(;vU=G(=o)d@8@+Mff*%REF<Muk3<9A3@j0zJn8vT&&cL3l57GY
zaFlLw(HV1wihyLwB-XUo3NFqR#Jxe5g+x7*cpTD|)*lu>@*sX;2I=T0=N&lvg6T$*
zz1RQU<znex!BC&Nqfx}7(k;FlN9%_b?$;6%R3W(jswcrXolvZeu*VSKGxizqGVg-H
zjn)~UF6NCzIa+8U=41n*+0Dl0Od$}lP}fqWCs9WR8py1}sW}HJEP1hPt;&fw4!Uif
zt_ujc^Hk{~Uf$E4TEC%9ZA8knnFw%@(_77P@~*dxbDI~)mhXnbMSR~9_hr_>XXdSC
zGE6YyQ`(NAo7YNd$5B|^oJ(_it0vFy&`=TV-W5wi<_1<bik=JgmG{YZ_lxvrHxqPQ
zsggRD-5$^vpzLosTda^vuA9!01vs_KH_WD2YsR^;ZDUIjUEj#p!*wHx7_3cfJ!2$`
zTvnpY8JL-Jb4caj_8J{ldZ`b_NMb6Y8-OJn#w;%7>9MYuE0W}wNIy=z^GV^Q9vo)Z
zsjvNz4zcQN8E-8k@F^}jYH_!Bg6amQLUqq8U)we<U&sZ?WC({#-JLk9bX2{zBcBtf
zT?C72vAUphcHMpebjwuN`g?~?xK~BqS`xQ?(1)#RuMa~RQ{L@GdRwtl1NEdyTt)Kb
z9=@62;#z%ip2JyL^&yS!*C+MW+G~_FU*SF|tzKH41WkTh7%epk8o#DAix1z&{>+jv
zcANWUJD1x;z@qkp*MMBa*=op_``4s86#-gV^@}nvqz?RI%l8XbMX}6VY@S0RG=NzR
z{hrU^Wqe$IrG7^y`>UsJ__$Iv97=cC;@>o$_so}$Ye6(Ee5#7ygW?tiz28iKWqLH)
z;T&ZFyT)Pj4u7s)+1$-ZJh?AUtc^|$hNtvP<AUr!4drv<Fw(sq$6_oaHjS^eckbKZ
zZ<p*}l}C?6zPW3oQh)cDonoVku?}0f+3(8rnTr|BA!<B*L(foAH%yP>`_8*+2gZwL
ztykG36{86RLRc2uip-^%+r}*ZvO8!WlS95cjL5q|(tIk6<rQ{VIn{@GoD6>)t$-O2
zg6sPaP<hnKLJ4OdMZKbDLR1nZF06AtPqCs^TFK5It5S_hBOV2-+RHEyOTuFJa&hF2
zX4x2R$5M--r(Y<JdtC|)1>Gb~Mbgboz(cKlbm{*b!~LzzD2ZXovnh^=o~3|xOsjQ{
z=-SYi7UwE(6`MQmo$EU>X%`v6HP-(4$NUXPaoa{lxnT<Y>u$~vkYQ&B*sloz0q7JY
zE20&khuHNRUsE0DgH5p^<r@8;DnH{OLA;RR)#v7uQkQRW4YLoVj<i}OZ5w1fC1Z6|
z+>tO}Dl0)GZd{-6N5JRK`d!9$iGdu0OhURH40C^RlZ()cG)NRe>W$Eo)F;dC-Dio1
zjV2KwSLWI6q$|(}x#fH5g_$M*p=pF4u@2HPE58e=XYTs;V?e?{Q`)Ys0`p#u27}+n
z#uWR<=-vR8QOO8!?G|8KP;K{{9{J#dHb`U-#xUi~_To*Zg+>ks##@?PDH&y!LM!Gb
zC*r(j1t9h^09FR@x#|WbI;U{mW6bP;#KY9dH*j1Pj!!rNp=}x)KC5NU3GfR>wJIiD
zaA)S5n%PU`JJRvo`q{g*EyBGykxxA|b)1mAZo-H1FP7k^)==?QVpLbfv1FW(t@FqS
z;k2KNbdIlEbF-w=uyd}x9t|@layDGy(MtKOb3+G%U{^|qE;9PB;XxUJZ5HN$fi^%j
z4<}W{8b-G#^S)SU<s|F|%BXT`d#m$~IrC;S9e-7Os(z^+ESjx63Fr#PelZ$Rn2uy_
z8Yg)m_sO;D&X@0`AFf(ZQK66sq<<C+;-XjpelofE79l;_G^2C91fVRqvh#*@z?o*6
zyGB8EvU^D+_w7eU<5cSFZ<3fxj5@~YyA>80Z0!be!>uSfwf}B$d>*O>=GSE=DREaC
zM!o8gqT=2VV2cN=azX~v^M&w~EQZFasfrxs{((;UvG8<MZ;jQKQ!vT*1I4sF)d5m_
z!uP4TfRrEcE{lODh#2$C4P-dZtqJxZla!t$0y!0?9pv?>I$lh24b`iRH&}};GR8W}
z4oB3LBpkO8-is0ik+uk&tE9PvEG3jLF@<Wh<l6c=YIhMSd{g^Xxwh1JVlpBbpZ%y!
z+X-cIx6paUG(*W0O~{v1BlI1s_l`UtyI6JG5WJey?bxX>Q;^CxuIm}Q<b(FuC*PJv
zg&Cn)Brv5b8TVmwH4j-c$ipsBZYSyCsU|J<Va1D>4#^rv@fJTW$`;lhhgzl5#>MkK
zA=)QCED~XG5$8N}vpGwr1FOasACE@xNln*&Oew#uf9&r9vra5S^jMD&G^;dQlU!>E
z)yjCD9n!<jql9_rDTpj3d4D-+?ho)$1vjkyiqdZ$y&UCxOgwix%OYAL)?UIFGUN2%
z&t7P4z(Uf7-rLtbzd<A0i+z5=^*HWVp#c~7G)j63_f<=jq(odnSOuwPQv`-!)FZ<)
zr@v!jDI7{q%rUC$LQ30V!IgcbzgYF8FB@-**;vqg*=xQ-4e^i|ri*KAoxl_yBI&?k
ze@ELREg-@L7ShPcTL<pz1f0hadlAI4Esm==@VONTF@V6yHZ#X2ZJ@8HohinOKQlr?
zHlA2AYGrx<M&U`&tnG@irehklzi#Tialu<2UKIvl3Z4blirq&qB-Ts9lL3N<{rX$6
zF<kwC$qU<OK%3wgt|{j1<W&+9KTM*1x2s4^9Mg?S!cM_bP{PaAB^W`0M-ks1VI3$(
zDsNZPkaZDiRx&r%dl2}(s#KGmB?FjEb&tHPjC%?nkVVJ~u`VPr>gFG%)b;W=hy6#+
zi71s?F_h7&*YR?fO!_yip(M{upFcor_A@_hck;|~#)WVA?aR%1W!i~MqI*rcOQ*_p
zLk14J7}_0GWwht%)=qb3<;c*&Mw)d<6T#ce8^_;S73rrf3n`xsx*H|b9Z5C%^?*EH
zHI_ck#5j1%VIfJ^G&tXHeszDieBR0QoF>V<uwjdaM3W$*%!#31^lFEYZ@>XR!Vt0u
zBwHVikOCD4C!Tt8AX-Q%>9dvOsxgq_zc;@^(zrB`JKNFP{gG4a+#a0lm;)q>zXoRQ
zO{41m+W(=V^bWeL<@nuIpeQWp&g0{Y-uDJJ7*!d<RS%(1dn%}_m?o-ZeY21b&C&hY
zdL`Sd&)o-XnQB<sQ7+k%Ma|<7+YdufBa-*4&#38i^e!=;5==9z$GlzhA%#maisYX1
zO+u<0MM`ldcDG6(&66Tt%hhDtw%8qnHX+eiTpTl(P4Dbof^(JVM5)G+kuW-+HNu5*
zN+9yZ;_6KOg7A<n!r*R@vy}sL_ag<j7K@kRKbZy4D#2Z&f+RyWpNp(?m}#~7F&WiU
zM}-}NBPWcys|x|+HdVdb@ue8M1ASx%sW@fKq(uon{cz~E#Vi-G<9UnAj2jjzaK4o@
zlS4(;?X9Ur;Jt{qR1NuwD5?UrUOgPMKf~x@Jqs-a##|cO1}ih+{)I0g8%P66S`iH(
ze6cQEUB)(u4?b(0s}kfgon}+a)XQG=;&&&HBj2|(7LYW1gv|Dq8<=tBUe_JcC>TMn
z5FJ{+Rhh1TkwtcFf_2e}FFL4JU{pxfkF&-DN0^X3&p!9Lr$sCTSDD_+qriRIz`BT-
zU9jL(`>dgkz51>@%VjCxVLGFXB!nURVy;QS+0u;Hp)X)#4EBsKASS$Tm`V?)p!wuD
zoixg|pUjpqxbnwskI4gG>U1tO6}$Z71wB1YePHzu_py!wHHO<6acG*#w88fnsiFPs
z5mq3;n-S$pUtr#is8?bxtxonVE9|z-T(LS09R^5@PuJ|r2`;odm1vP^_R(YN!3lRO
zi_wsBs1n8HNXcyACs9;>FDs2hkjr-Is**DA&(t@Lnq^M1D&`DLJlfIc8J7C?c>}P~
z{ykU$O6Z-e`sNq9<!=f%L-0}yXo{BL8&H9#sJBc-0@t@IrBSlB*l621r7Aq_pl#d{
zdET?D?en|FH#IGUqgS|8#YA9UJWSPX)u#b*cCMN(yh#?iB)p7dg1xJK_wl&x`@x1f
zk>IR2+Lr^LcQ~%8B1aO%m~S4cg$N<P?AsG%v*Ly&v*OL1HaZt9tUexa$j$%`3|lo2
zZC816wot3r4!OXJYm&e}ClZM7BgOI{=_a<xz_7FTB0IH1-o&@gS*G)kW#o~n3EwiS
z9h=iAzhCGH5HbL_3B8k|S&9j|$TC+RHA6YQunCY-n>3iHSgQ<c&%hb9LI<gS;1_Kx
zxMMvmjB?OVuOx0MfHGmDeD5%RO@Y&&Nj)HCV*IW7`Ev<}^j)TybZxU2oT0Q0Vu?D0
z(L^psTG6(sL)ChMZ568Ghslw!1Uc|HbC|<-l#GU{y9(UOTLv0JUS4{{+I=QuQmphv
zR@>RaXdDI`P`K0Va}RwvbB>fm%ahMc*U7U$H94=r%LHQ6ie8Gcwg(DdP$5RcYmHQi
zzPVIkR<3`Vo6Akh2#hZ_o^e3*?&cj7A!c0~wF2wY*jWv=E#YGy*0tV*3MBkEp{Nk*
zt!6(IK|t}OVMK~rCgZBAfjc}(+Pgp+;BTovm_w8rb4H{xlXG)_kmL?&``XxC-uY-`
zl-5X|6+t}4g;p=R!{EkQ&C=HB6+ouAvE(-kYq+bSd_T`zt}9XzG2Fo&7hf-}o%HCr
zrF+DtmIMrz$;4=2F2enV>w_f1b?@QLqt+v1p@qj0xEEtVBejZMBIu=t6*;>>#{{pP
zqh6tSv1lZZc1eUGJ)4Tadm4WZO*qKv7jej{@W_%av+TXWCsT=`fx%n5D|jM&nSS`3
zgM8*dYQCdmGPUVWLdA@%PtSKkGCk`Ltgo9HO7@<f4^)$UFHy3ZeB$Go=ie*R`6_aa
z$#n%WEI=slKIs{!76-Vn=7^p>v?TZEsl$UN`ZIG>|9Gy3%EO^lmuX;}vaHZq#{E`x
z6u!QL^dTPC;^AOh*XU5kbkr35dQl?W7{-YUS4&@R8*WxLzg;08A~Ls@z8=?gMDlcY
zy-BTz$f)0F%BCYMj#>Pk7<3N@9@Rcm&ai~CM!Z-b`_)a!21dKbsEx(WJIdDxgz?9g
zIVn4_zivd#PAa>fRYL{-LXdhweO1;X4ZB4xWiOm3+1@<Y{gP5Dc{QBatb%@tfcy76
z|Kzz-J>fyRPQ#rscBjae#H=;(!H%-2+AN{QCBanY%0nT&)?Oif;|n%K>{z)7GSYX+
ztkcP9ipk{8Y6vi)V5_$wc1<pMi8683Cst*1QXMj>!I{xE#VbZxZ5X*!mTg3$ag;)&
zvCoPnxS!hE_jlUb_6l<8T9C+M*`5{WgK`Y{v!{UX`^MITypS^`h3jTu9?$5$BXMtI
zN~?KGLYvFefF8vK;fRK&(7Y>0hxklzn4KV7rh(m;Mk`c}99K?>#tLZwnYU9`c?fpX
zq%;YYM*2a_yQ}G1@jXgxOx-sAsEg_<+np}ONNq!qVXWSujk=Utgv+|zYjYE?nyc;>
z-l8(}rv^EnPPUvt(Cy~cK45ci-EN<~3pLPgE0ghLU^8{oC_m_hIB%_soZ2bal+gSw
z#>NNU5>Nk5q}EcC;!laNiV{vEd{SjEl918snE7tnBCx~p?+s+Jr|&Snaj5PVrap9h
zBPj{!f70uZ$gMBz@tDF0m*eOK&7{))gnpTM+q^evZ&|ptX=hKTb1pP76LXr2L0!Ik
zY;^MB0+LjU!ku6aJzh=La3p_zA8@(u9qoQnSa&w+w4@?!eP*I2$uabe{HDrFrDK-b
zHMjtmO_0OFku;+|8KV>P5vy(C14=RBvbXk^)|0-W&*<5Rew2+{uBkcoRxf@pjMnko
z*#$!!?_E^BO~OxyAx=RnvavIh)H|qjOe0o^r672UFS(iR;660}Xm}vZ6<F9><$sSE
z((0*IsDQOF(dx-^`*0R0Dqf~(7##r`$feT4I!qZM7!hU3GpTYT+z11i+muU1#C1&V
z>0dE@KU-1(JSN0LF(BjA*Oo4L30rfd=Y1%7EN6B96>InllqRNPzBhP6ks<P67n1V{
zH@%^@kJFc(SHJS(<u$j;$%cFX<^V^<SkUH&gbBYu(hQt@81{OkQ4yy0e*aq*+efGa
zH@SQEezcm_%cD!pRbHHvh)yG$;H2O$I6Oxrx~smCTjW2CwZeAbhnAA&we(sX4WVVo
zdsugZ2~m2#le<ls=QUoU$_$_7zzOLe74pIMbgUYx($R9eg5+L96Q~wEbg{hNEblDO
z@dX7H-9pLN;yacUY$!Y&osg*3N^Oc{4zUG{=Zc48o;$RTZ%zt~HKHj!*%oiNtbL)#
zj9(HLaHy_-RCaXsM(+z-xhBWiK5w^?ncRbnKH7dJ?9LG-vK^^v?uI`L^L9g)JleKa
zP<|x1ZO#22)pRgI1!!+5w_B_TbhHXNv=46>SBINQCU6le{<1_GN}3xQ$u2eXwKw}K
z2@W9I6px<pJv;gu=U9|X6SM*UO9``V#OZB8z(swav@e98KgLwAWU>KLM^0esjvxhm
z({`!Y7h-c*zxIuyYZV6+%o(L|x^f3~LFYqFaj<AyF|Sy~N*sdjBLg?9eW$oIe8Wpz
zWr!CojCn5jj43R~9m|Oju49$DM_0lz<4-g1v<ajRi8+Q9a#9+Kl|8~nC`ZqC9GW;C
zo;E!{d2CF)XX#6sGB+xd*!Oqn^cieCUqZRseXQX>$xByAHHX&r>+tXOavDt`vW-U`
z0^@#wK%x2U$|Uy05YEPAt>fh$6hR39A-dPhr2jmoZr6b)W_oTL=T^(+cMirT)sgvL
zKcT@z&leb|1v!S3410-#__D?uZ`;S5L%t(4Vxjc0mlaNI#}w<1J)~by-3sUyr$hXP
zPkXnTL^^Lb=dMb`wPhJ`xxpJRF_HiLJ9gt)QA*iFKy%`Or!Axx$CDk^&1jKG1rgL_
zm<me3Zu(uBc|3HyMq)p$7r2lBd$32jHkV0(IIN-n$J1y9+}1@c1n<YsBY-PY0k|aN
zDfT6b!SjZr7iRGhaW2xs66@&jAJcbvm}%&-abN){6$?j-@~<{IpYafW^mKmvny^hO
zqwtVC$9ZnVJ(bgzsvK)|{X9%1{XRzhMZWvHt?sJvahW})z4a$=i+Z?-yTt^Wpr`q{
zs%AD~TTzX@$i;~g%vIk+J(lwiM<W#Mwua<>HvUa%2^&`~)X#Vl4k0P;@+VT(rD7G}
zxcdjD`YlkyaCMuHq=Z9&oY(CL)wK_K-U%x0iKEaa8Q)%b{h(~;eV+*160PX6H)Qfo
z7yFD5Q7N^jo1+irBbfq*m|VtyYJEJui~IWX$3D>4Tvsp}yE}essw;aI37ID{NB1OJ
zwy{m{^oJ#8m6>aXmt*l0#jk`X8xypfK{PR@Hm?5JgH{n?&-tqWk&q@hmc`hJ1lH{9
z675E5j5W3MPsEvYR4_UZNIg-q%%$My#&IehrNbDdQI!6k#7N8%o??d?BYvzJbZ}$T
zuuU%;<KXrMf?Xz=&C9XhN>&Xnc)&kZ2E?AE(XUeU({w)NFZz-9_uv%@O)E861=cAI
zQA!K9CN0YxQRSXPuXWlB2&l;j%-olLj}y_*3M}#(t$40^(5Ie>MNSX4eR{de%X`if
z&`vYr5b$2xjy*s@EWaEn3%h_G6iNSaeIPWSxafK?%}P3^27DRFNvPG}N=rZ3Lr#}4
zuGZvXZ;+b&3~ZRW1H9y(dIPh(!2_$*v`o@wvp6A>lyWfOePLdXD)LEY7jL2tr@8}t
zOjcS$_y%^9wI=2Y!*X%h+G)bex~|yLJPo?_CRrUt=(R+1>0|o1>=wRY$ZDu12bv+N
zfrZjgua&RTnx-R~VHAM>+EYSXSTw%s-jFa((DWf!eHmu}jV2`{bjsqETE@D<kF&N<
zcnrh+TBx%qZB-c1Je(Za!-)uy(kLse99j<~FPzSZt2NeY-I&}raSA>#b~*al!9+dF
zbQYbQRy7@d7Y{B%6C^fn<<`B-TZVA$eWUhWK!yCYux^r%g)WyxFFoZg-&#Ma<&w<?
z%BTbNVA_`LB%Ui<aMqmKgW~qas?T}s$6TYB)Xiq+@{+RXuK5q90W$|CMr^a(bn97D
z*hO9<jMk_$oXcoD2je?OS3IAd&sSJLx@a8STPzM0Bh|i`<5lgk`J5Uy8*^?BVDT-M
zJxaY3e^Lr~>QU4y++SJeXqelTymrx)6~9Q-D3_z+mJnMrJb%H0?6dqd%C$4@OQN>r
zv0vWO86TtFrowHYvo`Vaj<KT+K229II_iqh8>gU`lQPE>xN*`cmUYh0fn)hK5@Y8T
z{qBQY=Q6rkh)qKyqtLw0%Lgo{)SiEnIM6fxyT$mYIN<*%<NVWK{FlUm`KMdt9}0(`
zZjpZ|9DX+cPby9kQ4#4s6b_32N#Q`x_^;V>ewF-|FaAF$9R8)l|E_Rgd0X!PZwd!`
z7REm%4)kwk9d;J>|15E^H*_+z0@ykl+B=w9TLA<BLI5#<G(Z-h08j#`06qb90s3!R
zPeXtaz!+firuno0SOTm7)&M(zJ-`9r2yp$oM&g%B;h!}Uf8MS)4d|P$^tayg*Y>Xx
zR{Ec_$in)w^3M+=+t2vdhxLzaM8A(Qv;5SL{3>H-Xa95WcimsxU+prnyy;5c`uw?N
zq+|VK`!oKz|Fa$gGYdW&JsbYd7JrX~iGcy1iH;qg@l7DY{D<V?XHBNJ(fm!_@pmQ0
z|E%s{W(NE**KghZ)_35uF#coa@mZMuDrN-;;Ipv(6|)0`@LB2p5wkJ^#NMv^ub2%W
zjnB&dkC=@PAp3S@f5nUd1$?%@>a#Hel<?X98U`Ed&pVCJ_E!t+tN>kn_P<8J&i>Ee
zf`8W3(y{&iR=g=||Dj%a+keyA{`!`@?f=ynJp(<!6`!8rA2t83!DabR<}Nm-e~511
z61LK@v;1e33j+%~+y5-VRdi=le8iR}VhVu@oZ=s%(bou)vw|mTg~+ClNisrb#9|x?
zqqh=h9(F`YiIQOdR)I*UE*ICjY}UHOFVtKwVR59Zy;%6X%kG`NTXsF})^YmW-f`>N
zajGhQ!Qvz$`K1mPKSkIO&)2*Y9tgE>6|VxklbI=7T%4TavvG{6BI8FCCZKguVqCgw
zTgW;lV770(B6GZuz)B#pOaLB^h4db<I5|ojVy?~^l)PAI7fPQlMzJh18GoNbASWge
zEQ1GApaN7FomN{v;CVl|s4<W)*s^T6_%YCu>mYm51^l`=5!A(2OuVPJ43qtb<LIz?
zj4lO0h8bdLKE~0ax$;jygnJNys*^6xz8`<tyK+6rQK{N?gPx4UU-ve-22neBFqvck
zA4o+Z>6i#b3%w*9fxKCRfxj4h7`JXsko*`ZNtfTEz{`7ii=6CBTFaLMpDczCEZKt4
zqzX~oW6gDDx8wlC8Q7~=J~H!yxo0#DAydF`{M_~;zoKKUcc(HE8Z2!DDxHFzl464w
zefx61{WNO0qX-f%T5!R_j{&^C@6h%kt`YlV9xPZVFhe|44RF*bBiwY>R8kue5Fi%6
zGh8^>YD57NxU<bgARCGGAeCe_P3Nu>3c3@@o1m$H7KrE-{s5G2XbnH|=pOBxt3jVi
z5jdodSL#`&>w6w)eMnqiP?5SiM<7j__dvcg@DHrmUBS|j#UrCqTZS)WPDGawV15=+
zK+naI!fe=1^yP#bEd3uVYi&{~*KBWx1WRlBS9oB8zlv|<Zn0)wDZi)frNOXu4wbY@
z{kZ;EN=;Nidgg%Rb`#^Q=XSbCJnR^As7(^8zOMH~+J?#<EFH>Sws+5#J8ZndylltW
zdu}AKqp|4_5nhx09JikJl)ypu{ki2(7m5ovMS>j#OUq4Eebq^&<@T67eSlz1lVa@>
z!7;#&Rv3m$7AL82_U<!a7ut}lvYGd@<)^v&l|v6^A3^>;=pQW6yN~H!j;XbhczPqV
z{1Rcu;w8`DHO}b2pP0!<a`nY;MKrK!X`|aRYwq`|&bwZdtT`!e;I$}ANgdMhvG?|;
zeU#=6PmUCoB&NI#D;S773{S;Pv%vA}*YxW#X*N3SyH0?c|DnSf`V_3hu~E|Kz2=T1
z_2Hgy@KadpSISMgpiH(Hdu{&5W{?-hs<rwonJ5F}+4dI|o?Q+J;<#BAR5RDSQgh~n
zjb);3t%P0)E8kssef`a=_16n`XJ_~G=D{G`_(Eh{i#RnXQ^87#D3W*vgpRvjQTKEr
zIL<7GPmP|t;XXGjcpx9-pUs_nXmr%@G(+p=AGE|qx#o$hsN+|#xv!{3+PWGz;`Kvf
zIbQu(E*&(kO`R7UpxkUkE1_8!I`(LubZ#{8DvH=nF?TKO*NAq5sEA}Z8dORTN{?7O
zRCgIN1s`4e^seuns`ufZ04v63A}J6z>)&WTLBQLSly7Jr8e;QDSw(!$e+jb<X=icS
zkv$Lb-QhmEXdh_?GJc^#C+_?5gEGZ7NR!j4NWE<cvAOa1vDJx+;tnco9+dkzk4@LM
zG6*HC(Bq)Hj(i+>;pQk-JsdAbn6s9vATH@KumnOh`s}HIJj9@je*2|sx3znX!st9x
zhS#ND0HUUVE&T-X%xqduj15M~9RGzQM~~3Cc-~?mVg+sPfp1zsaACb*!B)TGTCWY;
z=`5C~ro9en_B9AB<DFfQOQT=`FnxEp+oCLJu%M&W%;Qk4ul(>ni{BV)-un%l6{n?o
zJQKvzQ4NGk>-RcXn#B@)f`Bo&7RTgN<%AyG2BmoPQxAVw;fiujjlJ~ABG-mPrfz7m
zo6f2O`lFEywCJ`Sovzd|ZdYxq`D#O2rQ*xe+MsuK_a-8W*HZ9ure8fnXl{pHI}9bf
zlb`adpiU``NWtlQFV3`@$^y`BWM9s|mj-WZbMMvg1YyooY$?I01)|Z0g~bY<d<Nq%
zqTv&iwvAZ9^L*O6RulOQgYGzM5KYVH=6Snq5CP6GmG$sc&lTZpul${Zww4htql~ma
zWwR=V)^YNsSq~a=ToBf%l04c$H2xBnTfq=O|Mrp<5+2vt7X2Kw`a#-}OxVUoA~$i)
z#6nESjV7AY6n?h=x<GXUyDQ_R-9+P-(_<_|)SkL~b#Akwy}I{@A=oTv-riPQt6Ba^
zJVOHnc=FugHL4NNSX6b!;6kl!tdhu@uXbx9?jj`4dkVB2Sd)i?5uYTcLB8{=R0z82
z_TI(s5069b$1=D_um%}15_RO(GV5i0_(3}tbUWYEu);sgU4kX=;(EcE3x=^=>b2iV
z?}=<%h$BU4ZX95s8heXaElCbDTaZ#vv6ph(DvzzBPwz%|ayhwA?QreB5_RD<{sj-c
z&C}u2L9uwi+v}wcbep1UQR;5?(oY<^a}<#D%Io`){hgxbGkaG`u78NpFC5bzHk*#r
zK$Jzz1kn3EeIIk3cis{DR&m5`dQf~-)L&T+AVTiqB+ziz2k-UGd^elS&FBSmD7ujP
z;IHw(a#em8cY+Tsvh9g*0lS%Tq(ogO3q<W?F>8Z7CZGmJKvq3vJSQ)!g(7DKynnN6
z@^D?1s!BxD=V<){yj`p&+cwC{cs4~_!lPtZv6hE;(hfBf;>M+qMff7~^quJtTKU{F
zcxZ^8{hh#VKtkjGd9T5j<YXwxwG!XX8ZoGz?GFOD>;o+`Zes$jh5B-d8IU3?hx}S;
z&q4z>*AJ~IfK4^U46zP6ekOFH+w#z|p>Zr|rkjyO0W=P}%?tKhc_yZ{uR?jWyeO+^
z3%43LKawiRGZZi`J=X$)$dhm!63u8)SI4occ*S@oumt>SkixDpL<)ua%R!16j)N5o
zoW-d{p+<SeZ_COVSH0cDgoU-@>Sg4u@LxH$za$@*@D9;{b6w#%ez0}Ef7Hfo&g~|h
ztIUIm1&FJ$o-%l2Dh2Gh&yF~X>-Zn0q%FVHe(B0#F88>;4qB=QDNENL{Ne8j$QwUx
z>cR}GoVkvmXu6iGEB2{87c6u3(O|gnG&24YckzucJO5$>j`7?4H22yw-AC3h9ft*U
zi`AE7$;)+j)dap?`lg4yVJ5yctlSKzxR38FpK;R{;u?FQ=Bsb9I!d{<Z$9-FV|-CX
z&~HfL{f4XxLQ9}0_JX*?=t`W|RvNxP_Q8)_B@g@5K)1&@#K8a*w&rON{JUqAWaE{}
z>UUw17^<42?ugpM@<z^_MiEa3XcCMt{-;E`-soNH^|5DO@1E+US;R#B4y7UVxUC9L
zHSB#eX@n3L3S?L+!}NMy_VFNS+dQ7VeDYJk$tZ6fb){u36ViAd)F_PRkaHSC<=vB*
zt)KUD?pE*UL?kGOuJmA+-b$I`KGqXqOS4Ka!&b%Z;KafjJmI+0Hp+8y{d5K065S1P
zC$<kQ3z}wAH*KQq4TD80<7p$k@D53NiME3ibPA3Hx6b0IH*)ZGCAu6dYAKvV4NPXT
zn<J7^4C>?6jLBIl%a&^3!;1bmH{1@aAIUOQas!HLXjBPDjcY-}j`tn!A1+1SEFTw+
z*qtwh?!4Zh25r70|Hg0spf|tC<Nv7O|ML|Kf6-f}p9uLs(%UyK^e^;QQdwD9TJTN4
z|K?Hr(@Xd_kK&*8|FS6lQSf_wzsc?Yg+uXQy8Ao1eRD|u=}mlN=l_-0zOh<HrZ*EI
z)0;Pu`9G6d8$&x&YlA<i>o3A;|Iak_50dduEcN$Q{bZ>>#ryyNe}47z&%OPQer|v7
z{~F1^M}Om^e@~(NKl4#07QnA*!e?Ur2UGk{yzh<c{Y5?L>Hf`8`HTI%F}%Okdh=J>
zzm@z&G5?R8kKylx`nR=#mG$q=2A2Oq`REzn2>TyDKMgDv4u*F4Kh3HRhJuD~9$v#Y
z-wBMpgPozSC5+3Wf)X6mcSp%V8F9zqajHq?8OAz!n;ZBDCMH?B8OC*aB}ZCuDeA$I
zaeFapv3hyBx;iFB8)_*PIwmDLx<&?uDhB3Vc_o`MKoRwj<T$z9gw1y_3I-LM5h<D>
zN$C-Vv$vB)N5NB~(~@!#(=yYN)#Qr{*OOv%5y7V9$`Iq!($o|aQgZqYO^Tvok~MOo
z;!-k_`|}a(qK&oGzWT8XvgOwSkt!vqDZ)9#`9VxXr@-)%6>RNpD^lj=71-`SZi60+
zgSP}=NAR;Qmot&|1L!dfKC;EpZK2pR+EZpzUf9EmOUQ?!dR!{Vhh9v?2Nm+;?xv>1
zsHTL{9;(J9#U>vmC1%8yWSN`f80%QTL=R9q4VQ^ZK@U)ijme5ij8I5}hZgSSXK{jK
zdgui21vd#lJT{pKY@$(PMI|MxAj_*pmFW1$!tdY^-gU}S4wcD%W|?55qXVM^<Hw{z
zA7z+p+j@!{X>$N4QeX`1$;s&vr`3T0xsXIFfk$Jwl$WPMm8bHd{XRE53;;Hh1A>q$
z=U4MW!XQ`k9Tek%e#^X0f^Yjd$`?ttjGUgGnT#2pFl?WPtnewsOp{0gTvLKE%QGm*
z2xe!epq?BiRw6V+{!+YC3<^`6&P$Dy&OkwdN<OyPN^4lA!D=w&Yq_Oi`r!s_>8ERU
z?~G567o?BApWi#yGAfw)OYMSF79>);)}Kv&|JuE=fI-q0Q(g#zVHtgNefZ_EM$~2W
zdj<F~At_VR$y_TEwbsHibNFp$!vocLcc3og&i_Z-I|hjoZCko!+qP|6yKLLGZS1Pr
zW!tuG+qP?$ZFHS`?|JW>`#N6tkM4h&Gcr=KBG;EAbBx)@7vH?D_u#HtQa?RKKmJJW
zeq7XPAEDWK{oZA@DWoZw(3n^_X;-b^GeJS7>+$?*@+!xDR)XIm<Lma69AoD1UZ<7v
zHpIexRY)JclWjj#oTSrPiu*EoyPJd_Gft}b1@ZEH5mW6>ypgw9{dOyUQy)>I<1)Xr
zB8OTVsdwhS)p27L#ZSKCt5H(mMvr65`6b@d)8~^@88aC^GK|?%By0XIgDk<`YBt&U
zcMWcAK|@Z6y_((n`#Vs_(qb#dBz(=OSuW1SLrJC8yXEp({&riF_u7V;Xor5yC-r^Z
zRzcX{oti!C-EaEjfqP)t<WQ^qaib9z)2HTfD5sm1)9EtsJ$?kX4TdM)$qLA*#p&^l
zy#3SYocHBH_jwM8*{rXZ9g=P91pn7nH)bc>wyUY!_CWWN8T~{$o}Y!c9blMI3V+yn
zj)rMJR>e{pv0SqI;3S`qrtS9Cj8$|SKH_POQ5IQ=@z~@CdzGZcxLPPxG)7ni(_D%e
za+;@*^Vu|ePmJ8!vhuw1N72+Cy>Ag)H|VYHId;p<8bdRyvGwClYUlSwN5!q2HFtFR
zJI-rkEVtS-!_JX$4)+P%@FWj%hvm^&2qTOea?WD%_6wc&lke_HmH~Fj%>|o}Lbvc|
zXFrwO$zNV=GusOZBUt+kr$oJe#lg6^mGXf12b`4-BuivCEq)EJPvJqOqp@EqXC^@0
zZo#(Qdb*0Y*TOQ-XvZ^N<$PL;WL4iqS?HGSkER^dCEBsFiOc6^jt)7*k_#&Q6uxfS
zTAvk%W%p3s+sG35e|j2RmQe8y(l6Yr&#dn)_x`5oTpw@4|J6?!MIFyfAox}h;2{*<
zy$(#kPr|#BMv<lP&}!&#lQP~1a=kwa)WigrW$sE@l|Qks)Nn)`SRx<#%pn%(aL?Cp
zvsUzZ@z8R8ujFGJ@&Q8us#X9F4FMeEEDIMUeQgUDUDF0o6I^cm{~!s|e@VCmJUmeU
zk&*E8jQw9I?*BEz{;R3*-xPO-AJX`z;{G4R^KXi~vZ#if^gob9N#lR!Dg5t(JJUZ3
z{|!lgJbnM$j>7+TxPL{G|Hw>W{yFvk1QU+`A24C!B%tN|;Rwc`dG8-_RR41{F?6xE
zHgTpmbTlwBu{JSv{#W(<Kjy)I$CCf@O8#I8!~cCG`9FDtf1L0Cizxr5>i%yd$`3{S
z=j|f+SCaVgNB%!|?}ts8{|PVusv<M}<5K=PBK}DfOiUa<qwb$(Nk$e<mVXRM6I(N9
z^M7|sGO{sp{Ab_X|20%xHmj)PY$lsS_ib%KxwY(GVQB}U!GVSd+qdi@Y;GaZv~oj&
zJn#1D1UjAVY;`4Uo!oAhyzA@+Fs@Xxj@;!JDX$nO)q<n}n+VF<R%Tjf1_Dr`($dPp
z0gz*ZhmkPRR-s^+ADcou#<MvALjiGsg0uo4P3r@o<NGHF$A&@Qg-Jul0&#i;*;LtV
z0>CK#`6jsqCcz2N*Mepy_m4=+fSpC04+}{H7C<&OfOfwBY39kn0l@P08cZz!d<q5P
z1wgwN%gG6t+>B-m;FQ}`h0OHMFAF8BN&xWf7ec$0^<6Rs4B;9g4v6tpGzQ@>t{Iq#
z(+QX?KyB=*f>4Nsuz&X*y8L~my}Z>YxHNg2bM?)t^sUyBR!|l6>}TeWleM+wukQ~v
ziUi^Mwo}&L`yH<YsJY(G{dKJh%FYa~1r14V1y109&?D4bUEi!LAmyUP4vp=Py^8x%
z!!SE`=f^EzdZh<;p*YSoo?brr-BtQ+sm$Ks;<#|<`sG&hZTua{`ORSL+1soOAPhJ9
z;V6Ve*z<j#bNfw2c3=!x-{?{gW`BDJIN7VuY-c?B6o5eAn}V!=ZVdSV1kgp$e_{Re
z?PT;9KrH7iuzEo6=yxRrJG(#b{DuDUi`++#5D$PWx?3#v?EL1QTr7I;)!~)-*UY#U
z_b22%;3};k9GvMcKcO!`2Qz{-ptIvUvKO>IyHl`;&J;nz<8^7TANpI3&K<u29-KJ1
zseWz(@a$O)#fjgqZ#5?LLbDaWcKfDp<Y1WbpLXYuasW&u(6I#tYdH|cJZ#(3Y`y$O
zdwcIGt+b~xgz&~R)o`ZOY<@(saW4RUx%_~m1Ol?Xe$4cP+f(;)-1LJRQ(!P3)WG@H
zppM_nMx6*c)LJn;Oa$%Kv5(*E!p1rQcz$g{%jvi;_{e?G3NH1ZT8EeXMy>##kAwk!
z?GBBfGZgqDtAM9(X7w)w!vg4T4g8Ta;Ec^*CuBfhamNQ=X1D&;-<z_2fd~!_{IcE%
zcH#UW4#^+F2zq7wAaO}w!Uzg!e#rbH@=x%B7l&U6gVJB{f|)2^2qI#)@Pg&k--O~W
zN&FyX)o)=0OG{rec7#hy-w1_o9sj7^{?u51*4mfx11E!@@B>><KL~$EUj1X?^Jn3!
zM*=``3&+~j0N(jMrUB3cb#;nx?|ZWxX!CpeYlfNlW`?Rwb9G&FHIR1m8^;^)cOmy-
zKR}13f3F`~Jiv}0{=#=9WZjojCJ4duu^)t?&8^-3p}%zAk>1P9*BkUVC!8PQ;QAYV
zaO?U<2!iNF4?@1_GrCab#kbJ!!~s2sx;JKZ+0l^6s|R$UN`aqk$6x6`%v!!f5U6i{
zcJcZFO{i-7kMbvdu)4?3E~sbtM?vfE-hS%a|EQnPe_W$}%_Qv|?!TIGe;kbrz3+H@
zx50A|>Jfig5x1^!sei4+f9%kw6_Sijq$Gj&j)QstzqD}@k_Qf4^Uu?4_QiUwUFz*1
z5!CE`*Cx>({sjT*@<$t$x+j3nlka#qzJc;f%g0Z$m!6GZ)<agt_B7>E5JE%F!<8IK
z)K2wXKIc_7+0XqBd>7q&71_tyy4~AyTWcUl36^uB@8Oa5GkI%_Kh-fUcfaOR`h?@`
zH@C~~;yVse&G_Qfjmy{LNp<3LR?eL!sA>wUm4sZfI-Oh1Kph{cA<y`mi;Ji#HzHFO
z@H$pR6i;qAh0II}>1x9?xI+h27vgaQw73`jDIc7g^I-_&Vh4ziJV~0?@!~QsOG1>8
zbb6T{*ZBCUS;@!<P@dPAk+sZI(ac`JX4*VuQTF-l_#7iM)lA>DE#DxgC4MZu6aEyM
zgo)q_(R!9mpgfju(TfK;?p>wY*XR~f1{nu`uuGNDMkbCpp~wx$6o!FPvXH`V_}Upy
zDH9yaZon3XSonEb5Bp^aih;g;YE-71Akm$8rNS%5{*ucfkmdXfYKyS!Jy2)FXUiw`
z_e%t8T66`I--R~EY=_g3yuC=rfYiHq^v=P|P1H{^hS2=B-2N;atMgQ#E^`w|@g0DJ
zQ}CnBHVX1lw@s*<Er5(@1dbM<XBBxot0Fp<>QN)nNIbGGB<7E63c|^=fUCL%Ah!|T
z7rv=h2XOr6j9}mGSOZB=BuR4f@k*`3FaHT|WSp4&qMTs6e;2VC#5s=nyS6sW=PlGR
zVwwHK+~rDL?p`%C!1Cip`(d|Mn;?6;%q*NTcd23p+BQUI?z#?yMGyVTd$0uTliBy8
z4(`-!A!jB$t8{{0K?PH3UP)#G!O*I57E@HgrP(ecyweA18G~0=G%3<-I*XC2zGd*d
zytVTp$Z9*1wSt3O)A*;)WWirZ(QJg;0nw(rTMJt--0SWr;i^q7f182=vxdaYs=QqZ
z`QTmHJ)kJ*U3=2?SjISP(J^R>=8Z(OSM07oitL7Osft3b;^C+qtU?DOf4iPdTg$?*
zw%>2=H^X>hY9}(-zlg!Iu@GTT0XA~VsoGb)_*;*{S)sGiCK}bXcPVuYkT}RN(X_&X
z8yBds(%PPrOBGRe+U>(8)y1fFQ_+0z+V*Ftj?K2$xs^+;ooaY-wKudcn&Z&X@(M@b
zDlJJD-p~@!Mu${Ew+ls|1TZzgwED9y0cc=gf#nakG<Fe16S&xE^1xHoSquwgb_^Hf
zoU>vi3m$K1=pT=l-dT;Emu&%A9>@Ic9{Jn{<6rV$;*{#@#q^TKA>kh;pY19sdPnev
zOl4qwQ(Bbt=mapInBhl?mbbe}GM3lh09Xkiqs7W_v)XPrQ+I_9yh<GGgP*>tHcUn&
zL@|yUSB?22;xF%<Wz=?U)6ZhcnZZ|%k1(ClTpDaz{B^pg;>&{ZVNy6oTYj@!JzJe0
zW>@5WjKGeJ!FJl8JH}B_D^)z{?B^^SKr`FngR~UM%*9r)U<b~jMQ7wiXy%IVEY&5V
zn%ItG6M#v#HEa)Cu`^aAjt%HDBwcc`PjZ$n-@KZ(@jWHprdugG^&$@%uRoK4H0`qb
zL~H|pdb&UTMHbK>4y11v^pw)>NEwnXV`T$)${K&+n|~R2X@?zWd%;yI>F8C}uBR6p
ztZ<vlVmi3(Qhv3RI@vO)hJOq5NaTxNZ4CV^-Fv{VfvLH3oP8n!Me@qcqpO);xPbK|
z7|KG%NJ|A0#OFCME{vKXYc}C0#3+2Y3sG4!)|B+VGhs7w|0A#btPbmS=a3O6ea6n4
z`7X~7P7!=b)O!4j^r|;sg-lQ`8x+=CNAQfde7xM>?257e#1@EDcm9JiF4`Y73DJ88
z6#b^O%=yl$Mz5M20hXE-1n$DgO7~ndh>q*o3x2K-AW5wohkNN08R~;UcPssA)YE+#
zvR>^s5ZOpdy-)IUjtcCD;+i%NI{nP#mK-9lJ$XfAPV;&U`csM+BbtX(g5x%^)T)Bp
z*<J_&Teq0EEN}gbPxYKUnm=&5TRFaQwu`#@o;b}Hmd#n<XNYKse=y{k6%1F|!wIQ!
zFH)58ENrv*HEpN*e&3VqrtakL*L?2{_?7*V;)OZ2s^apP#qpisEs)SuE)<7paiWEa
zcFOBKFxp>{yV)<<y)0uFc(Ss)-34SmQ;${c-Ir!pA9?pDY9b|_A&tCP>y7KRXmV7#
zbky+cHYpZ7<R<Ek{w0{UJBKdrVaMo>nJggr1@KYgB>`f;mlk-@7|7Q)#uX3|hx$q4
z85Mfngz05Q2@7*qX+h@5shhiR9NaGR#n^b|ns-xZUlLQ*%Q_F9%MaSrD+0%H@zghd
zLvsH{<C_gp&qIoOuII~HPZQT)UyI_8@XktSBKk7{%N)h?W$Ak*1@$d9^(_|Lwa{3y
z+a9)!0jMVyisrLV^At&Fy=U0;u+F#FD{ETh*_3K&xFA3YDUtpg$-sIcF%$VwW_O7m
zzhmErn|n^B!z~|*I)5SyPi_ekQ5T;Zj!s+yXpVx%b0G;W1uE4sR5i!J2TIu5e8O50
zQ~JUaY{cf7-^LH$GMXjoD}Vfz5=^IWUrcu|XpAY*I_h0yS>|~=fCR<+Qj@O{*$|jE
z{UcGk*@)|A!bmv@%#_J!TW(potYE0AEOj2moSPU=ABjm+ncmAn*|b+Pn`KhrGu9FV
zFZOOin+*oYn!d8^*PP*3HB!lw+D~BnX){dn)4SPi`rV<K+)^7^;3XFzdloG@3*>g8
z?5x+^LLwM;yQ+0JvoO0({q(i!Npqm_qvr#mqNUON{TMI*m7j*9-lTJeY&=lKXqWUG
z?jQY}m*!yWMR<g2GgIgWh!zfuE`tY*9*ZLF3S4F<zXh8L?h2v)$p{2nv_-6s-L2`E
zKQi+=89V`hPM+stqko4LP^gR4zySs`(#uu%o9cMieZgWmC_=X(vw3Kg&2GRaplIFf
zAG}9rieY3)Mv`4#nLnc|am09E*EH5g2L-Te__)K6D&)ik`|V{a-o?KU;f_|nn3*7N
zoglx~p49Qj@7MUL3UPOFrUm!YHLH0MkBzQTl0`g5rFnuZJa_!D_Cv**S08&V4q;BK
zc7_gY>g<gAvf<(gr;^xH2((*s7kW<sJw~LA8ba;)nJj8!EG;t=bxdS%?39P_FOHk2
z&EV>y)NK4MpC!+(FE0M1BL_JfY3(f|?dhI3>8kkDK)@Q2z5dloLv!Qi?MH6wxsc)R
zCGx_F-@x9C8)|Ftcgb#_cu#dZvD7p!ffCAn4CeP+3mR4j$JompU@M@3ngy5lU#Ui3
zN1X-pb*U`I>cVp*O|jLa{alrgc`(_A<NEXr9yXWNY4c^r!(`}$``)vOlIa)hmuO42
zK??dShk_--7!_<NN@$d9aQzVjq{iDrV&!cu)U|x?QK^k98G<f$Yx?2zH$<0H4aaPv
zp%VR3Y}_@Fn}WE6g!O}3=F!KZ_~F&J63l;6vhxgI^F<6-_qcI8^U2WDx&W6jY9!g1
zXKqPD4;O#x)hL7lGox&thd+<$NV0;ZPiUo?Hr!@(jd&p~`{rm8fI=DKZyQW3q@>6`
zTsWKoQ5zpekVgxDqoxR_L|@Y5iP|xNqI{ZS+%`em!Wf(GROMBHgH4Q51`Ep|9oMy-
z(i0!o=hbBf2JE&DkMbwV<;p@c*#j)c)Z0LJoU@}0VL?#m+_Hdn@ZNE0RcJYBP<Wgw
z9o5_!oy<tN4Gh%>L&!ztwUo^!rc$V*>Y?m!e9_3(#Fx>^X2>zPh;dhFd@G-M@;&-D
zmZnZ$n@{^+gpqRV%H8YjYDMpZ`L6F~Rm0JQr&eiUv_}`*rz}yxf;;JdT2xqcoWl#e
zpZ%H}*t^j(=t!>whCD-7+dq{ZYMLd!eK6tBhj{ya+WYcUOCBEsy6!egc-<@IX6CGP
z&NZdqb%B9wPz!=GN&AxhJ<r^%M8SK<u3#pduIdr68@B6SaPvITn~6>rD(@{Z*sH7C
z*f^w`Mz1|hf`ozACq`A>i(dYi;0rKLx3=x{J|^dbe?(su{3bWNcDUuYeC0x}iKw+b
z-_m{qHuZjGp4Ol8&L>B(Wdq)tW%OFHlAHE@`ultQ(%;##*wn<AmV(3XH}OVuX&yzM
z`t0}O_9_7VhS%~o$@4g9%a&Nl#{BD`#<k+JvOYiO`VP627PlWDXy9XiJl3B06Gmfa
zYg-_{EC2AW-9hJPy?W2Q1g<YApZ2prD};M^?od{<X12-Jy4!d>>(pa-#Ttpz8qO*@
zJiz;e>mm;F)&)<0u;sZmvc!5uKjl(H-(D+@5uvXl)6etc2?6}7W!T;QWKkOSDy=ht
z`j?PSh-Q=eq^1Z}z2MPDB~)UH?{gheSneOvnmlBj&r~HNkx*K3yISYASU+@qZ7P>R
zj6YBBj@nw4)8Ws86Cz6oZDNp%`o=u9#-U%!qG{k9%*29d>s5?R%Ll#Nz>mZ$WU7P%
zl5Z{cx2O=&C)Lp>1on#nsCm7*&rJ*q6>ZdaOGcYWZetQ0ajQuZ;lB$1bky*%y`S-^
z<7*tegOf%!B5eTx(X5M0S`=3%-l+PuXK@O0KY7j)(wpW~lmc4j?K>rfk5HkRFh#wX
zyAUi5G7y!JHKAk6;VfibQ=hQ3E#>C3{~nKcXso`j>)$o?YU}_HxPPW;XZzSjcd?X;
zdaT1iBz+^(=zdX0FpyZXO;`)E1i<kDTaih=^|eVlcRSyB{7{SoC&Anxijxexo*S^f
zlAD%fz^teqAUbs+!PNTPusf-<YFroDU;ERd#^)UnPsymjuX8GV@d}x8&*2ocFk@(f
zI%|-Xtdq+sian$(YG0~Yg6;o@BUJ130%i%*4=^k64K=m%(y4Zdi`n>N++23Lf)^H4
z=HwGIXwvw+J9Ods<-Pe8J3_APV{=c$=5W*WqP_v%e)G!FL2o#>UfT&2?>g0A_qoP}
z&}af=1z<gzeJ7iyml)>;e83%=mz5ENYRKMjPPhJ2d2E0=;LxKIeMfSWaU1tEnv}hR
zw~^DTqk2e8;*uV%`<H<=eDZW-!1%@9P|=FOw>IgQ`tlKwtg6Y~vo@ncMxr+fe{w%H
zcVT3)t%EP@ek`e@pr2NVvzJ{5Ap>Sk%7x}35C-8geSJeTi+T%8w8Z!DIXBquN2`xm
zclywTHV<?YW?CeE{gG?$lDs9qpLqAL1tpzik(@W)9*&YoqY#9kHX)j)cY7j>QKP1T
z-mxIfK?Nx=$@}<%t=}ukz-Tb1p!QLj=4e6VGKe0vhbeHbjsoj<-zEZ*!*Tag^0V9h
z2~gFwRnNK(Cx9m{FH*v$T1sy0&SXHKU7JGb+JR~8ORrbB;IH7H*ij^H8Ju0+OK7I$
zqS>*UjW|ATE3-PKiZ;7u7&~3f3mlUWljq|*Hw#nvQtVMSor`nxZ0M=?5@xh?R=#rc
z;N9i>a#%dz!CmNwAmk^V^rF+Ynouf<JNX?KUOgsQ#%&qDIey#C<-9YgZb5#c%7*y6
z?!TAB{{hwES9!YJ8fTrC&{YY&rPq~ACSneex<-WZC46P2S`=dz5w_!-rE;GyY}#Z{
zmG32HU!%Pa*%wiofb=e4!(G@YZ?<`|5>+n6mPPW*|B9d9|LOYk*k8``1WU*gzoDT)
z1bSpNSHG*qbN1j;@9oOS08xO<ToExUDtW#5IorSoMXe2%oGP{8D)t2mtD(t_E=X6|
zEAV|zn4<q<+M7R({_SK@uIL|Udk}Tj($16m^G(Ntkmn8K>d>PeA0xu<qo8Ei=9bpJ
zZ~!0f-j)M|gp%lL&aFGQx^T?*C%V9-BoT>K0M{Bv<8sVUKCar(^U#b|&~y2mh+f}n
zn=Sp}bz{V#z7|BbCmcNVQ*`Xl8wu8?jj#Yr<=aS$uV+@Hw<xL#O;8uSVZyD^HOuOV
zeUK=B+r$RTVS!DoaXjtp`a?2XmYba1C|HAh(I9+`3=b>8j1Po?_5|qu&1w$V(yOUC
zoQbbAuM$~pX#Nel+DWZ=({FIa>~htw>A{8REh&rfe$Ly%>xlrkoczxsx4AuwKDsA$
zbx$A_!`K;v$$+()F~7qpWP=gtgxhVI@A+tN_$`KXcvTk$A*tZv3_9yKoCIwsJ5)+*
zw{_i?HDF!QuETO(Jvx+OrfBX<G3oQo1~-RKcU|12?)lCep_|is({#VF&sZcpiyK-E
z2ltYi#<px7;lcF*r9OuN5*$|ps1%ZfiM?`gvo84M1TT6osds@}laz`i{Ev4QWp_^a
z1}&kqTAS-iSi9)NBI|VlH_2u)R^UbDJjdeE01I?Zv*ni0_eI9SuO-LBYrWJQ!<{k~
zM-z-`)rox1h<Z<(L^;nJ06l34yMZ}1_8!x(CoVB8)B!J1r{^@#IT@0!mJ~GT?^)dD
zy<N2`!QRek@olH_2g)KXKQw|x@}iG(%Vg#zy+^ncoV;xE!C=ddkAmT4#CVUryQmAh
z7?@AS6ZY^HzM465=U>UAcFgfez;8!HISilMKVA3O)Y+TkeoL)b&?e^{yh&BL)R;yC
zNYG0MedQKa?iy)rgX{pVIJju%#=q&}p(Kgy71lBA2O+d(8A@&IZQ}xqUG7#~l~^Iv
zY@3`#lrjI^um;2h!P93wt7k#{te^5U<s`3Sp77BUtQp+|!ObvgI1C`N6<@}|1~0?o
zHbiN5_AtTEHuYX@mRZNU<>Dm59>6Nl10{5y@gqCp!E_<-oyGa}=yrX>9eF6?c@C2#
zqqxH?LmrOeswLX*76#n9_TkQE(kI+BwVCNG8RfRGriXT-$XPJlvV~nxcu%VNnw7SO
z*~oY`$k;-ylRTOgs&qH+2MO(btM~^~UbhtTSu~y1T}t!Vn#RkkbM1WNw5B_JC2)ie
zY2pIMgA0xJd}UWOXP?F&>#86@w&eE>1@H0aQZgv`hYoobOL4u1k^sZyZq@DjqAK+-
z*O$NXbgt2k<9#NiMN^GkR!eV4WGHDQH3&@x^J~j-MXkq$o0xXz^3<f+p~(%YPXR#p
zCL<B!Pf_sCB6a2uu6gHw`MzGKfjPNzcxP)QQbqVWT*~dNKw1@**^}m$etotHkpb%c
z6@b<ij@RO{Bv8T10-m!P1}Z-*V7$c$z>vIIH&VJ#h-Oh6oZ8luaUEKAQ>CP_CaGW!
zQ{_t?W)Ec7YJr6|O^6HbBSlLbaLvo2##Lk^y#ed=M_JRSH<JDI=b?=wku?A`tYXm8
zCOvga-Qz3QH~wJKSnQt(oy&_emwl6zf?(^;xAS&j#=oK<G5zB!@i;sc-s6#V$&H+W
zv)u8w?HdeN(Whxv&%R91H8&nv@Wz9Ki=P98ou%g}2`;e%RCnhnYT^j@TA?!DdKJG`
z=*Gp9jJZq&;gfCtZE2sprhF0#&t=~D&bQ2|37oV_R%IdFiK|TI!XCq7@w4K>G-imz
zIwGCfRo)0Q{!%NYzS1FwW<r`VY{MU-<K`p-;Uk;SjLYIpL+z_-PkARvhv$`C&axZa
zq-V5&Pnu}?{R`CHG<1_*irnYot#y0g#1=pj4^A*Nn^e##E)F#x7XB{a-YE>?lJiAk
zU%=Xuh7(WY&Iw9(LtsEsNPE0XW08nY9~UbqJMKWb)WDmePgx(EC7rm-QtkNuqBC1r
zX#(%($Hm&w>b_R+iDzrW(`tf*4tc>$_+g&F-2?emFhZ9gryv=+#OT*bmU-ucX@ZY~
z&UJ4X>D!b2c5j*Fnof&)lti9(itLWxcd~WUVjB#o{L3fXc?VGiNIkc!W$k!jDYUR+
z3S2#sxl2qU)%rJ+CF$ATFS^)QkUVrd3o`g*d<xcD;l5um`0o*?MfVy$qIKF9BSpB@
z(^93s{(8sL8ejHypLsQh^q2}ThXv6!(wJu}aXYdly)>lh?fQO?Wxp|yzb>6fCsJyi
zrf<^zDX>w5gYXVAYK4cB&kGk&I1hCq?(iHq>}qIIG5&e~FgQ4&!Wz>ww1(5WV!A*>
zAVZ~gkzk_%BJRD4Bpeo3a=kL|;AA8!a1-l$sXp6lBW0S;Uq1B2f9y7ub{2tHT)wdn
z*f_P?!eY_i$0v)XG+a4^-^GON=|MAID=XiK=LyLn*RP`ABlfv`C5%IUNLbw--{W9^
z6E1N4bAwYC|2z^!Ohc<_2UJz~#nHMt9%r~5cch=~$|6m46I0Cjq&&-RSWhm0#F#1j
zR>Pw4hvly>S~V?p$a6rhm@x)Ay=4rV0RojpPRtj`H#Bwv94&gyBTHC;Ul5&<E(AJ*
z40=fmT-YTS1xP5{>eXXq|NT$1dn(qF&CdMgtNqxE@ws)`vtx9jsBOAo%FoUnj-xY~
z5p)rmFSh|~K>7XnsQ0Q%k`^nJo_%)W3P&E7l{E#yGqUUMo~yVRorTezuB9jpk;_*`
zBFvnmZ(|WA_IFvdTLhV1uDQDtMy#ga%~RETEC;6%%vr(aOT(Y?aappwP;_CK;m|>p
zEDpt5W&Cy8hy9$2m7NP#XCi!tu_suP`;1s0jSWVrLc7=mU39vK2PQYfOwYs0z!XV0
zQPoiaq7lm+V?1#erQUlnDu}0$-!TDt4|!sLe@`|}p?!k95_KzI(Q_9fU!i_dsA4Ep
zl6`ZUkd&PE?AQf;5`*0^Paf<W!}^tVE)3mh9Y73`F2uOeQEWK7>^Q467S9)fXENL~
zy)F~Y$Wh!byI0AawF0{sE-0NaS=X+$pE=`(OLAy{a(J;Hi<a3>mi}5Sh;5C#(f^4Z
z%4RR=Mhn~>l|7;pO?g!#l?^~|9d5_Z8hIX)ag$K&(9YmMv!!!GE0?snQwV-^Pp%RX
zY7Jw)h(KO9I(ZAq^c?8hiurwHE3&^me{8xegO5U6gmhzd6A%b)m`(GOy&aKo<hgQ3
zkM|&M-i+~+jzj5$0R+*8RM&!U@o}vCKDkYoZ2H6`+nbSr+an?za7|ILVtUb-!y43t
z5^V337<O`%xR+S2V{W2xv&^T?Vdf*E3U51Dt9iSzX*>jV0#-T!!+i|j1YTw%HYfmJ
zh4NqzU3&`^vTnn@e#AXu9#=LdX4QBvD{gjj&;=uwJs^VKEq?@~xwKoZES+Gi!B<l#
z<BA<thxwXE>*;`v23vCCDczaf_JBhYUo*I38nR6*fDfmaIf_^NO`#!`<!oYK1UOH|
zW^i6kL>BVo2h6s!C{KZYLur7si*a=GmKWdk&~Cw+vNZfRDL7P8)gFzNoynM8txJ>0
zf3=@~YbeO`y>qBm(*ScdJtU~hrSe|-ywJtyFBB9&lNZUPU3^2oP^?x%Qt2e#;IDD9
z3tk3t(L-|z22xAB$1Lhem_pV<13^M}e7mUS^RvA{9@JcoKeTgf_NQ7eJ4SQoU(;{F
z-=Y$^%I8;HSE(V%Juwpzq?d;oVZ_uSo2yLfUTJf!Fnrz=ZJMGHJX=g##|*4fh7E}g
z<yaM}Pm2ZaLM_INE>A~Pu?8ENy)(PgE%#1cG;l9zRt8sjUtNG1*Dkt!*LnF;4CCjl
z(#Ah7Zqgg*q)-=1{>Rj2WEbu0aWd*QA%u&dqEnjdu^A={(ftboz<Nk$*ar1)zI6IV
z=_B(mVHCDNrVK=DU{c#CCwhhhz#J$G772xDkq52UJLIt@p0q4JAMY40G|2=x5c=~z
z*WO1D{O*D?lP>ch2}KK-0+~Z?K2N%gn5pBfF4e+=3ZQZeXWv+`n~YolvG=O+aYii_
zZKFG*7vO+!{3}jn?6T!u!`#5)MuzAM-{J#stY2;D$+X)W35BB%bT5=(>D=!$Bq1Rl
ztL4wpzyI19M`oe;5sy7cv$Pl`?Rt90TUj)IbF^IIIrd+TiBuYWU{dF3H%hTRR5Fb*
z@lf70>RfM?gyz@`%j=B$J{a6#O&y^wLN&<<DB&};Y}ENw?MK};mk-a#uYiM9dBo|S
zOcr2?c)vzv1!9*gn_&+xWHTOqxZv><qhG*OgPZ&WS6eZtc$kD9@;OG%L_TTjcVz%j
zS0~v=58XpsL&=MrYdm1;%>Gr`W?!V_^^B_i`<>s=A#Rv-GeO|ESVrSYs<U>m9nm|n
zlmJPZ8sWB@VTn$DBi^|QWoMmae-gROgpmAVFcwI+v=#8Zr~Ug8=&F5b)qT8clY#!F
z{_$^=RV;bd^vDpUJOOhb2X|F$Xh#B-qLAf{`Fx;-mbvhGtKxx~+o{voL;hTRarD=X
znje06_}H{PzUzA7hl0nV+wxfnu{+E4^rhS9%HAfO<4oFNtL`ML{wXGDR!R+zDf_YA
zQZhmS6&=hY&6y%l%_QdqmGa<ysk=P68HPpWu4j7Nda#?X=jEiVZ>P|(jU1iRj7uG}
z3461NiG+nE4Jj)VxKBt@AxQ`<>L9C}gr4qU0QN!;n1@{c{LH(^Dg+&hxxN^#EuKyt
zuCrmIq=~!cTd=goJ2guw+sODLGemclAD-YZ8r{Jx%8uCXB(eJbP41b@uixjrwZqH8
z(@Fz4=OYASiRPVvq>%U3@CVg!T<hLO3b0!C?p`c$6<3`MXO!J<X1QzHJ{GRNi}ofq
zATuES$^PFP6Y%c)$cLEGj16Guyfrvz&tHk)nfN(+&Y|%MX^UE!KBtlASsCiqqw^`k
z(NESp-1s*3RErEdt<pCNQX~?j#_ig^H-^zkie8v|+-GsM!5x2hQ^`iq;v~$H6=JC7
z;7w_!)XR)+Y$L24JqxE?I@s=!ZCtNxwRb*R`EPLBzZtef=x+$kL^mz68I*;z<~qk%
zyuL3i0{ZzMssL9jH;SXUb01)}8qC+0H(X&Hoz=phEj{)W8&^9E6t3Kb_SI!oJui{E
z>+eOg7doD6ALvP{^MMyg68dU!_m{1VJsNnMbuPzI6b<ND<X5|7&NP)uwD0B8N62f^
z?8&YZSi?$zTYafjEy=x`*BhISVDQpT5GPy^8BgF>66{`^<~SMpj(j;RG^~?Y#g<p-
zw-;W<^MQl|D>UwuT8QM50&+X}r?p<Bo24-q&FE)iV5#jajVw<soN4y<q`f=>Vmzr`
zr73Mb)&@OO&M<*Lb?U8|oJ;qNOd!p+YFQztzL;<XVPoR$JB&?Du$4>}V4s=3pO5le
z$7?X#(?lI-HC8^dwkri${i`-3bv)am6Qs@!KPm5&8?dHO>TMhEpKPY}wpWNQw&9A{
zF?64l7=IM}(iOw=dujP{i=)nr#_I!TWEMSxG^ec_U-|<V(HLCK1N%OPBT}K~fU{M7
zefA?9QViNbx|0E7&cw~*nM>_=&=WntQeF>rN^0Xx8NIe&4Q;Xa$j!xk$faaRdsC?z
z&R;|hB1Vl~S4<wiv?sQJ;lR7&@=H;3%zn{edwmZg30+M-i%IvgY3q?UAnIz3sZ_x(
zdxpD_O(J*1?tl2S?TMaHj>ybJ%hD49&oq8!r9o<+vhT?=(%%^;nmQ6U8{@FGK6%S5
zA^9px(ZAo(ZDar~KI~!Na+@};_4?3Y*U3=YZpe~b1h7k}sV~hUX-JBwZIu_xB2!f8
zP%Nx@rla))jg-tr+TvxX6(=y%AK3VL%84`1hZ<`c#%ucalqf8lz>nEFMZuk2Brs1<
z5u(w1S>@M%Nqm$}KREH)2tO-_O->lt$Mqw}SWTU!FCfwB*d|R)hr)qVXF_x`Jm*IL
zGPemga;;F87eJkxInHWIMM(-SB^RYw`8#c+K#Zd1)Nq}eU^3+<Br<e$3Ib&S^gGHy
zEXaaCspPCuU7cfS#ec>o;RFWi`kIVKxBUjSkw>V9FBe03j`_vvn1!nq>N-X|5?+*d
zp8%cxjbkAlfw+*YOuvM~!hhMlZpIK1rH6Y9EEBBxfxsg0^VP1CGeb}U?A~Dz&Pfx!
zEwo*-vT_7(Ui)(6gTE@*&^I>It?Kq<X8Af&X4!!3Sf5$G!sOiaw6ipHg?ls?QITH$
zL64dYCGXmv5)XU1Gr$B2q|tFiY|U1+n7mYXu|-`D)WMN1EY(`7`n%EN>itO|<FX~y
z>*Tx7zrBjXXZ;hPp*NhJ>A{<GUH*6wxr+D>Pl9(HR0^>!*pvWN<#I>@g6lv%mY%m@
z#{^UNLh?@mw}jCW5i$4mLc`d@3z9zc#q4eXmb|9JPIHpwc(HU_hdqBcg&T1Rwd>?2
z_tX5^?Rw%&pl!Y&7oC~mvCQ$KwYKzft1;e_MUlpo;gu7s@J<HunPpOb@W^6c>r9VW
z<gl_4w?t>A6cRn=oV(ruC6~)hRS?09AEBdNb8qS}V&t}G*Bouv?FuS35-)ckf!vGw
z#B+<Tuc<BYY@XTxUC?CerHHO$F}gOlkN=_gb^U|bR-q*JvY~F-J^C`PNxgLSO9JeM
zEkB@Uz}}(4Wzz%4yI8YhUcx=Jif{)StWFD**D!~s4t=hLYF+&s4=vbM2I?#7Rh)f;
zkxTK-2GL(?Qmhn67q1F>r20cS|Gxm21Go`aO?b&#YtLmz;@!O6uebVvTW~N$Gc7~{
zTP;$M_4QRiiQU<4Rvg~Ev&Gx;M5^$2A5>#!arWV@zzz|Gd(%v{M?^R2n^(>)K0rqD
z6pkhv77)F32p<*?4G{UdmwzIrTam40#T#k+y7Re`bq<3X8=D7w+G2TVA9%l<+UtY+
zzI?V_rwroij4{Phg>7@x#ew0e&G1{q&CO5%qMZPtG4iPyRqo#(tbDbp8N-bw`Jj@Q
zqc;K|X?=Oq)bLfw376Mg)GU5}EbE4GF)%4~$sackg$%+d!y99ViupiXM5(e@ymu4b
z0VSzUebFi3gYDk4g=8`q@fBkCFsTYaY9>tB$BFU7pHNV7zL4w>b-YzoR$`UQI=n4w
zWCYiY7H@;$*6eo48#*H5A-m4JZfmhQ^O1J839-b3mft;r*i5eFG_)-_RM+T#BvvW+
zzp>+=Sf1D8SJDg(ACj1B34fjo!=hzmh~J%}5wo#{S1{wv({w10lGM$jk^EypirUiA
zdE_!!WbH;2Qioz)9qCO|SL<dK0corp+&UKrCJ=;e{tmL5n|FSl%SMdn)(r%i)S;(C
z#Ts1`0#V3tnx|e_KZ_E!gsP8Dq+-FJ9-1gQI2(CGQH7cq5W{Y3<ifve1C)s<n-!0@
zzCgQ+w7iBV@?e_&$CLEzoz;=%xp_^^?)^c**Z{KpYPM+6r>)23FGM%J)}zEonQXf9
zyQR9C_cBW_WlR{JIxPw%6CSxPVd7&(%h$re@KRE_Kws`GIgM9%rn`>V+_s_=(8=_d
zY8HEGo3=xVx5_4PS26zfAA>g5d7SjrL*5L4ClmTC6{P5SH+6WDQ(yfK_Q{jAxTW?W
zR3n&cTDwZ!aq!lgxZ${bwt`@g>tqxCzZ{rObY;cnNv=rsW|3jpJsm4?yDKZ)l5Of-
zkNCFVtE{`p#qKqVW<I(Wna52~(lw8zj*BJ9KOMqnrpDzZ2VT#zYZ)>r0#A$UmpDE8
zNm0VI^U^#7m0PfII=U3dhe3$WMBu06X(?*!mu4>rU;@TG5+(1YB_UfvIM7Gv(+j5L
z$3Or)xSh+v_~KoSVp={)s$s5EJ8MpErcL$dNGRTdQI=oLv?EAFGPYBF<Pc*|Zq992
zOZJ(w^YYa`J|ex>PRc++oqg-VUPi4%86f#WlhPiD(zESCK)Cb8z8}plAgt{-Z4Z1M
z_l?oLC6@201=f5hbI!qb%-^eVb;kW6f&nhCCoI>HSvA1y)b5zR>%7UCJ{@*E1|C{4
zu)=+%_Do?7({n)h?GEt_5LxozI?X^NUq@zqyC=_EA+$zc818_t6R&NQ9Q{Fda3YMb
zc$9d__d>uyOY2=2yvSrM)5+F%e{&>m$u69M60569a)=f6&|PPozv7Hz-iU&sv=KdX
zj4JUo9og^G(N#Fv(aCSIOBN0hH=cqPdM$oZjJ8kFL9?S$)(Dk(sz>@zs{{UGDVa)n
z%n-;3NrftIJJca<OwOewH9&(~*QKL}Df(j>0$U_Jeoa_DVD~DOOiNMb$U#gSz1qOX
z^DO0%8f3LK-QmF1Kz{n$6fyBRyRrqC*eWUf2KhrUw7FFp)6&eRaj-tS2hOIR8wx(o
zZO2X4=)M2Sw}?|NC&+9eBirb`SN3Wev*CiLCdUwEPyWYf+(8BP+O3#>ZKVfWy;UYd
zzx3odt5|1I?-BXQ;e!i1H6SJi!8x3gwYf)vxfJc93(#!=*w<fUr5Z+T=#Ww8Su*Y{
z#Ps;Vy;U-UPl+VCr;%>4y;5HYjm6uxbk7{(s~cF&=Cg?yhaz!wW`2y8*C!zv8f_uN
zMnjrfGT6>D;T}nlkCwzIETa0h<&&@_u#6G4f3kFB9P$zXzTd99D?3bebwECs&^qrL
zW97D}tzBL$mmZd@B$OQ}7c7R#I021MngTKRK*H?L?5z=#G+rd*YH7u8Jncmc&{FOQ
zWrL9-hcBdS2vP`Zv41WFj*1EHQB6u8D|49E^lE1%gcr$B7OFHELx#AjY}12w7Cc;q
zh{q$!Vr}l0wc^6?s$30!HTAe9?{?lfH-ls9!uM47+p}!QgMldJ3=EtZ`{M?{&?@pF
z9Tw%tPF^8L5xbitI+=k?bq)C)9QFzVj@ew=>GwBJ5scb(>$f1J-x{tt%D0a2oH>FA
zH)%H}<Q2*$t}jwuD$kumV)e7CYv7x&a9%}0(txMso^HNY>cJ&IZ+4cLu?*nSy1T@}
z@D|%wKZ}bp^6QXEOw6(DVP_-VHrVuqdGLnnm#wk9!zoZ9q}eYkmEBjZzjRC`A|kbH
zwh0<(>bnq;-(<;tF@&4`A7-5C4TdTYR)r~;G$+~xw2)+$gM=g5?Z<@BFz_uWQqHGn
zfCMVD6QP-O;|!pW?BSAox;fKXpBvq<dKq@<XY#mW`hs~sattUUz{U+mW2r|Ur{6oU
z!fYeCr1rongkC`81y-+y>Ou$bFy=Q?qu5M=*3}*NZ(ajdL4o#m>0=|GqRk8)pt}PH
z>jSXs7gd{S@n4boNCqd)CA?MvLAc3{-3rs7zyY|80@BeZ>QKOrb}d{74T%NGhKD=v
zW(*QwCck-51QBO<=R%V?1&vaUM;*p4huPN4+<18G0H#XQ#(~25DXq(kMwS1LhDAoA
z{7E`Qdud*EJ+x<IOQUQZYa4v<(ztRwVeT{3O)47aXvnTX{p`AxT=G}6k)kMW5KZ66
zJB{kM;{6kvI9zKoBMHD%zS4AF1*Nm!8&F-MPZi|ezHmtfS)t_BQ`^>EB}{a`Ia8U)
z$XsxZKOi3^1JMOAk0);1q`I<zOXzcWy>mqxIL3)r0<SK5CEtlB!nb1v=?}6eS}&r)
zy$evt*2T?dR-@ibWuJ~uYho8##KYr;x4C>=;u(FBCUUbq=7H~pZ;_iM)V3=4-g(6d
zu{RMxcgJa3gLe)yWz2~n)5d2OCpRMn^X2+W2p@-TY~78?(rM^!B0g|>YN#+M?CC@D
zketcxU7eidIWh5D7VBwtL+Fp+k{z7z%Us!E+_DlAo!ZJLpW^b(0LO6Tsm#fmUGs(^
zrg|oIbD2AF$COMTnS-S<5SI?miJodmxv&;m4`|RFy;!O-Zyx?4bEKS>9h`!Tljhk6
zX@3voxaNw}0a`#HuK;+kM+I9jc*Q|;(ECPR;{tU_aX{yB*&l6WM5FSxDs_QZl2Zq=
zPp|@_PecVDR!NZYr}4XAPYbG=vW^IPD|Bk)(&DMF=$$z)j60k~oJS1fflmtbTiN3x
zBrXFmAW#b?ow1v<isIU&$&`W1XMn^ennB|i6^b18TYHBzRd5sqf5!+w6sWZDFTyrL
zaRS1ufa)*42u^nnWyAXV%n8+Gr%0KH=XicQBwzHg%5@)>6=hsIospzg9!p;>Kdm4h
z!j;cd99UIz=?M7j&8Zt%vDU8<YlVk0yqbsl{%WoaY2wRiA+q#?js!YD>FTWKA8Bme
zheW!#hoE|h#pCPgCEE=v6xe%OnxeZI=5!kDPr9`^dBJDsne*lDYQ%K(bP;_yx4d`B
zk)CmCRybuF+#MlkB&A!C*uE$&2u<Yk4g;MtX@&3{FL(b{_4ySCr{epxY%br?MCfTr
z<WYA2;%4NrPhgkH=up<&{6?sVfZb2e{#9NoTP(hCjM)~EI%)P{VxTMGbav|Uto|5q
zrY?cqCgtH+aBaRcrgQ?kH~U4k=YyC(dRtf#%n6~jeN(Z@9m=?<2Y65yr60BxB+27*
z_PS8nKibMi8MG@9K;29Z!|b&tK>d8Mhto}%XC`)}0f*I1S77(Pos<#c1BfI9&zOn%
ziR43*f;^7Q>o2-e-g)`DoC9rk+*x;ZK@^YbwOy#!4B=^LIJ$fXHtiqI-`+*%)MqYT
zf}4jS4A!nxpV2?YGq%I*Y4e(uq=wUL2Az6=Yo2p7{_c^K!&}B_L&B<`N#|vywe-dg
z8+U1)M`OCawYO)DwRrNuhztXCzMo#bb;Sr*Hpw458G~7`o0KloD16J@I(B*!u@HNl
zj=H*`DK!u5Fd(*TB<o!q9HxDwVL?nODUWgWxO^fm#cJX^jQdIBD}_mE@@de;hK8Gs
zHPZw!+_jF>goiiAIW%G0_eUx?N%e+Su@b&)>a6;)*9rDI71C?G!e=aH$GUXklZUw=
zCZf@Hw8UEK`Ge@sj}etI;VefKCDue%zB;W~Z-E@809>-?jet;;Gc*NH#V*A%*arev
z$)(WVN6jq@v;P%Q=8pK+UXp_xOAK*{IY48=46yBAOP33^b*^H?R9&8?2I@aqKFY4Y
z;2RXJ3bBvRJ;I>YWq*yGTKY!iDD%$;GKEmbvUPD}7!BK6PMdpq7u!95W{KYZCZ}>z
zo`-YDz)|MN{B(CeY{hOk9daRk>s&=wB^Gp|`oNPVyzBsG3L8YZPg)B)TV|Ol0SQ#%
z6|O8>gX}A?aYy{{5L(Pt243hkw5RFos6mmizeMZ;AMR3Gm6XGS`0yHv3tgPsqirST
zOfKuRP<#w}?Ad*Qae$?lT^AmH)AgE;DLV-GJC;9x#JL0wCd`o1*C5n%TmKTGcJC`;
zNOrKt=F%TRJL9&62-1WM4wA8Zx|A-&6?mk66$hpgjZdd&&baGvX3P=6jZ;dt)`ze=
zXkOm-I*3zz{YS|7FQ$p}m^xzgvy*ar?n8T!`@)Kgzl~*&vPRdktev?rLxZ@v_cc9Q
zujqW4@1Cx$HMm199-^<%Ty9E*O1Gt{D6)<?m5EY3WYq+fLT!6_F;{W8MwrLc%rT`u
zd;yQYV<vaAp9ckIgO113fNU*J-P3cPwAmEB{8$>~%U0(z*lDGF4Qxj^+@!V1UY@cF
zcR}`_Rv?m5P2lk)3RAeMZVR-ckzxKYw`iN%#A5IK1JTHpGnmXA_&|(2iMZXEKF<sc
zvA_iX(~nPEV_h#?aEiFAK^oW^dzLg<XSiS_QIwrjd8l-{m-97m%;Gkf=Cp&eW&x)i
zIXemJkiR?2YgP_5s(-JSxl%c^wSGyLOzFHjqY&{Gm~6l&#VLVzqJ1U{H|Qy=1<g4x
zl9l`&exC{?OnleDhOZ!xm3QCODhZO{{GFhwH@UygnvKnciB3Ci*XQm|AacPfib~w-
zP;?MQP4mFcw`OwX5>!fztci$riWn%FHxLZ<9Mu-iU;}-9JfONHI1*7Cto$ji^@jf@
z0Z2Tbo$I5UhDCdell?o}CVYk=u?bsWt?m`E*l{2w*sN*C$TEBAm#AfHaOh2Yxc_<k
z`msKE47ke+?Epr`9w@f%n0lgC-eV(F%}YoA;@eag(O~`MhHL|(7Tu2E>8GtxdKWqG
z3h|~*55lGwZk6$52Eyl6tPXXemyVlm3dxhC#a(L!DfvBsHA&Za=(yau=ebDf4VdJp
zZ6<Z{LW6{f3f*L~NM%NpBYu}QO#H}O60QR6XG<EgDGM<~Hd#*8v?#rAkLE_6Us;#X
zc~1r1dtr{Ld);9%)Ijl&);W1`Auzvr<ngEwPmOMKnZO|4-0oX?Mh9b=?`~ij`_3oJ
zG5uBczT?IzZEZ2qN`v-1RjB8{wBryd>~Cf@&K4{5=x)6?N4I!6_5*@v$U6VCwM0_x
zq<LE3o6kG3c}W?E&!Kk>$4n@D<crPFI+)FxI-K&vsebnOymA%d4(AqQLkoO{g7z@A
zkT!pEko?uDK(a{bL;<BEz~^^8sZSa(dx>#WEWsjR&GE>s`YQ-*Dhe4vIN^No*__SU
z(xb3O?e=0EK=%B?mLOJ&0{AK-jAWqT`!;ph%r<9Ln6|w$YJOZ}TU-oSY+=t}U9k@D
zd4BVXE)Z`g_L)PRLc@R!gw4M#zf@v){73?)6h7?*$AW}y?BQn&%fzJc-U4(=Z*N;a
zgx_&H0KEQ+%3ZpBo5A`{UULJO#7C;5^7rGd<+^W&@_H}(M<I{wXEgna7sT1Trd_n1
z7+mlLC?WW64HUeDItMElSOGOF-&mI|w&kr*Q8WVwC4+ICuQf-SH2P}1a6)AExT~a7
z5AbgSU#iVxu)+c+frD=LpN+1w;P^Q18{(6&GVN@^fMrQ?k1XvssvLuBJR1JPm}+EO
zud_;}RU>+W=TEO(HKQ3^f@18%C)_EX&%5kw1~xURBmV{xsdUQU#tM!J-2<Big-gMh
zcC<zI70n)2hR(JUx^A^iqvPx5(d^SQyMFj%e}J1HV;MTlpO4vllO@dK!0u~ZAanN;
zzn!Sq+IVL7uwhp<Q!^WtLfY0p*Gk!94?`n2#c>0N3OFrrjb8+KvU&xhUmy>Ya%E28
z&hpZ#eBBZ#QkwZfs;y=Nq}U2a=c}-p4E(cG5Mt!?0GW{pYFDe4Pmt0zZ(G4v+Li;c
zvk#sfWTM}z-cHmo3mkR>KL431&FF&cpTS6D8bPlH6cHBO8|-ZTLDLWLK+hQ<Ba|Eq
zyXGK0=x)w$^kveZ^DNi-1ryCsyQ_Bm$6^>Sp6P~Z-vJ(e^ih_!s!U!bfaU}0MEmw5
z%nFRVxs@(rQjJ_x$a!Z#>m0tb3ltYN<lK(7a`IVbNW1m8^<gHd3s}Idal?m~Jy=l#
zcfgU)nW<J@(6n_^d&nF@PpxXbsd9+i9UEsghVr%BxVs{9_(mGu6O}x7&@3mo3AG;i
zF!P4P@I|B)PgunKFmB{IvHd6ldwIR>%*@ObkDFmv4Fxtkr0#onK~X!8ba+mPrjd?D
zH!}|x>Ij2^@u>}atK?9pZ~iq43ocaJTjA5@e5>{CSrV8+n@`!DI1#K~ShRbjGkAtY
z6>i7*5bRU3wm=EvH%nO}7s@8BA?3?~IPTJ)XUHjgX&IqTwFhfxyv@)5LEc+O#kJ)N
zn79TfxVr=j*93QWcXxMpm*BzOU4jM=?(XjH1ZOJuzT3BZUcZ?){nyNzVx8igEoV#Z
z&0<y6_x;3Boh4<I>1XoW$h_!e)FzbV3nITmQi&|sn;yFms5{d~?yz9=f@{&Wm?sL*
ze@n#i$&xRYrkQ=1@0_`RhoKqVYt`yBAG6HVTVeFk?JRh}$96)v5SBDF!wa`nC6+o7
z{gxh221%*(<jh1`Gk2u9>cyY<fFJ)dXS(NA3dSF@;uJ9N98rjH)2h=*d#mzmIoAPk
zINUWBE+CmzXdiDM#Y-&@+!EUO);g2~H+nG36;Vy`)<LOa%e!NaI|XA&&uRl~^}2HC
z@IvX+!60ju_uzM`LafOzcvFSP5=CCr)5;EwY2|9n8@%LPAQE-+l%&N4wQL9rTViMI
z(w$x}lOM@XIbq@%!)RLwV&Hk3nuCKQwipCI<DY4wN(hZrk<uUEO*3f8RdrPpJ;{9`
zBB}Ny{75eprqtvuTP<4M%^Xs2NapPWBR8^*@rt^SGiMab*@AK0HvXOc>!DqFCqwjR
zIKpxh|57g9DZ+Z+=Oh(ae%D=HC(^49{USjL!%j|yD^H0shP5_7_Fu#?l1(EIkB)cG
zkG2qmmpwk8;YXUswq??U#fP@jKfPdPZmaAGk|5Mnf1d_TG-&Obw*xh9(R?+tPwIn9
z%h+hhH^?Vsp=l-A&V$^AY9~Yf>bZ{A%y79IlO?uNv|lIX&AlM(Y2Y)Z^pUv_$6B`5
z!h;5JhOvG+#R-`cos+^SZoJDXd2xQf=j#0u`tki@^BoOejRRz?%Z5mlx#r9DJ7_P<
zho=8-nfPb(>z|H*|69uhGZ6C!nj`)eUorod2K_C*0$PLqVVU?H8T(%>6M|C0Qi?Kv
zim!mOh~JI<llY49PpQ`5;;TOr{&EWZ2jZ*$Q*-}pnfP0L#rZ#ruULMIuULuLnHh;V
z82+b#)ozAX`qn_Hu&tA^k%1M!#@X7y*ul}<)COQ=Yh|VH@Z0%hXl&yI(6<JjIqKUO
z{aM(-+|<koV5je3Z1dYn@#oo}iNM(e>a-j!0d`i-jsQbjYioUgnY*1CP#X=r#c$7+
zqm{m+8NkEX!4_a^V+?R|wFNktIT!<-(YDSG026Z;V}PT%+n@SlfbkzK*_Z<h8roU`
zmD7&K*5-enSs6Pz0*vjQ^{oJ=KxY%MSzzb>OH8fr1mFh<0R7ZLKtr_%KolSb^i)d#
zqyW-DTeU3ES1k`v06MFcfYxf2KfKlIe^??cjh+4&kAc3S<)7XB?T!GZ{xvp3b8|y;
z2SaCTfU}Jea7GMm9gP2+l0WL{0}TGvd<?JvSpH=@2G{}Y|1ul{TmY^BH-J09<8M0!
zzyLVmf4D0CsWm5aE2DpnEB@P6@vqj8{|e#`w0<xFMPUCQIDn$<|FD<;dCmW{#s9l{
z|70!s{paPc9sj?!mM}8|jQ@YO4T;!U|FW<Uv9tYOZAv1}zb$c`jQ?-mqCi3UKfHMV
ztd?Q?cd|O5Z2zCtG7Lbi{QsbqVPpp?f_^{#cWRl8vBt(oDA$yr{<Yr^b1mG3P2_;K
zwl+^Y801y$KusdCuU#7(8J1(ax+iuQ`QB&eJZ=~A`TaMuB_1ah5(*!kMdaZrnR5~o
z@^MLN(P#<zwB)5ilOVf>fA)}sh>24pf~B=Cad1j}YXyA-srd233WPcb`vLT2XJ>cQ
za7&;7B8(eom$9m-SOa0%Zg?lN2N%NkBf@o56!pt1O=q11)#_cHCCE89vH=I$Wx&Fg
zSHNfAQn%pbz+1ui3HabCgj7`gf}>k-yFQp1?}QD$#8Rq@N>YOS>g>fhAAkR{3kuN^
zAPs8vW}JWl!e+j;Yj%N91EN8~M9b+v=cfmFw_SY7?kik9J4=$nf1`e{mU*qVSA@p(
zym%kBbFg!91rGp;kip>ly7MkI2lcj+@h#!?JwDEv`Fj&1rgK9bG?>~Oew}?%-4&Qd
z$zpS=Cio}mGj0F(2ylG5w_-@Uoi}4YbrE50RoTS1&ih;4K$;@97#p1R@ptNH+566K
zcSwP4;K0g<^?oZOa550S@6SV*zG32AY250I92%gD94#P4L|;qUNgi(f!qGNI;A-p}
zKs-SGbo2&BrD9}kHmO1EBws+2Wr%+IvLz-VbXl3-$ewNtB8oh}6G6lKEiIu#I5j|P
zw7!Pdy{X=Aq(5gfK>IDN4t00m$_AlzS)H9(AvnFDZG%lfW`j~j@)8q()FUD9-cokK
z>$x~UyoGXh)31Jhk8%vSTdUyj>STIT4^H4dl-<mBUUYj&0%bdZvpMp`vKsq%c$LCz
z_x#QOeIbCO1#~oq%@=p;(KPs8#+Sn0e<bXU_!8oZ7h*j50m(iPllU&QOY-ZRpx!f+
zFU+a-J(7R)$SZM;crY)-yyA<X-j_mN2%EfX-!SNks_W1$4+~$IisCom3C{16J3_F|
zu2El?6wC_Kdtl<e?>Gv)+T=C>q8jr7^Q~Ujmw3^CP8X(8?-et^^JM|n7<6R$Jy=gW
zlo!Tl>>K{OKuy(*F3{Kb2H)LE?@O$Pd5ihxDD);^N4pAq0;~cH(8hKmpAO$3)%jby
z{jPfXUH|y$Liz1tMNn#VXe1>Lf0b2)?eYlP(h<asv-#z{TFTKC`2pYQd138C)%}K*
zIe15%A0HrxbNe_xfz!9dTEo&!*w1K6iu@CP!8c{i9}0>aFPH^ilOV*Nr|sP_TPsB}
zi_4@w%?d6GqE29vER@*r&WV?n6Qw-d_ALk^CG<*VBa&pMO9@|qo7RPXWp1dN4_<MU
z5!-92wEZ~L+Skj;D>4qJWJbmkv&kk#{B-vv?YUl{rP;ZF>5P@M2d8vVd~R|^n}&pw
zgzd{z0-8Qsu^^Zg>E_DOLUm^A8e?|E=1qc5G%>;0hWFd41XjywNKl;%KN;TXM(x_@
z*x(2!a!0nOQs#oj6jR}#mgKB!PLtp}3HkZnlD#co$HvmjmbtEhV?~76re?Oe-Ae?J
z&l%{;TCjbHx_ibpXUBlQ)ZNVRBQF6RGR$YpO^v1mSv(?HJst{TXKlgxst(?8%wTaK
zrFB!VzuGbO%D6xkNPph87FgY**(1E;n1jOmtaGJOd~v4o=9~f<9%sO4SB=nwER;0Q
z!-{yav80vwqdwb66%NkKhsnFhzwi(dy`4uX4OO0SSnzYxkdtk3h~BUytczJIrfDoZ
z{7=6y<Jc#3Br$T}cVj;pZ?^^5i(y5_ES6z%WGt%KD39?8B4j%YHdEZ8H{7p=z^vFb
zP#@n=e-9#l2ncy{RIB-V=g7}tkbo+EFvz&WRr>(yXKTehg+?4BUU9Jne>+GMuRb15
z2_NiZbxL`N$du&NY&Dh#LcXTas#T>D^P{JuBBV{zp182QTBPUblj)@hsLU6o<T;NY
zQ&H?J7l%bR{ofnhQ0xU>cA3UogjKYPtG`k4NJbfolP5u*(2OqvL%PRrB1&haP$1??
zyqvrH@eg!es4UEP=9+x*u)EqXv7f@-W#7HFfyYOS<H|ti)8fx;U&ynNGsxC)wEDn?
z7w^U-$S`*S@8I1V`g+YoA8Q|K(1d)=o$>3+Ekr<90{NTo7$2*Kk9g$yc^sG97)`B1
z89A<zrlAHgx0;B~9BMLXx>MjFr#YryvMyQ?*InjM7J2(g6$!-l9De`TBW#L{aO0m@
zW@_+<AWg%B(Rn9fS#1k)OQ)}wN(KAcGgjIXQ-a^c);wKn4GVE4Z<pYCtD2v&#pgm$
zsyd2kVV7WuD^opfzftv!H~joD8IfWQA`<#qI#?5D1CN%O;b`BhY}2`XIIUpHc{Tds
zr1$y2V2V4p$!&TrI5!BlZHF6DQ7aH<;?NK`aD?mNRm3PV*q?&a&E5K7ydSP<=hpLS
z;lZ*o52WAT_)5DQ%76Fl`lg-D2K!iJ)h>oIEH*p9;<~VCpPXl-tg`|`my%cg=iXi6
zmc7%Gm*dBYs*NBIfc(6yQ-VX(K-Ghm)ini-(zxX|&yaJC7yU0-xI?UgEu19%SiZeH
zjTx;lPL)*NAGV`Iyf~V0d0QVk{dHrf{PnkQxF>m&iE-igWx7<}&%Kw+el1g5X_%}>
z9T!#k>Sd$d*xbm2$<7i{Qg%nD&<2dKAY7C_hLVD7?#mQYg<p~^9TRQ9sm@>bFS<ZA
zrF>vMAZ3ugT-*uQ!_18*f&;^vyEQcSb;RiSd1n%b%J(a;-7xI6o1hfm@K+Ml9eTjJ
zXkBEaZGRSP2tqJ%$+R6w;@0rB*-EcEWh*te?CJE(kCLvBWHO-xop*LT%HP;(kL1TW
z4;hkX-cHi@f+QVDrb#YIgZeVIF=#4axiZu?)CBTXt&}+Z@f2x4tV?^rYHwst+tRST
zMV$-=Z^Mz5q0}2=VmrQ5{7_^&W)eYW^`ctxQ2&)zUrjzvGv1c_tvN@XHY=Oc<ITlW
z-dY&?C?jloFhj(0acB7<IFc4%d(29cImxs|B~2)+xU%IAd+|tnTyVW{v#Pamuo>!P
zz~0ssd4Cyt@5Ah7r2p7Im`fu9bN3|086^bj?0EPZ#9f_Q$$UdRPpsVd?8NXj)qM67
z^PnLb6|Ur`u-*MI<deb`@-6b&K81@e`u@6WODerA!$c0d&okrb^lyrp>+#unT=?lC
z=M=hKY1icK9-5;ah-q+Ob1=B(R9vP|l%U(xhfo>^H;cRAFw|Fy#*4*2YGZLzR1v&8
zs74tPJ9B;drAgrI)~qGGk4Z<#Ym<DcIxfMYQp~$)HNiJpwaRdcJ(})BPMo2NjklJD
zE=PA(nApHoXL$<`?sD|mv8qem;NfWS9TN~#8AHq?u$mpnMlXNJ7o-;F#L&4-p3j}q
zk40HBOnW?uaNzAo&Yv-#U4A?9*s`i3FmfL~j6KOzs%Q-QGA>Y$#o{iYmft1k*5tUw
zM|9~H;zf456ag=c+A(kvWMk~+R(<~|P*QQPe`FzO!uGw9yFTS5)u8IM=6>e<3{mKL
zQYuR!M6JU%fijXuw~*q*+=#r=-RAr2YfD?Ri@P<v_2qZxq*rCc?4^~O2<5Y-4yw8k
z+2j>GdZCAk3Ikg&j292H`xNQrRo(8~yc<qM%3H<KLY2HXgovg~C!8!sUQC!5M>t<!
zgAc@sva@)nAKA3IeUxmvJz3G4c4xwr;kuEq4TW7PnbJnwW2)3e;GedKmPVc#n?lO{
zlZDC?i!e4bR8DtqU5GaK{O|cm{1t{G?7km6(etz_qIAwyBgndEAh5#Ud%E8qTKrJY
zznM~39l0kev>i_wc=lY&4dG1008nK$h`euK`DgG!Ct<#~FJ7w+^YGiCKd+OA3!2tt
zvW_)6!JBggS4zazchr!kU~M|u$iX`xwBUi(Ye+k9-yM+2zX_8Bh<}0iSf@sEzfs%%
z#a(R0aj^&TVE35@E@Zk<t7dZb%Y?-R@MBw?Yr}xrldZ40@bp;Qqeb#PP>YNVxK6?M
zy3!4l*!hSEMR*y$tg#gq4_swG=P?5oxpv1^nxxLOnG!W$oC+-}V>~By&GSthEX^Vl
zn<n%ON9<(-$%t2{h`;HV#NT1<+q?v){Q$eNlbt_=K+@_Jr5S*^{qkv5Otd4;WgNYe
zVO})s$EUnDIu`+s1Pc6KN(gr6Fk~=`EDHII78!t92jw^WEd2JaYybHQ1)61XpQebU
zW6KL!vSfl23j#p6X<$Z=)`-QS@O}&JBEw72prfM5`AkuO_aVM$&Qzx6;`B_7&~;^|
z_|=`3RfmvH=XQLLUAKI#%0~2PX{(3<PF>;nKCGJ-ln>%uhsjo@oO_(T3+v9+8J!iE
zlQh0d>Wz-wQszpsP`$RqQ^!p{SR`+P`H)R$-&i4wm2|2`_l~m}^H)$33q9!9Fods)
zO0ptNhD9qU169zs+dKB9Zj?m008e!0Y6TC!gq^D)Gw#5?&E~*5wV?>py)A7%)Frt+
zp6}VXLOTu<e5PFUbf1^yOwbfmL&k#>!VBZ-5#v_w#X^r|-ZWuDVS)|>{Df@h_{Hq^
z_~Jo8S6iN*uLrx<`NJ0{B}d&XN(xs%x4hrNx8R>}p;a=JD7fAq(aK|8l2yoO&=k2=
zXE?_?a%I_GjG#4|)$azqf3f4;a!dAy!xu{!8TA(vSU&y2o0JWG6{<l@W8H1If(h?%
zVVxPOjLo+bhE1DYmz|=bV=uk!4uBbhp_L?IGxsh9+kncPjPXshTQ4?neOID~o@2gM
z?5d*jOyD@1X<4U043^yaX4OhAXwn#fo}v+lLEVa|45`7IOkOW23f)n2aQP_ye4=dp
zQ^*s-j-Ou0dfJ6SMv(d|_RC@{F`vAOPu7)$-U_^%o?hJ}!~VuK+CY<SspM{%U45<X
zFDr1Hp@NNPeLs=JcI_QnADB+fPaYM8^5Rz8mSu*zdLtL*WRSa-3+^_pa%bz2pz172
zA3{K*Y!H=K=(ha4agK@t;LOa}{O}|ExfIoylQ}ZQzJ6GtkcuzCa~kUPL@kVh0P6<+
zqgFl=OA@x2J**{MZch@-MoMl;HL!@)&s%_s_*33K_DC~`c8wCm?+$SK1&l-6zT`qN
zImm1wa8Yy7cd$rA9v^L(l(}x2@L}CHj}$>?_|1>Bi(sSG8uW+@0E;fS&NN`8H+fXX
zn?MpQ=!tQ}0DD|B$81v1c<>`AvMFfbmndKAwh`}?HN$W$0)GBQ65;_1$YPj)O{iqI
z^cN3hCQ3XW8urV3S2%~pB;g*DIdT@(I4QHs8lNUqhjfge=Ts`;&D6mUoGteV9xwa`
zXg`^zEPIP{UJU>+taHADpVy<PrnBhOg>X%N^g|5@s1^hvZrN~<6j;w{dq-|nrOJ`_
zzbNLk4#VwuWgz6ODGG@ou1vIpga^NGK1bv0m;R7&FKL9X+Y34MIoTys&GqlrIcPil
z{yp>86HwzQ^?DLw>i8A0F64+-)Eq6O4DCw>#bG@_xnF?KBDbmZY8$6gPfn654t7B+
zL=BD1@N=YrN$$()hdHoe6NfQ!Em|b60Ocd~Qj9SPlG}?-_i*x3h=|x;VXidZRRRh0
z5L5A+RrIgx;PwM?uUsrWaY+c8xCq3p;R4!-g!vy}uSHbAY?WbVQxWs!rx7qm0#G1d
zG{SE7&Bs!bA&T8Ll@b-rzvl+$)jc*RqHsj+G}oIdVAG~8d5fvbTvM#|Ha?wfBAR|x
zA2GD6O@uc51s+oZZ!>yVJEw81+k<(+Jn0nY9ZVS9<bf<qa<kqM{S!T|ec{?5Dn90d
z2bDqW<sSd$m8d6ABvFQeL?ZW7hP?yAs9cl(W$YuPSUL+vs&{LFRdpZetz*L-vzTe8
zZ93qZ)g_f{i9QkfV@(!Cbfx7n+>{fxeLu?$C-58nF}aTjm4ul19CtouDOg=j4{M>(
zUQX6sC*+ao@XfcpxE>3%V|t~O1+*8Q7}G?6i@J-|r^ag$YW9>%+-4%iy@1#au9fu!
z<7|oIrkAX3>4Fziq8;{dTz}jt_9)nbR^=+F2;E{Ml{5dj)+d6CrliVz8u?Kf>f;eQ
zT#hBI1no>*D$(0v6XfUhM4ZSmVIu2VJoS2b%+-x<8`>~(H@h4zsKHjXs8L9gCH4Cn
z-6iLud%tg*MW5`@@pnUWe$~#SM1kjB5b<j7Eemi(_h=+LbT&6>edM^g-(jWl{PrdM
z<`R?gwL@NP#4vx-xh#aU2tyhic_!*3`T-Y2P#rsQ=a8*FlwJbb`8qT~deHonr|s9V
zL6R!IGc?j_nsl;uJGs4fgvH@fb9JMjOMpuoTw>=t6%vQ7G@Cwrl{0~8^t02A@<voq
zZ&@z+LhWG;df2CAY_MzWMq0r`?ur%L4}$K(n_<tnp>-PtgH`QCQ;u}Y{v%zFjU@Wz
ztgLwamIjR}mOZkdQR<W&*0-6WIxaJ-w^6Cncjl@}@=lu}6;il<=e{IZ?t+^0g2)|X
zbox9-t=XOeJ04?(;eM><;wxJ?5+NJqS-u-s1g|G30bb&!TY~Slsih127@0IK0UvL6
zB@Get+)EQ{;qunFM=!n(w}H!=3$#HkK2-~Sn(M|1dPA}sm(6Q=nT9a<e3xJ5nMAOr
z2JOifz1-3brs1Bx&cbUq6QDw51E%18h8Py(JALuf)=uGv7gC~P^x>^?B*w}E4bo-8
zS)Z$O1r=`<uHqAx>a(7S((ypr4~avNUnChz)RHg-dvHO03rKjTzOn{eerER%S52Qv
z%8?{H7|d?@q01yNHYF4+k|5RHQAn#exh&+XgYgGphbrBwD$w$uxaWIq6l0iY(+9tA
zq@=vFBygum1`9yCafUjOw|}V!{C@tlEt<4x!5KIvcxW#7o}c`~PJ7nzjM9DYV=Kg-
zeKC}G{`#kvz?+Z{4hl=)FF0@wEcCDYR3j&s>~wTxLa_=HD}(o;TuLw#Ey8!``*`c|
zKZhI%2bqg-kE7RPq4=d?o?WYD0z#b;dR=JkC-;|&d?14Y?R829NtlQCRl@sbtNQzx
zx<Vc~tEkcv2j6tP7<4;p@A(>hYu!niB1C)K#?#Z(_L>Uz=6OZMq&V;mJpdCzNOMxT
zTUOsuMZ?C|3&d+=WNK6fWg;A!_Qf${xr`Urq8mwcM`g1pv3=db^hpj`)WRdL#JRD>
zon_zP$wD!_=W<3;+j%5InuK~CUPCAIaB@9x`HV`(BbrC^$g6SgyU~-rEVRKApY&ot
zOpEtyOom$yMH0P$qWZ?FlPWy(%MOT}oPddOtUY*bK|<8_h1B;~P3X$#9_I{Zk5fOZ
zi5KLHgq4we9HosD#(5C&;bBWbwn)Ntz@9%G_b>Sg@iQp2K?KADeVL;3OFs7oFB5W4
zHGGau)oer%uHuVC5?1Wyy@qSPK;scXepaUbXhYS?xI$mi;+LrJg2pwnpRo|$Y|z{@
z8;sJp5i+Yv?-OU0=H9Gd24(A?@yKE9hr5GfLau>qQh%fF9KLy}h^Vs%ei-|z>km^<
z;vuoqTDz2vSH$=xHG5+MLY^>`1p%!yr|km3qZOZ&jE}|!slC3-dN`|j;ef)Ayo`yV
zhrj|xaim`muO$clLo)=@CJ9x0_t4Sw?ciH+nkwhe4LwLKJYU87zMiP7&<>#^&aeMu
zpL&q|#2qUR(_D$><`(#YN21_}&IQiS1=Uf4y%jAy+xfE>Q$@H?O<4L-e{{)u#}tNv
zQ$~NHcVGN252!hBbjY@L4(-V3WM%I5FX?mo?p9a6UL_a1O-N@egL7EGt{H~?KuX2;
z@hLV?Ox@34^%TyJD%?C+!7%z+TEL@Y6F0XLJXM9F#HI-gva<u=ggA40Fl$d`&b`q@
z6GAOn8vI85>#H3;I7gcue2_cP9sX1U|8<?uqg^w|-5V}aBk1)U!prg*=P{|KDrF1-
zbq~Z9JBn;9wm<wdo&OYP2=q0CW5dJLm)DeFspmG4KyuRZ+@-!9Y~m{?sT4lGRf;8r
zMZmOWSi>4M;+Z(aQU|Pe&SCeb&_%aw;)ijAOfyZrx9&b>9WYJBHAyeNdUNlzOaxXb
z;#{!7@>P@at$C;AB6!|jh2*H^R(fhnpU0zeI`uaF(t(m6ke_(LOR%YT#Uv-`ekrzX
z5~(BYIu-%-qWRUz*NIH_JC6!M<n>XXq>iMD!&oP;*&#q?pe2-GK3G{F4hd*OS0=w@
zo}Tw%sATk#J~HN^JYZ3<+pJ618^50Ui>{0irUy<)wQ>=5Y{r&o^7oyg)FL7}s3OE$
zY2H8R4F0e<5-Z=E_~Lc)>lPyhb95(umpGdwxRI3l`+nvm5>JbUWsC2ErNfVRp&L+m
zk<8P#l*T3nJVzpM?>qTa?gLv@#$dQao^qqrJ8H+Am39aDl%pAbx7k})&`f@Pj4D#F
z*gA<jJDl9l5Z;Y3>Tr50r><>9O3<}d#K9?06J5@rp4W!Q$miF$cp<i06?-c}0bzy6
zA+C4qj)U1w%8<v`!y(8=IE=_pEL#}xAFy|wL~VF>Ux&ZGaYk!A((jI1N;bo7+vE#o
zD@gX^)0qBb)7h@q32a3*vy+#~<hcHfbqpiu!-vm&x$xZ-g>$Jt4u(9psIU~Q6!*$6
z8|I=;R|_XMt-4@A;s<%WaTXs!cK1O)wk@fx>zhE;3(?z`_?C8u#Q=EJqemmsL)#aR
zz>CO<?DEBN-UJq5XpLV6F3Y8+2ru-NiKwtE-Kq{^=Tk#ib5^c(=`)gH@?(i6-r8Bs
z(iCet9T;3uXhsqK4`4KmLisyZ%Ab<c?C!LR^IcHRF7TfAQWW%&SM3#3(nYunhRR&X
z(f#xD@A9vA`$doAbBt2!jv4x2TE{PO+aeZh)tQssHJ1HzW>>tlzc}Ndcc@BLCwvgB
z+bO?_^}pnZ9kQ$A0~2}fKQkh_;KF>JHI4B(`hKCA99F3${y4+-DsnzA)LK%z@><={
z(^KqXU`uNWS?WL-<Sl0-)(KErk};T_EFo#;zt=zVv7xBUkZb2=oJ>=rh#aCgH<UM_
zQ#mqx;>!3K3H(H4-^JQ?99p*>>+$?M&{zOA;iln1I{EFJP3#dH{_)~KGQ%DM=?M`=
zy*}1rc(Ti-#E-!vz|RlQb0kpAQU+7lpeV`#HTP7XptdMvn{CZnZ0?70YWNXrO|rXE
zZEsQUrn<8|evq4kv*&fgkdBj`&KPa+$H`^X_d!#K%zgZD-XOckMVA;w5vl--Dtb3~
z!;==lXo)#DT-!7&d$5RhHGX1CZ+-|?bDY_(bJ6i8S0QzbWxl_vFYa5?BJ--H;UlO>
z{|lSWUSNHv9zX&q&)pj{QlmKfkdYcv(~iWz^a>WwEVI&gml?}Wr?B@-VF~>IEmdrt
z0oy{w;`5fYl(|H9*9XB3^zSfjUNakva+<5!s~)k*(#5D^8ZbI(6hvRP3@tw-(J39E
zl9F#XV1L8M*QHEP1SpBK3q7C*8TPD}0^HHyg5Tu*gMwjH>2yf3x2T*4K__d|ZC-P}
zXpY2w8VmxxN;@c7ZE3k^RXTp5yhoh2?xf9{_EOEs!d2bvgcu`TSB^B=%*aaN{rK$|
zAo9TPK92N;lhM_?uG9CvWbItkiA=Pq{R0V^R*}Qe?6s_^Hr2`Jk~qF+U%BFo_HO=-
zbD2OVt_*w}J!_8iB`yI<H};Pfs_g6TSP{imHYK&#WflGwaxW}T*28AEHnis*G{{7Y
zPmdf?>O%bwu8BFCo?YG6A?>FFv(A7cKF`7$^lQ-_&LLFsqeOlLHiRb_OYF=RZe5qr
zY^Qy1vC*ebKb8hi<3}xBt%WoyRGWHfUzXXyshg~JNIg#E6g4<#xl$R<pb^it*7r$}
zk-)R)Os_x(t(_1;rB}<Z+IWyB3gUX3+WTz+U{0@<m@hozQdxQ?PAak5h^daEFo+ek
z)ao`E6%uZzQ1HJ=I+A{3c~)BUB+>uw-5bp_qG%&9=f;A3=3hfREhk{wW-BMART1*g
z`X=d{Sj9F^v`@WK$frhCZrw`EJ5t9lSc?_bE_W$S0>(f2a8x1sP0Z1m$eARR{di?X
z5>3%hWdM@t9-5^Ya!m&8494SOxQGp9C^SAqf<&o#R+&%BF04C}p^pID6JNNhTR7=a
ztU<_c)_D5%#vd+|*8Vbu<681LkM@-Pjs$h%+PsVVkZ{X=r^)%H>lg2MzDqbgq|74L
zmltl)NdvL!u!<qn)&?&4WhQQp9Lp)8W||e;I2V#6Gm}1efu3OoB?V~{yHQJ@+K8b`
zmnTSyg9wZ_qpQ<!lH(~C{G16xGu+}bM8PKBw+h;UN(FyHeknN7kZ;>J-iXd$=`m={
z3>;r-=!U6&<~Fv3eVm;lk(`oL^I7nsr!Npy`2PB!^Xoyhg_h;qkMk>e=4n-7&efrS
zTM&-6xGqg9#ldy%g<kW?evr_}AP&7Lo0)?`ERsIE>l0Z)wa&+qRi@8h68ur4{h!Ep
zp<S+BhmZKEk3y{+sSk;^@fNXf0mYh-Lj_#Zj11^n&&(E%Si}#Yv0@48JG~xDHpZVZ
zQ+Z`$zY4K@sdxJ9O7~PkX6VDe8}SgSAS$?NsZHALrE65UBtjP@xEZii@DPC=c%dq)
z84S7SEnBz#dd3{?lD!uT^~E~t)j>WqgHeAW{eF76`=J>+KR;L3G0)0$g>;y>*}5IH
zGT=HNF=P>WS&fW{LO81%+8*c5%v{{#PBNn_c#DuRkJnJ(EMlO;@u5L5WY05Lxzf$v
zO^`$UK_05ZnUvm}YoG*)ec@`wNUL45jmVbJR%4naE$qYBW}VN+--B<Me&um4OxB4?
z^8bqLju4D|7#<tEPm6xbfX}_hF`3#qH!H3p_v|}naD{P1euyA%S2s<LBjvSdu@NwJ
zK5DNZ^mj@$6+(j$jyNA?wmiOqV%%#U<xLv$TGVwOn=D0TIVIw<O!JPKKEY8>EJ46F
z2}Ms85*xWseQSGzmb77{bF(>#9;a?_kGyMUe{IxBI!HyNL|Dqf9KR65%TKMq{N;+;
zFvfB{MHpa;6Q7?M>V~`P7EI@Pof3JaE$$iH8%aM;&(TqYI^x`x^{om%jNN-3mMLUD
zM%3EkKE;sOxb@JS+AMv-N4~yQ?5E@nyMWP;X(1LfYh~JpxHdDdJ1uuV`Y7huQJ+?{
zHh8VX_482Mlcdiowu?IwV+LZ%{+@^U^=>8FSbCJ-R$m%W2qGwnaWaw&A^19y<~B$Q
zsd+%3CO0B;&|N>N2Su*5nL06KQQ9fVB4d7=UqUr>b5ODw#<(vy5qQc(53=Ep!He|#
z{&JkX;FohzQJ4h=iz?o!*`eOIXj#!np_IaG+Z6J%7wXt&bO?vBJd3P!hw|wtEdJDz
zQ%U_Gt~JYv%K4tt0-A|vAlr3mu(zKQuJ(#8^_XgskXx#LW~lbPsr3e`G%<Q+jq{qi
zJ4r#-;-Gx9n=F|+d|Ygs9g)dFWo{<9r3*7_2iIfLi88v`ccoT$c0%DIp@9B6xo1dm
z2}Cv3?2){-oAJv9J*#O+<kqoYw0ad~R?7~nVmv}rANX27Q>69U>o4q50=SBn4<Q2J
z^WJ-C)sPW|q8{1oA2Fjl#THlwAyQ{@XljjR8wjNk=|S?RVj7%AA_$UxpkXjHv-s9m
zI1D|qKf@9<mn;l`wro`4g5xOXR-qX^@y^ID5M>5!>5n>aG`N)}-ZJlu=(KT`Yv8cE
zW82JU%JXvODPPX|uJL=)XOyw<ybtCSU7>2ItuuJcA^0j4=bxnPl&x!tIDfZLPpvH|
zQpg&SY+FSv9Hs{g8VH0_NO;mOF`T%`X^=BVXxBl03Pg(t{}e(9Sn++?3^sti^E>HL
z9lW?xTfWNdQ7f%?D{sA3uX4fwmwh9{?J8|k!!aIb<q7jSsdTAEFSK-lAQi~ADEOe^
z1LZ5<vBNmIzZsZ})2aAN1xH3|fq`sH(fj*>oO?Ci?cJ$@@+n0|%Ni%jX25ZmDDBVg
zg?ZhQaZm4qy8-9s_Z>GDV*e=@220;z;!<-so5FpCH@xxk>Cfo_cvfw@&U}^S(e9U&
zn{``^Yb}5@!ySd`(gPE_vrpu^Of>A?;(T6>A6lB4-kNhdf4mdH`rAFw56NWewO1l1
zL6i(qyGao~osJC)&i(knTF!{=x7S?0lm%)jo&v9?cq+A?oBvS;1wDkG11HTfuPaEV
z9uMgarq^2-y`lus*@?cT7Qd%WVu${GGtg{7G<yzG{%A9kNgm1#9Y2Nxm*!V|CvQl1
zR#VntyZyM%)7r)U;D_#P;nukN;Z&6ZWPx#@h(|}hO;hzDrVIMD<$%DFxBK-mV^S+$
z`t>_QUKroE5-3M=ExAFt@vIuN7!=wewko#BJfg0yjFnAxUm<yxxr*H>yEpms!eE16
z2KOHo34NbWh=1*vrcZ)er%g6OMU_8v>-ko6s|w1<(NRmI)pa9&j@{9^>04R*c+2jO
z!0PHK$Uzd|x3AI+c+oAxfuZAJQd$Z(Hn`ss=I|Or-EK50&nEuKTtcOy(+`fH`bd;z
z5*Dh%{dm8e?JKp}S=2z_nmnOnPkEhkmvp&3;`4KP%CN!5&45Z`$G2Yo<T>#LHksW2
z0yb-WnB=>in3Ju9)3>nGYpwneP->Mlu&ZA4fUo@gvWR3Y;c8H-I7Xc)jWZ)Or&PGZ
zX|fry>7=rYLy<w|Szc>)bJ`6MO)JcV7lL7+%)!a=N1PHPE=El;f<C=vOblGG6W4=g
z?jEcA&v*CAyGD(2Qf*!F$Q7sdie#bu5?;3X7V%|r!=h~57?_Vi^|aUqi{tfGm~949
zBs5*WypL-}0#cm$pFoACcrv7kQA`49)p~Ep#LOp1?aM#besB>XoejI@D9;`hFmupQ
z3Tx?TX1$CJbqR97{$e0X>%6Rg^gOr~Vkl~T;x^I4kZJ(wh%UZt3yAzCok`)QZdlC;
z8cfYg0!{b}yNZ#_lWvN#Q^?4THHGS8%-c_6FIKvDMAKS#Ac{veND^$UMDw%$pebHs
zI1A){eMBeLA;=O#vDqp%^uhu=H1gvTzj|6fCP{d(%4!ga$rs{IJ)Gq;>e(`O2aG+$
z;w7vK3V}_w1HeUwz3={tf!1D+$5#%trAikbr2$>1lyaPB7r%z%*#c2}#<LOYCizta
zos;IEb#!K~j5cFwEqJiInT{s4u;J|Rd7`y_Ge`-pZ{+*P;_y|n)f;a)`q)~!Np<bc
z&1byrvrpI(stn^|@r&GI<x!CE>_s}*gFl}N&)uBmCES|S0aaxRk5514-IgU(<5A({
zH$*MU8`PM$C)W+{78hk<AL`ZbXMk*pHR^_%^fp`)KRIQh3iCErFdEc&dbIl4M0{qc
zNqqBXf*-#kO33@D=L*|59K!W|QEKfkpQbq&yjeaBb6ZNa4DdOg$R!xYR}nH|`D%7N
zkg3ar->~}TR&5^`=)PL5?J$t=K&&l#VW<q}js-^iB#~jbcFnJI6-2KezaXOczH?<H
zXOtC#YH1OFJ|5N{@*~{%w&q8>lERR(fbqqwNN5s&Zwetm-`#f&@-DwfwPK!r5$j6g
z)4ArwkH$V}?U>KuU&vk+j@wAviwmvtB)yA05HMRU7b?pnrNqWTUh;Uii2(-nRs>z5
z#B1df=7PRh78VIrwjaa$hjkfOo5_W%PIOZ?V-kcigfId!XA+!ST{uIJj#N|(#MDKf
zWj+!RYj^v=MYF{#(QJCMB3XIlA>tTSmRM8n+bZm^t4+r)cv=pGh*CO1+8%T7$4%;M
z60EXy!9WwH(UY0@B1&5>C#|F{k~=2yEE5cZg$sU$a2DC|B7V_bU=p>!<XVrbf;nHy
zgb2P+0`ns2P;AtfvY>%;8o3j2G<Ua`_;q1^J<)cEYapJ5)05>Ir!F*y)0CsAY&9i%
zMr`e==@Y5HadNmJK9aNGfo7O9CF<T5VZLgzwPpcNY5Q{BVqtQhcx?qFi?vhHYjK_c
zbypz|c!8I~s-J9DSV8V`@e--14W*ui?(xs*@48ri8f&i^a@~gK*}`_hZXMqs_V~-=
zc1$1im0?&5J06f*zKurGGUu|uO4u@Wz=(~_chy3`p;Brlb<YqbN%W&m-Dmn`@we-)
zj`q-t2}X!j=97khhR){uEVr-(<M#YLGr;?)3WT=%)5hTK%2wq@o{H{x<P)dlv*tpa
zXG8b<7wV#5>A|eI^f;cb9Zfx^z7{2)3l`0TC2<p&0K;7@O->!sMjEb<xio>Q3`9d5
z-=R^7p2#kS6_1Y&BW}6LGi(t)hWpkY+#))dH?Q<zP&CfWQu^d_42DRrmDD{BlQXoA
z4`st@XK!m`CB6IvO|J%FP&G9~YHfLI0nZ*FmYziq6AfZ4Ix}tj(02^AVs2XO#2x#C
zr_jMza?cD|0XcY@XI%_I6|-`l%|9---KVI`&_qq41p*vrtJV=?nwNEE(+VjFLhMHE
z3)hW$vrLL$R(w)h!2m{SSC|V{&xf(B$7A!a)h<n6bfb;8P~wzh@uM{0=UR}AT9>wk
zIS0|$L{5f|tneA)Ff3oPR&-+cDOyUl0=3pgNvs+@&<Gvglgf03EJZFNUD8kznYBGW
zwMdYQE$p@N#_<@-zvRQ@g|ONJ;ON?i$SOS?h)f2X$PIuS$*e$q%+;E(vOI)wV>&jT
zHHR9+8ld;hR)nNmzvF4{y{&Gy0VMV8>?OfI+Pp0xI9DTkM{Ppip73Nh@E)T`&*m}#
z;hCOo{K9=z&<vD);t7Cp1Jy0U>E?tvJd^`jfC|2hRx}^9>tw5h%KO|G1c&s@USMgv
z`?OI@yG`sg&-}&+uAvFhVyZ!w)0~b29sn5)Xx3oX2z0?#7&l$Y6neNOKydsT-3YkK
zgd+)>DimXsCsS@2i4}X?rA7QA!{0=Pok_eLR*9VRSqMw{-tIbJ2z!X<s(~RH^M+NB
z2n04;E}^d?evdfG1dyxWC8J4Pp+yjQqldFDD>MAftgviZG~5<vi@h&&iX9j*PM1!I
zw#(`f`>_W%k+{=5JIMdhk{V8My3LL)NBn7zLUJMIa&~<<JrU-3q9Y6CRKa01t7R6|
zM(8eL1Id$0p7%7*g&9TN&8fqtVP8J7SN*EgJSIJ7V-)6$F+=Ob1mGZ>)hZ;qIOMf<
zjytAr^FG&n7Zw=2z4bU%rDkf_&Fj%2cq@u0bx9-Al%y0}`yzeGM3;QqEc2;oeK$Ay
zemMF3AxT;+g`fBqIT36q2_F6&!Hd5YnoIM`K>j#CxQ8a3{#});+Qq=BIMP87)-v7a
zTyjC`XWX%4v`<x25T}8e=pVv<3Xx!iwe29w!HQZ-sC~Mj=`xNrG`cRD<qH3tu3X4#
z!v{|u?>6~xyzqo>*nJs6E`)-fQ9&G}NN2(^@|<(GxAq}$cen?$cr9z>dF8%0ax+PY
z-Wyq4N^E0G*&RdAlP!dD${V|+23P3ROsg7zDXmQz<xFWi&fjd`bH5V(?A<5ebs>;o
z6R*VQxy#+X!H2bUFpyTo$?`F)*ZjtWb49j8UCN`w>047jXPL;6S+<xeotI0w!mY*h
zu5Bo<y<bMPQuYtELCQe!w)Akr$kG0tFM11FU=M6E>TiTT$nWo9@7Yv(Hb^XxEu5U+
z0#1?NkwQ&0ss9@f#rPjY-TfW9{$F?~#@}B{|C@&b(oz55q5h1b3lPwEH2#e~5dp;H
z6xB8OfjpFe+P{gq3k+)eub9do34hTMfALV9EdLsH7YJbeW~zY15fL5Z@66v#$>>`f
z|F`D;Ef2-W2&|$e_6IXW#KQ7l^#ufM-H0^lm>C#>NEGYuh`VeoM4T*a+Q8de>6<zd
z{qBUBzJsE%6A=}VKLVIo{d=_O-@#1(DaOSA2b=Wo$fQ5HBo)AaXNjx;)&LuT?SJEl
z+yTJV0A#BEIXLhi+`+$MLjM)^7*3OonUm=E@tY+2fBM71!Va9--%tYs5i^i+W9DG~
z<2Mk@VF$uT|BK^yt$%KngYEY<$8S!J<9GaGb|&Df!|?lHAYx%=BVy(J%{Q@eG6AFa
z0-t^-a{ymJc8=fU;Q&U1{yh{R;`YbYzux+<W>{JO955>*;~%A2fuWO`SsDN6?(f=v
zb?NtSPF9XT%K(S+$3!sz2h7ew#KH<ZfCK+4?RSTP-2&$RIrM+xfPQbQzgGJHnge2F
z`g7?KF|zyvj$vW=w+oSoh3W4iEdP$N1NQju5*+_2YX_YAf82$Q6~Ir##`gC$`|kw|
zd|CdH!p`tFX!k!6K13Xh|0vJF^e2Kx#PK%`#K8toA>#PE@0{%aeH#Fm!Qb6rWZ?Lp
z@H!xo^EW)i$ixV62d4Zzag0nr@am6k15EzMl>ZC5^Iu%uA92k85fz%5;U8h3fh&@o
zg%QYL{@bX~z;(^}zeIN`8XetMH(HzV)1#+2%qJHcaaP8EHlDFGX7-!SHrHCOh#Q_{
zUaTLSI%RKkUa&fjvHq&hn$Y+)%`7PMsalBE%*ql5x&FI-o^gTUE(vO~ypa)+L4lzj
zasVkMrV9ubN9xLQ7#0U;a~KvUXKL6_kdQ7w7ds{`JSHs~9%o!lWoBDoOKB<^N+H7>
zulT7@z&r@FBPlp82{t$-vma{>5-B(>3ArYzqhA6yeq2t{$GB}?Sq@ZcFg#G;yG({$
z93mnlhK{6^B!YgWEeLq8yb|$j6pccs?})hEE3dW*@Lk;~RKh}!0BIVMoPyfQ=p^nq
z#x95$op}rn9FW87_t5$GGp*63VTt*!Ctyfu^^*7ErLN`G;a6W&tID&COb|pNrpA5{
z==AsWGN^~9^bcK&t4mMsjS^hgYN@!e%ilCW!?51)nOxDCUBR(N(z&ryQBtwgIKkdN
zLN8*y>%wjhze@V+2&n_#7Z2Fq@O-Lfa|d_Cr8IVJd%t~>z3%*W73g2SqjxS+&<CQW
zBcexgdDpq&^fsZE$0pL)zt2`ABvoN01citQb#B)+15TzwA}d1Th->JFi_(QaB_(TW
zcmm-S1k+5hE=19YX!mYKWjApo{r2&hoe6a61w7T??9TtwJDD#FGkChcw<fllZ;&7L
z{dl7ch@oJ)@5QUHhFbWcbw(w^J118W8=*cMiHD&kEiHIxEHXDrJAPL;jNZ+{44%*}
z)O=S-KB!&GJKEk$_SBmv6$X?ZG!!BTF0J2?u6+M{_*=HoW+DRK`%%x-H7QI+YGzXX
zjwlERfK=1cGB6g#j>qKO#l$bRrKaXpa&`5-_bVg^rYJ4AXgx5Gf&c`1B^JaEwUN#5
zoq=|8edsPf^W))}(LTrn?M}9Ko%5R-<Gk<v(CS|Ghny<XONiG{|GF5Eluj-G;$VVH
zUHEP|rSFXInn63+oSI8-cgP34YijB5u8GlGzOnwbl_$FTIqY5QOPf0{HH@$I+8_hI
zaLc~MOuj5$5dMw~50i%AGW?f;eoq2~5K5SDL^(}^(4d*Z?}Dd%s<lX9G!eeYa<bcj
zelqcd5Q&fX{Ct?DNMNmEzQ~ip`+<J+b%elpx6erSAlkdUFo$`U!2CX7K9x5x{}Gr^
z1I(9yCCZ6hh6dH1{axgWa2q1V=1@=12-fbYTC#WO);{~a&Hs@X>E)OA_RB%hH*PFW
z&2%+T9vLFam3ODxjdl=7-YRrTxk+F*14IbFhk`b1^!sk{7M}oK4kTWJ`M75~kq?dT
zF~L$!t4Rhxl<FVg{biDUiRF%~Q3pX9o~T@-y6R+XZ!p0st=<K4lGcFHpc&uc{Z$Zw
zcX7Q1KxlBj2J_J#bRwJWT>}egy_aqC(Kh|Qd;?y7e(UiqYmUC!V2y}_ErF_elRbTZ
zbw@+3bG|7s2AikYgzn{S>xEr4kO2~JEDkOp$(qH!ubv<=mz`Dyh%eHRAgdrEc9J)Z
zBCGru)X~I+Jb91_#$RW11d60<>zq4Hm$$$%clatJLJLnz7ktZr%HMqAGr@DT){ae1
zkp_3_sPN3^m4Tx1_OrIbi(*ffol@Pxk>-n~xK-#Zq9(TS^^CfJVd?7FL<$S^dt>d}
z?A;;72r5FpYScg{^OjjxV~E<?^2kEX(jch!0zC>9A@T131VdPDM`7`(P_=ZJ+gh05
zN8x%0^OgOVqf!tG_ATjW0#c~ClIXAM_USm<SAOpe1q|qrE%)uNH5x>LgGxjGW`qvd
zBKB%b47hX!TqEGBO18&fmRc-Q{d+H#j_F)iw4CYV9#>Ta%+XouTTOi=A(0PYD-k7t
zSOx;y0ihwJj7Mt)*bbv~p97siSQ&TuvSp>TuRp`aFbdStypOOG4hf>f*i&hm19<Gn
zTwcO2vc|!VxB}MuV(j+0sbnz(lmI*qA(w;gub;0)m(-RJAf^@CBh(OYA*R4mGzF&4
zo#xV))2^8}KFS;G6d5OW|KJ+pt;}5(z^a6&dMi<~Kp*{ewQ(ow1dn6N+MV!ob7CYU
zACdo(MGm&sbaSmbfQCQ*qi|1vgZ+|iWw8upx!F!R_WkXq4{aRx4xV?T%KX#Pe0pVM
zs=){CtfUeHR!>ktm#SoasOjcmWqgQ<4MM)7E{rj{-3BPuQ5AecviV@j&zlSqA`{Xt
z$`+t3!#o$EP9EFXVgggld}k&z*up<N{Hg95KyFo&uxT7<Jg>9f$<bR2dP0(!AryIf
zE%^iMDMWku;hfzusg>w$mPf!{l3%Nn(#al^cSc7{s>l7OjD`-Ug2c2wC5mwS{X#LX
z?UyLQX{F@KfJh|W>mE0ZWp`Pe$WhamlMfnWi{c$1YTFoy>Z#Igp1@4;;OF}eGI%R7
zzgdR<{lab^UJBgZe_mwyLnqxtP$$PS&{kZ+%t9yv^YxBFT}pQ(oIT8OJ~U1>tzb=7
zA79d!`y<L>13kF7rmr!Rk@P$plM5wc*bgRN{M(%FcOCP+`DRl&@XTp`W`<FvYO+l)
z%5c{LM&|*VepB1D%0pU8ixV2**Grf7#R+M`)ccUrMG^&efB7g1899cp?EC#As<IE(
zUa^Cmy#g9PjXY6~e29M5p<3922N<^!K9TDk8o4kg+hC4EmKT>9{ItXiVuT<5KH6%Y
zfTu&uMzOT|{nZow*7A9*pf#+b$u&cB);>)Yy1?vHCUs1rX*bqO^tB|T7Z*ylF?ipt
z7C2hB%B+)3WtGB8b*41>3|GO?_v$g$`6x2p#o#0&Q}fs-+^HQpU12u4BB3ss@%62#
z!b|2NbNscB2pcgQSkS)6t`i!&Bst%<l8T6WbO=UX?eZXIP$tcC;mUJ%oRKZ5JrP}}
z1-Iow(F5fknGVxr=oQgeEml^ef`q}If1sV(C*1Co$yhLy5@l|oc+G{tT5+|*8&93~
z^O*gV?qX(=JdDwvxK*Yh;_zvj{r(7|=`P{+f!))2xUZa>2RE%oI1N*hAe<?CV^vYK
zjaNeU&P~Ds(O`zh&-ZSo(ywBMnn#UQOw~TiR-t5ViJgIyjxFxaG?4bYnX;UYn|gJC
zgoE}pD{15H!-N2j?^nJ2S8@w$5~V2#f(Uy3dPW*XS>=K#<EmVG3biw0)>ptu^vC++
z`W=TJ#94VME)Q)dY|W<51as#eZfv4PhFixaOdWOs3iO2?O>FhT9yuAjk2O<G{@N7J
zByBz613V;IrlmG-H9^1+mWt6=d9~m?Fq)FN#YKD?cWaIa&3RxO5(3(G4zOw>>D0%;
zPk%K9AMWJx;;jiJj<+Za`b0d%u<LL|=Ov>TGK1>n$i0X}2J|cRd-9LnkiqmeA_eGQ
z;<lV?Mz7|RE(R}PeOq+}XU+C=jdz-QW{;1kCm$0OBZ(6TK&aJ4>M=kZZxV>Q$JJk)
z5?w`0C*QaanT~<VfHV6{Mcpqcp|o{`0C$w|MYK_$2dO*^kVzBnE+wR<)Ik+n%^^^g
ziX3%)ap@!b4P!d<=F^sG;Lg{2DTp0Uv9MzUZc-L(%bz?Qpsx7Ofl-i~;N-J9qWC}e
z0IdTbuHL1so@QFWmaaZ)p<o8a-|qDhZur<LP$H-_GHOOw$iP^_H57tW<T{=ym~70`
zH8`rYx6P8ut!(8yB;pB;p%F|oSFa}#Utx)=e=)6gDbqoDeEf0cgqn{+qiaNXO%!oc
z0qr=%O}BgE=9ZJg1=uUpqc5~f=<te`%*&TWi~vAo7d0C8d~@UaREBqpen!!#0=JF_
z36A(A{!yNPmPm-*@Sc0ZwHulAC$SQLAC~_iS`FywYQR|Prx&F{Po)O9L)JW{;U_sL
z5gsJ<DRTGgLY_N$2$6Fzla3U$<$|L7_zO9wh#uTCbD8NPd3NPbHm`9GSxw#z)hKTx
zmotJ9N_0JnIK=llof1RQFJx^uEMrq?ugr@<=Oj6vy1r#z(y1|`-pd^gD1L0HX=l&;
zp(V(l30_Z8KDOG?d2HtKVN#c5$HRyxAfi1%U){ptad)@7zj7Y4P`kaB=`1fa`@CL`
z_$fuq&kA?-5Ln2cYqsU#x5r|K6ni0p*K1m9jd*?$H&FPPBkS$Y=KXcLzbh==f`o1S
z0GEm*&$w$aDUNyF?x!rC1T{=&d^#8Q-~;a-=#9fsYjg{WiZ^eS>DwgMBI$gv(#LX7
zJ`+l2-)+y6q0-ML7vu^L5PcV%%&%SF#%oS(@}~vh>STHYbNR5~t}4CFD-%Z*7o^cx
zR3mTdh|CAJ)k0Jo^9;z&s4O8}BdF(Bb<PE{P%a`X3f9vvKiF!E#_L)HgF-2!YpEz6
zY_1VSJV1H5pLDdXB~mRBQA-*I^s-}FAs?;@hF{qRV)7tjHpt{J%bnO2^+lD%TEH|?
z$l7atKDtnm4e6ZD8p89KDx(d5?3i>b*d}#STi&Xq3sGd0d^~Oh3(Kufx!X5$p-`Rv
zvS0oo8$q9~wg{3R70Jh%s9e9UeqQz%egMt@1K#V+kO?c|)GAO|$k|n<dYF6yrCB_H
z10aiTYMU=#N6BeSXMo!4#4%WIsvWkSaxJ5oU35g4SJWbe62F$J@E)_ryJ*><m6bkX
zh?N=0^J{vCPG+w7>ypbxom|h>|H0l}Mn%qUi=uAaT^o0Y!d)77cXxMpXxwSs-Q8Uq
zcbCT9p>fwke`|ef?LGG1=bU@T{dr-elFZD^%9~2wf>Eg_c8x{!bZq`4MU*-zTIG+T
z!dgB;8k~E*J5eXDX{)u(2+W&{?kdhjSz^!S0BP$ot5Ng`ZvE2HzI!#SEJ2+0`hrgu
z{5N;4-!hhB6^Ln6O?+&r7s;$dTwiQUZf?A2RUbxo(Qz_=1Vz~kgXxQbRm0%{enUN&
zYcDF^gGG99wF#Ak8lKo=tOzL1Dl;JbuA^Ik3AmV9Gzo_DUcN-)7!Q+1g{qLM4d)B8
zQIw0JHf<Nc%U;>Qa-)grcx|=8)WGuoYke7r8ix$bYi=Qwp<K?y(sEOO`)iBdKAVL>
z(=tU)B_-)f>6}jPgjMtDL8A3>E&YQw^dgu00k&Wy?TBhRrLeC?s8vDVb|{Wb(l|wK
zNG3m7dq8+&#<uCrGP_+>zCF1}D2r6!FVoY>U<f+Ebqc0F&A02hDN~MkLC#WVz!I6t
zQ9--n_>yOFKn;2W-hh9|S0pxnc3b})IVIK2?VP*#5_9oDe4@-|lrCpTMMc&DU!=h)
z`rmXx=86WWn+Ubq=?^tTY>`<RX<Kw#O)ZeH5S5FyP6v7Na;mSR-B!;{x=Ep26Hf4<
z62&h#d*2>id<kL6O0ez^Es>GNV~yv)Uv4#k5@!;#*ao^3jeK<1rV8$}15EVjmO@7W
z&({uDwFYB)j>bQHLb&M@pZ$UqL{3!Ca1c{Ai2{TeY6{4QL6j_VSfhDbJ*QX%tNpu}
zTJNQZTf<P{O)?$z;Kdhl7UujrhxM?w+w1Qqaw|{@+-~gWoMl4|wY2fxrq#DCPy+(u
zUBosuX=_Eu9%Je7!n`5^+z2S>+L;eG0#i99g-0N;W{~HXm2M6RhJ)y&m8eNgRI&3!
z;+IcNXEfs|=MQ_#K8kn*cU^(sj;!0RR8I(Y)B-h?0vtW%hL`uw8_BX&lVGwBUEGQm
z25rO{SvGX+hn@!`3}yK9(j46=WI((GOL*?AEUdVbp_nt7AeVq~a6R8a13}PPD~X1!
zm3W9*R0*R4;Oo}+zxV*<;pJW7<^^Zjk7H0rrJ7+t<H|w9U`Tb2A8mSNWHkT=QzV_R
z;Cpi245gjMLfx<UyXf2#vN+ElMS;7{_|JGFn+u(Dy9q#7G;^S2yeAI3E%iQPWL!Gh
zY*FYkLx04c?Rlm2?qBlkbaYK|rQ|Nd*L;4qWi6ZryH4=ZX~RF`*Y0v9t-3#J@lmhH
z*Qk>7;cYx^rdf8Hwd2!<o2PhrLP6TFJ59Jied2hevY1SCxR=;M7pDQFj;bF*DEx}z
zaG1Y@Oid)-mam>>W-fqO!AI8*`O388pPINCYrEIE^8$_#IM#UUR2MHlq$RW53=7Aq
zf}OS=I<ndv>i%GYITua{Tg%IYYVXrV=RwzR28zH?Yc^G#ij4^R2qjxOZ9oeHT#<57
zELQLezKajPrsM`{+vTRqaPVyg!&f(!%g;T%De(<V+g2jwW<D|18ukw7ECjs|y><8V
z-o0!{QEJytP_7evkE`~whX)yZ^mi#(Y#qL{`0#BONewpDV^&Qis<qAos3N*Zx&R(S
z)l+J;Mt`WGBw@p;()rkMFAL{+Y$*|9^b?bGC9FkT2kL<;`k7>SaNbj^ahK!Z$-xBD
znPV+iYuL)ujH}8SB&umL`@S$|SXF;?urhbf<(}djEPB3RSe#h$Ht(IpiRvCFYr5h4
zBbs(R!hFnb2Zx;t`Pl2h*&o6dq<r{&C!Vv+l9>#HUCrG*3U>}=1877Nlfs@oDkHpc
z*9CKhMj?;yKFnFdA@gA)q=~m>`%>ow^1T<xlk;uOh6x-ldii&ZBxve|q=rLk$=cEr
z36#iD-+oFA1$SP=w-BJk+;6~@Y-n?eyVQ0QMw0hTh58Mk71yQzs*D|G6VZ@`VN5kY
z?eEGg7jpo7%TV^;%6zWUH{I@cH%y`#Nv1RW&PDxs>q0PqVYF!>%*@dY4}6zFs|IaZ
zQL&SO(So`qmpv?oWqD&Clm29y39qt#tfE38%K1gXr~cmJ@<ZA&N%pW>jj%LBchQ2s
zTV*k6uO4{FgqN8|jBbQJW`MLC={7%W^RX&;gU)aFz210S?!9Gc2b81@JM#9}GEZME
z6RP?|cGvdu<s8R)qM@tQ+9r<2gz*u8VqO`&m;U&sMi6RA%tX5FBXPh6{AQV(eC~?4
zUw&{1Pq=-z>NueI(Bc_xWR_7`IqvxjnHp%1(p8pOJBJ+N02DPy^)9+$K#{iHwtZ@z
z(&0H0LI6bFbty@cE;uiOb(fT4zX*rdR*S!B*-y4=xL|~~LxlZQ9QW{wjm5)80hNoh
zA(5T+2d5kBf|E2MUU<Of9i$NT4|O?onx}gsW+275XI6qOrl?rzE_$lu?@K^Xazb{2
z1^Q{&=T^RJsH8r-^rQpjd2s{^{R1_nmh!x>%Ft2eXT%~xEO4QR2F0@{s(@-FuGy@{
zjo}1LlDCNn={5a&Hi~-tB&LsLfyC9PT^V)$SxYp{3%ds%rvpR<lKjoN{Nut~cbpCf
z5s{tJcdVG_v9{~tUB<CZIKy@H4>6b@mTgYBk59k*Sx_k)P_WUMg(6h!{DV_x9AX9B
zw^*)`-ZEgm&AfKz$EQCSn&9txXEg7>np_QV?5D;OQ?|x9E<F>jD5eKMY=^xz<hKBO
z${_NZHM<cd%Y1&%;RjoQab%zod-+XeCvJ77Ea~Jgo(JnWlCw0`!xoV~(#!K{CnsKw
z%6_xo&fCdE{A#FiU`w}a?LbWN3G~$cA|iBDU?t;7QEhs1J=efb$NJ;=*EwrCUDJ|D
z#H9X+uFvV}`#z9Wzc|k;eNOr&*kJ`*L4k)O`f}I+Uy*B}b_0<&%XAow<xzc>_JdAN
za4915<09@2=XBPvh5~$`U~?@#@4{OaKgZQCh^>gxRug=2$Pq)K)&DWnuy*8-<nk7N
z_x=MBnsa6Ns)WsG=t0-Q^RaWa8zSpmRm}&rCLA&@WxDKJK;nBz{<x(5zBU@=7I+Bq
zcx)|ovu?3B3maGISIrc(x3Y^br-bvWo`>xm0)#^^>)tbK>D`qK-6AK_?kQ_QP^Z*Y
zin+sPBjb>BK;ienMq%hC=*}e~4TOXr>j+#{$pt2hxt**7gIfWf54N$YtO`Kgv|b=Z
z%5P~I<omE7vpM(Y1T;GgJ(Dvws+Wj9HplpkD8vg9bOs@>9#Qc7k`7fYa%eSj*b<O*
zlI#VX6<Q8k@$MV5!DUqYPx-WTHc6COVmuvLSsms$U^%x{MNc*{j4M_55=JtcImC&P
z1cN?ZWliw*gnK~wbd_y3>A(^P_?NH(?g$&3{cbkmmt_5I_B%=40vIugt#ygy@cKea
zaT)e>lXCvF)j5x)R978~KQl$y)f)N=@jEXUZS3;-0vmH=8KVw(N+L_cYMw*F;n#n0
z`c!b~XkttImkv~i$z*P$n~2Q7%;J)DT~u*5$q*(hjmi(p&M$Lp0L{5P=t668o8(i3
zN$|Mca}K?s(^kjqm>)U&C@4muQ?ykgjf-N!(RwJSKibEM1GFY*^>OEkq{OnFuzOHf
zNp}Up;8ja!gI5=Gq7@~tyk)-WH4^XTwzxij%?Vq}D#d*!=lFd^dUK*W5YLVcXtuq_
z3(T)8ZN8+XF2#(RWP`I~&P$fR+%}3D)opHTnvd0)VB+Ay&6!|zC7HJ`h<$ueRm_dA
zCv%EkpWfR824lVFU-{w5V4g3O%IgQfEwI7hvL%OPX%rbsZJE^fr7Hn{h&XDDB#PBT
zHSzQji8hHqa+3%uW;TP87=#IWVLl?D!Yt}@BN1~|m<a&wU$9?J5A+;|^$QMkn3mvy
zj6zR4oi#UpPDEc1(IvFFk}Y&86_ZM*VWv4ohZ`F-M?K0s8{+3fJyFi<y+)pxsa;n4
zZ655%K;YzGLrb|3v_dLQ?~5(crW_q?Rw2hpFM=w=YQeJ@Ep`9-NBWm;*gJ>UHhHOX
zIMznW#{wdUR$uX?_r*;h-Pr+9d<O&O^GfHV$M%RrW#W?`Hknypmx;mRK6@QS{*UFP
zYKXP7_g~r@&*OR4S?61P@<75GwUSya$Tmm=C%p_k>Fr#3A*qU%0T=hAyOdO_>+uNJ
zQLiBf&uk+YQ?z583R!fH`}0eo`l?@ovQ6|I(v45IwX7DKg3NU#gZn`0Zp1R)Ms+C-
zSb&|cw*|VbzGru`TUv6woG`%cDt{e2>|aI&+<*yu??+<VJ<GZ#v3ca)u|$kJ#urR;
zr~yk^+nK3=;g0>b8}JGZ6;Br~d9)89))8NY<0rVZUs|qvc$WKB6qh#5_FIs_!9!Ub
zG}MvTTrL{o)cQnj@s}C(?OKx#H6wiBfS|K`7%A$hbwc($;s?#N<Gk12lb>y%m@kI8
zK~@YsT+$V{ULvs*%iQszCt{+W6@fhmY^=&ADji=d-MPQ6P?m?gx0NOR5W%$Egwk-6
zi6*9F#Q#O9s<bI#qFX_Ep?vZ>5ZUpinkR~uuz=_Kv9gHUK{A#dgwV*3Brj)&jg045
z1R)D3kYY9_;_0xWv&hs?pmLJ?eCv)}{*mS~zRrWGm8aHtC}}o(CZL_A6m*pJfgA0&
zl>A+6M!{F;*q^h5<xA-hRb-_q@I>fy68R`BBLb@IXJQD-Hou`;^Qa&pd}TibNvqDz
z&J+~b4<21IdcpA=!r!i_47TU0{l}+nff4Pj5!eSi?fBXj1AioOB~PB!`GB}Zjvy_P
z8sRWh#-l(I7qLf5l*CCiTNzDktq62ngfS9Z5Gb{!*pmcWqsFg`BZqU?XqJ4z*{1^I
z<H$IRhTn{<EaEkuzg_z&e=oev1`h17e)ZZDgkgMtS`b!GB0H-9j>ckqNYZg<MaIHz
zZ#Qy*OLwg|q#5Lqd%bUqm+`X=P7em1iJX{s2#Mr2gDT(4d$11uY;?JhUe?p4z;$((
zrXnV1wMJ23EZg{~8|_tMs0S>J_SH#}4YNjRuE*1<yEjm?TQRFm{e|0;wDQ5t>w<Z`
ztjy#zZ-fV-<v0~C7HDlWVo#4?zt3(ffvCe}*7;{j6sH?DWKtwceU`<{?ZeJ}W!#&1
zrn3(-*SO7L7FbaG4f{zL$#toh)1g`yf=iue$4OzdJa<lMYVB7eS3~U-LBS<2W)}*h
zl#Q6n+mfk^<g9pJI)QqH{b>&_<L9Oyh!9C1BkyQgI$?b3q+0nHN;z$K<Dm^?9DT(8
z6wMJj1$S}?H{%+fOL;|&`JB+`A3ufeJ;(<{$<LV{<PgO`%wS75q$XACQoqAR(3y*=
z7)ZtDWtd5ilB?U}Xdg#jl|cMRh@W|A<%T&4jj>SU3<9E7v|%Au318OWu;a};Zr9UV
zi_uvea}2BO+_fJL`3e4;J;?xa2t54Vw1V0%h$LwIa&liSQGCwuz$<%jh2~_G!rY;r
zK(;yE=92Nwoa@o{kX7lp(jE}f%^XusGGwSwJ3@YnpY9M63p~1l4+$SuM1tpeF$Ue?
zj8+28{|LNsF<dbZl+CZ;6K8o}Q2W~Ydcp^yza^2b-Yz_SSp{0u&|Dc5$UaV4C#^qo
zXBVe@PcyfMOR5u`+4uod48-|RF<^O22q$Pb>O{wJ#(`HAeNN{7O|>BW-8f(fp=rAD
zOmiNGR@;KbtF0@ZpI{=?$`x)0JlFnLqrx^do@5!XkPrcvn|y2;T{LE^=t|+_@kJVM
zS~Ln<{f$)!jjY7Dx?oj!{Y$AlSg7RoBU92we>uv|jaQYzU>;0kf2$`PcTe67#N{)y
zq$jk(Zgi25G2}Tz&=;*!$*l4IE9kHUZd+8s{>MwS(&&*SI#HAB32+{029M;I^WODH
zbqBy`=N{kF)^TUPg14_;N+ITz0psCo*>%%5{k>*8=~MUB1!h_(wxz<rZZXpDk5jW)
zdWAEwJC@OS$0NhkP*|QXet``R;@|Z@Y(V3C>ih$5vIfhieD-7U3)K!oL2wvyh1L*S
zzPc)T<4gFF$M#SQ<st-kPjok!$ebNl>ev-5Fj!adGM!G_K1)UE2j2C%n1G)OE+!A=
z07!P%?)UY6+GZ^1qppqLikbtnI3mJgdr{0$hmOU1eobq(qf><by#|XneoAG3|A0A*
zXrlf3fyG&PUSPY4l*OF-$*!_9bfz|vZk_nz)diMQT~eaVuTd|4M13DL*FB_#sC92c
zkOk+;9NTck^OWTTTv5;&df)H_7|BdG6w(f@`)lSrNSxF<Y#;c3Z%VuBrK~$%UBA}w
zY;=Lf9c9+BS;`#%o3)Yyc_11=F{LvE&8o-kMUO6K*ML{D32y2)&W0WxwsO*G$mbCx
z=whzm>*3jfB9@#mFzJ>o(SyRuocE+2mR|^id3N7^Xx@(Si^a%#u^6rII`d8?zca)>
z-ck1X^V?_MemS=8{Q-}b0b^8pj(TPu!<h!4sl0P!(hP1R>~pUPBrv<hYx<^6v{>Ll
zzHR+l4w+>TR%=nCk0Ilv-a+SeY6aG<EepO|{$q@Wb!TC#S2bN+F(QrfqhUU`zBqDT
z>a2G~7vV>vAsk~rHyKY5kTeAPCa_Dz{4m1m#wr#I>2-LZp2gMgDJNveMi&N297fnf
z-3QoV|MQryE1g4zLzq6At|6fZn;ua%kl9buDwtTZ5?ELpfEnYNkO?<OS<>u*($a9y
z9Y_wj9r3sMp(o=824!SIz3R1I-<U$wHp$m<lK`!>*f&$}6bB}bw-BL|Ul(zDJ>X?v
ziPI1>{V9h~IG1K>W)%SHy`5KeNSkQ;6%qTdrDZ&_-}}9s{JdSNinq`soK3RbDTpg0
zG&JXA+J3VzpMFaOM#K>WN(XFEMzKl}D3LY!8r1n<Nhh5OjAMvEbMT!~dm#y<*}TBp
zue}X8xT9*W(6C8-!4u&9W=2}8J=<yX?R6VjSoO&{{}d`xnTge#1TK<~md9bA|0-*X
z@PoqDM99-1(pxx5Y*?I|WX*=)Hhl5BChQED=$T9VBO1&@#Ojahr4H=zL2j*rh0PWq
z$tZBZZ?q<FUM;`=?)eIyT80jb=w%URj)>6|jl;TnEp6!0>+BUKn%FA^#~P~bvw*Eu
z5m85?b~i<()dx4m%{J2=|1S(9=VCwPgK>?ro1TeiFRwSL7VA-cVfdl)&Dn{4d5|_9
z8P$S_o+n;@E+ps-HGZtq<-q)wU(lRR8(g2;FkfkMC!qRr=Ug(A39f$if{wNxI9`#O
zKI$F8`)fRFCJp3k*hwm^qev9@6czSh9`)BBZkzLTsiWjGW(q4^l%E%al6_l@E^}99
z!azWxAvOGJD)&l|`AWafxyrjl{AjByV|5|L?<Sw&SG=_FMY`UftjC2FHeBRgx91j4
z5l%34u~yVBt{JqkP_UrAW2mh6`ndZS2QfRr=~grsJa}`iuNRiVD`keVUyFo8VhC{?
zdirxZj=kvFd(&EH^F>3FqB(mj=80DKhS-JAhk%*$!99cx^!f6d7o{_dchlOf>==Jt
zwGk;4*Bi_ekCtEdT31>YkCnx;aDf6&AzTEnlTl2i=37y6LiJXWtsw{DI)ax)c~KZN
zy!{@0ZZUkyEA4Ok$H1k>-tT9a1U9+F6PCF;EG?b8^=e#U^x37DWM~61R@R-^8g<<s
zqD{zkoYt5O!?5jHKDy_1Ef*86!ru18oxq#*(Wak(g#3;PMgZe&nEIS_UuWwFEK}Q}
z5UwAk>FKg*%XTukk-Xlrki3#*-6gquT4q%nVb*vxUOqcRna}gp-U(0j@j1DMGI3+R
zb?GF1AN2!7$b1BNT~q(u!D68Pb-j-p*E3D}@N}5AzC_R4wzwR4vQ_e(Y;xa5wt`hR
zy1QR6oJ6tgZ8iG=p(!@WYL&H<%P{h7m&m$KC8(yiLW~bOQvNRv1#RschJ~*|Loa^K
z<PQpEVg4fJKP@hIUsV0eX*w*&w9U`TNEKndAY+!L_Lhw!WY0EwfRneM{dWeAq^c#f
z5@UwAUS~ppp0EU-u~nv>>Q{{<HXa3R?DM`da{#}^b5SX{wCsmR!XEJSa&C^?)(XdY
zN_00@IolW@$j7pS`}Wf6zPQtTK@3w+?u)CpQsF|}jKvU>E?c^X6&KeigjWe!Sm4>`
zR?i%cJbQkE&6Z3;p=EV_?tQyKgV*X>kptk(5X59SbW;6tq+dwGx+pk@3KlX;IFVwp
zn0B(CA$-S>=RWCl7?(}%+Eu#M4@W%1g>OWn%zW1arg~ky*HQrq=nJ*2HD4Dsxzqvl
znQMcHvM?k7leHV_5`o*KGr@b6S(%LpbWe1ESUfGg@WJs6G6X<pLlv5S1mY?Z38Qgv
zvqar?$vGxfoU|Zc_x~gsNo2aoqcCP(xjxICVqY6)X?*GTxaR3Xr?(}VBNtOI?^uy)
zN%fVOye>8GQ<yxzveS`1K!^QkTmsaI3?^MOF^0Y457}N(zZ>MwauKH#Wu3AZqn>(A
zba+j7#Q9i3l(K8f`@meX(MMgIxHT*4;*L}ZS~hh)K)TA>WckLpw}?`BOn&^tqV%ZE
z43{R@Wv6QG`x(~M_6vOhUuel@WI23&+qXL{&7I{m+Eg21B$z*LijZ(Z>s)(j6j|!d
z@nUy0TCCh$0J;%@!3Bz(s4V~KnwsipoSaAO=Uh5gpzI0nXl@`<;KQ63&TNII7W?Qq
zb(K;eVg=LA^;1r61l1;80-@9b3Cn`;fdA}3QrB<9u@Xj@>zs*flD*ul@DcCL-Bh~R
zQ~#(##md)56Ix;O^xiqAY?Q`;>dc8~7q=g&%Dkx9Yv|&Tp392$+*yQ5Pp}}r^=2Q6
zbbJH%pBt*oE1aG&bx!nsQYhD;LPR&5CP&VGM!P%gV}aeZCTY81Pg+&>MjM?EWGPKj
zCv}IjP+JH?nZ#rmbBCFaZkxb@%R_k1(f0~hn@;Ygi*po^D}_?F4ntkY37slyXZUqy
zzT0EgaCGuN6ppqz{?a4H&`x89Y`-;Ez=zw%_kYG?H^jE$*%{A(0HnlmV0<XpA3txI
z#y!5kJt12+rweJYbkwB!bBN(2Jg@iG7j=OkgM}wx7+62NEnLf=3~e{ql+|ghTB7%5
zEtN^4?y0EkB5U2PjVSF+8|!c5S}qf<gZ}<1OSU{tFX4f1Zg!J1!<{1PX!X&R?{;yH
zxm}6ZJ2I>&ViTQil2+6F3fWaLTVx7p8I&0KE3C@8Ld+*k{8AJ8Y7WVTu?K8#x0$k*
zrEYL)um@X{#@c!8T;#DBDxH#a*as0u;-@b#_;P1HHS1Ja0A-Y_|K(w#>#^rvnPekh
zTYohe8GH>PgcOQ^o@{_`Y&j(h3*<Gc)0BLsVq%iqA{(<|*_Sk&Qjb`wXR+Qxk=|MS
zOOUrPO&GDYxq9RuOYs__n2W33O+97w0m0jT1mD(YA87rwRY}f5wafbJ6evLp;-27I
z342?cQZN^72X^6E5@~w{*yA8x@|q)zXZ8;?t%b^Cn)o8h=z;?oW)u$6e>&OO3>6#I
zX+$<QVCvD(UO;~hdcc77-oYB?>ea>8dgoo8NtdYl;9PbaB51ths5^DV?q8dwogy9*
zObEjP4eM)`D{52nK0b+Y7XdTu*f!e*37tjW^y3v`1&?nQ7Apj%OSsd-x~k13_`QA+
zlxG$ka}lA@vp9i3NI1Rk-`K2Pz>T6~4YhN$B!yyoHI#igii4_;rp=KRHe#u*Cv=Og
znYgJx>+GhPcVTt^%Hiwa6MR3$HLIUU8`y!=9CFPHpv-w_KbtO!r%@r={{g9{Kl#Yw
zOAp5y=en$XTrHP4!3p2}eHt}*)z?loSUxBbDu&NTL-(iqZJLN$J62voD8EXe50CU}
zYY0uUIwMeJR3S#X!8S;zZ^;iR!Mryxoe4#tLX02jke7Ag2y*I^MjLY5LTPDjtmSV?
z;a7_8u49#TL0hqGr;<~{FH%NfnQ7ulmH}7J^z+5Ul=WgiX}c#dq0;<EIiQ!q%f7u)
z@BhH1#Cc%PWB#&oP)4r=++~Ir+7=y;&naq{jowL?(WNd*AFBMgg09ZvMr%ZC8zEdZ
zVOYcNG{a;;bsg)qA>kh;V|O;lh|ri>{*6Xp8#YnUi~07VI>}slk&Y-R$Bs&gt5@fJ
zvp5GLyUTUpIHbxiULtn=+$PHM2}vSftnr4|D^*2<6N<u!2WV}#<!Wf11@0Gfo3>?U
z>M|l{u1x1V`YnoLZV=9ahK{7!6%qzb@i_Am%&HU{XN=I3w&eiH3*RraeRjJ%Xcn`?
zY$PAsHq6}leU^@-adUo*oPGXP=Ulcj12=!iywplzY6H6@a1<%j9<22A_d)z!3CD=M
zC@iMfH<;Y;?dMe)osOW12$jR$0(+O&Pjg5-*btmZ;t9^`HBd5v8~ZBjN6P0V?vICV
z+Bqh@+1`+<Z;ROdY&>B;_1^>1FZ7ke&*y2XN0pv&6=~vby7wSx+)E}S+cm9;L@CmQ
z6=>m4Q78A;&9VEmvC^g|9?3Ki7TuhetV}Cvnv?gLW9hV6WksHGCH0r^ZZfpc4|z*t
z*gNC!vC#Q?r!#Q-3g*ejM)2kbR@yRxIRwSYfh{uY*FHgYqTVX45L2bb!@^P2$`q0+
zr+P7v1d^(fpw|M=uarOgoi0yB8_vRZu>mS8*jZ;n^vx&?6O*GBXtntR0_lM4Uz~>s
z#F&dh_CGjY%(msGvyV%vx?<cXsN$6|gArKYwPK-DG(Ab27gZ2n`-;CP&p0$WpknkW
zxIZ>H!fuFH5JGxi5RzM;qxpHnda$z4cifOR0?7nvg~$vv_Af*en%_yl>as=amce2G
zv*^dX5wJfjoS$FyW?j@4_%P#ILiuiLQ($jLooeogNdgJ>*CT>KC()D2JD-4cXzrAm
zqV*QnX%1vyKa<q$SnbQ_aT?`KmdDf{+Fn2;Ys(&zKI8lj?BW~<ca<EoPm}rbd=BNi
z1Ti&38of~>^5kap9;`DOCB|V;%4q2b8@Z+MtBCOa;e;#^uJ_%D&;nCme@`eg+a^4p
zCS|iMZ#Q6!zbTK7pT0hnZzw=;$Bhvq+SNJ1J9>D_*khJo_k($MojJCRd!2u}Xw_bE
zDE{0CQEn&hD7|v}eeN989LTkiE1%OAR1IaNZ#?U^h0b1&3zK)XNu@Lk3>v^{Uh~oz
zLTlvBhNFjjnqkyNXnxJ{?HoUt0RwW;phu`IzGMuZ7ritVn-j7WxRQnFApep+JSCS2
zR<I1*4q1FoHNm$puA%~r&_{c_-`MToas11-v>4<4N~lCYdiD{D*j~>~1xD%@ww?;i
z70L_kB72Clj?IDuWHwy8oXw-M_?NdZNVrW8?{VF`4F<?&8Fc6{m>b~qvuS8Cc}_DT
z**g9XP;5TZZbQ(4w&q5bl(&V~h|%5ej><c~vb>7k1L>5Ttr`o9;hH(Zh$xwWtDwGk
z;ekr<0@D$FUk$~@hO#)A-(NBdZK3qJFRAk>2Q8rNu#G*|c$`7wAuCp5XE`kS8W5PX
zxxF1@Xr1&^H?T1Odj$c73^Z(%Vqkdrkd7*IdDLz5@6zhmnEn}i4*2L~b-BearSTRw
zuov4}%b8L67tF?PWmA|U9I~tku=_W4zKD1eh7$7K3S%gkS{qk+&uZ-h$HyX7em1|y
zqFb6M+V6jzNYG#kb0Sq1nJM&px>vy&^wAIsct*qj9smtvGoYD-TQEqRt``R+wM5=o
zPQ=GeD;eVzpxmgcB35E9Is48z-T(vmNkLx#7PX})31?`T59C*@6u+C8noefiuiy_;
zR4>XXbBGGJU0cD+ibiX(L)OaD9y-q~OT0<jK^b83Fm!IDeb$>(e5RhTQ!OW=@;K3(
zM4Ch-bb|#BpP=Q4Az#TjP%4*jw0bb4yPw{51m27n-1YKSL=81P+^I(UP||by@${r4
zO(CA^4Fv4=ISWxEVLWnZiyMLt3J5lfZEA$J)I#8JY!yXm&DXf&x~s4%A%s+Uo=VfP
zcon>tn%G($`AVy|jvWHN8KGysH6h$08=y$`CGPtX3d0z6>ux#L3R9@0ZL@D{U33z1
z5h9r{njaf;CPUX=J0A4n_ntv4j7smd;d>z+1!Pw&FXW$@hK_6|*=-~C0a~dt00vFI
zf*w`t{+O=5*<0A4)sG1%_3s@}Hj+P&Y|yZL#;WapLM53t`L4k-C0q^;#pYTZh3a%}
z7O3>j)j{r*dF#^%=vkeW%b_*JbY|Wu5Rz(qGJ+*Lobi-6PU|(Ic*#n!+NgM2$n$Y^
z*EW}J#pPA>mMLDyN(Q9Y=z-WHX7N8wf0ap~0-t{S(fS0DuB(pS)Ew!V1d*6um_YP{
zrlwpWN79S8n8dvNZIQ{h{#L3KpQTDg)m8^&yu2-xJWF=dsQh<Jv4b(LfH&BwKC&?o
zuED^aT!3)=A{wLH?if_Pd&QyJr*AWVr&uqwqfm1dI2GMTIifD9&%msC?BVVuK?p8W
zCi3d?72hbYeUKG<pd24F)kX13<khdyp=$q%<Jh56o*<_Pl)|wUFt2raAV#tsLbaEL
zH~wLT3jfeEzr%T{npZfDWuxZYky35AXa_2U79;Y~+&gr{VtVad#<!#aLR&43a{Vy^
zde|36!0%<!S2x9mF{aECv0T4>9~$(EQ#JmBaO}$K@X?6egEp4rVFYm+iwb1P6^J{d
zZW#|Hs+;z6>eEFkJd>4E@BUOPsl+JfnkWV5q<KJW!hCJi>8@6y+i7#%TIROGn9)~!
zWCf{t?*oBGux&#V{%Z8B%3<sgVhc|%+3Ap*ekndx4f3z}?kJUUPjW=(FDf-5NU%qB
z7Sakf5!0`!CSsCAH*8fnkZKDaWHb-B3e`gh0|Zs&83!)N15dx<?9hfUlRs4|6cuhL
z@0Hwd+{MeTj$BSr&1jdhPIlPZsueZt$%Mm3PAZkmap(b1U4Q`IK-cC_Iv2GVl92{$
zp#|t*35noeVG(}bQSrOlUsno9?H4q5JE#^MWkRVt{f(vj>a~Y}hGz!MGorIkP@G76
zZ7gDF*iyh(^@#|H-~DGi5lvRx>tWU7azGQZqAD&%*r4fxPWBl>Pg?_yEilC8d_I<s
z&lL7-Q68oB&XdPhvM)Gt;<t_v$KM3q`$(gm8*U;a<+fqk1Q~5}&dKG`tRbQn{O)fl
z3|g~cua0RpHGZvu-dny6cG~9AJd%ZmX_-)%2B}xn&AcS=D(;(%!|I<M=&VWuCm?^r
z-@ke<Y2GfDqHPv;SqIv)Gl8`c@X9AT42UC7pI%)A)p&M*4{PyMhi*0AS5<a4YE+C<
zUV22=%!rKWQvF&lm=e)=;T?g|%Hp`RtmI;d@&o>3TuDU@Itb65m7dcQ%<<V`pCj5F
zhfvqNnaL}MJOBh;ewnG;uj)$l>mo-5kdWn_FbtBp(lAt>z!8iqh-`fb_rPOhlh9$w
zclyPt%#g&W9@LXyE_QqB>grUS`DYXqe`YpG#EtyI<o&l~raKe5JNO(k;aQ~0fez^b
zuT^z5qgX-XLsa;^T&T+l=9_jIgovbgyDSZ+EcEMfWft~2U73yIiJ*iNzLzqj23Fm{
zP1=b735ca5#AAbDP=kSa<ZwUVxm^eX*z{Q{i7jrUmbh|D;|Hvwwn5vABlGXljUbR!
zW))3<22}q5E11CRR5p4nt`a`OJKnQGo$UAb9&nJiv1>O_*r_|GpX(UZ-|Nxe5WUbj
z;I34A509Z>(lN)=M)}p&kqirE*Rtb{6LvId?zWgtoF8N$C~TB*9?tF~aG>ifYCx8I
zUXh*!ah1XveuKw45o`;(mrUe`-Ofe)#N+O?^A)i0O3FO$Y)rLT@!P=;bPP)<8g@DM
zeeF91&FlEOv_bLE^a>nx--4XNr`Z_LW#jER{A!nLXKLW<hNcBg4J&y~3?c2uvpzw$
z%xDC+JHiphn6pAwlN>*JJ2=;%`^xm-Q-j|-(IRMP4nI8n`HlSNA9duOzt(A0y#p#Z
zh$igg!b7Qje%b}`=L?IgT^Z@?a%k}cyayhIcdFmF#2)Qw%xzVNqHr5QG4dtux%TVZ
zaVFk6rUfmsWk$7gChT~Vf3I_6im>4+1Z|Gb!M#`=XMX=N3f*8kbRH}l4~MX-6vM^R
zf9T4ph-?coUOQ5SvVl+@$t8dXm(@zK`cf~xg)NBX;%eEczaF|Vg_BgBg#zG>9QE?2
zWI=oCX`9@bGu_2S<~m`HbUa5~upQuhp%au)Wx{kl&9+eE-}&}6%3U0qeei_SH4i?>
z0Kh-*Uj#qnw$YCluEbVb5yU+s^+*es?laRb=X^xtiJz41Luc*aw(n|U6LN*k(8!D@
znSr(qF=Ni%eVA@od4fB~04Yk2!%EgM(2n0)SDm1(fq7q-x3cn9MsYZfr-PTJJ;w6t
zDZEmUR}0O&ap0Do&#>&zj!hYfEgVRaWrM3JuWVv>UPgVKIgkTmW8J34kq8`@RDUqh
zP=Eg;*W~wQ69C%jz_=pmaS+M~rhlK1oJvcEX1#~L^&wxGvQ_(>wQmFCaW8x{iUIN3
z&dh^4oq9wt|CW2MPi=G=s;)Y*rYMWd?{{}bd`95l;TD~MiRMV7BaQa8kG7<qeAq;s
z69oN8A#j(}9Djq=_?VNXK>k+LDS<$6=XyI|5aq+#qXqJ}%>ybS8&KTDqaVpQ#;LN+
z>v<Q>6AQ_{_H-(>$X|={7SWTm^CGS+)+ua>;+>8vffDR+(y^CQjzS6s#L-{)$R>V5
zqKiM)r$~C7+g69{^qbX{H#5VK5bW@qOgKK9iWtVLWeV~IOQ^ayNt{ZVM4Y41Z)=s;
zC=O)j<LPFmg9Qu(JK4=woBc?J<3_v1&NE*mnSGh(T$}K6{$2`9nkxl1EvSFt)Sa$T
zonsa})muP?N;RhP%~%+PbjxCYV;Hm6QcoXO6<v$s!|UqMX+&!k-Pn+0!@){Sl)RZo
zw1Gq4a*;CW!8mp%Y}s4%_ig0fuM4UD8|gmBd`w2h^!^8<z(kbV%IzoMEk4f3e!Q`>
zL1?J4U9E0oC26|!FrcCDo3^Qrbo};i*sDtIPBzkwa#bKlNet*K2Whga9<wI`yOtOx
z>fh(|X8DY_D=p!79XAv4yd1ESGe>x7j7ewwJ%W*1lGG8qNKnopXru-Y5N=jT9KbP(
zRcq4VO6I-3#`;h>%0EB17KF|hQe0c_T&BrkUAfQDeJRsenXQ>3dbnX>zY70VFDP*4
z)gh4ey(TPy5?6Z~13?=(q!=6aQm2c5tamWlq8is?4<=(rngOKhg|i{k);)i!R!>YX
z-MTJ)%-=_BhGTCKn(lW3nS>spjXX5FcrszU4jGLS_XQj!>0ruW?`af2X~iuMB%|T`
z<9q6J{ORmSSIvrHWE7o;{Um2KfT5l$_!+b$Dp+!X*|uaKWl6_?0gL}RJGc?0K)$JQ
zE;XgGa72`~mMCsMWPKcKb?hc+(dy~UIvADa#V0`N3Ntdsi)^!hl0&1*^eQe;{7zWd
zUe4%NW%}nU&Q-$#0{dFJ2M5Vve$%o0>7}S!pYjd7t(UtTzwZzNRr<~KYk_tItVO+7
z8H{Mi<4W@7=y8-DDbUwVk)Lb2*r)w2+oxxk-xo3m)rg@Ht6&go20NJUrg{+e=O&ED
zjH-KX?xaOAIW;p;66Z<2AKn*u-RngYNiVB)zMl1k&^|<8tzX_>*>wQV@PzvjS~&&K
zLAtVN)S|K^c?5(Z-}zJ5P-KLtHb~crbT#vAVXc)<n2cedCF4lz#JRkg&_685J(=yz
zKyBYgI^A<_t~{VGXYadkwa2okdyqm=(OB>fq>zPPCX0mKojVz1`z+6#u<iBsMFb#)
zgnA5GrF$cK@147mcxsQ`y`E}=36^CiA8F><m4#AN<tq`YZsxvgp>qkJ#)){0Z{vp2
zW^^24Kl<QG(gD=xfNf2rm$>aOi87+k1!z)dAOPR+qDi}vf3;mr`k}n269c&@8z1S8
zmYw^f_uEe?Z#=;cs9d^tzQ8&03tzp6S<D(h`e1{L6ymkQhQvY?N$&OHm*Y#u@F8ge
zib`5BQYLeTHgL_}re`F?22}h-<jK4-%{45AAZ0u#x)5c+ojB_AuMQU2NZ}&B5}#=r
z9Gdk=Lbzo(p`=Y@4du_+`;uY1p|e)pWC(m?x<;lfq_W~(lhue)+{ZaU<?J`SSD+qc
z$Z0l5iV1%uW0ItjkW&)*jWM9j=(4h)i^#xPbh})mcObgLEbqkD4wwGsiDt#fQ`bbQ
zLpwx9lI;}VMf9-zJ0A@hbXV3$vu;Z(7DgrLBHH!AOFy;{LUIE!Fw{_73xWkPy!SUK
zGPCveGPgsQfhcigxi|mIT6Wt|b9UHtDG13xVW&uGNPYT6S8xSj?(9B;K)&;&GXP?(
zooog4#9|Wx;UT1Qpk+UP5!lGCoNT(c!Lv-!v5Y5?tjV)c#KK-D{K@!0!JU%LW!c^K
zMDUT~l-HGrcPatBii0TTV@dt{k99^U?s7JWZ`S_YV$|CoSgm0}ckZS@sb+0O^+xx<
zW%s_4@kNzoXP+G)ej}mOsDfXoffAs@<V2MpV5h^<ZfWOqHesQLh<6Z}f$3Fl+;Glz
zf}~nR3aOiI+7>!}jn=blTuJ+hLID>izN3=$rH|JPov~7AptLYM;(?ovC~+Ovd&t(U
zs^Oj3%3e-~@w-qW(NS}l420=UW665UxBlex7TC~@@Yb2PLZO)mI$sMgZ^&%(+OY~x
zdImwCvp9b=rBv~dG`J+lN~oiSp;pARYB+nrU(^jzH&dTCptcw-EEf)4N3DKrSO2_d
zpCUWj1&F~s`WpV+Q|_)srQDSMY|V-L_fnmPcl^v0b3;k@k8y{7dYR4&Be+frVV@f_
zGxb-({<;k94|Ptm{N<Gr4RB;@>Q!$Fk{NJs5k2e9NY?J2vkv?ljX6R`cwt%iS=T+5
z>$1I)`cMS1Y!gJ#YBnqPu$1{(D#x$cY|DGaZvtx_pu7Xr=^vxhZFb`i=@CRaOW2Ol
zZBdQV#8FaX*xn7~TwN$tZExe%?>^ESoU4Y$@6Rw59Fb4AUQKj*7Eg<<=;IV9lm;%v
zbH82sjFqozXaK>=(VBZ=J?>9sNVQ_q@b^nxa7y{s{oUV^f5ICnGmAdxH3+j|ah(^1
z6IQA-(6T2jHaCb)?@ua63e&6Ii$0{i?Oow~YurxG<{jDS)8_g8)TZhmD^P?TdyzpS
zD{gvz2V?*tk)lm<zv^tV(4T>|j2*%u%74lW7au{IJh3&il*?i7b6wlIZokRf>?R&;
zPsJE+8#VgWp{oNc;$dVU7!1+4abq~k@p#C+OPk#gOaVATTs~^WiB%iITo!6|@W+aM
z(Sjg4ZxjnooG$SKQS<#(K<sZ^k<4FvS%ejg*SOi6Z(em0G=&ytWC8m;OM48(%0!u1
zz%wh6KLsP0y3gle&t>Sy9ont7G%(^s=8-xV|BcVH_nAoa#lxP_L=-one?nNh8m)H1
zirQxCP@YRxt?XEXGK>Y7SCy<}eW~Eqb<?k@j3DM4o2k#(cN4Y<apuP-QP^6RiBP$O
zx$6Ti2bP9I>?cNZQ<NLx<TsS1<3LAGH&Mf;h9eQCK(v-Ji`2*uVxji6JQ}vem*Lxn
zdAc~*U;{&q!Lg3!C)S1zA06u%y>^070~ft{9MubZEfymu44b3#k6)7+A51;$U%q5P
z&h=&xk_e7mMI((c*a}9|8_YPcv^qxqlF)H1r+JVT`MNO?Tb?&Q9P4?`fi*~?$|11#
zBI@Pq$#-!B!HpXwQ_Y`{LLFucc;JBb;VYkWIn0h$NXb9$q#W#BD3$7z+3@>ucj*U9
z46E^zscl$<mnwXWj7Zq%@n^*NR8*4KX*;;$Wpg-$a*sfcHhZT&w(!t0EUNs6tMLIJ
z*xgG?-%%~cqZ*mAvNE0CSX&XF+7Grm1Syk_yubsY1Y5!j_!rS;b)3u0HYr5RA_2VT
zL9n}s&s(Vo1)rK1nWq4IElmXh-GHNtJtcc@_Npj%W?jpzRR_Y?`h=<9A#V^Lux0W{
z+sfp;lf^HQI22*Q9{!Rg`B?nQ;W_(E-!+J2f^V4AU`5lN5K3ieCI1r65NPZxbbQzV
z0OMySaPd%gYV<o^^B>RfA}4)G$@0D4Ac)^-jt8z!bo1Q9$d%R;WOY8=Z@J8a&fj95
zs6H(ySzO+;{{Ec<_e#jiByP^3p~h85USv#FfAt9L+wt<T&is=})Qlz+){%D+l$xI4
z`LREU5UGbVYBjg10YDK#01Ojy=Y4R%u-Qx%wX`;M5d|q44^NX+GCIVbl|d$I`PwG>
zZFW-_f7eEev-ZFx`Bk7<oRY=udbHMRqIEYm1%>m8WNTn|`$5c1r6K`%U|x<Zu~zE^
z!+JN8QNDyqYWNl2X?HcTHfAvB4fx_%E_q5_qu9S_dupL!us3~w8tt{^dZ%HNH<#fT
z$MEgaRAmI?M3n?K-x<%<$k}XL*+lXgC6vFITHl1^9B|X*6yg$(8l49@zY01fW)Oko
z%oK?B#47Wl@?tD{s3XEN36Wc2Ws28SxU2mTqum7O_svsQsSSo-j%7EDGQO_|;~E_q
z_k~<S3Ui7V!R*=CAk+=y()SDHw?Cf^nzIMaBP*pdgId$Mp;%JqxW)Cw6BjbKOQ&44
z0{VXQ4md@%Wkr?;xpPQXR{1KKy7Xy;Ah9p@ESlujCxyrdxJP=prr6}ng4C>%&zA<Z
z?2_(tJ-n<B6wAn^e-%8&r!ZR;TW(J7cITkjEp^FZ)VWuV%6iJ296u-^qz=pRqsbM;
z?-pDI7EscytjK*mMYg&SCGgmyZphz7CVnB_cDH^9E4unU0j#2GHIMCL@tR9ul$W|#
z{B~NpKx>$@i7ls>Xdbqu#l}aN+~zsO?Jcsa->KDhZM1Bp3`OGJ*Js$U=tjFiLCD7@
zFOI(`-J}MU1Wq_|k&vivXJ$arJSnW(8tHY!qm?DT)%bbDAKqWTupSInhlzG9vc|3~
zT`aCOP8$vUXcnGcLBr^BTBGZl$CJ7xB>l}4_W(4wxBe=$^5us(A|z5!q6OXrA)7_2
z0qQO9I*;wGg4S7*mi~)gNmdFgeHiu~_&iQfaxBY>W1NL|%^Kd(%$`{b@p~(tG_F(S
z@QVk!o7%kk?^_iixRq)ypJ+1qYGq9GFM5?To-k8sxD5?^sq8Q4y0oYs7Y{L!7cwnK
zV|2s@w3T<&XvR=Ai<R2|WrzM;5@nJ@heNCQ1@9|5^{&`d?IH4*YECAP(^RkdwV0;5
zk*rj18FBXz$`>@~dyrA}{yhI1+0>1gv&-`m3&fdBd_38lTPO2Li^e4T;-@xK$4i#c
z%&yAY=ST8cX3eOW7H0i#{r&@Xh^}+_So{ng^qbqY-&ycy^p5&cDi1)EP(%e5d`d%_
zMPhy_DXy4g&tAQ6CN-SzAU2$!vrEb~U-3&0ji+r<o5Q)AxMVgHA(RdU=g;FY0psm3
zLZWn56vS6%Uor4WyTzprVnL<^iuwq6h8TscJm@yG?hf4%pq-&$=mQ+=XV^Iot4zBe
z=n?v^Bl_AhTM;k{vzPFgtgOg;qj<IY^#y1~iqX-g72_gEu)a^0l(3CAVs%e~knn5L
z0ouA$@DZkfOq~t!6#Y+?T8z|H;tENVAjatMz2?umS<(%F7r?_AEEe_T!gF9=gZ2>U
zW*tQ!7+DZ_(_ty8iaqO0pbx7<#nl?d;z=sqO`5R)-&q&)2G!pf*#*>(k_Xz33H^=B
z<cdWT<~PbE2;3imb1n!(b+lCrCx?d!5aW!3bv*`;LsVG%Aqbd=)<o1gX3tpq*cdPH
zR7>9o0^Kh+O1cptN(UYYBY<DDT(b)>Bt1qa6@+8u4%;^D(y!21&p8RLZHvWeYu}h<
zA2RT+W6eaHn{9}OWGgYq`Z{OU6kZ=f&w(XkcM{bjh$sD&q^uWooxzf*SFoGEQs^f~
zl!IH*U~#uJQ#u*mKSSqJWA<m2fM0MPG?+SiH0~?)%BaOW>CMp{LLI!LeWC9W&TKhf
zilCv^e$*PiF{B3zX5G0xWSe2Mtl^CJs>VADz?5QJ-IGMnTzV(2W)hP5=<pemo$Rm<
zG?7Kf!SkI9BdR!Z@{y)d>@_i?1MIYGhX9A2@exCwjcRx9>!A3Q?h6Jfqj?Lpzv2k6
z-^~DOXXPM`dxGwVKEf`#w{(%*9`)D!YZ2bo{k@;wA@VI%9sa9o_g^ioKO`J9K+)O2
z$=&YLh5G|+F+c-^Z47OV%xz2w7+L>_T>n|M`&|AXRJ%{^?O&?hA2jbX_us0Wkdm;t
zs@SJ$r|{pQc1(Yz^YRjWZs@1*1<mj$@Hh4KKcRM?ir)W(+WqHe`)^G<)=yvRU!)z=
zXG{LH|DU8C<ELTv57LgF{!=bv<@g^+JClE^b|#;=ow1vtmA*B=-r3g4*vP=j!Q9l$
z31H)FZD8!+Xl`l)FtW9>(suyZ89V%8_yGFWpHq(dHb(zg;~(jE`k$|qm9dG_KX|f#
z1V7n8V+V6bOMsn~v*Uk<k^vm8K9Rcrw-_0~(b(GD(ALV<=ATV4vUUBOw0G9G`rI^Q
zM<;XJ&)4KL^!E%v-wD7E5ctd469)WS+LHuG0i*#k09k+>K>i;D89*7J0#F600n`Bo
z4*G_c#!i1V?(co{*UUc`{G+Xg<_?C=)+ScQZvWUVe`Wkvu+IWu`9JAo05^a;z~i3+
z8Nk^3zxaKB@Uj2w_x%%igw|yFH1}9oK4rYmft~5kA^3m(Wn^O~VEIGmedhl?X8Vl&
zi8HbPar`*`ivKJ2nfLcPfAarthClg#4}a<~voZcP{F!F^gcsT9KgW!W1Z<ytA1nJO
z#mB<*$@sDSwTy}NljCFfyyoFEmz9x)fa4P|{A-;*^PjnY)%c?Uezy6q8h`5j!5rxs
z|5^NVhW=lh{P(8+JMw46PZIL40)NI#^q<B4H0(3}C;PAY&su+`|Jq5P@xPa|e8!nR
z?Lnqbitw);^=H|i=lyKVpYfmJuiBsW80bGA{sRX1r#Je$hxpT15&WyG`s^0WO-zhG
zPbEWRM*_{yynoqv3=9C1|8UY0F#MayWBO$4{{K_>e{%|d3X%WXj~opDk5A}N0P^3f
zv;Kd1dVe~D|0?~ToWVbk<ll$L-_9Vzr!)CCEcl6Da<F~UsQ)c9NYC-v_5b<#d}lDX
z`s{)U{-~x-#zMxQZ-~awyu8qkP7cQU*3fP%zZ;a*wASltV0v)<+db`EAGYwgr(0Zh
z&#`C_*VflTdT2piU4J2JeY`KOc*go(j5$_KIv!zfq#3Go=8H`5OIPJhl9(J^ekJ&=
zcQM{SI6f##mP=99Hz+eWI36x0O$!8?!mi1&B$>tz@;I{e__#FOuSGMwq&~9L^2EXZ
z)XI)jIzobj!}DDQJ!#U&3HkPeW`_`^9^^}<l=RsMs&ob|kjoZM5m}Sb34D>t7gGci
zMg~ny#zx<bFR`US-@fEf|BU<^8x=J^K02Rz#`Lpy6fbrkpP0kb5rQ$xH)KK!=i?=o
z`U@nmWbBL|>G8<Va1;3ZCOjjPFOEX!q!4zrUzYYh;7UJIwN?feRYv;Hvu{66W<NY^
z3`~truXL$#&TzCdfW9#bLoj`re)pwY0Dsk#S?js?O^kJ9t!-pPt8cCWi>ZC*G6IWh
za)3xFRpUt4h)Ydh^8fM?4stf}UJTq~{ei6aR8UkxNjCVXd-zlxLPe%>KZ%7G{UQD`
zb>hpgiXG4n(%?WoXJ~9<YzzVb{dj-j3;2+i8r_)h86U;tM$}p}BKwvT20`S;__JU5
zU_ivg*cRN59Hb>6N<HN_ZbnaajGyL?pvn0cq1Qw99u1lUm5=`SC>*_pHv|X&nVChf
zTl6gwLk8!XdM5V>yVzPa4|WaUvrU1ut>&MHXL|SOJEVqJpkHt|fW3@p;O{@FKMd-x
z5%sI9j&!W_n!rH5m5)R7Jz$UMk3$QipZ|&IaUgy+OTPvSa_c$yYl|?=2k-5NklV1@
zS>-$OHn^#?1JL*Pr@amTEhz(A&`F|qku6wcThNV?J#0T$$~*iWpbPousGnR3?!=ep
zMw^f{gbyNHC(yQ_Rqt0(KNrw8A+=<m`1)b0imyespe;V*IiDpa%{!1<vJSBQPR%<%
zC+>YAUxn*CqJZ(;F0wZv&kUYf)hhJ9)^{Uzc>eq(^tRuF^td9r5i3leF#O-%vD8&+
z0w;7Kn`+)*dazt<hrt(X{ugKO0A9(q?S02i$L`p+osMm%W81cEt7BUoCmq|iZTm~_
zefK&0+;h+S-uKITDywRuX3be+t*8ETjo+9bpL<`t@l|`SXh9Z0-vd8JXS5-#B5t%H
z=53xn^D2MmoxyfDv4+2Vrd>Xwy<emYYOZ##g+p?kN}g^;`$b0j!*Riv^L#7_D4^lN
z>s-86Nnm>5zOklj_*&BfbYbg+{bW1Pp@6r@Tt!wtrcC6O1M2}Gx0?D|q`1Mn=8Iep
z4`-@ztI!>)TOoar!v%}v2xk;Mdlm|hymVf{LE(wBiJZ*vQhQ+5mb||tUTmLQcvy2H
zYK!F%ao=vbe;fcU?`me5&m`CMgZD;nlT9U1T3#R5D)4Kr#zaF7CwEG^hzQ4+G9y)f
zRFJ<WEO%cCQwF2O94z-0<?XRcOqC<L2lURhb+A+N1KiUkJ0z{JtWlnNe-o6k7!KJ=
zHqN%!T1V9#D_Q8O(~z9xTx5yIb9s|MT6dwb`xCKe(ES9s@!M=EZj^))qZ(-TdE(X;
z`-lO-uB&W0!3qb|ATz$%PO0f@f4a)eGIb;``C82Da5iDBVvMUL%mXspnn{Xqr0EHf
z1b?AHUN@(3MWIAdkz3+{EQDG_CUmS@rNyNLF<{?ZE{>`MnsRWubB;o>?AUn_!%zh?
zO-6)=1~S~S$S!IvRfv7utUxFHDvNN;uaNqqQrdWNJ{6#i0buQ2!*lq3Pu}ltw&1Hw
zZzVC|vD+kV8+aA-`R(iPd%nLgEpqTAzg^(L^hp<2ner9nVPn)x^crPt@Y1Slf0y8-
zi5fL>uEHisxVh3xZAlqv)`?V09pWPg69ZD#UyY9Uu~AFuui%_gDv>YZ-K98TZR;K3
ztUtXI3Nf)y(8|AkYD3g9<J3rc@&Mq_Et_X47qoKwB^yWE9i_lRIUOGL)VCU^+lfyD
zIOo8)>dJE$kqr~Qr28yO?dIU~ZYZ?pUr~PqXddDlxT$MkUoNN9sEs4ld>@!x9Ub?;
za_n$J4@IfMtL!ke4O~P;I&VL8FP>B(nRKa!DI68FLDwedOWtkJkN*&41*5@`s(t0`
zK6bTaucO4OpdJT}5?h3n4$G)~t4tFTn~us|#^)A*efKi&rPFmN1VX`BJp>s~*&7`Y
z*Rx`ny&g-XdoPkqejS!Q&5Abw`HTDfTt<X{BS7aASy8rn&_`?^>^ugh6B~br26e{v
zyQsOvIqkQ)lHqwDZVb1gO`SQelDTvSU%um>Fm%)TG?jbyXr$$^;TS-kf?N%UVUnFX
zn;bG|iL9O-KkWWEUI55<Hm2?M>2QBh%=vK0hL~pU1Hs0s8d^ZKR!;>*&Y2S@iFU;<
zEso=_*cF0r^b!(s>+FUVrneXqfKDhYx66d_p*F;_=E#G$K#82s#eto$I3%yEd12pm
z%f+nlr$QwX{h;-^6h3M0Qd+IMQbQM~_&NO094-zEEJT9T<RWb_005WApOBQ|A>LPE
zW*Gz-iTs*=^Xc<L((q@h=u^c!HMvuieH&WMqX9{jp;e_8(Ya|3>>M29ui`C!>*G#t
zNYjfd8bX&Tmq&iQw>-EvdnXy95eHYkJGiv3Z1VBoX{gGcB+y<^pHVt`_Az++%EaaT
zpl)de?eix<uhyOMZNJa$<mV7u?%cpY2w$cw(OtE_#G)SwKvRDO?j{+8R6MJaQ(^F|
z^Ma<<(ptaOszk-Wvo?W3Td9wLNI8K3F~;3m2J45DR~5X9)uzh9iv<&0JUwKd)t=ks
zP#TtF$**i0IHIIsR}NyIK)Kk2V|t#GcMWJPv6d@#mOR-C(I2~hvx=lnV`+24BaFD$
zf4d#Jx``Lh_$7d_l{h8I*dr#|i&m$lV|iF?w%d2kI}B2UloNPV`}hL4t8Up<o_lm~
z>mym#_$-kRH8_@gfz5C@z^g5$v@rGSU}6mja+0|rGXrR{_c{;pCDz)L$<_^4A!{uh
zU}S_W4z0vC9WdpV145g*!Pj%#-Fy#OXmPBJC`MxGacgv%tK(Q)Uh`*#c14bt${K8$
zIjD?d{j>ggt~DLG`y7aJCx@cGuxQ26s-6U6GkxFvJ=I+m{+tH9cb`c@88_MfSuhnL
z^@bD14PvNT@;Xe50{yV39>)j7s$gRSr^9fybN~0RVv@by4Z}!Vnp(@2`r^&A5ARGh
zSiY#lm^b?UFwv8S4?JIY*z0j<17Od$CI*M(^A$|6)$sHLjX4>>^4t*h{Q8}AM@{7>
ziq2kDbU$bc^}vOYdd|wk1}Rp`+mW^j#Xah|IA`azuNjlU(GQ9wekt~(u_|Hu_9ZmV
zIFZ7f5g1uEzS2_;(Xw`mJZ{;H3=d;RL&wbnz>zxm@8I}evCOWzmR6VxK<IABshKk|
zuhVjMSNhZwM>p#u@N_PFS3lNEA-?yX_*)V!=*BHnU{2ro`n-$F{U8{Hz0JWaaXpv^
z%@*Yl7{QwgZK5D}f;!J!`2qAicg5yY+$INs5$*sx(W`SSQgEHu>B-wRus3mMXYecH
z+S!f+5y+!bwuS{yH(83KqHDvIaQmTds6;0Er<xH*b*EHXHQGoCpph9t5G1|!h+fo^
zg*D_h7gY8fYp@TL2!fvU<SA;?%ie%<!~;YNKOISriRsiyI9CUTib$2do%+bG5G6W}
zJP!sW;{eh`G7|5khVN=kzy0KOjhdpss#E?P@%i)!w_0croUCkd9eZF%(5o@&+Z=62
zHA@l99R{q6#&Xg7@Vo{MU)CtNBy~cEYU&1uCUW%PFV<tvy*ibpg;z>5I@}D_AF=i}
z6u=xV$%ZC2^X|d5-VY9%_&H4Hwm6f9tKkPM!!QL8<jtQyShJBwN0~PA&U0J#uRD9v
ziv<EoJDp!vXzntuW!N<;4P`7l^)Q6qltji7nfTis3P<v?9-3!h1cuPaBX2UIt}0IE
zqVIAdj^!+JofsP7o&S*iXv@gi>qzNwMW|vv2Eqs8m6fjtQ4)(gHO4hqIiTTQ;!vv?
z<Ouj6uiLtm2}K!!L%`Sf;zl<9LTOAG6(C0T80IQ+P?_n(j9g?Yc=3R@oIc*~OKHu1
ze_MJshKFX0c8(q$8>>-D#BVr0Qqo4M+}y!|Rdv_~HIZo@P@&(jcx+{+yYy1Q6a%Bv
zr%OujXeX@UvM@gx%AkI*W8&9_9C2L}C_3EbtF0{v0gQ3isH{b=rPsFvZ6aJEMSB&Z
z`BM^kq`$?J7ba3oQh9CC0$~A$I$DJEy0u<)K=*F#-N56HeEsn0N|Y&Z5B}*}kl9{g
zH@!&jc&tYyy<Jt8opWK*J!DDxA}hiL?rXyrnAD00f_0U1Rw391DK%RvkMZ6R7K@x@
za}k(actW5%^_40JSbgEpIP>iK_9_^>AY<ei``0*96vC0*rVY4^@Pl@78EQ&MGtDbe
z$sj-3dBPf3L1de<J4M!}yjqc8jS!sQbG1ouK(fgzW*aqj^dasX`z68!`v$DVP}`s%
zaj3sGvKAk7j*y-VI*lrS9Mze0D1?J(VLv#CTm53<*wN23O_2uoCy^=UOhsgki5t%e
z4q+TYU`;SMa0Xc1y5G2UHprrq_zoF{Y!Z$-KZ!;8CW2|>?n6F-qn&(r0FvnPrC?$^
z?8wzK-0${5m{*Q;FxlYs*G9R*xfslmvaEIgY8eBtG6|Tz1+ct?zPx)Tqy3s`Ukn;=
zHIlc?#^!=H)ur)4TC6xTmTVeRMyTmYnZXa7uB`~^tr8|`O)jQ}m|~cCl?qMz0E)#q
znaVMdtQUXet7nWB?-I}Z_uLFCA~!>hA109Xj{2$hqPs8Qa4CMO2|3Tul#e%zl^;rK
zi23zKufj?3S8I)gxO^~KwjOvSCG~3G*GJ^VE}Dt~zR&XO4j#|Na%As-WQ>qY_~T!}
z&ghk`7%fO6Dj;RubQKD<tTytYhVh!|xx*;Fs7mdbKKBSvDK-T|TWe}EcHa8xM@m<$
zkWQZn!G23aM@%hgL}kp2?lj7b9@Cr9;7Y!>_!?L&P*MfXSDv?iTN9%WETocousfHy
zR;P;X)jVFYqNcm8)ivq(h0tKjMYRwMQ915CTCd&QhMrz9v?uxQzMP-2-BmnF@+=uB
z37>Z00P!idJ0er_Dp?aM16F+*8^~ofM%b{j3wcUrvS|aKe_xvtAz}fzb_`#O4nX(B
zuy(P%11QgL>nSGk!q6h+frq5VJDeg@@>{HCbBL?}OOh66*L*Yb64X~!92~QP{`LEI
z*^W*@Zc;7&pSQgZg;f~lyw_Lglvz%UUqEZtu#4fOJp<nQ_jX5d<p(&Cw%Jx*bT!D-
z{f-@^iAsBHrWgDzBF2;y{FkMUb4uG_DeJK8eO*p+-x=}z&nV`S<|!wR4;-GpVWV>N
zFTxtQ{G`AuA?}2Us@V`N^qsaWJu{qRGn@&(EunFMC6G9TCvf??#2p!sOfACQWb)!H
zP{~4nE_xKTL1y^F<1pG4*7H>PjO7;=;VK-5aE#d5)nU4$;w_j8PW<wo9QhAt-yd<t
z5Dkmh2gm0<ekDOg==B*#u5P(-bTN2cBo9NHt2sX@#k*6IS~cT`n{kS?X3$XNb#Ya~
z5}{f+S{6hlScLuDi<5-psXi&s6s5aE!O8F(%1(cmB@vmZcV%6iO$fBmts>L`8c@x%
z9wgE4s9%|Y=LZ0oxL%2G%0XbL$<bzBwL(DXVFQ+}wv&3p&lqsF;#LOnP#ixRa6gxk
z2i4&9+9O~eu*QP5E-$(e5ng5B1pVH;M;!y0qyH8YGHIc>Bh-iQC9QiZb*>DN8dvS2
zRcYG3V<`N1vxZ8V^6}()v~3U%P$PGSdYyG)KIwo0kCu&zGmKay1zn%$HS6ZaA+36z
zSSC?Y!x`>^We*w79WQ_Cl0XlfGFl$uQ&lj1HQnyHAo#YfgAA_0L2U|cUgS{|s_&nx
zJE9#9W)yL}l&e7DH49)k4_MewE*V9*8F<n@a1yZCBFZKRS|8{rE^y=gvpvy(Jkl)z
zwFl#tSKMwijDZNmA*jo>b23c%E9(P8R>*F0z=B)TTFcgb8}>H88**Qkjsa%DVdAVN
zOlcGs)|khV@3&C65*S_(o%_gPLPZd^v}ym4E5Kan5GdRw^MM4<txmp5sDXr*q2jE!
z2uI#KJ(mrc!qpl28DWhG`p_|<pfbPBO%PkyLFG-7X+~pliM7=CneP2v0T*spCv3hT
ztm>ZWFe&5-YSa}e$|L(ns*lGp{0&wRYN;y6V|FeHDgjM4KC~xOo#5>^G+J7J+LBRf
zu*(ZOQZm%+#JFrYW%d&TNs`8c##%!QwtzQfg7q@WpahK)2%W*Au(PH7P55Xm6r>L*
zxhuo_QE+XT{nsG1ZcJ%n7G_H>Fg)*&mfA;^?(ZlB9j|SHY-_oIBs>EAjb&fS{3hAH
z@482EF9qL>j0j%j(&n}MdDL`F1-#<M>?Rjrri{feXs~lbkE}58%3R7*ce9y5fk=70
zF|{oMeof%9$JgFoRT03oi3*OKd2Z>lN)T|aCa3{811=~r<C|liYyLJKg?Q7}XE%uJ
z?az`~@v;Q0Q3b870DS=M8yZz}BmRQO!RsytcLVqw32vF0RF8NhPTZIkv~b<;_Nq>V
znd>}D_^!C~+y>?|e($g{z)K{MU+BecjJSt9^9$;tEwk=W7gAlG(h6CoiC=Pkp)7Ds
zi^wJrCXbzTaASGS+bW#(#k3W`zO5Q|Hp(euiz$9O#V$jdknk;#=rd-Hrz+2K?5n>e
z(^!Bf2JC@ejHj?T&K9RcFTk+gi_q)(f}+$eh6%u~%^~aa16Ruc$%TO)J88hE|Jw7u
zO(uJq{Pq0~(Gmf97OrYZZG^kZX|0Dxz}24576O|tld6S{MqOr~G2MuKKR97sCQ$eJ
z8Nn)69Q~g71~F>9OtfPdp|kui@Y>O;Gye73s6rHP#l0K+**sbLGOo2R`Zi85ck7OV
z#tl_(A(O-_cpoiK66g;0hW2izT}+a_o~Sk{NM^+pLjE11zKKy`mkb>KP~VO`=FS-r
zbVnu98@Ok2AL0W%TF4(RhlxlDF9#g?NfEbF6C)oILcH0w=N&{K@I{2+TlSAL3x24E
z!?HUD@`*$$A9$V``(9Ri5exYFs8M|^V-zU3gDlpHtO>%R+a+&U5R)m7Ml9u2o0gmS
z1=F0a-eYG^#blLuThdtc7n&6bE2{!)k+z6|%Q(=>6UY>z&GzOr>{}Im9Yj++_sml|
z^D={%s6I9h($Z_0$bWrrnJ0kE&e<VL#gd}hAV_{<F9A~im{Jps{ZJf~<X_ZRf_(IC
zxN+#nGC9T}e)8(N31ZYE#;!`abwVoC+{CoLEhXmR>+^`zQsslkU*k_`h1}Bc-8#5$
zkqu2sDU2fVTpoFcb0C*eZws}me|@t(RkwRlt5#qKC+N`=i+IJ&!ALV^e+C~_kQ=(n
zzTyntz_uRLYgCkDg7K;n*(-K|VhaV{-hnRyMfz50OP{64<poWpH=sAIJ{kBjW<cE}
z`Hd*{=*yhZ2BCv;Pf<;$Tz;1y`gc?rp;aQWTK$A`K^xs4lj@XUwIl{G4n|m;siB%;
z?&o0*wG~((`Fpg^J+0@b6_(Bu^IsoCnaZE-lv1~OE2D7gSr|di9B|@=3&wFORIdXa
zlkgW4Xn|Q+J0*1HJv8Klhp97)Nq_h*JV!uv(gvm07yK$27yF_gBE;+PJjNI19IUwM
zq~bnpMN<q!e*UJsgHqn-PulUs;&oo^8K|%CQ<v3DQ~<71pyhIBlU=w~bN=}x!g*Jq
z4=JT?97slI-+VMkM5rf=?8G_Hwu%hs{X@g<mE8o{>SUzJYgz@1TMf**h2K$*jT?fv
z>4_&X6%b|DLWt*p$LwUG!}f+Z0GKmo1BkTu()}09LH{E!-KU?C^+dyi>%Ph3m*)hk
z@bx9$&L6i_4Jqyda~LN(t-4%@1XJ=kz`Cd7(CY{y{Sx-{R8Dl630dW5AET-~vl#cH
zHoGH4AM2B!d}Y%;P<1Rybs1<uX=aG4XWtb6SCWs#coym5&75|r!b=1ogPBOCd~KTC
z0IvR5Uy8`JAt@QM#5Fd5v}Z`<0~<U2(?M1q<NyXbvSiQt7eQ8PsRwD8xeGyxx4i*`
zycMhY^NGyDYQ+<O#_N?dx1fUksB+THw<pLj7vCiGb|V^K`GQwdKD&LxF)<c?JRyA~
z&1B=Iy9V&QiB(<oo`_C?Iw@sbhootD1AG`cT9jd<9yU{IkNB>N-8=NToefa2Fl{t*
z1vKY|qPFHNin<CtCaO<~nm-oR`RZX1cgCHcf5+gLq|bnQ{ev#zL0TTGj%A~b*>GFa
zPcn#`4_aAj&ID#~O{p^^ab~~>4|NSLr4o@nX1#fpK*x{h4R1)cM}CLMJK!$Ln|a^<
z>tGT4`^0=j0>4>^<>c$E^)s|u9B)dti{~+Y=J~hR7EYOTjhoYcJe??2)nGWpd`+Rg
znpT%LAx-N`fuI}RalO~u38TO@?*h@zB2pPtHL%RDuaAk%5=z{IjZFq0c0K0sI*Bpq
z7)xBY@L#y`BVtkej~o^KYA*zC+=_xA^hh;xfhO&qH0d+c3cH=UVougV8}q&C!(W`_
zuN{S~^{-3_snrqK&6y<c<Z-*F^jF++jLEt{ghKt#P_<DN^&&y9ol4f=stC8MRjv5~
zQ2Dkf<z-r<q0dF*iyd1U2G}>%+aucvC5H!eK8kNlra{w{Jl+^V?k9T2)LfX2AM6Hb
zolq3u$M1U(bdj(XZ-9MVnSh!kT$p2z$k~Q=kcVcPpx-br-^h8%2%dg8<<4Dk_6fgM
z0(vLV@hbys$k|l9+9zc3dqz&-OjIW}VYssteJNVgX+LQBzL%r$GzmK55ijB;L?-Vp
z-8UfsruYby6i_@qh@~6iTFTGGiOjyoWgF9EJzi~hHPW-i$wIudkxZp>V$_UkE>kl!
zl3r>V9{^f=eCYobb(!CMq1~Y=UEuK!&zBPwwg5+1m5R!h8#KT5OaWEgU*uKOLJe$n
zLKR}}w8Z}PmKfvcz;*6BxhxW<Y0e|$S?S~V%<w3y{H1vQbD&t>W^FJkGNuf*bh$)g
zY4qsDByCaJJFXENSYiJV?nNdtaqk5(E(YbL#MPV0cZkIue_q^5c56zh2qRUuj{%x_
zZ6K*SEGaH(I$=s7L`GMMDbu+ftOB<v8zRS@0Gv}T#<7z`qjwyJU7>m|g~rilOq(11
z)HRt@#-j-)18j;@1x2_>oAN}WY}0$@S_Jmq_>L6fXr}E-DV<&HDqV_SH<EoHE*EcP
z&C4^0+qi9b-}7UvJ~?*B9mVd~4n~~<Uq*q_%-qO4IhG|OHU|qZA>rF@5Ff=geP;m}
zsa^%XqBs4_N;)4>Z=!A*<-05Q2*%Ms!jR3ksRjs-z-qIMTkvzz=79_pvaLwV>~32s
z?0lfAFO@2rt+jjvop2tC$1S@JblX{{7mZN$VrSUqt)0yj6&s@E+KP%*A7ZH7J{osH
zLvd1dwE5D@Z&uKHul=QK=><s`#q+#%Hm_?nQikY?-vG@<uj{mX?^Ocn+32wlqk`qe
z1~Hk-M(yr&=a}XKs%uQF6+_P(d5P$<yW}{_1<J11n3u~XypsVC*(-BbvX+vGv4%1e
zdtbYbq{VY&OVed9c!}d(jLz7knTx9(<RjuUT?S=(NzrK251pjw40-#tZfix5Jh#hs
z085Ws30AdSRZCDNgd1ujY_MK_Y1mvIQshfHGl<g3T7+e(lXP^dU6jU=phX_|byk>O
z{+N?kx+jd_h|A<{C@L5tHJgNq7X?<CJ`>1EX$vt2!6!MO;Vs6z+ZnJH)H11I?3PUP
zn92?!C+iKFQs24afi;`u97w>N>ixk+ji4$}>(V`lYZv-%#3R}K{`H{?7AGak?tMf+
zETRaZ;?U|sLwOrVFad=MoW^pGb3NNn$Pkj=aY`N_y826|!jTTwqsa>4Jz?wXHl4%Q
zROau^vNFx;sSN@e9>0#gOk|ij<}3`sVZEzPHry~fQx3j3X{Wys0cDIL*)JBIy?s#=
zjdY=jIPm5djwxOFW~|F@4>v)3A$OK{OkEvQxz3+^Kr^~#aNz#ZgZL_G9{e!}xzpWU
zz5SzUSC2|mWNW~sLkf`w{s6gcFfQVuPE^;RB`CUQ7ROijb44FIaDF>o;C>0KYSep2
zvd|X|071^vXq&3mZ&@M%V-^6<zyujqwN&^u84QMm2bCV_02}4{XtYWbl!7?6d3u_%
zZPFaO1?9|C-6S<Za){Ww;20~J&Ks0>Lqi8AO6FeJ*7le<#u(iqjoqt{Y(FIn!M;7h
zgXwAHL!y#C>S85`zBT7}gLovlESJp?0^;bXFOjE0idn{mbAI8X{4RETW+AtGyF=|M
z9j8;j%a#$u0`#<ZRqWQDYx5S1o>j$747&-t#gG>M^<~-N=;cUUArfw}2qZQvL~dKB
z{vnSa=f%Cll^mh;*oratxQeVD))v@*Oeu){h0DY#!q8J@N|%2_Zg1$><#1yMqe~lh
zCWBm9A5CHYq6(>^XJw_0hOEF)JkRAJXjb_sV?2$Er!E-^rz@7yy2m#}m6SZigs!v2
z2pa)8>CietTw@OFqVLMfnD|Gxe*wuEK61^6k>dknw|cj>?uqzUnP*MY)x9<V3?5Xu
z+1i1%I)F49bUj2n4kfzHUpK7nu({%>{ubXW<>KZ&L(dmn$9E+ARbxxG5fq8b-4#uf
z96mN_iiI1NOGXY0D@p6DH(DB)(%PJ4fZy=HIvd!^ueWmCMF*ryQOScV7A`PoCIcet
zW%e46v`XK=#(>)=xfj|R+J+b$#fFcJ%NUM;nQO!GvcjTc+)Os3eu-Q5N>jG4WeB;^
z68r`~Wf3>+9L*X{LlM=Y>x=Ni4+2{X<gsL@0xrTcN$xGqLT)X2$9|ZlSe%OK{q5@Y
zi11DjE!5BjLs;8AO+-Tj0T?=ZlbSdWfGJ2MS_T@EI>u**8_I?oUp$!VrM*yQ`2nF*
zN<{ccu9i2Q80UW0t7&hYjL?0Fkj%eVL)1h9Rla!2@a#15C$(^~p!y^QI%G7w>O38g
zb|C=K3CsZ&Az}cza+N8FF{tm#aLspTdFG%wif_`0!wjhjr_vF;{m#*3!RMGgROr}`
zrU-Q-uI`3oPS6>5@r`2So0V%~T)hkzN&^;OPBlhGd|l3~P5=tLMpt=79vJk{hT(?K
z63q7+mSeIX4fbd|5XMay6t^}a9LJe!M)2en1M|yOQndv11McxN6%29aH)dp{anEl(
zjGB<<vOb>bu{RN@1xoXDA|2P~-C@~t*T#?p!fCZHI6yM;Uvzi3Otvr1wT-$TKjB}y
z0=g>X_3@}yqmW@S6w!A@q`W2Z*o;BjO)Bl42OmoTiL{MS5<O5ol7?gKFBn};g2S!^
zn>x6=^_(iRW)>{?+Psxv7xA-qkV)$N!gatPGPirjXjoz>w<Cw^lzg-y9fKP`N8~t6
zCDbZe*ACc9_lhg`Wn(KysIis0`bWTnwoc%Mb}^ZJG1YbtU<`xe)F25M_CO8vm=_$T
z*K$~H{8DL}aGIVptUP*o+D<t<okwzF<NTT|i^y4i;hX`6PAL&rcp;5Ba<PRnSgIuG
zo8La6=a!hOaEP$xKojyvz2}s)*MHQr?!5ENcAE#*oy3vCrl$(8gl0?=e9=f=$G@m{
zMybs)F-?Hq@E2o`$^;(Zcyt?5xS?~O8v4~SK0<k$awatW0)c|I{|&U%2*vHtBVp<?
z%|(WDqhH`hz9p;<H&ar&nFnB0DejXabQxjMe8^8&?B*g@jw*nt!R?x38Tfdg*@Ce8
zc#hy?tr2jwRPY9=q0>t+C7iW1W9Mz;Jt$?OK-nTTYRw|4{AqHxZzUMlF_w15X}4-=
z=+s}Ebz6N@2`vW>J-vLsuL-<2hw<&|<{O9UxX1!hfDO6E_t%L{K&4su=n*QXD9E~m
zQ%J474mfi%b9<O3pT@6cyV(;Pl&Yqh?ZrJcd`}G?w($BD?)sv;3Ga0DcsdyxR4KI)
zbVbV$vfnJx+MgB1Knv%5!>2LvV=EPTVdQ9;-18VdPZa8+2FC84t!rvtWV40a{wLj3
zkmHc_8J%B;yrQWFW@fznkDBir?V?NZQ9%%Uros%;<Uit5p)7}7_A|V+<yK3DHGc67
ztXGgc3K&>*aRUTiS%p_NML+_W9`ZImU^($>QpLa))+L6M0SJ^OSb2Hwip>?vFf-kq
z%36;y1n#ARBpEutT-#EkdS`xQ-G@<Gl!7F;BKR~Ry0=3D2a7tPw%P$pAlh5*V2l5<
zCxpNbc_p6uB9g>|;8;stog#~d{7xN>0*1gg1^-RY9-@K7z%y~B@q~q~npPvR4p#~p
z2i*xcRJ+%uiI~5ee19P#9;C?KTgg!VI^M&}%apnic;1Y!Yj&=dFV02Kt3S0R{%0lf
zvKovO;jpc<2{khb6t`QtS78zb>1%lFraEiHf|`u`&9tD=%9(G!u0c`rh=tUL?U&mZ
zRrc}fUnlrlz1qZ`LECe)yaq+*pw5Xe<W@fy*N0GriKwZcv9=Eg+C-QdmS?|KwePRr
zX7q=sasUo$7#c|_bA~Xobjf1|VSr4KGz}N)xOj_gezeoXKc!)8rUml6*$TK+)65MH
z1tv2zD@i%c3&kjOV;k=<CoVh6ELP=m_4P451<<g*Ybl&>BRXOwXXw%*1*7i;m7l{t
z1(6Z7^Xs+X#gmk;Ft6*6aU%69ATJlcf~+v2#SOBzoFqove<daul+2V0rtLjCTem1L
zPB4kp%R|hGRia50NjgWh3928KEEC-YREr{SZbWE_-=&wzPoS;iDC{UMO7NW+hdbkf
zU#f(ZC^`1fn_><obg6Fx9=1W3kTs66ukpgtUUKOeoJ`|nZuf3{wJGiweHLF?mc_Ph
z;k_>E?6%1!fkEKa^m#VwBGKra0X}w5u}AEz8dyb=r6SB`H^o<I+b01P{4r#X!GzCl
zFj`>bg1K)~`8aYVP-ZWPZ5$7JFyI96hH<(mZ*yv|D&`*}JL-H=l^AH;hfed8ca&Jx
z_Ssg&^ymuS-xj2w71`oT3PGT#52sIve8yezXugQ0<Dd^a411LQLH3CRzU5DK8rZ7_
z<uCX<oj;#ebrbQqwvjsOM(I$OYAeeMgMe)iE|TDcYsc@iA8duivaN_s%sP>KpG{y+
z!c#0{+0*dLo|t=3Y|uoGYF>u<IYD%-!=DX3)fWv(GyIF*-2`(0>e-!d?47Tr{EoFf
zn~G)@z*gA&bRm{i<Y(BbG(HA5<PK~Z`;#u02IUSJJa+H4;qRA~IdoAfUJv9{ll$L*
z+!?j$m7XGeD}U)S$QRiVpQ$rkId=<C%xqiYx?;`iLFC&Oj+MK_S6bfY=+Z=qY5$-a
zZS4yjwDUb%`LTT^m+Rja9m)t93(bu@+Gx6$>Qzbl6E{@H!EVMr%v$^7Co}XS>mvor
zW>F4LWj>ThDp#8TGqfT~D$4QcsOMv`8=lngNUY{j1lch;huM!OASF%mC{Jp?T=w^r
zaN!E*(k)_`fGNT!Po`zGk~uO)gkML4MPp52eRSn)?0z%Q{NlD-3<^nT`=$MMb>DOp
z&45#V)MUxk5$>(_Hv{6M9Mj;3JMhTaY(fk5uoqu4(uXUtWL-5zzwEdg;}WCqR_g;1
zz|UsE`4*|)%6M6yut1o~p%Xs0q=&%;dUr9eUY<)tL&uJh1X6Lp1F018%^UQjxP<!J
zst^rgLC7fQ?W*y5hoZ*Y!X9Yfx8*qA)(u$~LpfTf?)MQ49+rIh!ru}tX<x0@mH?MH
zY-WskJt5D#Ib8R`*Ms+#Fa~W(9)s>#vvU_ukJxCX?;9!?Kaui-XI~e4Z9En`Vpb5d
zSt&bvR9JKKaM=g5;&|rv9#_4&Mv4mx4w8m1h1maULH88%5%+>4i4^2piqp{wx$du7
zrf|{R2|cwh^U+G;+P0Sov*ev!>1C=|`xd=1Go|F%L+(<~wmU}oli4^+QHM~{#hwIc
zZo^lM_J;vwiLQ64@bGqQ7q;=njfG*c`&i%Awzi+T9i3-*hmr>5J)naDDMZUwE~!r2
z!^RzdvFvBNUpTJ$sh{YMlUJ8pX??~tbx#PcUmV{hD<mAN%#^U|TIK-<oay80B5iGu
zL#%X#82BnX2rdF_;#wkt-*^9$;6SM^bD5rJ<=Jcnkqj~rzFd%y0i!n|`^vK7dBDSf
zHy8#Hi>Kd$*6HwP32Q&!!Ph7Aid4DhI!t$bB7&tRk+eomc^F+#6m<E@WhoP7f56de
zRMeAm_Bt7ii|E<h(ejq9<-9fC?8%!E-|21ZmB0pn=O12ElvcwKkwV&M2Z`Uk<<H$T
zldDx61JR1i?JL*cFb(OlZ69o|)=#0`pIX*LNY2qQh~KA)7~nvY=49SrDKO-z2$ecV
zO6Ee~ZYI*7M_;38?NE>jRX=dw@!vln-+5!ZW>Iy39Gt2d0hjUKaY^v|8~z>q_`MYT
zUrw=q`c3~|!H?gIzyB-v!SFBO$0t1T7x=;Y+gbcyzz=nKDJ6dXPw+!PmHxBZ@5X*p
z8+N8P4%T*`Ufq9`{~P)7JK?YE`%mP@r_b(xB0v6HbN?gy@wwjp-`EePPj2OJ?8m3?
z{3rTBk4I1cxq$trC;WdvKTK(jEdDc*;bv%OO>1psNbBHiP3vG{XJ|-kWbJ78iHkTH
z(%PH4d_osahM$zhpOA>@XTg8a75|P_{0Ub4#wz4#6=)Uz3##~cD&p@<gdMFttplwi
ztrM;DZz6*H&n|vCG8=w&?7s~;!yh;8bIhSMeiH(}x8FD6|KE#^l^Ktb{?n!ZzurGV
z0G3Z@{{O}H&-R!Ze_tZoCwRd2>GRL_c{aAs`mBtfU;rH}9vd6e=SGM3xkCK!Qonfz
zR+djg`h!nmWBSA%SpLZPynVmB!pio$I`bc=qo@Bo&p+GwYmb?U^^c;zv4r1Mm_P9&
z#@|T8XX)R^zx(sqkKd5O=N>!bf0h2P+|MgvX8!|IVEQZPv*hoq{$1nu_BU$b_m%x+
z-T!-Pf#FZi2#=oWA1?GvjQ`R4KG~3e7GwK==YsH<+5S<Vh4CMjiO2HK)>)YU9Rb2)
z{bxQaGwmN%`#JjmI29}VZ#3w0VE&Q9#_)HG{=Aj{$YE!t{WtsmeT)B5fS!)^?+noI
zPwPMPK8NYQ+5aaZ!0=c8-w}cTLVxhMxc;I5=szKq&+oH8kpKof26}qtzm7fuAI9Hb
ze1=xW4kn*G3q8vpe8B$(5Rf-kRWQY5CM$!~S`GnTofPK#CSc;{qZo+^Ba{y#AZjJb
z)a*;d7n4f{5dtL+EtM9Ar^N@v089}=mMaQxnwNXazyJZ0D>><CwD8pYVxHZ;k?lVI
z(s95!;mRvT)a@FKl6nNa%!oh!1qMnVYH>4@?im0qP}sz5xtfn4xIe%m^y?&Y*Xe2~
zU^&nmfG3j=JwsnwN-iuynh)#@Z-CHEo}G^+%d)vtzYhwq!IY>VL>CgfVhsK)9>S3i
zW4s_RJ3d)gm^66CJjtRD(jb@`KORP4mkt0!WG|oxKQCs$qy}SvKbd6LBec|)+Yfap
zAT^5|a-H<ad=|WVQ6qs{cpn&fc(*T-TUtLRhrD}co3`(L9a?~6Ye+g#r#FTL!6I?4
zC%{O0cw>NT0l4B}YJXU3!1-&pZSgZu$6Q&W4B$_j5>XCDe*rqAMUJ$T+3_;~iu{%f
zgiMeL>$T4x@>&6@Yn4rXxU{sBdB1$<wRCWR=_~5bMuY$EU0TWP-JjA~O^1yd3GI?A
zXTl`BNXDi8(bmyC@`ZqYh)MJj4<-_TAY2HBA3{3_9s?)`-3Kg|p9a7#Fz8MeKA!L^
zU_fdBFfs{rO`|k0Fkf`90bPjsEm}XwB<Gjf6mP^J6TWDqS6WrJU#KlFVUdx5+^^Z9
zKMmSDd+DCh`Dk|;U)=@g=OwKUzmx-3f7^fuK4qc@jDVfm`j{7iGN|DTxp}&Sw0{pH
zXWCNci-C@Vr*%sqsw>VjZ7>caIEBhW4nOWHf3qUyShaAQCv$3fAc*j)@bvZ>mrY!`
zj)YMgLYP9B+f1xDt!wJ}%6V!`2#o0JCqu~3Lx?f(q_MWoaEWjIHis%BBhEbQG$DiW
z>x&aCH<h?k=XBhg`H2CJZhFPYVL#w*i_yf7<NZ-GLVea3nCG07LkeoDX|XgkS!8o~
zMs%u757Qo<gQJi<`t)OmmkoMraI5b$iwWtsM*~k+m1|j0YCwdvhc%n*4Z-|Hh&vN!
zbIh{bDmM7>+MTtUX$8hlAR1+fgZ?dJb#WoWPL9XPAZJwxze?)}WsAUC@^JTYAm&As
zB9V>iz#G|qvI0MO!ls57pV?RX%SQGnwrdcb_Cs4pEvoXL&*-mw&EEM^yA|<Z1e_35
zFq@X5EpJJ;wJvytmX7H1b4>ECJNdA$bhF!G3U|k_cDQzWZ(`kD=umY@I<<pI?G2(*
zq3vpwa)aAdHQM;uQz)SFjy#YAyt=GB6o`1@Ctk>|rE^uNIwt*o6Qi!Dfe<=wRXY@%
zv$hl|j}-Yb=PFhZdx0JK9tAMQj%l9+TV>3_zRXW|?=t_f9I&0{Z`?}#(FzBeuc!sr
zG!jDg?FUFDLu%0i`$@xJJ{Kl>qRtd4Y<CHMD%nac!OpbckABD<umcWke`$SQFmOhl
zOu9+H&PA!G72Abua+8<WxYCpqh`#MleeE8mHmspW$gFz-ULVAVkxu}JDOrHyl7%CS
zK$44NQDV3x^=M;hNHIBDATFcAX*AZ(y}=-(blQcG>f|Y$JRB7Sr6RY2q@D2J*eUrc
zB14*2YCu8c<>mdtL-)aPNW+4pz&Rz`-4M$KWli@*1nH(v@sYm7kq1Gc$#lpGX@T6C
zHsp2t-Rl_x&9VhyBzYH;1?8hK-CZ_oy6lG?ci9Vh2X7z4d+y@!64D7|*9)NprFyG`
z#Em8z2a;@qU`a?#il;i92<NV)>Fd+ck462Y2K=&b%&863IN|96RlVTjhikivMm)93
z;teq$L>x-5FOmZuN&x&V05QV!6Afspv?FZhpsSq=P1|yhPKw-KgPK$;duz}IV-yY8
zX>Sw}LH_DSOKIGU7}q-p37KIP<FtLihYMrV1r_R>?YgmJR<SK87GRy}5n^xj?$7tN
z1Nv8?tqgX#J6JB!l~%Z(#j#1No^h8h#fU6r%DVQ{KT{iiY`xz+^3BCpEGe#D@|z-{
z!T$V}{~ilgk+-Ka>fa;_@NK9vrmP&>!B*d4Xb0QVtlYl(D{Z2yfA>`CHFS>SO=pH(
z(11o5?4t5d7fX!=o(!+EYwLYL(2b)Bfi-6E-rmEy8s!Jz8Q+<w`xrdafVJ)w#R4<K
zI?Zcty}BoBr`Qt|L}u&iN!IbPA;@E->id;MtYwzAy7O>=<a;;OU5S)Yafp4`+`{0I
zv3y~yV%Vc;Lu$d5YXkBDg>gf+cr8Vyv$G3p38h!!yq27-#O6Vw&{@+~R?JqG0ec=Q
z^}UG0;!zF^{5bp$>Nje6;U2tW&lURNa751ut>_e<H!|qz4%z7|E=O=`y>3ORxeNSl
z`OY6DQ{`+;I&Imsoc0?7wEiB`B`7!|5BGhwb@B4lw$+4h3Hof=!zJTnn$j-l12VlM
zNmiZH1gx7cZD)#>8hI>nVdiDdbOBAGFe=V`ttZ;9AG@wSO0_}~_&j#4;=-=YN@K#5
z`EE$x0~wRs=|Gahf=`TLg(%cdz9YyQFppU_Xc~&SoHmpd+y|#=qP7HY3)Y<vaAqk{
z!`+`|US)zhlrtSA%I3%jtid&>NlEJ=ffJiIz%n}MIxEp+LD8-mSaE`-dX`JKIBHtS
z0NcxI+PU*{<yc+ByijzQsOhy{;4{#teo&FT4njK|v{IMla6vL!)=$-bq<SH&-Od6%
zt=9Ikg?22klbMeGj61j(9Kk$_+^+Qerf|b?;}vqeW23aDi}4J$Sfv3DBAQ-~QCpGw
zmHL?><K^usjoWbEZ0G0UPtLYtnH2-dIq;JSw(Bar1eFK4T`2{9xvF+~id6@Rm^J!$
z=dJ4u$CGX%dJK@qy0XUzb;qSl8SsJS6D5Y1QF(Q1&6j~+C5JD^DE1`!P#MK<NZcbm
z<cPF!+ivYE_PsLoJtUy>DrP};)ca}K@0-_K3)u<UGu7hDDlKs{s3lElG^Y<+xG_qN
zyb|<Vko~6nKb7E&pMj_-+6@WV%bi#}rUunHsEHY<>lvQUOwW+^uuPm#93xAT$T4f!
zZs<-5+|*x6*M02yWhyqj>?#$PM&7fO!#(BQZ_;@oxL6Kwax}HIYk7!mz(}W;R6KaH
z8xZTN^Oj;7e~vT4tF=d+A%RkkHfD4@bu7XdcbHAg@$;-NN*t;KT>&cLm#@B8CT(+s
zhZM?8VCkbiBiX2GyDk5GUZt=a8IM^n8i-AMS#Fz#niF^1JI|P4SOYM*RN$eZjzo36
za8eOGxi!EN<8Ukq3f1zoi!T!0I&vQ&H&fH6y@^X9XJ-{p?75B-hE>PRlI8M^kQ}P)
z<YL$B3T{iY>NMCduZHX7WxB2ju=C~29ku4AQjS?9qrlEy!Bnodv*<-n6Ptr@aDSeu
zlp$5IYh~wv%QS-@oKItKU<fSaS*y<&PIJ_VQ9>oC8^r*J3<#57rs=vj8n5^=Q9SAT
z2Hl<$q|$UY%jKktd)lLq6)tStTCb*}KYt3mo&J<Z1#<httHi0G(Lioz7kfS49HbY(
z^u~29$qd|Yv_n_rfIg7rre$@A+nBE4;`Q{GLD8l0*wY5?pf^&v>t{I8@Fe~93aDTU
zTE?3Cw!RF6Tkl8wciKx{e7;<NLDb+OyxJ)IcYyZJ_>g~_ANY5H@_(BiVEt21ep0e_
z_72}nbnQO1(C1U~XV`*24(J*FK0WYTNd3$7fRM11yy&+-;zIoU?7*K9C;mA(@OS3>
zKg|vNAEHA1Yg_;0)Bwxp)Bb;o3c<+q=ga^*+aF~7|2#3EZ*6I*`={pmt^I#%eW_0^
z^Dheg&)^vU>=wf(&;N%kgwptP_qQ-*V*ls=f8F~_w*H^r+1P)N*8k@9XG{N^l7E$9
z{tP1UPf`1a0sKFUS|+AHV_AHv=f9L09@C#{^|SB)NMfe@J%{os$^V(c^m|l4;|u&F
zg_V_7>hDVPw|c~5|EHS#G(lR||0Dtb9th<hkT@O7-!vc-BjbP2fXsBCHu1;b{{j+E
zG**o_j~_Ua;&Vg86~vo`S0|em<l`I82_+DP00hF%0fA_DPN1Q}2Be=34<NvniwU_U
zAP|?!hX}#j+Z3MY5P4|Bb>=;5km=y+Ol>xPe;DOb5eyim%5TV|i-O>W!K8$Z^(_YC
z=--DY1Bi_^gh!aV67H%Ng?Wa836}-Mqo9E2TUh{&i3i0KFTEZvwS$5o@cGiu*oAep
z9R|wBvCZrE!>1Aa7Zzl24xm2zJjxdTFko;F05r_k&@Qk+fMqgdo%fvpIGw0VewP>g
z3<GpL_%2Au0iY-dG@>-X*KaX^%NW3X9}JvNZto*|!I$^=p+I~@vD*M*xkzA<PyiY5
z<1ji%FeRvd`MciVW_jaJo^oYL=%R6tyqS(RR_Wk~C^kER=y0++R0CLbB0hgK%KN}@
z!@f#p(GNhHUf9Y04on3T7+{{KB@4lKPm44y0vGy?Efv4UMx_fQ=$ikvo^Vq71DXGL
zMFw*7WI1WMe?QK9?51b}CP+}98kp;2{F(5P^qUub3Fo@#R~<@9LP}_S&^WITx4IV*
zYAvR(I{||6r~-13KCbRPK<J|B`~*UH5I}fS(hy&Lx?(~64JXm5jv)As#UM5#u8bb(
zrG*RuU<Q7O#uKG_t0y1>R^QY50qJCRLQ=r_z<R|Z0(9K7l8*rC)M@7f_)ve4Oz(DA
zYv&7;KC$u}h=FH%eS-iHehsn%SbSn7BDZ;h71N9D#6Myw-iT2g+(8o%4V>)6FM;3x
z%)Ebx6-)K>`ZlfgxqSPPKu4!+R072&>H7<TW=BLfsMyE|@U&f6txuRA0f3S$<de0n
zjkdKl2<FQT7NO-#=OTvKGB*fNun*&?wC<+al-1H$&7<tvv`Ta_@gQw0yu1`<>j3At
z;8=ca9u5qKs~8p2;#Z~pTE;5*s;mdztp_m=#8+^+3;O^Sv+>=d((E2HD;>(tF{?`3
zuCRkZ|Khv4voR!htgzieeQ4UtRMz1vR13KB<P_gZRj(hJXapxUcjm`K;mUr?hkLo@
z+j^LSdx4{Bc5RneP`1{uY78?a>k)#1EqzlBq8;nqTvvvi6a|#yZ0%C!+M2(*)SAS&
z#nfc`X;q@fDLhlD<w@2}G_ZXPIAdGOpg4MA#sK%&FYY|gzV&p(I?vJ{>`gUyeqZ|<
zx<6Bl{RqXd)&{Z=X3D6>Wt+#h(aLJN=bo5Nb$BVC`jk|-5V4=vzZA%dNdAx|%($>v
zIclu==yKlL4l&chkXBJ{a`{+Y@{puCo1Bay9Q!k_#V@P@bEZ*!Ypkju9G_y?X+PuH
zGn(Q8u^854%F_A4!5kLW?+UFfXpYp8-nl>^kzvikS<;}^uJ#L<6zpPq1?L@1pne`{
z-*jLV0dKoIokIJAbZX2IcaSmP7IYwEFko(NV{|!A6ZK^+5(U+KpV!lQVLI5OrNhNZ
zZHpOJd_z;TE8h;awqC9-OZ!u^Cs?s^{w*0OErY0$o<Ke=rA6U}?~t|J1GywbyJgYn
zS;fo%0$K>wQKH<6&(%=*>cKEHYI`FurqU!&W-%xyWgjxkcPftI=F7FP>;3$Y@Apf^
z6*ac|!_Tw{w|+9JBRQ@XXKCv9veN5zu&>B4t>kvzeTW@ffpF^QEb?lRIwO9zylAmj
zJp08CwR8*w>ZDq?Cb1K-iX>j}Qpdko7VZLy+RHvr30MQ^y@<J5dWg2F0-V`m4tXx}
zhQ)KJL>#!CB4{V>7uZAK8Kk?NAFu=BYoMiyAKkHi-l;Spd0@pPtV35q7K&LJ?NPWF
zWRl>Kfq)tjG6YX?!vtO^bh9zbP}+@g!;FS$W@xlJJrMe_?FmrDP@E#=4LPDIl{xZ6
zQQT}61R+{I+6awfWo!U|-gn$jy^fx**IMH6e-<odYk&vd;n1g<xd)V5o!st%JAyq?
zJ(m~`oXupqHoR?2JQAr1<Uz3RP@bcd@K_($xGSLWyQZsC1W7Iz4#!_^&c%Yn|JX|<
zhntelGnYcz(-N+7P!R%C0>!iC>HDFXB{Tzey4lK9>NdiIeb&HESM@E>U5-ue1J3cG
z^}Wz-<NH~`smrqny^*irv!y54fZMD`yEx?bMIKJbubg<4Q3khf5lufPj}55McP)TE
z1aY4ca}DV@HCB*IE%*)d5x+gP_x`x4!+_AnVr6FU(X#`kQA!AQb$7BkkWDxL=vO)b
z+KU4os+t-8<}{*akYj*pbniqs=V0JZf=NtcjZU>~1*uUZIFHuRqo=^BsAXd2;tH)0
zvrOT6=ch*Bi0!gtMI)Gb{z8*Kz*i?!XSBZ{jWb`-^DS~ZIPb(d;8$ausl|1+BDcrs
z=p4go*(jfr+hXMis$AryC#C_~Ci8dZ$Y7c!_*VPM(J>g4+)J}QQEh{%B>fJ}3>7b=
z2Mh_az~(-H`}8r={n#tUXv++XM@Nmd8}yatb>}Dn20nL8;0<fZ2_&gp68O0zNiyp}
zfD8Gl$+1`cr{gV%u{VIzmiMKp1MV*l6{}{~RPOY68v;%W_bX9PX}?x)Q<)edw7_=r
zDyrI&On8^>?ZOE0&5quhZak@TWpFzhYpf&?$SR5a2pn7muuoz@y<DTAh#5i<b~#fj
z1Vw(*2j@m#nH^TNcm<5a^4&pqD1glt1w^K^MJ<k;-IuCm9JF`Xm#z1a6<CUPG?&(X
zIQ*hb(YyR=6oj8M`R3<EaUB|4(9<zP*nfI#!|;qO(MX&HJqZGv8iWj1=#Dxe?)oMK
z%P|t!=Yg`Kz&(fNLSSCcjFzOX`4i@v94T=c{M^0SWs4K^Ap=_`p*In%y^47U8Kvx`
zG8sLHdd>8FLGiNOWL#Mz#Wh1yzxUuL^T`tngRw`FbUS?KzK1aBQ?6@P%MryyLY&JO
zrO{wZT7pbfxaW*RJnpHS?tEa%wG@Ks;4n9SmA$3q4eDvoLYRbY4W2uw%Z0txb*w>@
zgDmt{+UtR_B=OBz;gE6-dx~hj34WQMC?#X>mGO1c%?3w8+HOzn0%>sKaEtkVpel)<
z!2>j$zM-h*5|A84>ZiRlWtQZ{c!`j|DG4H6sqgGm>?+iQD_uT7KdEeQP9J9qC#GG=
zQ2JT>RDHi&Y9)^8PL^tra3(4+U8HulHhu3<06!TUU$OE?tpZmglp1H>)YpIpYAg(5
zZ7ADiF8E0!-;huYM;l%fU)QcI1$TtX>Eu%0Ik$EzW?Cm=!29J!{kCvXgH60kFsbOd
z87vH4LAkr8{kllG@7oT~cC2g3X9%0@vq@5$)(J!59f>SkS&^p?h_VnaCFyp+Y&H~5
zfcAsK7>~iPs8Xz4-7Xpk9ds<7UXx+;CwmpZSQiOBmsC)x4{ovcn&TNY*H)uqTTR2#
z6!qNS>(Fk$DR<d(^n9s~q>EkW>j;VJp2|hLa?rV(sY>YD8&az{N*?mxd#8eW%i)AC
zMVq*~K~#s#(T3?*l_)a)fJyxslk_3y(i-EFAwho*Jd1;CIMlAIDk^>M0CI*Gmj)_f
zuA$Aa2f@~)a+fTKELNYjknFaTDl79mV+Mnc=_2p$T$dB7!b-qB-)I|Ed{+#Xc~H&q
z+Ma-g`kGokk>n^|kMFH3Qoy(O%0gR3WR<`2w4Vrh-_XY46|%_gM~>-#u#k>%Uyb3>
z=VWcX?dInJ=tWqvnNwX}RK5N~kt<SNU;re;ob;E2VS!F{7KV0-1*c@ToI>Ln*EIeO
z{sO;U_dy=EM2(B2n@n1%1{h^<-DWFKTDS=#+N2_slE1LL#FsG@ue|a7Ut&v3Nl|Rx
z=R=j3a!S@*0Qpd&i%5g8*6b-Y6Bnh}<I0{eOIbg4_Yo^g-gzEl0_i1u#HO=5oE)rP
zX3|a?BsbRR-88VC`an;Dp(}GsfaDTMpq>fOmA{UP^shw0w1Epf5V5)&K6r4A$Ribp
zgB0Yo`rjpFCwM!&IeCuW>0n12Ez6!{IZa-2%-t&uo|e{A#FGEgjl^Q4A@3|Dhembv
z%0XZceM?KvDoe$caW`Z8F6)(+nxrd;J3{;>?blQ7MJfz%+m^xT;g_3Rj>TE9F{e~?
zts`iT9$m5r0bhP|#FJ!|vcxQKfXg3_23eSHOmV}UUpg>Wd*%@M3i}2r{=Sd^0SVBx
z`>acP&^NuUG&^K*%7ga*b@n81IcDAe?3C?O#29)fON{D$_QjXdA{tRrl07YCT4*5@
zgE3J?pKT~(`C^hNR3rORwno;mm1c}0L{YXeHT=(g-nYEZz2ErziQn((Io*5Dz2}~L
z&bj9~_uTJmtBO{=G~Q_R`c+ctjR(%ZCIkd6p68PgH}dJT$;GDkp4k^HUDI+<Lh9(M
z<*rBWM!fm!%mQ)7)99+RrhWX%VqfI#ug%C2%ul^qliT0pmn^Fe6RfWsHg#|^`gx!e
zT|d9gDziQD5nFd#c3xsWDQsqi$%c*@>8+xx`nC+eeWYf`+S%>8f8DnA{HPt5TJ4^F
ztXVsgcCPbF27l2u!M4qhU6-BD%sjU2yUPQ!CNfWK&FDj&J88;}EnV2d=lSUe&Fq$U
zJkhyT+?-m=^F{YlEss?{yM3pB&skl^9<i@@*`xcwoU~yls^X*r5&L>Am4EcxF~~Eg
zhK&gfIk3{A*U_hsA8c!tDvZD9|EAC;vNFh~--CU_mo<GnDk-SgtbC%&qjo{IV_b7y
z?7lE<UYyl->rEj;PMG}UJ|Nm+#UHT~T6D|Z)N{`E)}GE~&lhJT=D#?6NLmsn@bQ{Q
zdzVbRS#NpIBF2C6#@}|l?(t<Nwa}sK;GIYRsC3@Z|LLG@RpFZ_T-=zNQhv1N+~RVF
zW!FxWwY%&%&c`RUXV8U(ZbPaE|B_~L*F$u(d)sGK`AGLoomQ<m?7wYSz`$>_F8^Ft
zf9;@EytJdb$z$yni-RlIJB*oq-uOpti;VPet1H9GON(b`PMf;P<V}0uzz%VisefOb
z!3zW1$0u)I%GlShIPY$kobKy3>UiYO7moNfG2XPIESvtWl||p2rlprE?U%*n$7e5?
zXn$c$x4EU8pGh0?Q-m8G+Qt@z&sytBXC7buZzg-t&-52zG0~me3PbmWW~}>fmW7XF
z*rvr_Tr>80wEWod=Bch%Yc_QsM@Maa^Lfm&AD$%D=O?FG%pclq=GH>DtHIWfu21#v
znlkQQ-RCBDrgyhB``3zh+ojE;g<97cwKi<x^}kY*+C)EGaAjO<YQ@Hh@|rolMvdCz
z>9R7j*xPrIV_yETl8TqcW9yU8c~g69)@4-P9&vNV7=MRf9?mWLEPI%^HF{o9_2sW0
z^?LZIU~t}(0lx|3wte=+e~Q-b+p}nS!Nxk1;gyvW20dsKHtWo*<#}0K)=z$Uc5%|3
zi;3FdN6bq~v;0@a&f6B1^w)%O?N-t5{}J;>cJKH)Vc5&l`ClctjY+?L%Bw?sQ}g!i
z2U~Wvon-AlYf*{6W#rwPMq8%5n)}ddon_0NDRnVsl~k+ApH&^_EEA8O6Sw+nZF6}y
z`=e2BPlgs7WiEPSRuHu}!r}PWGlmaJ-&@BO+`Tcue~J6&cg_xQ|JCJrjq7=nyfy>6
zScUEj4*ua%sW>;|j_(sU-ud{e8HZ~U*pSNdmD3ND&D+H$zfJx=bnN}pCKhXUe<R0C
z3XR#lnprwIWnlf)zH={5<(xWQhz+kFRdFM~(6Yp8>YnUn1%r2YYyWc8vo;6Mr#qEY
zT<dY=VsiEKaZ7Bab+=5V$(wSAWS_`+=<99N!q{X{f`?7+9kbF&bMM6LyJvH_#N(oP
z_U-PohZjzoWM|U*(4SjR`dU?W`M2C_|HRYTamzcT)ZDt@9Z<BnqJFfC(TgW-_X~CD
zi^d;M>6&|bTg-v(=3!>-4s|&*A+1^HzlI-*K04n1;N`5cqs_NmDIHc-+c_g~nQ3)=
z&+!H4TRu<uZ?<ul=*Vx1y?^wXb+cDou~~Fx%Z`4(cNms#8BkJ}Jt}+9FX!#9zqxp_
z=GUwTMI+7Q3iiM!r7Pvy>)M3)rx9=NB%O$<UY!2r2Gb`@y7kSSOFa+vDQ(wPW5p$1
z$(((o=jQdlSL789E#F|;IqXvO)wJR+Jz{sw8PPsuUX3Hq=H%ASFKFU5^<CtG;{`KK
zIyBpLu6OeSpL2Uhy>M9jXg|H{=})bHaOknwzH*kWadJZF3ir(WS#_loh9@?=TlOHg
zzgKwAnA8C6vcwUddB(;s*N^XJyZ(UpxyM$;zFTfc@i+I4Z|7|i8~n7evfGB}h_w8a
z-#p)a_2$?k?<wi#52~MqP5h==8~fPUTESyO+TQP$x_keTaaa>j(KYWKUsBfW&z-wB
z%`QqCawLD$!oiPQSA2W$r0u=-o&2|MuruCqVc_lCpG)1o?A<nSy4P`YuR{OOzb3Bl
z`?uqQO1F*n4t;NLA8x+xr;-J$M)sREVn@!S`IpOPcyx+(=p1&kZk@4Ny{}izH`9Gi
zP?g)=m(*st#K%V$zUpz#boe{h(MhK_uDjnhy4HJn;DD6oqf_bv7Zvo#IOWunUT`n|
z^}(igz3wh=UQqK}N|UacFTTn>^ry}DSwkJu7x@iK+E80mG$sDqeYMs`Hxl-gPrP>X
zZEkJPaF6nUfED{3&)%KnY4>VP|2g-4Ez;t*h!gH@JyP8Ht(4J?jj|dhZJcyt|C(EW
z*6*!NhEpdC9bMj-4+wA@y>9JzE_O}yy0EyXQ}+DXJF-XGO?j79@A%%<cE?PwJ|5Z8
z^r)xP<H={QUuv<DckvFHqP>+<+^tPq;+)$T3dg^+SZg}8^|QlyFHQ}Ox>f7h{d&f>
z)!o}(DJv{aJu}(8AMe!pd~*G%op!VBeG{9QCAM<2>iF6&epi5dZ|Bv^qjT2U6h@tJ
z?q8lTH*d^p=bbkf^Y+zSty^Xv&bMFq!{6q1ZQpJA<DGL;$*9TmGgED+{9fJmU7Hy#
z%-RzkaY5&sRboUwE?`d7r8740i1X4vdc<}4XbmzY`#5+xjPO)E;vx|*hi9)v?+vck
zkMoFwD-(J2NBV_A%2YM3|LGCu!J+=%BTngR>+>W-E?Xr{vW%jxxPQo!tjjIz0QrJl
zAw#eS1hDyO{j~vF2#M29(*`#t@@)v&QMt;IcUG0HSJaOfT;)n)+6I?2L~hB5?1F&2
z>ka={NFa-T=OIE&2NU!VyktWS-4jK0feRj`vW0Lt^kkp~9kc;2dWzt=S4t@5DGkd*
zj2Qfmo(QgQ4RY}sxXV#D8|LhzW56ILOCcl#lr{RjQ4|&o`2D-6b%Lb6jqf6>byY=W
z30gPka^v463X8|$v|bP=*Z6nbk1osaCk~>q-iLe96t4}&;<KcNiG|p##@H+Py)iZm
zet+N954z|f8!%2W55H-Fkw#jl@aV884TOVwpv>7(FiSdy(GCv|fYiUr*Cq|4EE-5e
z46S%-l)TRHKnwv7G|!%fAz={r_i4yD9X3waFsC#O8H^P)ywWWQti!Phq;&bXp+Tx=
z)PIHBJvF*-a4^>jP*lE~LGUDw4fycW#s-P85jIKJu<~Wf69OR>psX9POi&Uy<P*_B
z@@b`Mi1^b#b<_k-(!J9<dIATbcf;wU8FG1j97TZzb&V_Wub%L|NNHR{E77R%4&QnZ
z5onH}D-H7RqY0}F$w<$kG^ZmX4I!vX<BCuNBoKzId)HGy5ishJDlDKDB>y;4HBu!C
z7LX|1hn{-!D&HaDUAKzhNs?FLgik^Wfx60w6ea{D@D){gm-TQ6l-0c}lrWrAMq!6f
zLCQcxFKU!gSP?ySWM*`6=MdhhBQK-G6069|C}QK2kSg*DkTLqk869~UR>!>ztK(h<
z0-B+7s*x(v;{!-R88?bL)toYl+ybPWj;ttz9dBHj)(<sqC`c7THL$6EM0y;0wrQA1
zJ#BR>Pdyw(?S2TO;doRSbxR8Irk*YIB1p#zh`2g9qm#EPA}aFl16TzJ|JN%BJ*Ok>
zPEZRGQr(J^UzA@+_%t*JpngEx=(=q9B_B<7LnV)h@PKH4$Q<5pW<XG&SKwG{+J>S1
zAQ;~XGKZt%5B&hx@Cx@VI75DMO+V*>z_tR#!%!itnHQ`n(UPJpp`3@;kg+x{(IFvI
z{ldafyI#|SBQ@|}-@Ya~5?$315<GQg_{^Chfe}`kG3fe<@GuQ)Lvu7QGrBHVGd7H-
zpHJXa#z`aE@HSk3&DS&iqNYa%`e|l2)<AGbblz|&M@&RukP#&Qmnb91#jpQ?%LaJh
z=OB$9#z;tPq909IBTPj1d8lFV2Bb2CF#;vYSY3wac_b&Wav}%Jt%C8K4EG3NFd!pY
zPC~0sU6+#3*#Q-dl?5dHR4|@G#}CvnR-%x#uPR4F=6GOE6^s>SxP(Cs1My1qnc^k1
za8-3_QACnM1*13?E`3nJXi1ciYQoCVNFb<S0?L7}h5^4ZNX;3R0~oL$4r636ZB^v}
zFN?&fVO?6{MG_{`NV^%9114aRF2`Urid|8|1QsoL6%0c2(c;Ho9Law&$KZHD?;_E!
zt_vqhFj`S?Vg#QL3do17M|E9+LAHn*#&I~0Q?w``m832wa&Sfkg9#kO*r;HPKtn+_
zi~?Rm%3R%^BqKqshKcC14>b&wBEbg?#Ue9ET^Cpv=L3dOEEH8a1}fuo$sjR?wa38X
z!utohkeEw`VUWqC#v#baNWowd&XW|wQOG7UEC)OZ9D~Cc8fjs5IZj6Qx*?2WWDyzH
z7)*fsN-!9R2y)&eWcaJ<van?Ex-5et%hcrnMD&H_WMVC_oJ6+A(#R-R;|2c1`bV+A
zRzx`-SQV?wQ8Y1Lj-qh-L3<*y(^YsmAU)0p91YBdm!lXsM1|F5BxL=n+hYhFKyhG!
zV7v=!Mn+pCbzNR@2VgLcm?I8k9nn7#1P9(8$Ul62a6Gx*I2jfuUKjWZ=L1gUiTULj
zbQg|#98e0Eu@oF(Lv9Dv*g!!e0~&+T$e>cg7!YhYOk|0*%8Lxz>#FPWEZ!a?fVGYH
zSpb=X;}9s8?6b%b@&I~A$WDP(HYuvUfayfYH9=4eN_9B_m<=0;z#?aldTfHs5OQ3Q
zDYO~J+5^dk!9<YRxGaH#V<cXgCF_ECChBqwZf{T`Xke@y(4HpiiVSXVfUu&`=}*--
zpvSn~M1lE2%$q2ayarN|;7N%Q2z?|0KjS<k$|U_j`XRrKs(&EuaodNI!1IHZgN$4(
zK5sNwQutbca?0*ojYA~qEP?%kuPuoO&cgdA^At88VA&Gu0~m-U>`r8c;dGHf58`|!
z!`1-jKS>6I4eN`{i8u~0P6dJ|f%GIy07;Iw2j^k&vB?~a1TP1sEm00m?Goh#4*9MO
zX-|XZ!OH=RC+rs)_z$BCxSU`kfVT(da<OqB9BBJ$h!@rjNPIPnrX&jIQ#g7m<8lb_
zg4Dt40+7H9Di5b0-~cNVugeO^eP`G|v=_v66b+tNT<#)GOST6p9@9P0o+uG`Ma8G4
z#w*Ck$ESvYErs_FZMTSWq|O7zWpEw`+7q@s9N86cy$>)Rw-0Cr#1PRJurcxZKsF}E
zf6$(Yycw#oAytd>0k~7}bwq=WN%l{Wa66HPn=^4c0&Xm03BG3}8kf)DgM>{d-amn`
zX=p}9$I`KJ$P!`i!uA~RAJAS9aJsOxguJ{ex`3+1Z7Gnj<QfD?BI5Le<Mce<KQK?>
zC_jb+#5g`5ES&r&%5efNbAYWR<V#fbS)^oqPY30oBvy_Cs}--y!7hRrhX_IuuM1mK
z5(ZO@m-`>`fCF0;r!&WM_&yIdU@Y<o8;%X;O(bLlC$YF(0|x*YcIvud456e6s`fy+
z!3+~H!j6FUID*bRIG2d_fT;Mq!Bv#F?L&h-N!A6I5mA?eA!Gd$K;+=_20LtAUjh!6
zs4Iel1MjmS!A=UpA;MOYz{`T!g_RQ+ncx>NG4VNqK`3W)4CfNO3=$#3V0Ve{2f_6K
z-XI*WMA+jr>^|^)H{g(o@xs-ixQ!0lS0Z#CY;kb^2G~-Bp9^d$k?1o>Ap!^3bwpnz
zNUwm?UV<;I_;|tE#bMxPAb1zt8-xu4P8wqU0!(rL8qNn8Tp-%ibO!YSI{^#^qrhze
zP!)=2U)3I%vA9nQ3@PPvgsPkXW;Tukx#2Ln01tungY^Y?1G(bW?XloRAz{QgU~gq;
z|3yXkL8_PtBa|0obnv`D#p$c{3=c=2SfMZI44-RQP&mASgjC*~HREkzk-5muj05Ns
zM~QJ5;v_h8LmYVyHY1RNg>|;m{QpIeCm*iX^oxj6{LLV`z{ED{(`Sggi_!l9;Ul&;

literal 0
HcmV?d00001

diff --git a/cil/doc/api/Alpha.html b/cil/doc/api/Alpha.html
new file mode 100644
index 000000000..699fac099
--- /dev/null
+++ b/cil/doc/api/Alpha.html
@@ -0,0 +1,79 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Formatcil.html">
+<link rel="next" href="Cillower.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Alpha</title>
+</head>
+<body>
+<div class="navbar"><a href="Formatcil.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Cillower.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Alpha.html">Alpha</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Alpha: <code class="code">sig</code> <a href="Alpha.html">..</a> <code class="code">end</code></pre><b>ALPHA conversion</b><br>
+<hr width="100%">
+<pre><span class="keyword">type</span> <a name="TYPEundoAlphaElement"></a><code class="type">'a</code> undoAlphaElement </pre>
+<div class="info">
+This is the type of the elements that are recorded by the alpha 
+ conversion functions in order to be able to undo changes to the tables 
+ they modify. Useful for implementing 
+ scoping<br>
+</div>
+
+<pre><span class="keyword">type</span> <a name="TYPEalphaTableData"></a><code class="type">'a</code> alphaTableData </pre>
+<div class="info">
+This is the type of the elements of the alpha renaming table. These 
+ elements can carry some data associated with each occurrence of the name.<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALnewAlphaName"></a>newAlphaName : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list Pervasives.ref option -><br>       lookupname:string -> data:'a -> string * 'a</code></pre><div class="info">
+Create a new name based on a given name. The new name is formed from a 
+ prefix (obtained from the given name by stripping a suffix consisting of _ 
+ followed by only digits), followed by a special separator and then by a 
+ positive integer suffix. The first argument is a table mapping name 
+ prefixes to some data that specifies what suffixes have been used and how 
+ to create the new one. This function updates the table with the new 
+ largest suffix generated. The "undolist" argument, when present, will be 
+ used by the function to record information that can be used by 
+ <a href="Alpha.html#VALundoAlphaChanges"><code class="code">Alpha.undoAlphaChanges</code></a> to undo those changes. Note that the undo 
+ information will be in reverse order in which the action occurred. Returns 
+ the new name and, if different from the lookupname, the location of the 
+ previous occurrence. This function knows about the location implicitly 
+ from the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALregisterAlphaName"></a>registerAlphaName : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list Pervasives.ref option -><br>       lookupname:string -> data:'a -> unit</code></pre><div class="info">
+Register a name with an alpha conversion table to ensure that when later 
+ we call newAlphaName we do not end up generating this one<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdocAlphaTable"></a>docAlphaTable : <code class="type">unit -><br>       (string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Split the name in preparation for newAlphaName. The prefix returned is 
+    used to index into the hashtable. The next result value is a separator 
+    (either empty or the separator chosen to separate the original name from 
+     the index)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgetAlphaPrefix"></a>getAlphaPrefix : <code class="type">lookupname:string -> string</code></pre><pre><span class="keyword">val</span> <a name="VALundoAlphaChanges"></a>undoAlphaChanges : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list -> unit</code></pre><div class="info">
+Undo the changes to a table<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cfg.html b/cil/doc/api/Cfg.html
new file mode 100644
index 000000000..142de8ae7
--- /dev/null
+++ b/cil/doc/api/Cfg.html
@@ -0,0 +1,69 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cillower.html">
+<link rel="next" href="Dataflow.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cfg</title>
+</head>
+<body>
+<div class="navbar"><a href="Cillower.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Dataflow.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Cfg.html">Cfg</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Cfg: <code class="code">sig</code> <a href="Cfg.html">..</a> <code class="code">end</code></pre>Code to compute the control-flow graph of a function or file.  
+  This will fill in the <code class="code">preds</code> and <code class="code">succs</code> fields of <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a>
+<p>
+
+  This is required for several other extensions, such as <a href="Dataflow.html"><code class="code">Dataflow</code></a>.<br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALcomputeFileCFG"></a>computeFileCFG : <code class="type"><a href="Cil.html#TYPEfile">Cil.file</a> -> unit</code></pre><div class="info">
+Compute the CFG for an entire file, by calling cfgFun on each function.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALclearFileCFG"></a>clearFileCFG : <code class="type"><a href="Cil.html#TYPEfile">Cil.file</a> -> unit</code></pre><div class="info">
+clear the sid, succs, and preds fields of each statement.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcfgFun"></a>cfgFun : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> int</code></pre><div class="info">
+Compute a control flow graph for fd.  Stmts in fd have preds and succs
+  filled in<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALclearCFGinfo"></a>clearCFGinfo : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
+clear the sid, succs, and preds fields of each statment in a function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintCfgChannel"></a>printCfgChannel : <code class="type">Pervasives.out_channel -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
+print control flow graph (in dot form) for fundec to channel<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintCfgFilename"></a>printCfgFilename : <code class="type">string -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
+Print control flow graph (in dot form) for fundec to file<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstart_id"></a>start_id : <code class="type">int Pervasives.ref</code></pre><div class="info">
+Next statement id that will be assigned.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnodeList"></a>nodeList : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list Pervasives.ref</code></pre><div class="info">
+All of the nodes in a file.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnumNodes"></a>numNodes : <code class="type">int Pervasives.ref</code></pre><div class="info">
+number of nodes in the CFG<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.cilPrinter.html b/cil/doc/api/Cil.cilPrinter.html
new file mode 100644
index 000000000..1b9511f6d
--- /dev/null
+++ b/cil/doc/api/Cil.cilPrinter.html
@@ -0,0 +1,118 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cil.cilVisitor.html">
+<link rel="Up" href="Cil.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilPrinter</title>
+</head>
+<body>
+<div class="navbar"><a href="Cil.cilVisitor.html">Previous</a>
+&nbsp;<a href="Cil.html">Up</a>
+&nbsp;</div>
+<center><h1>Class type <a href="type_Cil.cilPrinter.html">Cil.cilPrinter</a></h1></center>
+<br>
+<pre><span class="keyword">class type</span> <a name="TYPEcilPrinter"></a>cilPrinter = <code class="code">object</code> <a href="Cil.cilPrinter.html">..</a> <code class="code">end</code></pre>A printer interface for CIL trees. Create instantiations of 
+ this type by specializing the class <a href="Cil.defaultCilPrinterClass.html"><code class="code">Cil.defaultCilPrinterClass</code></a>.<br>
+<hr width="100%">
+<pre><span class="keyword">method</span> <a name="METHODpVDecl"></a>pVDecl : <code class="type">unit -> <a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Invoked for each variable declaration. Note that variable 
+ declarations are all the <code class="code">GVar</code>, <code class="code">GVarDecl</code>, <code class="code">GFun</code>, all the <code class="code">varinfo</code> 
+ in formals of function types, and the formals and locals for function 
+ definitions.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpVar"></a>pVar : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Invoked on each variable use.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpLval"></a>pLval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Invoked on each lvalue occurrence<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpOffset"></a>pOffset : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Invoked on each offset occurrence. The second argument is the base.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpInstr"></a>pInstr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Invoked on each instruction occurrence.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpLabel"></a>pLabel : <code class="type">unit -> <a href="Cil.html#TYPElabel">label</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a label.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpStmt"></a>pStmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Control-flow statement. This is used by 
+ <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> and by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODdStmt"></a>dStmt : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEstmt">stmt</a> -> unit</code></pre><div class="info">
+Dump a control-flow statement to a file with a given indentation. 
+ This is used by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODdBlock"></a>dBlock : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEblock">block</a> -> unit</code></pre><div class="info">
+Dump a control-flow block to a file with a given indentation. 
+ This is used by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpBlock"></a>pBlock : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">method</span> <a name="METHODpBlock"></a>pBlock : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a block.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpGlobal"></a>pGlobal : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Global (vars, types, etc.). This can be slow and is used only by 
+ <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> but not by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODdGlobal"></a>dGlobal : <code class="type">Pervasives.out_channel -> <a href="Cil.html#TYPEglobal">global</a> -> unit</code></pre><div class="info">
+Dump a global to a file with a given indentation. This is used by 
+ <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a><br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpFieldDecl"></a>pFieldDecl : <code class="type">unit -> <a href="Cil.html#TYPEfieldinfo">fieldinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+A field declaration<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpType"></a>pType : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> option -> unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">method</span> <a name="METHODpAttr"></a>pAttr : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a> * bool</code></pre><div class="info">
+Attribute. Also return an indication whether this attribute must be 
+ printed inside the __attribute__ list or not.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpAttrParam"></a>pAttrParam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Attribute parameter<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpAttrs"></a>pAttrs : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Attribute lists<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpLineDirective"></a>pLineDirective : <code class="type">?forcefile:bool -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a line-number. This is assumed to come always on an empty line. 
+ If the forcefile argument is present and is true then the file name 
+ will be printed always. Otherwise the file name is printed only if it 
+ is different from the last time time this function is called. The last 
+ file name is stored in a private field inside the cilPrinter object.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpStmtKind"></a>pStmtKind : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> -> unit -> <a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a statement kind. The code to be printed is given in the
+ <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a> argument.  The initial <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a> argument
+ records the statement which follows the one being printed;
+ <a href="Cil.defaultCilPrinterClass.html"><code class="code">Cil.defaultCilPrinterClass</code></a> uses this information to prettify
+ statement printing in certain special cases.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpExp"></a>pExp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print expressions<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODpInit"></a>pInit : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print initializers. This can be slow and is used by 
+ <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> but not by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODdInit"></a>dInit : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEinit">init</a> -> unit</code></pre><div class="info">
+Dump a global to a file with a given indentation. This is used by 
+ <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a><br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.cilVisitor.html b/cil/doc/api/Cil.cilVisitor.html
new file mode 100644
index 000000000..f8c649637
--- /dev/null
+++ b/cil/doc/api/Cil.cilVisitor.html
@@ -0,0 +1,125 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Cil.cilPrinter.html">
+<link rel="Up" href="Cil.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilVisitor</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="Cil.html">Up</a>
+&nbsp;<a href="Cil.cilPrinter.html">Next</a>
+</div>
+<center><h1>Class type <a href="type_Cil.cilVisitor.html">Cil.cilVisitor</a></h1></center>
+<br>
+<pre><span class="keyword">class type</span> <a name="TYPEcilVisitor"></a>cilVisitor = <code class="code">object</code> <a href="Cil.cilVisitor.html">..</a> <code class="code">end</code></pre>A visitor interface for traversing CIL trees. Create instantiations of 
+ this type by specializing the class <a href="Cil.nopCilVisitor.html"><code class="code">Cil.nopCilVisitor</code></a>. Each of the 
+ specialized visiting functions can also call the <code class="code">queueInstr</code> to specify 
+ that some instructions should be inserted before the current instruction 
+ or statement. Use syntax like <code class="code">self#queueInstr</code> to call a method
+ associated with the current object.<br>
+<hr width="100%">
+<pre><span class="keyword">method</span> <a name="METHODvvdec"></a>vvdec : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked for each variable declaration. The subtrees to be traversed 
+ are those corresponding to the type and attributes of the variable. 
+ Note that variable declarations are all the <code class="code">GVar</code>, <code class="code">GVarDecl</code>, <code class="code">GFun</code>, 
+ all the <code class="code">varinfo</code> in formals of function types, and the formals and 
+ locals for function definitions. This means that the list of formals 
+ in a function definition will be traversed twice, once as part of the 
+ function type and second as part of the formals in a function 
+ definition.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvvrbl"></a>vvrbl : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each variable use. Here only the <code class="code">SkipChildren</code> and 
+ <code class="code">ChangeTo</code> actions make sense since there are no subtrees. Note that 
+ the type and attributes of the variable are not traversed for a 
+ variable use<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvexpr"></a>vexpr : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each expression occurrence. The subtrees are the 
+ subexpressions, the types (for a <code class="code">Cast</code> or <code class="code">SizeOf</code> expression) or the 
+ variable use.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvlval"></a>vlval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each lvalue occurrence<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvoffs"></a>voffs : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each offset occurrence that is *not* as part
+ of an initializer list specification, i.e. in an lval or
+ recursively inside an offset.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvinitoffs"></a>vinitoffs : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each offset appearing in the list of a 
+ CompoundInit initializer.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvinst"></a>vinst : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Invoked on each instruction occurrence. The <code class="code">ChangeTo</code> action can
+ replace this instruction with a list of instructions<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvstmt"></a>vstmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Cil.html#TYPEstmt">stmt</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Control-flow statement. The default <code class="code">DoChildren</code> action does not 
+ create a new statement when the components change. Instead it updates 
+ the contents of the original statement. This is done to preserve the 
+ sharing with <code class="code">Goto</code> and <code class="code">Case</code> statements that point to the original 
+ statement. If you use the <code class="code">ChangeTo</code> action then you should take care 
+ of preserving that sharing yourself.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvblock"></a>vblock : <code class="type"><a href="Cil.html#TYPEblock">block</a> -> <a href="Cil.html#TYPEblock">block</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Block.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvfunc"></a>vfunc : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEfundec">fundec</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Function definition. 
+                                                    Replaced in place.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvglob"></a>vglob : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Global (vars, types,
+                                                      etc.)<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvinit"></a>vinit : <code class="type"><a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEinit">init</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Initializers for globals<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvtype"></a>vtype : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Use of some type. Note 
+ that for structure/union 
+ and enumeration types the 
+ definition of the 
+ composite type is not 
+ visited. Use <code class="code">vglob</code> to 
+ visit it.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvattr"></a>vattr : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Attribute. Each attribute can be replaced by a list<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODvattrparam"></a>vattrparam : <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Cil.html#TYPEattrparam">attrparam</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
+Attribute parameters.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODqueueInstr"></a>queueInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list -> unit</code></pre><div class="info">
+Add here instructions while visiting to queue them to preceede the 
+ current statement or instruction being processed. Use this method only 
+ when you are visiting an expression that is inside a function body, or 
+ a statement, because otherwise there will no place for the visitor to 
+ place your instructions.<br>
+</div>
+<pre><span class="keyword">method</span> <a name="METHODunqueueInstr"></a>unqueueInstr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> list</code></pre><div class="info">
+Gets the queue of instructions and resets the queue. This is done 
+ automatically for you when you visit statments.<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.defaultCilPrinterClass.html b/cil/doc/api/Cil.defaultCilPrinterClass.html
new file mode 100644
index 000000000..d85955953
--- /dev/null
+++ b/cil/doc/api/Cil.defaultCilPrinterClass.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cil.nopCilVisitor.html">
+<link rel="next" href="Cil.plainCilPrinterClass.html">
+<link rel="Up" href="Cil.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.defaultCilPrinterClass</title>
+</head>
+<body>
+<div class="navbar"><a href="Cil.nopCilVisitor.html">Previous</a>
+&nbsp;<a href="Cil.html">Up</a>
+&nbsp;<a href="Cil.plainCilPrinterClass.html">Next</a>
+</div>
+<center><h1>Class <a href="type_Cil.defaultCilPrinterClass.html">Cil.defaultCilPrinterClass</a></h1></center>
+<br>
+<pre><span class="keyword">class</span> <a name="TYPEdefaultCilPrinterClass"></a>defaultCilPrinterClass : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><hr width="100%">
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.html b/cil/doc/api/Cil.html
new file mode 100644
index 000000000..f2e09c270
--- /dev/null
+++ b/cil/doc/api/Cil.html
@@ -0,0 +1,3337 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Stats.html">
+<link rel="next" href="Formatcil.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil</title>
+</head>
+<body>
+<div class="navbar"><a href="Stats.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Formatcil.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Cil.html">Cil</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Cil: <code class="code">sig</code> <a href="Cil.html">..</a> <code class="code">end</code></pre>CIL API Documentation. An html version of this document can be found at 
+ http://manju.cs.berkeley.edu/cil.<br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALinitCIL"></a>initCIL : <code class="type">unit -> unit</code></pre><div class="info">
+Call this function to perform some initialization. Call if after you have 
+ set <a href="Cil.html#VALmsvcMode"><code class="code">Cil.msvcMode</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcilVersion"></a>cilVersion : <code class="type">string</code></pre><div class="info">
+This are the CIL version numbers. A CIL version is a number of the form 
+ M.m.r (major, minor and release)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcilVersionMajor"></a>cilVersionMajor : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcilVersionMinor"></a>cilVersionMinor : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcilVersionRevision"></a>cilVersionRevision : <code class="type">int</code></pre><br>
+This module defines the abstract syntax of CIL. It also provides utility 
+ functions for traversing the CIL data structures, and pretty-printing 
+ them. The parser for both the GCC and MSVC front-ends can be invoked as 
+ <code class="code">Frontc.parse: string -&gt; unit -&gt;</code> <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a>. This function must be given 
+ the name of a preprocessed C file and will return the top-level data 
+ structure that describes a whole source file. By default the parsing and 
+ elaboration into CIL is done as for GCC source. If you want to use MSVC 
+ source you must set the <a href="Cil.html#VALmsvcMode"><code class="code">Cil.msvcMode</code></a> to <code class="code">true</code> and must also invoke the 
+ function <code class="code">Frontc.setMSVCMode: unit -&gt; unit</code>.<br>
+<br>
+<b>The Abstract Syntax of CIL</b><br>
+<br>
+The top-level representation of a CIL source file (and the result of the 
+ parsing and elaboration). Its main contents is the list of global 
+ declarations and definitions. You can iterate over the globals in a 
+ <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> using the following iterators: <a href="Cil.html#VALmapGlobals"><code class="code">Cil.mapGlobals</code></a>, 
+ <a href="Cil.html#VALiterGlobals"><code class="code">Cil.iterGlobals</code></a> and <a href="Cil.html#VALfoldGlobals"><code class="code">Cil.foldGlobals</code></a>. You can also use the 
+ <a href="Cil.html#VALdummyFile"><code class="code">Cil.dummyFile</code></a> when you need a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> as a placeholder. For each 
+ global item CIL stores the source location where it appears (using the 
+ type <a href="Cil.html#TYPElocation"><code class="code">Cil.location</code></a>)<br>
+<br><code><span class="keyword">type</span> <a name="TYPEfile"></a><code class="type"></code>file = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>fileName&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The complete file name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>globals&nbsp;: <code class="type"><a href="Cil.html#TYPEglobal">global</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>List of globals as they will appear 
+                                        in the printed file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>globinit&nbsp;: <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> option</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An optional global initializer function. This is a function where 
+ you can put stuff that must be executed before the program is 
+ started. This function, is conceptually at the end of the file, 
+ although it is not part of the globals list. Use <a href="Cil.html#VALgetGlobInit"><code class="code">Cil.getGlobInit</code></a> 
+ to create/get one.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>globinitcalled&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether the global initialization function is called in main. This 
+ should always be false if there is no global initializer. When you 
+ create a global initialization CIL will try to insert code in main 
+ to call it. This will not happen if your file does not contain a 
+ function called "main"</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Top-level representation of a C source file<br>
+</div>
+
+<pre><span class="keyword">type</span> <a name="TYPEcomment"></a><code class="type"></code>comment = <code class="type"><a href="Cil.html#TYPElocation">location</a> * string</code> </pre>
+
+<br>
+<b>Globals</b>. The main type for representing global declarations and 
+ definitions. A list of these form a CIL file. The order of globals in the 
+ file is generally important.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEglobal"></a><code class="type"></code>global = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GType</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypeinfo">typeinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A typedef. All uses of type names (through the <code class="code">TNamed</code> constructor) 
+        must be preceded in the file by a definition of the name. The string 
+        is the defined name and always not-empty.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GCompTag</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Defines a struct/union tag with some fields. There must be one of 
+        these for each struct/union tag that you use (through the <code class="code">TComp</code> 
+        constructor) since this is the only context in which the fields are 
+        printed. Consequently nested structure tag definitions must be 
+        broken into individual definitions with the innermost structure 
+        defined first.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GCompTagDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares a struct/union tag. Use as a forward declaration. This is 
+ printed without the fields.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GEnumTag</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares an enumeration tag with some fields. There must be one of 
+      these for each enumeration tag that you use (through the <code class="code">TEnum</code> 
+      constructor) since this is the only context in which the items are 
+      printed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GEnumTagDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares an enumeration tag. Use as a forward declaration. This is 
+ printed without the items.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GVarDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A variable declaration (not a definition). If the variable has a 
+       function type then this is a prototype. There can be several 
+       declarations and at most one definition for a given variable. If both 
+       forms appear then they must share the same varinfo structure. A 
+       prototype shares the varinfo with the fundec of the definition. Either 
+       has storage Extern or there must be a definition in this file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GVar</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> * <a href="Cil.html#TYPEinitinfo">initinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A variable definition. Can have an initializer. The initializer is 
+ updateable so that you can change it without requiring to recreate 
+ the list of globals. There can be at most one definition for a 
+ variable in an entire program. Cannot have storage Extern or function 
+ type.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A function definition.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GAsm</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Global asm statement. These ones 
+                                            can contain only a template</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GPragma</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Pragmas at top level. Use the same 
+                                            syntax as attributes</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GText</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Some text (printed verbatim) at 
+                                            top level. E.g., this way you can 
+                                            put comments in the output.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+A global declaration or definition<br>
+</div>
+
+<br>
+<b>Types</b>. A C type is represented in CIL using the type <a href="Cil.html#TYPEtyp"><code class="code">Cil.typ</code></a>. 
+ Among types we differentiate the integral types (with different kinds 
+ denoting the sign and precision), floating point types, enumeration types, 
+ array and pointer types, and function types. Every type is associated with 
+ a list of attributes, which are always kept in sorted order. Use 
+ <a href="Cil.html#VALaddAttribute"><code class="code">Cil.addAttribute</code></a> and <a href="Cil.html#VALaddAttributes"><code class="code">Cil.addAttributes</code></a> to construct list of 
+ attributes. If you want to inspect a type, you should use 
+ <a href="Cil.html#VALunrollType"><code class="code">Cil.unrollType</code></a> or <a href="Cil.html#VALunrollTypeDeep"><code class="code">Cil.unrollTypeDeep</code></a> to see through the uses of 
+ named types.<br>
+<br>
+CIL is configured at build-time with the sizes and alignments of the 
+ underlying compiler (GCC or MSVC). CIL contains functions that can compute 
+ the size of a type (in bits) <a href="Cil.html#VALbitsSizeOf"><code class="code">Cil.bitsSizeOf</code></a>, the alignment of a type 
+ (in bytes) <a href="Cil.html#VALalignOf_int"><code class="code">Cil.alignOf_int</code></a>, and can convert an offset into a start and 
+ width (both in bits) using the function <a href="Cil.html#VALbitsOffset"><code class="code">Cil.bitsOffset</code></a>. At the moment 
+ these functions do not take into account the <code class="code">packed</code> attributes and 
+ pragmas.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEtyp"></a><code class="type"></code>typ = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TVoid</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Void type. Also predefined as <a href="Cil.html#VALvoidType"><code class="code">Cil.voidType</code></a></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TInt</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEikind">ikind</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An integer type. The kind specifies the sign and width. Several 
+ useful variants are predefined as <a href="Cil.html#VALintType"><code class="code">Cil.intType</code></a>, <a href="Cil.html#VALuintType"><code class="code">Cil.uintType</code></a>, 
+ <a href="Cil.html#VALlongType"><code class="code">Cil.longType</code></a>, <a href="Cil.html#VALcharType"><code class="code">Cil.charType</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TFloat</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfkind">fkind</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A floating-point type. The kind specifies the precision. You can 
+ also use the predefined constant <a href="Cil.html#VALdoubleType"><code class="code">Cil.doubleType</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TPtr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Pointer type. Several useful variants are predefined as 
+ <a href="Cil.html#VALcharPtrType"><code class="code">Cil.charPtrType</code></a>, <a href="Cil.html#VALcharConstPtrType"><code class="code">Cil.charConstPtrType</code></a> (pointer to a 
+ constant character), <a href="Cil.html#VALvoidPtrType"><code class="code">Cil.voidPtrType</code></a>, 
+ <a href="Cil.html#VALintPtrType"><code class="code">Cil.intPtrType</code></a></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TArray</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEexp">exp</a> option * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Array type. It indicates the base type and the array length.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool<br>        * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Function type. Indicates the type of the result, the name, type 
+ and name attributes of the formal arguments (<code class="code">None</code> if no 
+ arguments were specified, as in a function whose definition or 
+ prototype we have not seen; <code class="code">Some []</code> means void). Use 
+ <a href="Cil.html#VALargsToList"><code class="code">Cil.argsToList</code></a> to obtain a list of arguments. The boolean 
+ indicates if it is a variable-argument function. If this is the 
+ type of a varinfo for which we have a function declaration then 
+ the information for the formals must match that in the 
+ function's sformals. Use <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a>, or 
+ <a href="Cil.html#VALsetFunctionType"><code class="code">Cil.setFunctionType</code></a>, or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> for this 
+ purpose.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TNamed</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypeinfo">typeinfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TComp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The most delicate issue for C types is that recursion that is possible by 
+ using structures and pointers. To address this issue we have a more 
+ complex representation for structured types (struct and union). Each such 
+ type is represented using the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> type. For each composite 
+ type the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> structure must be declared at top level using 
+ <code class="code">GCompTag</code> and all references to it must share the same copy of the 
+ structure. The attributes given are those pertaining to this use of the 
+ type and are in addition to the attributes that were given at the 
+ definition of the type and which are stored in the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TEnum</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A reference to an enumeration type. All such references must
+               share the enuminfo among them and with a <code class="code">GEnumTag</code> global that 
+               precedes all uses. The attributes refer to this use of the 
+               enumeration and are in addition to the attributes of the 
+               enumeration itself, which are stored inside the enuminfo</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TBuiltin_va_list</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This is the same as the gcc's type with the same name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+
+<br>
+There are a number of functions for querying the kind of a type. These are
+ <a href="Cil.html#VALisIntegralType"><code class="code">Cil.isIntegralType</code></a>, 
+ <a href="Cil.html#VALisArithmeticType"><code class="code">Cil.isArithmeticType</code></a>, 
+ <a href="Cil.html#VALisPointerType"><code class="code">Cil.isPointerType</code></a>, 
+ <a href="Cil.html#VALisFunctionType"><code class="code">Cil.isFunctionType</code></a>, 
+ <a href="Cil.html#VALisArrayType"><code class="code">Cil.isArrayType</code></a>. 
+<p>
+
+ There are two easy ways to scan a type. First, you can use the
+<a href="Cil.html#VALexistsType"><code class="code">Cil.existsType</code></a> to return a boolean answer about a type. This function
+is controlled by a user-provided function that is queried for each type that is
+used to construct the current type. The function can specify whether to
+terminate the scan with a boolean result or to continue the scan for the
+nested types. 
+<p>
+
+ The other method for scanning types is provided by the visitor interface (see
+ <a href="Cil.cilVisitor.html"><code class="code">Cil.cilVisitor</code></a>).
+<p>
+
+ If you want to compare types (or to use them as hash-values) then you should
+use instead type signatures (represented as <a href="Cil.html#TYPEtypsig"><code class="code">Cil.typsig</code></a>). These
+contain the same information as types but canonicalized such that simple Ocaml
+structural equality will tell whether two types are equal. Use
+<a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> to compute the signature of a type. If you want to ignore
+certain type attributes then use <a href="Cil.html#VALtypeSigWithAttrs"><code class="code">Cil.typeSigWithAttrs</code></a>.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEikind"></a><code class="type"></code>ikind = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IChar</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ISChar</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">signed char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IUChar</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IInt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">int</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IUInt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned int</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IShort</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">short</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IUShort</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned short</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ILong</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IULong</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned long</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ILongLong</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long long</code> (or <code class="code">_int64</code> on Microsoft Visual C)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IULongLong</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned long long</code> (or <code class="code">unsigned _int64</code> on Microsoft 
+                    Visual C)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Various kinds of integers<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEfkind"></a><code class="type"></code>fkind = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FFloat</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">float</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FDouble</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">double</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FLongDouble</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long double</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Various kinds of floating-point numbers<br>
+</div>
+
+<br>
+<b>Attributes.</b><br>
+<br><code><span class="keyword">type</span> <a name="TYPEattribute"></a><code class="type"></code>attribute = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Attr</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An attribute has a name and some optional parameters. The name should not 
+ start or end with underscore. When CIL parses attribute names it will 
+ strip leading and ending underscores (to ensure that the multitude of GCC 
+ attributes such as const, __const and __const__ all mean the same thing.)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+
+<pre><span class="keyword">type</span> <a name="TYPEattributes"></a><code class="type"></code>attributes = <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list</code> </pre>
+<div class="info">
+Attributes are lists sorted by the attribute name. Use the functions 
+ <a href="Cil.html#VALaddAttribute"><code class="code">Cil.addAttribute</code></a> and <a href="Cil.html#VALaddAttributes"><code class="code">Cil.addAttributes</code></a> to insert attributes in an 
+ attribute list and maintain the sortedness.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEattrparam"></a><code class="type"></code>attrparam = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AInt</span> <span class="keyword">of</span> <code class="type">int</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An integer constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A string constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ACons</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Constructed attributes. These 
+                                             are printed <code class="code">foo(a1,a2,...,an)</code>. 
+                                             The list of parameters can be 
+                                             empty and in that case the 
+                                             parentheses are not printed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ASizeOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A way to talk about types</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ASizeOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ASizeOfS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Replacement for ASizeOf in type
+                                             signatures.  Only used for
+                                             attributes inside typsigs.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AAlignOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AAlignOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AAlignOfS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AUnOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a> * <a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ABinOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a> * <a href="Cil.html#TYPEattrparam">attrparam</a> * <a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ADot</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> * string</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>a.foo *</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+The type of parameters of attributes<br>
+</div>
+
+<br>
+<b>Structures.</b> The <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> describes the definition of a 
+ structure or union type. Each such <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> must be defined at the 
+ top-level using the <code class="code">GCompTag</code> constructor and must be shared by all 
+ references to this type (using either the <code class="code">TComp</code> type constructor or from 
+ the definition of the fields. 
+<p>
+
+   If all you need is to scan the definition of each 
+ composite type once, you can do that by scanning all top-level <code class="code">GCompTag</code>. 
+<p>
+
+ Constructing a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> can be tricky since it must contain fields 
+ that might refer to the host <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> and furthermore the type of 
+ the field might need to refer to the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> for recursive types. 
+ Use the <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> function to create a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a>. You can 
+ easily fetch the <a href="Cil.html#TYPEfieldinfo"><code class="code">Cil.fieldinfo</code></a> for a given field in a structure with 
+ <a href="Cil.html#VALgetCompField"><code class="code">Cil.getCompField</code></a>.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEcompinfo"></a><code class="type"></code>compinfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>cstruct&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if struct, False if union</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>cname&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Always non-empty. Use <a href="Cil.html#VALcompFullName"><code class="code">Cil.compFullName</code></a> to get the full 
+ name of a comp (along with the struct or union)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>ckey&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A unique integer. This is assigned by <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> using a 
+ global variable in the Cil module. Thus two identical structs in two 
+ different files might have different keys. Use <a href="Cil.html#VALcopyCompInfo"><code class="code">Cil.copyCompInfo</code></a> to 
+ copy structures so that a new key is assigned.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>cfields&nbsp;: <code class="type"><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Information about the fields. Notice that each fieldinfo has a 
+ pointer back to the host compinfo. This means that you should not 
+ share fieldinfo's between two compinfo's</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>cattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes that are defined at the same time as the composite 
+ type. These attributes can be supplemented individually at each 
+ reference to this <code class="code">compinfo</code> using the <code class="code">TComp</code> type constructor.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>cdefined&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This boolean flag can be used to distinguish between structures
+     that have not been defined and those that have been defined but have
+     no fields (such things are allowed in gcc).</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>creferenced&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+The definition of a structure or union type. Use <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> to 
+ make one and use <a href="Cil.html#VALcopyCompInfo"><code class="code">Cil.copyCompInfo</code></a> to copy one (this ensures that a new 
+ key is assigned and that the fields have the right pointers to parents.).<br>
+</div>
+
+<br>
+<b>Structure fields.</b> The <a href="Cil.html#TYPEfieldinfo"><code class="code">Cil.fieldinfo</code></a> structure is used to describe 
+ a structure or union field. Fields, just like variables, can have 
+ attributes associated with the field itself or associated with the type of 
+ the field (stored along with the type of the field).<br>
+<br><code><span class="keyword">type</span> <a name="TYPEfieldinfo"></a><code class="type"></code>fieldinfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>fcomp&nbsp;: <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host structure that contains this field. There can be only one 
+ <code class="code">compinfo</code> that contains the field.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>fname&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the field. Might be the value of <a href="Cil.html#VALmissingFieldName"><code class="code">Cil.missingFieldName</code></a> 
+ in which case it must be a bitfield and is not printed and it does not 
+ participate in initialization</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>ftype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>fbitfield&nbsp;: <code class="type">int option</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>If a bitfield then ftype should be an integer type and the width of 
+ the bitfield must be 0 or a positive integer smaller or equal to the 
+ width of the integer type. A field of width 0 is used in C to control 
+ the alignment of fields.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>fattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes for this field (not for its type)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>floc&nbsp;: <code class="type"><a href="Cil.html#TYPElocation">location</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The location where this field is defined</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Information about a struct/union field<br>
+</div>
+
+<br>
+<b>Enumerations.</b> Information about an enumeration. This is shared by all 
+ references to an enumeration. Make sure you have a <code class="code">GEnumTag</code> for each of 
+ of these.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEenuminfo"></a><code class="type"></code>enuminfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>ename&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Always non-empty.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>eitems&nbsp;: <code class="type">(string * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a>) list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Items with names and values. This list should be non-empty. The item 
+ values must be compile-time constants.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>eattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes that are defined at the same time as the enumeration 
+ type. These attributes can be supplemented individually at each 
+ reference to this <code class="code">enuminfo</code> using the <code class="code">TEnum</code> type constructor.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>ereferenced&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Information about an enumeration<br>
+</div>
+
+<br>
+<b>Enumerations.</b> Information about an enumeration. This is shared by all 
+ references to an enumeration. Make sure you have a <code class="code">GEnumTag</code> for each of 
+ of these.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEtypeinfo"></a><code class="type"></code>typeinfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>tname&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Can be empty only in a <code class="code">GType</code> when introducing a composite 
+ or enumeration tag. If empty cannot be referred to from the file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>ttype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The actual type. This includes the attributes that were present in 
+ the typedef</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>treferenced&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Information about a defined type<br>
+</div>
+
+<br>
+<b>Variables.</b> 
+ Each local or global variable is represented by a unique <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a>
+structure. A global <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a> can be introduced with the <code class="code">GVarDecl</code> or
+<code class="code">GVar</code> or <code class="code">GFun</code> globals. A local varinfo can be introduced as part of a
+function definition <a href="Cil.html#TYPEfundec"><code class="code">Cil.fundec</code></a>. 
+<p>
+
+ All references to a given global or local variable must refer to the same
+copy of the <code class="code">varinfo</code>. Each <code class="code">varinfo</code> has a globally unique identifier that 
+can be used to index maps and hashtables (the name can also be used for this 
+purpose, except for locals from different functions). This identifier is 
+constructor using a global counter.
+<p>
+
+ It is very important that you construct <code class="code">varinfo</code> structures using only one
+ of the following functions:<ul>
+<li><a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a> : to make a global variable</li>
+<li><a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> : to make a temporary local variable whose name
+will be generated so that to avoid conflict with other locals. </li>
+<li><a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> : like <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> but you can specify the
+exact name to be used. </li>
+<li><a href="Cil.html#VALcopyVarinfo"><code class="code">Cil.copyVarinfo</code></a>: make a shallow copy of a varinfo assigning a new name 
+and a new unique identifier</li>
+</ul>
+
+ A <code class="code">varinfo</code> is also used in a function type to denote the list of formals.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEvarinfo"></a><code class="type"></code>varinfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vname&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the variable. Cannot be empty. It is primarily your 
+ responsibility to ensure the uniqueness of a variable name. For local 
+ variables <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> helps you ensure that the name is unique.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vtype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The declared type of the variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A list of attributes associated with the variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vstorage&nbsp;: <code class="type"><a href="Cil.html#TYPEstorage">storage</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The storage-class</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vglob&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if this is a global variable</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vinline&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether this varinfo is for an inline function.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vdecl&nbsp;: <code class="type"><a href="Cil.html#TYPElocation">location</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Location of variable declaration.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vid&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A unique integer identifier. This field will be 
+ set for you if you use one of the <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a>, 
+ <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a>, <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>, <a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a>, or 
+ <a href="Cil.html#VALcopyVarinfo"><code class="code">Cil.copyVarinfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vaddrof&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if the address of this variable is taken. CIL will set these 
+ flags when it parses C, but you should make sure to set the flag 
+ whenever your transformation create <code class="code">AddrOf</code> expression.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>vreferenced&nbsp;: <code class="type">bool</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if this variable is ever referenced. This is computed by 
+ <code class="code">removeUnusedVars</code>. It is safe to just initialize this to False</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Information about a variable.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEstorage"></a><code class="type"></code>storage = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">NoStorage</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default storage. Nothing is printed</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Static</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Register</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Extern</span></code></td>
+
+</tr></table>
+
+<div class="info">
+Storage-class information<br>
+</div>
+
+<br>
+<b>Expressions.</b> The CIL expression language contains only the side-effect free expressions of
+C. They are represented as the type <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a>. There are several
+interesting aspects of CIL expressions: 
+<p>
+
+ Integer and floating point constants can carry their textual representation.
+This way the integer 15 can be printed as 0xF if that is how it occurred in the
+source. 
+<p>
+
+ CIL uses 64 bits to represent the integer constants and also stores the width
+of the integer type. Care must be taken to ensure that the constant is
+representable with the given width. Use the functions <a href="Cil.html#VALkinteger"><code class="code">Cil.kinteger</code></a>,
+<a href="Cil.html#VALkinteger64"><code class="code">Cil.kinteger64</code></a> and <a href="Cil.html#VALinteger"><code class="code">Cil.integer</code></a> to construct constant
+expressions. CIL predefines the constants <a href="Cil.html#VALzero"><code class="code">Cil.zero</code></a>,
+<a href="Cil.html#VALone"><code class="code">Cil.one</code></a> and <a href="Cil.html#VALmone"><code class="code">Cil.mone</code></a> (for -1). 
+<p>
+
+ Use the functions <a href="Cil.html#VALisConstant"><code class="code">Cil.isConstant</code></a> and <a href="Cil.html#VALisInteger"><code class="code">Cil.isInteger</code></a> to test if
+an expression is a constant and a constant integer respectively.
+<p>
+
+ CIL keeps the type of all unary and binary expressions. You can think of that
+type qualifying the operator. Furthermore there are different operators for
+arithmetic and comparisons on arithmetic types and on pointers. 
+<p>
+
+ Another unusual aspect of CIL is that the implicit conversion between an
+expression of array type and one of pointer type is made explicit, using the
+<code class="code">StartOf</code> expression constructor (which is not printed). If you apply the
+<code class="code">AddrOf}</code>constructor to an lvalue of type <code class="code">T</code> then you will be getting an
+expression of type <code class="code">TPtr(T)</code>.
+<p>
+
+ You can find the type of an expression with <a href="Cil.html#VALtypeOf"><code class="code">Cil.typeOf</code></a>. 
+<p>
+
+ You can perform constant folding on expressions using the function
+<a href="Cil.html#VALconstFold"><code class="code">Cil.constFold</code></a>.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEexp"></a><code class="type"></code>exp = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Const</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEconstant">constant</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Lval</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Lvalue</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SizeOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(&lt;type&gt;). Has <code class="code">unsigned int</code> type (ISO 6.5.3.4). This is not 
+ turned into a constant because some transformations might want to 
+ change types</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SizeOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(&lt;expression&gt;)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SizeOfStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(string_literal). We separate this case out because this is the 
+ only instance in which a string literal should not be treated as 
+ having type pointer to character.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AlignOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This corresponds to the GCC __alignof_. Has <code class="code">unsigned int</code> type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AlignOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">UnOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Unary operation. Includes the type of the result.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">BinOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Binary operation. Includes the type of the result. The arithmetic 
+ conversions are made explicit for the arguments.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CastE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEexp">exp</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Use <a href="Cil.html#VALmkCast"><code class="code">Cil.mkCast</code></a> to make casts.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AddrOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Always use <a href="Cil.html#VALmkAddrOf"><code class="code">Cil.mkAddrOf</code></a> to construct one of these. Apply to an 
+ lvalue of type <code class="code">T</code> yields an expression of type <code class="code">TPtr(T)</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">StartOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Conversion from an array to a pointer to the beginning of the array. 
+ Given an lval of type <code class="code">TArray(T)</code> produces an expression of type 
+ <code class="code">TPtr(T)</code>. In C this operation is implicit, the <code class="code">StartOf</code> operator is 
+ not printed. We have it in CIL because it makes the typing rules 
+ simpler.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Expressions (Side-effect free)<br>
+</div>
+
+<br>
+<b>Constants.</b><br>
+<br><code><span class="keyword">type</span> <a name="TYPEconstant"></a><code class="type"></code>constant = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CInt64</span> <span class="keyword">of</span> <code class="type">int64 * <a href="Cil.html#TYPEikind">ikind</a> * string option</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Integer constant. Give the ikind (see ISO9899 6.1.3.2) and the 
+ textual representation, if available. (This allows us to print a 
+ constant as, for example, 0xF instead of 15.) Use <a href="Cil.html#VALinteger"><code class="code">Cil.integer</code></a> or 
+ <a href="Cil.html#VALkinteger"><code class="code">Cil.kinteger</code></a> to create these. Watch out for integers that cannot be 
+ represented on 64 bits. OCAML does not give Overflow exceptions.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CWStr</span> <span class="keyword">of</span> <code class="type">int64 list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CChr</span> <span class="keyword">of</span> <code class="type">char</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Character constant.  This has type int, so use charConstToInt
+ to read the value in case sign-extension is needed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CReal</span> <span class="keyword">of</span> <code class="type">float * <a href="Cil.html#TYPEfkind">fkind</a> * string option</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Floating point constant. Give the fkind (see ISO 6.4.4.2) and also 
+ the textual representation, if available.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CEnum</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * string * <a href="Cil.html#TYPEenuminfo">enuminfo</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An enumeration constant with the given value, name, from the given 
+ enuminfo. This is used only if <a href="Cil.html#VALlowerConstants"><code class="code">Cil.lowerConstants</code></a> is true 
+ (default). Use <a href="Cil.html#VALconstFoldVisitor"><code class="code">Cil.constFoldVisitor</code></a> to replace these with integer 
+ constants.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Literal constants<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEunop"></a><code class="type"></code>unop = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Neg</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Unary minus</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">BNot</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Bitwise complement (~)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LNot</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Logical Not (!)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Unary operators<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEbinop"></a><code class="type"></code>binop = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">PlusA</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>arithmetic +</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">PlusPI</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer + integer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">IndexPI</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer + integer but only when 
+ it arises from an expression 
+ <code class="code">e[i]</code> when <code class="code">e</code> is a pointer and 
+ not an array. This is semantically 
+ the same as PlusPI but CCured uses 
+ this as a hint that the integer is 
+ probably positive.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">MinusA</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>arithmetic -</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">MinusPI</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer - integer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">MinusPP</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer - pointer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Mult</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Div</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>/</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Mod</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>%</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Shiftlt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>shift left</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Shiftrt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>shift right</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Lt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&lt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Gt</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&gt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Le</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&lt;= (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Ge</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&gt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Eq</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>== (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Ne</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>!= (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">BAnd</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>bitwise and</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">BXor</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>exclusive-or</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">BOr</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>inclusive-or</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LAnd</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>logical and. Unlike other 
+ expressions this one does not 
+ always evaluate both operands. If 
+ you want to use these, you must 
+ set <a href="Cil.html#VALuseLogicalOperators"><code class="code">Cil.useLogicalOperators</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LOr</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>logical or. Unlike other 
+ expressions this one does not 
+ always evaluate both operands.  If 
+ you want to use these, you must 
+ set <a href="Cil.html#VALuseLogicalOperators"><code class="code">Cil.useLogicalOperators</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Binary operations<br>
+</div>
+
+<br>
+<b>Lvalues.</b> Lvalues are the sublanguage of expressions that can appear at the left of an assignment or as operand to the address-of operator. 
+In C the syntax for lvalues is not always a good indication of the meaning 
+of the lvalue. For example the C value
+<pre> 
+a[0][1][2]
+</pre>
+ might involve 1, 2 or 3 memory reads when used in an expression context,
+depending on the declared type of the variable <code class="code">a</code>. If <code class="code">a</code> has type <code class="code">int
+[4][4][4]</code> then we have one memory read from somewhere inside the area 
+that stores the array <code class="code">a</code>. On the other hand if <code class="code">a</code> has type <code class="code">int ***</code> then
+the expression really means <code class="code">* ( * ( * (a + 0) + 1) + 2)</code>, in which case it is
+clear that it involves three separate memory operations. 
+<p>
+
+An lvalue denotes the contents of a range of memory addresses. This range 
+is denoted as a host object along with an offset within the object. The 
+host object can be of two kinds: a local or global variable, or an object 
+whose address is in a pointer expression. We distinguish the two cases so 
+that we can tell quickly whether we are accessing some component of a 
+variable directly or we are accessing a memory location through a pointer.
+To make it easy to 
+tell what an lvalue means CIL represents lvalues as a host object and an
+offset (see <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>). The host object (represented as
+<a href="Cil.html#TYPElhost"><code class="code">Cil.lhost</code></a>) can be a local or global variable or can be the object
+pointed-to by a pointer expression. The offset (represented as
+<a href="Cil.html#TYPEoffset"><code class="code">Cil.offset</code></a>) is a sequence of field or array index designators.
+<p>
+
+ Both the typing rules and the meaning of an lvalue is very precisely
+specified in CIL. 
+<p>
+
+ The following are a few useful function for operating on lvalues:<ul>
+<li><a href="Cil.html#VALmkMem"><code class="code">Cil.mkMem</code></a> - makes an lvalue of <code class="code">Mem</code> kind. Use this to ensure
+that certain equivalent forms of lvalues are canonized. 
+For example, <code class="code">*&amp;x = x</code>. </li>
+<li><a href="Cil.html#VALtypeOfLval"><code class="code">Cil.typeOfLval</code></a> - the type of an lvalue</li>
+<li><a href="Cil.html#VALtypeOffset"><code class="code">Cil.typeOffset</code></a> - the type of an offset, given the type of the
+host. </li>
+<li><a href="Cil.html#VALaddOffset"><code class="code">Cil.addOffset</code></a> and <a href="Cil.html#VALaddOffsetLval"><code class="code">Cil.addOffsetLval</code></a> - extend sequences
+of offsets.</li>
+<li><a href="Cil.html#VALremoveOffset"><code class="code">Cil.removeOffset</code></a> and <a href="Cil.html#VALremoveOffsetLval"><code class="code">Cil.removeOffsetLval</code></a> - shrink sequences
+of offsets.</li>
+</ul>
+
+The following equivalences hold <pre>
+Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off 
+Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off 
+AddrOf (Mem a, NoOffset)        = a                 
+</pre><br>
+<pre><span class="keyword">type</span> <a name="TYPElval"></a><code class="type"></code>lval = <code class="type"><a href="Cil.html#TYPElhost">lhost</a> * <a href="Cil.html#TYPEoffset">offset</a></code> </pre>
+<div class="info">
+An lvalue<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPElhost"></a><code class="type"></code>lhost = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Var</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host is a variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Mem</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host is an object of type <code class="code">T</code> when the expression has pointer 
+ <code class="code">TPtr(T)</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+The host part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEoffset"></a><code class="type"></code>offset = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">NoOffset</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>No offset. Can be applied to any lvalue and does 
+ not change either the starting address or the type. 
+ This is used when the lval consists of just a host 
+ or as a terminator in a list of other kinds of 
+ offsets.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Field</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> * <a href="Cil.html#TYPEoffset">offset</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A field offset. Can be applied only to an lvalue 
+ that denotes a structure or a union that contains 
+ the mentioned field. This advances the offset to the 
+ beginning of the mentioned field and changes the 
+ type to the type of the mentioned field.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Index</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEoffset">offset</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An array index offset. Can be applied only to an 
+ lvalue that denotes an array. This advances the 
+ starting address of the lval to the beginning of the 
+ mentioned array element and changes the denoted type 
+ to be the type of the array element</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+The offset part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>. Each offset can be applied to certain 
+ kinds of lvalues and its effect is that it advances the starting address 
+ of the lvalue and changes the denoted type, essentially focusing to some 
+ smaller lvalue that is contained in the original one.<br>
+</div>
+
+<br>
+<b>Initializers.</b> 
+A special kind of expressions are those that can appear as initializers for
+global variables (initialization of local variables is turned into
+assignments). The initializers are represented as type <a href="Cil.html#TYPEinit"><code class="code">Cil.init</code></a>. You
+can create initializers with <a href="Cil.html#VALmakeZeroInit"><code class="code">Cil.makeZeroInit</code></a> and you can conveniently
+scan compound initializers them with <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> or with <a href="Cil.html#VALfoldLeftCompoundAll"><code class="code">Cil.foldLeftCompoundAll</code></a>.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEinit"></a><code class="type"></code>init = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SingleInit</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A single initializer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CompoundInit</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * (<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Used only for initializers of structures, unions and arrays. The 
+ offsets are all of the form <code class="code">Field(f, NoOffset)</code> or <code class="code">Index(i, 
+ NoOffset)</code> and specify the field or the index being initialized. For 
+ structures all fields must have an initializer (except the unnamed 
+ bitfields), in the proper order. This is necessary since the offsets 
+ are not printed. For unions there must be exactly one initializer. If 
+ the initializer is not for the first field then a field designator is 
+ printed, so you better be on GCC since MSVC does not understand this. 
+ For arrays, however, we allow you to give only a prefix of the 
+ initializers. You can scan an initializer list with 
+ <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> or with <a href="Cil.html#VALfoldLeftCompoundAll"><code class="code">Cil.foldLeftCompoundAll</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Initializers for global variables.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEinitinfo"></a><code class="type"></code>initinfo = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>init&nbsp;: <code class="type"><a href="Cil.html#TYPEinit">init</a> option</code>;</code></td>
+
+</tr></table>
+}
+
+<div class="info">
+We want to be able to update an initializer in a global variable, so we 
+ define it as a mutable field<br>
+</div>
+
+<br>
+<b>Function definitions.</b> 
+A function definition is always introduced with a <code class="code">GFun</code> constructor at the
+top level. All the information about the function is stored into a
+<a href="Cil.html#TYPEfundec"><code class="code">Cil.fundec</code></a>. Some of the information (e.g. its name, type,
+storage, attributes) is stored as a <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a> that is a field of the
+<code class="code">fundec</code>. To refer to the function from the expression language you must use
+the <code class="code">varinfo</code>. 
+<p>
+
+ The function definition contains, in addition to the body, a list of all the
+local variables and separately a list of the formals. Both kind of variables
+can be referred to in the body of the function. The formals must also be shared
+with the formals that appear in the function type. For that reason, to
+manipulate formals you should use the provided functions
+<a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> and <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a> and <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a>.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEfundec"></a><code class="type"></code>fundec = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>svar&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Holds the name and type as a variable, so we can refer to it 
+ easily from the program. All references to this function either 
+ in a function call or in a prototype must point to the same 
+ <code class="code">varinfo</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>sformals&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Formals. These must be in the same order and with the same 
+ information as the formal information in the type of the function. 
+ Use <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a> or 
+ <a href="Cil.html#VALsetFunctionType"><code class="code">Cil.setFunctionType</code></a> or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> 
+ to set these formals and ensure that they 
+ are reflected in the function type. Do not make copies of these 
+ because the body refers to them.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>slocals&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Locals. Does NOT include the sformals. Do not make copies of 
+ these because the body refers to them.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>smaxid&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Max local id. Starts at 0. Used for 
+ creating the names of new temporary 
+ variables. Updated by 
+ <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> and 
+ <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>. You can also use 
+ <a href="Cil.html#VALsetMaxId"><code class="code">Cil.setMaxId</code></a> to set it after you 
+ have added the formals and locals.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>sbody&nbsp;: <code class="type"><a href="Cil.html#TYPEblock">block</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The function body.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>smaxstmtid&nbsp;: <code class="type">int option</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>max id of a (reachable) statement 
+ in this function, if we have 
+ computed it. range = 0 ... 
+ (smaxstmtid-1). This is computed by 
+ <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>sallstmts&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>After you call <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a> 
+ this field is set to contain all 
+ statements in the function</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Function definitions.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEblock"></a><code class="type"></code>block = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>battrs&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attributes for the block</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>bstmts&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The statements comprising the block</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+A block is a sequence of statements with the control falling through from 
+    one element to the next<br>
+</div>
+
+<br>
+<b>Statements</b>. 
+CIL statements are the structural elements that make the CFG. They are 
+represented using the type <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a>. Every
+statement has a (possibly empty) list of labels. The
+<a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a> field of a statement indicates what kind of statement it 
+is.
+<p>
+
+ Use <a href="Cil.html#VALmkStmt"><code class="code">Cil.mkStmt</code></a> to make a statement and the fill-in the fields. 
+<p>
+
+CIL also comes with support for control-flow graphs. The <code class="code">sid</code> field in
+<code class="code">stmt</code> can be used to give unique numbers to statements, and the <code class="code">succs</code>
+and <code class="code">preds</code> fields can be used to maintain a list of successors and
+predecessors for every statement. The CFG information is not computed by
+default. Instead you must explicitly use the functions
+<a href="Cil.html#VALprepareCFG"><code class="code">Cil.prepareCFG</code></a> and <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a> to do it.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEstmt"></a><code class="type"></code>stmt = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>labels&nbsp;: <code class="type"><a href="Cil.html#TYPElabel">label</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether the statement starts with some labels, case statements or 
+ default statements.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>skind&nbsp;: <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a></code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The kind of statement</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>sid&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A number (&gt;= 0) that is unique in a function. Filled in only after 
+ the CFG is computed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>succs&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The successor statements. They can always be computed from the skind 
+ and the context in which this statement appears. Filled in only after 
+ the CFG is computed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code><span class="keyword">mutable&nbsp;</span>preds&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The inverse of the succs function.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Statements.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPElabel"></a><code class="type"></code>label = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Label</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPElocation">location</a> * bool</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A real label. If the bool is "true", the label is from the 
+ input source program. If the bool is "false", the label was 
+ created by CIL or some other transformation</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Case</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A case statement. This expression 
+ is lowered into a constant if 
+ <a href="Cil.html#VALlowerConstants"><code class="code">Cil.lowerConstants</code></a> is set to 
+ true.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Default</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A default statement</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Labels<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEstmtkind"></a><code class="type"></code>stmtkind = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Instr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A group of instructions that do not contain control flow. Control 
+ implicitly falls through.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Return</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> option * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The return statement. This is a leaf in the CFG.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Goto</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> Pervasives.ref * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A goto statement. Appears from actual goto's in the code or from 
+ goto's that have been inserted during elaboration. The reference 
+ points to the statement that is the target of the Goto. This means that 
+ you have to update the reference whenever you replace the target 
+ statement. The target statement MUST have at least a label.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Break</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A break to the end of the nearest enclosing Loop or Switch</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Continue</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A continue to the start of the nearest enclosing <code class="code">Loop</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">If</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A conditional. Two successors, the "then" and the "else" branches. 
+ Both branches fall-through to the successor of the If statement.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Switch</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEstmt">stmt</a> list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A switch statement. The statements that implement the cases can be 
+ reached through the provided list. For each such target you can find 
+ among its labels what cases it implements. The statements that 
+ implement the cases are somewhere within the provided <code class="code">block</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Loop</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a> * <a href="Cil.html#TYPEstmt">stmt</a> option * <a href="Cil.html#TYPEstmt">stmt</a> option</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A <code class="code">while(1)</code> loop. The termination test is implemented in the body of 
+ a loop using a <code class="code">Break</code> statement. If prepareCFG has been called,
+ the first stmt option will point to the stmt containing the continue
+ label for this loop and the second will point to the stmt containing
+ the break label for this loop.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Block</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Just a block of statements. Use it as a way to keep some block 
+ attributes local</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TryFinally</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TryExcept</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * (<a href="Cil.html#TYPEinstr">instr</a> list * <a href="Cil.html#TYPEexp">exp</a>) * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+
+</tr></table>
+
+<div class="info">
+The various kinds of control-flow statements statements<br>
+</div>
+
+<br>
+<b>Instructions</b>. 
+ An instruction <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> is a statement that has no local
+(intraprocedural) control flow. It can be either an assignment,
+function call, or an inline assembly instruction.<br>
+<br><code><span class="keyword">type</span> <a name="TYPEinstr"></a><code class="type"></code>instr = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Set</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An assignment. The type of the expression is guaranteed to be the same 
+ with that of the lvalue</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Call</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> option * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEexp">exp</a> list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A function call with the (optional) result placed in an lval. It is 
+ possible that the returned type of the function is not identical to 
+ that of the lvalue. In that case a cast is printed. The type of the 
+ actual arguments are identical to those of the declared formals. The 
+ number of arguments is the same as that of the declared formals, except 
+ for vararg functions. This construct is also used to encode a call to 
+ "__builtin_va_arg". In this case the second argument (which should be a 
+ type T) is encoded SizeOf(T)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Asm</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a> * string list * (string * <a href="Cil.html#TYPElval">lval</a>) list<br>        * (string * <a href="Cil.html#TYPEexp">exp</a>) list * string list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>There are for storing inline assembly. They follow the GCC 
+ specification: 
+<pre>
+  asm [volatile] ("...template..." "..template.."
+                  : "c1" (o1), "c2" (o2), ..., "cN" (oN)
+                  : "d1" (i1), "d2" (i2), ..., "dM" (iM)
+                  : "r1", "r2", ..., "nL" );
+</pre>
+<p>
+
+where the parts are
+<p>
+<ul>
+<li><code class="code">volatile</code> (optional): when present, the assembler instruction
+    cannot be removed, moved, or otherwise optimized</li>
+<li>template: a sequence of strings, with %0, %1, %2, etc. in the string to 
+    refer to the input and output expressions. I think they're numbered
+    consecutively, but the docs don't specify. Each string is printed on 
+    a separate line. This is the only part that is present for MSVC inline
+    assembly.</li>
+<li>"ci" (oi): pairs of constraint-string and output-lval; the 
+    constraint specifies that the register used must have some
+    property, like being a floating-point register; the constraint
+    string for outputs also has "=" to indicate it is written, or
+    "+" to indicate it is both read and written; 'oi' is the
+    name of a C lvalue (probably a variable name) to be used as
+    the output destination</li>
+<li>"dj" (ij): pairs of constraint and input expression; the constraint
+    is similar to the "ci"s.  the 'ij' is an arbitrary C expression
+    to be loaded into the corresponding register</li>
+<li>"rk": registers to be regarded as "clobbered" by the instruction;
+    "memory" may be specified for arbitrary memory effects</li>
+</ul>
+
+an example (from gcc manual):
+<pre>
+  asm volatile ("movc3 %0,%1,%2"
+                : /* no outputs */
+                : "g" (from), "g" (to), "g" (count)
+                : "r0", "r1", "r2", "r3", "r4", "r5");
+</pre></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Instructions.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPElocation"></a><code class="type"></code>location = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>line&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The line number. -1 means "do not know"</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>file&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the source file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>byte&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The byte position in the source file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Describes a location in a source file.<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEtypsig"></a><code class="type"></code>typsig = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSArray</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * int64 option * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSPtr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSComp</span> <span class="keyword">of</span> <code class="type">bool * string * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * <a href="Cil.html#TYPEtypsig">typsig</a> list * bool * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSEnum</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TSBase</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+
+</tr></table>
+
+<div class="info">
+Type signatures. Two types are identical iff they have identical 
+ signatures. These contain the same information as types but canonicalized. 
+ For example, two function types that are identical except for the name of 
+ the formal arguments are given the same signature. Also, <code class="code">TNamed</code> 
+ constructors are unrolled.<br>
+</div>
+
+<br>
+<b>Lowering Options</b><br>
+<pre><span class="keyword">val</span> <a name="VALlowerConstants"></a>lowerConstants : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Do lower constants (default true)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALinsertImplicitCasts"></a>insertImplicitCasts : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Do insert implicit casts (default true)<br>
+</div>
+<br><code><span class="keyword">type</span> <a name="TYPEfeatureDescr"></a><code class="type"></code>featureDescr = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_enabled&nbsp;: <code class="type">bool Pervasives.ref</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The enable flag. Set to default value</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_name&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This is used to construct an option "--doxxx" and "--dontxxx" that 
+ enable and disable the feature</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_description&nbsp;: <code class="type">string</code>;</code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_extraopt&nbsp;: <code class="type">(string * Arg.spec * string) list</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Additional command line options</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_doit&nbsp;: <code class="type"><a href="Cil.html#TYPEfile">file</a> -> unit</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This performs the transformation</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>fd_post_check&nbsp;: <code class="type">bool</code>;</code></td>
+
+</tr></table>
+}
+
+<div class="info">
+To be able to add/remove features easily, each feature should be package 
+ as an interface with the following interface. These features should be<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALcompareLoc"></a>compareLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPElocation">location</a> -> int</code></pre><div class="info">
+Comparison function for locations.
+* Compares first by filename, then line, then byte<br>
+</div>
+<br>
+<b>Values for manipulating globals</b><br>
+<pre><span class="keyword">val</span> <a name="VALemptyFunction"></a>emptyFunction : <code class="type">string -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
+Make an empty function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetFormals"></a>setFormals : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> list -> unit</code></pre><div class="info">
+Update the formals of a <code class="code">fundec</code> and make sure that the function type 
+    has the same information. Will copy the name as well into the type.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetFunctionType"></a>setFunctionType : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> unit</code></pre><div class="info">
+Set the types of arguments and results as given by the function type 
+ passed as the second argument. Will not copy the names from the function 
+ type to the formals<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetFunctionTypeMakeFormals"></a>setFunctionTypeMakeFormals : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> unit</code></pre><div class="info">
+Set the type of the function and make formal arguments for them<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetMaxId"></a>setMaxId : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> unit</code></pre><div class="info">
+Update the smaxid after you have populated with locals and formals 
+ (unless you constructed those using <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or 
+ <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdummyFunDec"></a>dummyFunDec : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
+A dummy function declaration handy when you need one as a placeholder. It 
+ contains inside a dummy varinfo.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdummyFile"></a>dummyFile : <code class="type"><a href="Cil.html#TYPEfile">file</a></code></pre><div class="info">
+A dummy file<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsaveBinaryFile"></a>saveBinaryFile : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> string -> unit</code></pre><div class="info">
+Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem. The file can be
+ read back in later using <a href="Cil.html#VALloadBinaryFile"><code class="code">Cil.loadBinaryFile</code></a>, possibly saving parsing
+ time. The second argument is the name of the file that should be
+ created.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsaveBinaryFileChannel"></a>saveBinaryFileChannel : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> Pervasives.out_channel -> unit</code></pre><div class="info">
+Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem. The file can be
+ read back in later using <a href="Cil.html#VALloadBinaryFile"><code class="code">Cil.loadBinaryFile</code></a>, possibly saving parsing
+ time. Does not close the channel.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALloadBinaryFile"></a>loadBinaryFile : <code class="type">string -> <a href="Cil.html#TYPEfile">file</a></code></pre><div class="info">
+Read a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form from the filesystem. The first
+ argument is the name of a file previously created by
+ <a href="Cil.html#VALsaveBinaryFile"><code class="code">Cil.saveBinaryFile</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgetGlobInit"></a>getGlobInit : <code class="type">?main_name:string -> <a href="Cil.html#TYPEfile">file</a> -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
+Get the global initializer and create one if it does not already exist. 
+ When it creates a global initializer it attempts to place a call to it in 
+ the main function named by the optional argument (default "main")<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALiterGlobals"></a>iterGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> (<a href="Cil.html#TYPEglobal">global</a> -> unit) -> unit</code></pre><div class="info">
+Iterate over all globals, including the global initializer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfoldGlobals"></a>foldGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> ('a -> <a href="Cil.html#TYPEglobal">global</a> -> 'a) -> 'a -> 'a</code></pre><div class="info">
+Fold over all globals, including the global initializer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmapGlobals"></a>mapGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> (<a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a>) -> unit</code></pre><div class="info">
+Map over all globals, including the global initializer and change things 
+    in place<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnew_sid"></a>new_sid : <code class="type">unit -> int</code></pre><pre><span class="keyword">val</span> <a name="VALprepareCFG"></a>prepareCFG : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> unit</code></pre><div class="info">
+Prepare a function for CFG information computation by
+ <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>. This function converts all <code class="code">Break</code>, <code class="code">Switch</code>,
+ <code class="code">Default</code> and <code class="code">Continue</code> <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a>s and <a href="Cil.html#TYPElabel"><code class="code">Cil.label</code></a>s into <code class="code">If</code>s
+ and <code class="code">Goto</code>s, giving the function body a very CFG-like character. This
+ function modifies its argument in place.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcomputeCFGInfo"></a>computeCFGInfo : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> bool -> unit</code></pre><div class="info">
+Compute the CFG information for all statements in a fundec and return a 
+ list of the statements. The input fundec cannot have <code class="code">Break</code>, <code class="code">Switch</code>, 
+ <code class="code">Default</code>, or <code class="code">Continue</code> <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a>s or <a href="Cil.html#TYPElabel"><code class="code">Cil.label</code></a>s. Use
+ <a href="Cil.html#VALprepareCFG"><code class="code">Cil.prepareCFG</code></a> to transform them away.  The second argument should
+ be <code class="code">true</code> if you wish a global statement number, <code class="code">false</code> if you wish a
+ local (per-function) statement numbering. The list of statements is set 
+ in the sallstmts field of a fundec. 
+<p>
+
+ NOTE: unless you want the simpler control-flow graph provided by
+ prepareCFG, or you need the function's smaxstmtid and sallstmt fields
+ filled in, we recommend you use <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a> instead of this
+ function to compute control-flow information.
+ <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a> is newer and will handle switch, break, and
+ continue correctly.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcopyFunction"></a>copyFunction : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> string -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
+Create a deep copy of a function. There should be no sharing between the 
+ copy and the original function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpushGlobal"></a>pushGlobal : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -><br>       types:<a href="Cil.html#TYPEglobal">global</a> list Pervasives.ref -><br>       variables:<a href="Cil.html#TYPEglobal">global</a> list Pervasives.ref -> unit</code></pre><div class="info">
+CIL keeps the types at the beginning of the file and the variables at the 
+ end of the file. This function will take a global and add it to the 
+ corresponding stack. Its operation is actually more complicated because if 
+ the global declares a type that contains references to variables (e.g. in 
+ sizeof in an array length) then it will also add declarations for the 
+ variables to the types stack<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALinvalidStmt"></a>invalidStmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+An empty statement. Used in pretty printing<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgccBuiltins"></a>gccBuiltins : <code class="type">(string, <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEtyp">typ</a> list * bool) Hashtbl.t</code></pre><div class="info">
+A list of the GCC built-in functions. Maps the name to the result and 
+ argument types, and whether it is vararg<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmsvcBuiltins"></a>msvcBuiltins : <code class="type">(string, <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEtyp">typ</a> list * bool) Hashtbl.t</code></pre><div class="info">
+A list of the MSVC built-in functions. Maps the name to the result and 
+ argument types, and whether it is vararg<br>
+</div>
+<br>
+<b>Values for manipulating initializers</b><br>
+<pre><span class="keyword">val</span> <a name="VALmakeZeroInit"></a>makeZeroInit : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEinit">init</a></code></pre><div class="info">
+Make a initializer for zero-ing a data type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfoldLeftCompound"></a>foldLeftCompound : <code class="type">doinit:(<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> 'a -> 'a) -><br>       ct:<a href="Cil.html#TYPEtyp">typ</a> -> initl:(<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list -> acc:'a -> 'a</code></pre><div class="info">
+Fold over the list of initializers in a Compound. <code class="code">doinit</code> is called on 
+ every present initializer, even if it is of compound type. In the case of 
+ arrays there might be missing zero-initializers at the end of the list. 
+ These are not scanned. This is much like <code class="code">List.fold_left</code> except we also 
+ pass the type of the initializer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfoldLeftCompoundAll"></a>foldLeftCompoundAll : <code class="type">doinit:(<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> 'a -> 'a) -><br>       ct:<a href="Cil.html#TYPEtyp">typ</a> -> initl:(<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list -> acc:'a -> 'a</code></pre><div class="info">
+Fold over the list of initializers in a Compound, like 
+ <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> but in the case of an array it scans even missing 
+ zero initializers at the end of the array<br>
+</div>
+<br>
+<b>Values for manipulating types</b><br>
+<pre><span class="keyword">val</span> <a name="VALvoidType"></a>voidType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+void<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisVoidType"></a>isVoidType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><pre><span class="keyword">val</span> <a name="VALisVoidPtrType"></a>isVoidPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><pre><span class="keyword">val</span> <a name="VALintType"></a>intType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+int<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALuintType"></a>uintType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+unsigned int<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlongType"></a>longType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+long<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALulongType"></a>ulongType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+unsigned long<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcharType"></a>charType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+char<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcharPtrType"></a>charPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+char *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwcharKind"></a>wcharKind : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> Pervasives.ref</code></pre><div class="info">
+wchar_t (depends on architecture) and is set when you call 
+ <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwcharType"></a>wcharType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALcharConstPtrType"></a>charConstPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+char const *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvoidPtrType"></a>voidPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+void *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALintPtrType"></a>intPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+int *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALuintPtrType"></a>uintPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+unsigned int *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoubleType"></a>doubleType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+double<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALupointType"></a>upointType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALtypeOfSizeOf"></a>typeOfSizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALisSigned"></a>isSigned : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> bool</code></pre><div class="info">
+Returns true if and only if the given integer type is signed.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkCompInfo"></a>mkCompInfo : <code class="type">bool -><br>       string -><br>       (<a href="Cil.html#TYPEcompinfo">compinfo</a> -><br>        (string * <a href="Cil.html#TYPEtyp">typ</a> * int option * <a href="Cil.html#TYPEattributes">attributes</a> * <a href="Cil.html#TYPElocation">location</a>) list) -><br>       <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEcompinfo">compinfo</a></code></pre><div class="info">
+Creates a a (potentially recursive) composite type. The arguments are: 
+ (1) a boolean indicating whether it is a struct or a union, (2) the name 
+ (always non-empty), (3) a function that when given a representation of the 
+ structure type constructs the type of the fields recursive type (the first 
+ argument is only useful when some fields need to refer to the type of the 
+ structure itself), and (4) a list of attributes to be associated with the 
+ composite type. The resulting compinfo has the field "cdefined" only if 
+ the list of fields is non-empty.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcopyCompInfo"></a>copyCompInfo : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string -> <a href="Cil.html#TYPEcompinfo">compinfo</a></code></pre><div class="info">
+Makes a shallow copy of a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> changing the name and the key.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmissingFieldName"></a>missingFieldName : <code class="type">string</code></pre><div class="info">
+This is a constant used as the name of an unnamed bitfield. These fields
+    do not participate in initialization and their name is not printed.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcompFullName"></a>compFullName : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string</code></pre><div class="info">
+Get the full name of a comp<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisCompleteType"></a>isCompleteType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+Returns true if this is a complete type. 
+   This means that sizeof(t) makes sense. 
+   Incomplete types are not yet defined 
+   structures and empty arrays.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunrollType"></a>unrollType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Unroll a type until it exposes a non 
+ <code class="code">TNamed</code>. Will collect all attributes appearing in <code class="code">TNamed</code>!!!<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunrollTypeDeep"></a>unrollTypeDeep : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Unroll all the TNamed in a type (even under type constructors such as 
+ <code class="code">TPtr</code>, <code class="code">TFun</code> or <code class="code">TArray</code>. Does not unroll the types of fields in <code class="code">TComp</code> 
+ types. Will collect all attributes<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALseparateStorageModifiers"></a>separateStorageModifiers : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
+Separate out the storage-modifier name attributes<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisIntegralType"></a>isIntegralType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+True if the argument is an integral type (i.e. integer or enum)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisArithmeticType"></a>isArithmeticType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+True if the argument is an arithmetic type (i.e. integer, enum or 
+    floating point<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisPointerType"></a>isPointerType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+True if the argument is a pointer type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisFunctionType"></a>isFunctionType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+True if the argument is a function type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALargsToList"></a>argsToList : <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option -><br>       (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list</code></pre><div class="info">
+Obtain the argument list ([] if None)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisArrayType"></a>isArrayType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+True if the argument is an array type<br>
+</div>
+<pre><span class="keyword">exception</span> <a name="EXCEPTIONLenOfArray"></a>LenOfArray</pre>
+<div class="info">
+Raised when <a href="Cil.html#VALlenOfArray"><code class="code">Cil.lenOfArray</code></a> fails either because the length is <code class="code">None</code> 
+ or because it is a non-constant expression<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlenOfArray"></a>lenOfArray : <code class="type"><a href="Cil.html#TYPEexp">exp</a> option -> int</code></pre><div class="info">
+Call to compute the array length as present in the array type, to an 
+ integer. Raises <a href="Cil.html#EXCEPTIONLenOfArray"><code class="code">Cil.LenOfArray</code></a> if not able to compute the length, such 
+ as when there is no length or the length is not a constant.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgetCompField"></a>getCompField : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string -> <a href="Cil.html#TYPEfieldinfo">fieldinfo</a></code></pre><div class="info">
+Return a named fieldinfo in compinfo, or raise Not_found<br>
+</div>
+<br><code><span class="keyword">type</span> <a name="TYPEexistsAction"></a><code class="type"></code>existsAction = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ExistsTrue</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ExistsFalse</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ExistsMaybe</span></code></td>
+
+</tr></table>
+
+<div class="info">
+A datatype to be used in conjunction with <code class="code">existsType</code><br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALexistsType"></a>existsType : <code class="type">(<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexistsAction">existsAction</a>) -> <a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
+Scans a type by applying the function on all elements. 
+    When the function returns ExistsTrue, the scan stops with
+    true. When the function returns ExistsFalse then the current branch is not
+    scanned anymore. Care is taken to 
+    apply the function only once on each composite type, thus avoiding 
+    circularity. When the function returns ExistsMaybe then the types that 
+    construct the current type are scanned (e.g. the base type for TPtr and 
+    TArray, the type of fields for a TComp, etc).<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsplitFunctionType"></a>splitFunctionType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -><br>       <a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool *<br>       <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Given a function type split it into return type, 
+ arguments, is_vararg and attributes. An error is raised if the type is not 
+ a function type
+<p>
+Same as <a href="Cil.html#VALsplitFunctionType"><code class="code">Cil.splitFunctionType</code></a> but takes a varinfo. Prints a nicer 
+ error message if the varinfo is not for a function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsplitFunctionTypeVI"></a>splitFunctionTypeVI : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -><br>       <a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool *<br>       <a href="Cil.html#TYPEattributes">attributes</a></code></pre><br>
+<b>Type signatures</b><br>
+<br>
+Type signatures. Two types are identical iff they have identical 
+ signatures. These contain the same information as types but canonicalized. 
+ For example, two function types that are identical except for the name of 
+ the formal arguments are given the same signature. Also, <code class="code">TNamed</code> 
+ constructors are unrolled. You shoud use <code class="code">Util.equals</code> to compare type 
+ signatures because they might still contain circular structures (through 
+ attributes, and sizeof)<br>
+<pre><span class="keyword">val</span> <a name="VALd_typsig"></a>d_typsig : <code class="type">unit -> <a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a type signature<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeSig"></a>typeSig : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
+Compute a type signature<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeSigWithAttrs"></a>typeSigWithAttrs : <code class="type">?ignoreSign:bool -><br>       (<a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a>) -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
+Like <a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> but customize the incorporation of attributes.
+    Use ~ignoreSign:true to convert all signed integer types to unsigned,
+    so that signed and unsigned will compare the same.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetTypeSigAttrs"></a>setTypeSigAttrs : <code class="type"><a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
+Replace the attributes of a signature (only at top level)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeSigAttrs"></a>typeSigAttrs : <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Get the top-level attributes of a signature<br>
+</div>
+<br>
+LVALUES<br>
+<pre><span class="keyword">val</span> <a name="VALmakeVarinfo"></a>makeVarinfo : <code class="type">bool -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a varinfo. Use this (rarely) to make a raw varinfo. Use other 
+ functions to make locals (<a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> or 
+ <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>) and globals (<a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a>). Note that this 
+ function will assign a new identifier. The first argument specifies 
+ whether the varinfo is for a global.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmakeFormalVar"></a>makeFormalVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?where:string -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a formal variable for a function. Insert it in both the sformals 
+    and the type of the function. You can optionally specify where to insert 
+    this one. If where = "^" then it is inserted first. If where = "$" then 
+    it is inserted last. Otherwise where must be the name of a formal after 
+    which to insert this. By default it is inserted at the end.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmakeLocalVar"></a>makeLocalVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?insert:bool -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a local variable and add it to a function's slocals (only if insert = 
+    true, which is the default). Make sure you know what you are doing if you 
+    set insert=false.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmakeTempVar"></a>makeTempVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?name:string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a temporary variable and add it to a function's slocals. The name of 
+    the temporary variable will be generated based on the given name hint so 
+    that to avoid conflicts with other locals.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmakeGlobalVar"></a>makeGlobalVar : <code class="type">string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a global variable. Your responsibility to make sure that the name 
+    is unique<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcopyVarinfo"></a>copyVarinfo : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> string -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Make a shallow copy of a <code class="code">varinfo</code> and assign a new identifier<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnewVID"></a>newVID : <code class="type">unit -> int</code></pre><div class="info">
+Generate a new variable ID. This will be different than any variable ID 
+ that is generated by <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> and friends<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALaddOffsetLval"></a>addOffsetLval : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
+Add an offset at the end of an lvalue. Make sure the type of the lvalue 
+ and the offset are compatible.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALaddOffset"></a>addOffset : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
+<code class="code">addOffset o1 o2</code> adds <code class="code">o1</code> to the end of <code class="code">o2</code>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALremoveOffsetLval"></a>removeOffsetLval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a> * <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
+Remove ONE offset from the end of an lvalue. Returns the lvalue with the 
+ trimmed offset and the final offset. If the final offset is <code class="code">NoOffset</code> 
+ then the original <code class="code">lval</code> did not have an offset.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALremoveOffset"></a>removeOffset : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
+Remove ONE offset from the end of an offset sequence. Returns the 
+ trimmed offset and the final offset. If the final offset is <code class="code">NoOffset</code> 
+ then the original <code class="code">lval</code> did not have an offset.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeOfLval"></a>typeOfLval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Compute the type of an lvalue<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeOffset"></a>typeOffset : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Compute the type of an offset from a base type<br>
+</div>
+<br>
+<b>Values for manipulating expressions</b><br>
+<pre><span class="keyword">val</span> <a name="VALzero"></a>zero : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+0<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALone"></a>one : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+1<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmone"></a>mone : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+-1<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALkinteger64"></a>kinteger64 : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> int64 -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Construct an integer of a given kind, using OCaml's int64 type. If needed 
+ it will truncate the integer to be within the representable range for the 
+ given kind.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALkinteger"></a>kinteger : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Construct an integer of a given kind. Converts the integer to int64 and 
+ then uses kinteger64. This might truncate the value if you use a kind 
+ that cannot represent the given integer. This can only happen for one of 
+ the Char or Short kinds<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALinteger"></a>integer : <code class="type">int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Construct an integer of kind IInt. You can use this always since the 
+    OCaml integers are 31 bits and are guaranteed to fit in an IInt<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisInteger"></a>isInteger : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int64 option</code></pre><div class="info">
+True if the given expression is a (possibly cast'ed) 
+    character or an integer constant<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisConstant"></a>isConstant : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> bool</code></pre><div class="info">
+True if the expression is a compile-time constant<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALisZero"></a>isZero : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> bool</code></pre><div class="info">
+True if the given expression is a (possibly cast'ed) integer or character 
+    constant with value zero<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcharConstToInt"></a>charConstToInt : <code class="type">char -> <a href="Cil.html#TYPEconstant">constant</a></code></pre><div class="info">
+Given the character c in a (CChr c), sign-extend it to 32 bits.
+  (This is the official way of interpreting character constants, according to
+  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
+  Returns CInt64(sign-extened c, IInt, None)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALconstFold"></a>constFold : <code class="type">bool -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Do constant folding on an expression. If the first argument is true then 
+    will also compute compiler-dependent expressions such as sizeof<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALconstFoldBinOp"></a>constFoldBinOp : <code class="type">bool -> <a href="Cil.html#TYPEbinop">binop</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Do constant folding on a binary operation. The bulk of the work done by 
+    <code class="code">constFold</code> is done here. If the first argument is true then 
+    will also compute compiler-dependent expressions such as sizeof<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALincrem"></a>increm : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Increment an expression. Can be arithmetic or pointer type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvar"></a>var : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
+Makes an lvalue out of a given variable<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkAddrOf"></a>mkAddrOf : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Make an AddrOf. Given an lvalue of type T will give back an expression of 
+    type ptr(T). It optimizes somewhat expressions like "&amp; v" and "&amp; v<code class="code">0</code>"<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkAddrOrStartOf"></a>mkAddrOrStartOf : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Like mkAddrOf except if the type of lval is an array then it uses 
+    StartOf. This is the right operation for getting a pointer to the start 
+    of the storage denoted by lval.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkMem"></a>mkMem : <code class="type">addr:<a href="Cil.html#TYPEexp">exp</a> -> off:<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
+Make a Mem, while optimizing AddrOf. The type of the addr must be 
+    TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
+    implicit conversion between an array and the pointer to the first 
+    element does not apply. You must do the conversion yourself using 
+    StartOf<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkString"></a>mkString : <code class="type">string -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Make an expression that is a string constant (of pointer type)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkCastT"></a>mkCastT : <code class="type">e:<a href="Cil.html#TYPEexp">exp</a> -> oldt:<a href="Cil.html#TYPEtyp">typ</a> -> newt:<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Construct a cast when having the old type of the expression. If the new 
+ type is the same as the old type, then no cast is added.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkCast"></a>mkCast : <code class="type">e:<a href="Cil.html#TYPEexp">exp</a> -> newt:<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Like <a href="Cil.html#VALmkCastT"><code class="code">Cil.mkCastT</code></a> but uses typeOf to get <code class="code">oldt</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstripCasts"></a>stripCasts : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Removes casts from this expression, but ignores casts within
+  other expression constructs.  So we delete the (A) and (B) casts from 
+  "(A)(B)(x + (C)y)", but leave the (C) cast.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeOf"></a>typeOf : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Compute the type of an expression<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALparseInt"></a>parseInt : <code class="type">string -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Convert a string representing a C integer literal to an expression. 
+ Handles the prefixes 0x and 0 and the suffixes L, U, UL, LL, ULL<br>
+</div>
+<br>
+<b>Values for manipulating statements</b><br>
+<pre><span class="keyword">val</span> <a name="VALmkStmt"></a>mkStmt : <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+Construct a statement, given its kind. Initialize the <code class="code">sid</code> field to -1,
+    and <code class="code">labels</code>, <code class="code">succs</code> and <code class="code">preds</code> to the empty list<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkBlock"></a>mkBlock : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEblock">block</a></code></pre><div class="info">
+Construct a block with no attributes, given a list of statements<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkStmtOneInstr"></a>mkStmtOneInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+Construct a statement consisting of just one instruction<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcompactStmts"></a>compactStmts : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
+Try to compress statements so as to get maximal basic blocks<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkEmptyStmt"></a>mkEmptyStmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+Returns an empty statement (of kind <code class="code">Instr</code>)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdummyInstr"></a>dummyInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a></code></pre><div class="info">
+A instr to serve as a placeholder<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdummyStmt"></a>dummyStmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+A statement consisting of just <code class="code">dummyInstr</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkWhile"></a>mkWhile : <code class="type">guard:<a href="Cil.html#TYPEexp">exp</a> -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
+Make a while loop. Can contain Break or Continue<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkForIncr"></a>mkForIncr : <code class="type">iter:<a href="Cil.html#TYPEvarinfo">varinfo</a> -><br>       first:<a href="Cil.html#TYPEexp">exp</a> -><br>       stopat:<a href="Cil.html#TYPEexp">exp</a> -> incr:<a href="Cil.html#TYPEexp">exp</a> -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
+Make a for loop for(i=start; i&lt;past; i += incr) { ... }. The body 
+    can contain Break but not Continue. Can be used with i a pointer 
+    or an integer. Start and done must have the same type but incr 
+    must be an integer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmkFor"></a>mkFor : <code class="type">start:<a href="Cil.html#TYPEstmt">stmt</a> list -><br>       guard:<a href="Cil.html#TYPEexp">exp</a> -> next:<a href="Cil.html#TYPEstmt">stmt</a> list -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
+Make a for loop for(start; guard; next) { ... }. The body can 
+    contain Break but not Continue !!!<br>
+</div>
+<br>
+<b>Values for manipulating attributes</b><br>
+<br><code><span class="keyword">type</span> <a name="TYPEattributeClass"></a><code class="type"></code>attributeClass = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AttrName</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a name. If argument is true and we are on MSVC then 
+            the attribute is printed using __declspec as part of the storage 
+            specifier</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AttrFunType</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a function type. If argument is true and we are on 
+            MSVC then the attribute is printed just before the function name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">AttrType</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Various classes of attributes<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALattributeHash"></a>attributeHash : <code class="type">(string, <a href="Cil.html#TYPEattributeClass">attributeClass</a>) Hashtbl.t</code></pre><div class="info">
+This table contains the mapping of predefined attributes to classes. 
+    Extend this table with more attributes as you need. This table is used to 
+    determine how to associate attributes with names or types<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpartitionAttributes"></a>partitionAttributes : <code class="type">default:<a href="Cil.html#TYPEattributeClass">attributeClass</a> -><br>       <a href="Cil.html#TYPEattributes">attributes</a> -><br>       <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
+Partition the attributes into classes:name attributes, function type, 
+    and type attributes<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALaddAttribute"></a>addAttribute : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Add an attribute. Maintains the attributes in sorted order of the second 
+    argument<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALaddAttributes"></a>addAttributes : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Add a list of attributes. Maintains the attributes in sorted order. The 
+    second argument must be sorted, but not necessarily the first<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdropAttribute"></a>dropAttribute : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Remove all attributes with the given name. Maintains the attributes in 
+    sorted order.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdropAttributes"></a>dropAttributes : <code class="type">string list -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Remove all attributes with names appearing in the string list.
+  Maintains the attributes in sorted order<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfilterAttributes"></a>filterAttributes : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
+Retains attributes with the given name<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALhasAttribute"></a>hasAttribute : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> bool</code></pre><div class="info">
+True if the named attribute appears in the attribute list. The list of
+    attributes must be sorted.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeAttrs"></a>typeAttrs : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
+Returns all the attributes contained in a type. This requires a traversal 
+    of the type structure, in case of composite, enumeration and named types<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetTypeAttrs"></a>setTypeAttrs : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><pre><span class="keyword">val</span> <a name="VALtypeAddAttributes"></a>typeAddAttributes : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Add some attributes to a type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtypeRemoveAttributes"></a>typeRemoveAttributes : <code class="type">string list -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Remove all attributes with the given names from a type. Note that this
+    does not remove attributes from typedef and tag definitions, just from 
+    their uses<br>
+</div>
+<br>
+<b>The visitor</b><br>
+<br><code><span class="keyword">type</span> <a name="TYPEvisitAction"></a><code class="type">'a</code> visitAction = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SkipChildren</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not visit the children. Return 
+                                            the node as it is.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">DoChildren</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Continue with the children of this 
+                                            node. Rebuild the node on return 
+                                            if any of the children changes 
+                                            (use == test)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ChangeTo</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Replace the expression with the 
+                                            given one</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ChangeDoChildrenPost</span> <span class="keyword">of</span> <code class="type">'a * ('a -> 'a)</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>First consider that the entire 
+                                           exp is replaced by the first 
+                                           parameter. Then continue with 
+                                           the children. On return rebuild 
+                                           the node if any of the children 
+                                           has changed and then apply the 
+                                           function on the node</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+Different visiting actions. 'a will be instantiated with <code class="code">exp</code>, <code class="code">instr</code>,
+    etc.<br>
+</div>
+
+<pre><span class="keyword">class type</span> <a name="TYPEcilVisitor"></a><a href="Cil.cilVisitor.html">cilVisitor</a> = <code class="code">object</code> <a href="Cil.cilVisitor.html">..</a> <code class="code">end</code></pre><div class="info">
+A visitor interface for traversing CIL trees.
+</div>
+<pre><span class="keyword">class</span> <a name="TYPEnopCilVisitor"></a><a href="Cil.nopCilVisitor.html">nopCilVisitor</a> : <code class="type"></code><code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a></code></pre><div class="info">
+Default Visitor.
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilFile"></a>visitCilFile : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
+Visit a file. This will will re-cons all globals TWICE (so that it is 
+ tail-recursive). Use <a href="Cil.html#VALvisitCilFileSameGlobals"><code class="code">Cil.visitCilFileSameGlobals</code></a> if your visitor will 
+ not change the list of globals.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilFileSameGlobals"></a>visitCilFileSameGlobals : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
+A visitor for the whole file that does not change the globals (but maybe
+ changes things inside the globals). Use this function instead of
+ <a href="Cil.html#VALvisitCilFile"><code class="code">Cil.visitCilFile</code></a> whenever appropriate because it is more efficient for
+ long files.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilGlobal"></a>visitCilGlobal : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a> list</code></pre><div class="info">
+Visit a global<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilFunction"></a>visitCilFunction : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
+Visit a function definition<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilExpr"></a>visitCilExpr : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><pre><span class="keyword">val</span> <a name="VALvisitCilLval"></a>visitCilLval : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
+Visit an lvalue<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilOffset"></a>visitCilOffset : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
+Visit an lvalue or recursive offset<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilInitOffset"></a>visitCilInitOffset : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
+Visit an initializer offset<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilInstr"></a>visitCilInstr : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list</code></pre><div class="info">
+Visit an instruction<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilStmt"></a>visitCilStmt : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
+Visit a statement<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilBlock"></a>visitCilBlock : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Cil.html#TYPEblock">block</a></code></pre><div class="info">
+Visit a block<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilType"></a>visitCilType : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
+Visit a type<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilVarDecl"></a>visitCilVarDecl : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
+Visit a variable declaration<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilInit"></a>visitCilInit : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEinit">init</a></code></pre><div class="info">
+Visit an initializer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALvisitCilAttributes"></a>visitCilAttributes : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
+Visit a list of attributes<br>
+</div>
+<br>
+<b>Utility functions</b><br>
+<pre><span class="keyword">val</span> <a name="VALmsvcMode"></a>msvcMode : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether the pretty printer should print output for the MS VC compiler.
+   Default is GCC. After you set this function you should call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALuseLogicalOperators"></a>useLogicalOperators : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether to use the logical operands LAnd and LOr. By default, do not use 
+ them because they are unlike other expressions and do not evaluate both of 
+ their operands<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALconstFoldVisitor"></a>constFoldVisitor : <code class="type">bool -> <a href="Cil.cilVisitor.html">cilVisitor</a></code></pre><div class="info">
+A visitor that does constant folding. Pass as argument whether you want 
+ machine specific simplifications to be done, or not.<br>
+</div>
+<br><code><span class="keyword">type</span> <a name="TYPElineDirectiveStyle"></a><code class="type"></code>lineDirectiveStyle = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LineComment</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LinePreprocessorInput</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">LinePreprocessorOutput</span></code></td>
+
+</tr></table>
+
+<div class="info">
+Styles of printing line directives<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALlineDirectiveStyle"></a>lineDirectiveStyle : <code class="type"><a href="Cil.html#TYPElineDirectiveStyle">lineDirectiveStyle</a> option Pervasives.ref</code></pre><div class="info">
+How to print line directives<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprint_CIL_Input"></a>print_CIL_Input : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether we print something that will only be used as input to our own 
+ parser. In that case we are a bit more liberal in what we print<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintCilAsIs"></a>printCilAsIs : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether to print the CIL as they are, without trying to be smart and 
+ print nicer code. Normally this is false, in which case the pretty 
+ printer will turn the while(1) loops of CIL into nicer loops, will not 
+ print empty "else" blocks, etc. These is one case howewer in which if you 
+ turn this on you will get code that does not compile: if you use varargs 
+ the __builtin_va_arg function will be printed in its internal form.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlineLength"></a>lineLength : <code class="type">int Pervasives.ref</code></pre><div class="info">
+The length used when wrapping output lines.  Setting this variable to
+ a large integer will prevent wrapping and make #line directives more
+ accurate.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALforgcc"></a>forgcc : <code class="type">string -> string</code></pre><div class="info">
+Return the string 's' if we're printing output for gcc, suppres
+  it if we're printing for CIL to parse back in.  the purpose is to
+  hide things from gcc that it complains about, but still be able
+  to do lossless transformations when CIL is the consumer<br>
+</div>
+<br>
+<b>Debugging support</b><br>
+<pre><span class="keyword">val</span> <a name="VALcurrentLoc"></a>currentLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> Pervasives.ref</code></pre><div class="info">
+A reference to the current location. If you are careful to set this to 
+ the current location then you can use some built-in logging functions that 
+ will print the location.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcurrentGlobal"></a>currentGlobal : <code class="type"><a href="Cil.html#TYPEglobal">global</a> Pervasives.ref</code></pre><div class="info">
+A reference to the current global being visited<br>
+</div>
+<br>
+CIL has a fairly easy to use mechanism for printing error messages. This 
+ mechanism is built on top of the pretty-printer mechanism (see 
+ <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>) and the error-message modules (see <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a>). 
+<p>
+
+ Here is a typical example for printing a log message: <pre>
+ignore (Errormsg.log "Expression %a is not positive (at %s:%i)\n"
+                        d_exp e loc.file loc.line)
+</pre>
+<p>
+
+ and here is an example of how you print a fatal error message that stop the 
+ execution: <pre>
+Errormsg.s (Errormsg.bug "Why am I here?")
+</pre>
+<p>
+
+ Notice that you can use C format strings with some extension. The most 
+useful extension is "%a" that means to consumer the next two argument from 
+the argument list and to apply the first to <code class="code">unit</code> and then to the second 
+and to print the resulting <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>. For each major type in CIL there is 
+a corresponding function that pretty-prints an element of that type:<br>
+<pre><span class="keyword">val</span> <a name="VALd_loc"></a>d_loc : <code class="type">unit -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a location<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_thisloc"></a>d_thisloc : <code class="type">unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_ikind"></a>d_ikind : <code class="type">unit -> <a href="Cil.html#TYPEikind">ikind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an integer of a given kind<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_fkind"></a>d_fkind : <code class="type">unit -> <a href="Cil.html#TYPEfkind">fkind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a floating-point kind<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_storage"></a>d_storage : <code class="type">unit -> <a href="Cil.html#TYPEstorage">storage</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print storage-class information<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_const"></a>d_const : <code class="type">unit -> <a href="Cil.html#TYPEconstant">constant</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a constant<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALderefStarLevel"></a>derefStarLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALindexLevel"></a>indexLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALarrowLevel"></a>arrowLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALaddrOfLevel"></a>addrOfLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALadditiveLevel"></a>additiveLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcomparativeLevel"></a>comparativeLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALbitwiseLevel"></a>bitwiseLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALgetParenthLevel"></a>getParenthLevel : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int</code></pre><div class="info">
+Parentheses level. An expression "a op b" is printed parenthesized if its 
+ parentheses level is &gt;= that that of its context. Identifiers have the 
+ lowest level and weakly binding operators (e.g. |) have the largest level. 
+ The correctness criterion is that a smaller level MUST correspond to a 
+ stronger precedence!<br>
+</div>
+<pre><span class="keyword">class type</span> <a name="TYPEcilPrinter"></a><a href="Cil.cilPrinter.html">cilPrinter</a> = <code class="code">object</code> <a href="Cil.cilPrinter.html">..</a> <code class="code">end</code></pre><div class="info">
+A printer interface for CIL trees.
+</div>
+<pre><span class="keyword">class</span> <a name="TYPEdefaultCilPrinterClass"></a><a href="Cil.defaultCilPrinterClass.html">defaultCilPrinterClass</a> : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">val</span> <a name="VALdefaultCilPrinter"></a>defaultCilPrinter : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">class</span> <a name="TYPEplainCilPrinterClass"></a><a href="Cil.plainCilPrinterClass.html">plainCilPrinterClass</a> : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><div class="info">
+These are pretty-printers that will show you more details on the internal 
+ CIL representation, without trying hard to make it look like C
+</div>
+<pre><span class="keyword">val</span> <a name="VALplainCilPrinter"></a>plainCilPrinter : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">val</span> <a name="VALprinterForMaincil"></a>printerForMaincil : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALprintType"></a>printType : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a type given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintExp"></a>printExp : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print an expression given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintLval"></a>printLval : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print an lvalue given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintGlobal"></a>printGlobal : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a global given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintAttr"></a>printAttr : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print an attribute given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintAttrs"></a>printAttrs : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a set of attributes given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintInstr"></a>printInstr : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print an instruction given a pretty printer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintStmt"></a>printStmt : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a statement given a pretty printer. This can take very long 
+ (or even overflow the stack) for huge statements. Use <a href="Cil.html#VALdumpStmt"><code class="code">Cil.dumpStmt</code></a> 
+ instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintBlock"></a>printBlock : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print a block given a pretty printer. This can take very long 
+ (or even overflow the stack) for huge block. Use <a href="Cil.html#VALdumpBlock"><code class="code">Cil.dumpBlock</code></a> 
+ instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdumpStmt"></a>dumpStmt : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEstmt">stmt</a> -> unit</code></pre><div class="info">
+Dump a statement to a file using a given indentation. Use this instead of 
+ <a href="Cil.html#VALprintStmt"><code class="code">Cil.printStmt</code></a> whenever possible.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdumpBlock"></a>dumpBlock : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEblock">block</a> -> unit</code></pre><div class="info">
+Dump a block to a file using a given indentation. Use this instead of 
+ <a href="Cil.html#VALprintBlock"><code class="code">Cil.printBlock</code></a> whenever possible.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintInit"></a>printInit : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Print an initializer given a pretty printer. This can take very long 
+ (or even overflow the stack) for huge initializers. Use <a href="Cil.html#VALdumpInit"><code class="code">Cil.dumpInit</code></a> 
+ instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdumpInit"></a>dumpInit : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEinit">init</a> -> unit</code></pre><div class="info">
+Dump an initializer to a file using a given indentation. Use this instead of 
+ <a href="Cil.html#VALprintInit"><code class="code">Cil.printInit</code></a> whenever possible.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_type"></a>d_type : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a type using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_exp"></a>d_exp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an expression using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_lval"></a>d_lval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an lvalue using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_offset"></a>d_offset : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> unit -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an offset using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>, given the pretty 
+ printing for the base.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_init"></a>d_init : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an initializer using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.  This can be 
+ extremely slow (or even overflow the stack) for huge initializers. Use 
+ <a href="Cil.html#VALdumpInit"><code class="code">Cil.dumpInit</code></a> instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_binop"></a>d_binop : <code class="type">unit -> <a href="Cil.html#TYPEbinop">binop</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a binary operator<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_unop"></a>d_unop : <code class="type">unit -> <a href="Cil.html#TYPEunop">unop</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a unary operator<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_attr"></a>d_attr : <code class="type">unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_attrparam"></a>d_attrparam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an argument of an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_attrlist"></a>d_attrlist : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a list of attributes using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_instr"></a>d_instr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print an instruction using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_label"></a>d_label : <code class="type">unit -> <a href="Cil.html#TYPElabel">label</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a label using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_stmt"></a>d_stmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a statement using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be 
+ extremely slow (or even overflow the stack) for huge statements. Use 
+ <a href="Cil.html#VALdumpStmt"><code class="code">Cil.dumpStmt</code></a> instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_block"></a>d_block : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a block using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be 
+ extremely slow (or even overflow the stack) for huge blocks. Use 
+ <a href="Cil.html#VALdumpBlock"><code class="code">Cil.dumpBlock</code></a> instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_global"></a>d_global : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the internal representation of a global using 
+ <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be extremely slow (or even overflow the 
+ stack) for huge globals (such as arrays with lots of initializers). Use 
+ <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a> instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdn_exp"></a>dn_exp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Versions of the above pretty printers, that don't print #line directives<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdn_lval"></a>dn_lval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_init"></a>dn_init : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_type"></a>dn_type : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_global"></a>dn_global : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attrlist"></a>dn_attrlist : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attr"></a>dn_attr : <code class="type">unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attrparam"></a>dn_attrparam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_stmt"></a>dn_stmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_instr"></a>dn_instr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_shortglobal"></a>d_shortglobal : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print a short description of the global. This is useful for error 
+ messages<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdumpGlobal"></a>dumpGlobal : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> <a href="Cil.html#TYPEglobal">global</a> -> unit</code></pre><div class="info">
+Pretty-print a global. Here you give the channel where the printout
+ should be sent.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdumpFile"></a>dumpFile : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> string -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
+Pretty-print an entire file. Here you give the channel where the printout
+ should be sent.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALbug"></a>bug : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALbug"><code class="code">Errormsg.bug</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunimp"></a>unimp : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALunimp"><code class="code">Errormsg.unimp</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>is also printed<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALerror"></a>error : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALerrorLoc"></a>errorLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> ('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Cil.html#VALerror"><code class="code">Cil.error</code></a> except that it explicitly takes a location argument, 
+ instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarn"></a>warn : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarnOpt"></a>warnOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALwarnOpt"><code class="code">Errormsg.warnOpt</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed. 
+ This warning is printed only of <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarnContext"></a>warnContext : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context 
+    is also printed<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarnContextOpt"></a>warnContextOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context is also 
+ printed. This warning is printed only of <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarnLoc"></a>warnLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> ('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Cil.html#VALwarn"><code class="code">Cil.warn</code></a> except that it explicitly takes a location argument, 
+ instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
+</div>
+<br>
+Sometimes you do not want to see the syntactic sugar that the above 
+ pretty-printing functions add. In that case you can use the following 
+ pretty-printing functions. But note that the output of these functions is 
+ not valid C<br>
+<pre><span class="keyword">val</span> <a name="VALd_plainexp"></a>d_plainexp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the internal representation of an expression<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_plaininit"></a>d_plaininit : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the internal representation of an integer<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_plainlval"></a>d_plainlval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the internal representation of an lvalue<br>
+</div>
+<br>
+Pretty-print the internal representation of an lvalue offset 
+val d_plainoffset: unit -&gt; offset -&gt; Pretty.doc<br>
+<pre><span class="keyword">val</span> <a name="VALd_plaintype"></a>d_plaintype : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the internal representation of a type<br>
+</div>
+<br>
+<b>ALPHA conversion</b> has been moved to the Alpha module.<br>
+<pre><span class="keyword">val</span> <a name="VALuniqueVarNames"></a>uniqueVarNames : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
+Assign unique names to local variables. This might be necessary after you 
+ transformed the code and added or renamed some new variables. Names are 
+ not used by CIL internally, but once you print the file out the compiler 
+ downstream might be confused. You might 
+ have added a new global that happens to have the same name as a local in 
+ some function. Rename the local to ensure that there would never be 
+ confusioin. Or, viceversa, you might have added a local with a name that 
+ conflicts with a global<br>
+</div>
+<br>
+<b>Optimization Passes</b><br>
+<pre><span class="keyword">val</span> <a name="VALpeepHole2"></a>peepHole2 : <code class="type">(<a href="Cil.html#TYPEinstr">instr</a> * <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list option) -> <a href="Cil.html#TYPEstmt">stmt</a> list -> unit</code></pre><div class="info">
+A peephole optimizer that processes two adjacent statements and possibly 
+    replaces them both. If some replacement happens, then the new statements 
+    are themselves subject to optimization<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpeepHole1"></a>peepHole1 : <code class="type">(<a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list option) -> <a href="Cil.html#TYPEstmt">stmt</a> list -> unit</code></pre><div class="info">
+Similar to <code class="code">peepHole2</code> except that the optimization window consists of 
+    one statement, not two<br>
+</div>
+<br>
+<b>Machine dependency</b><br>
+<pre><span class="keyword">exception</span> <a name="EXCEPTIONSizeOfError"></a>SizeOfError <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEtyp">typ</a></code></pre>
+<div class="info">
+Raised when one of the bitsSizeOf functions cannot compute the size of a 
+ type. This can happen because the type contains array-length expressions 
+ that we don't know how to compute or because it is a type whose size is 
+ not defined (e.g. TFun or an undefined compinfo). The string is an 
+ explanation of the error<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALbitsSizeOf"></a>bitsSizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> int</code></pre><div class="info">
+The size of a type, in bits. Trailing padding is added for structs and 
+ arrays. Raises <a href="Cil.html#EXCEPTIONSizeOfError"><code class="code">Cil.SizeOfError</code></a> when it cannot compute the size. This 
+ function is architecture dependent, so you should only call this after you 
+ call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>. Remember that on GCC sizeof(void) is 1!<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsizeOf"></a>sizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><pre><span class="keyword">val</span> <a name="VALalignOf_int"></a>alignOf_int : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> int</code></pre><div class="info">
+The minimum alignment (in bytes) for a type. This function is 
+ architecture dependent, so you should only call this after you call 
+ <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALbitsOffset"></a>bitsOffset : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> int * int</code></pre><div class="info">
+Give a type of a base and an offset, returns the number of bits from the 
+ base address and the width (also expressed in bits) for the subobject 
+ denoted by the offset. Raises <a href="Cil.html#EXCEPTIONSizeOfError"><code class="code">Cil.SizeOfError</code></a> when it cannot compute 
+ the size. This function is architecture dependent, so you should only call 
+ this after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALchar_is_unsigned"></a>char_is_unsigned : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether "char" is unsigned. Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlittle_endian"></a>little_endian : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether the machine is little endian. Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunderscore_name"></a>underscore_name : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether the compiler generates assembly labels by prepending "_" to the 
+    identifier. That is, will function foo() have the label "foo", or "_foo"?
+    Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlocUnknown"></a>locUnknown : <code class="type"><a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
+Represents a location that cannot be determined<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALget_instrLoc"></a>get_instrLoc : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
+Return the location of an instruction<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALget_globalLoc"></a>get_globalLoc : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
+Return the location of a global, or locUnknown<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALget_stmtLoc"></a>get_stmtLoc : <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
+Return the location of a statement, or locUnknown<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdExp"></a>dExp : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
+Generate an <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a> to be used in case of errors.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdInstr"></a>dInstr : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPEinstr">instr</a></code></pre><div class="info">
+Generate an <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> to be used in case of errors.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdGlobal"></a>dGlobal : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPEglobal">global</a></code></pre><div class="info">
+Generate a <a href="Cil.html#TYPEglobal"><code class="code">Cil.global</code></a> to be used in case of errors.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmapNoCopy"></a>mapNoCopy : <code class="type">('a -> 'a) -> 'a list -> 'a list</code></pre><div class="info">
+Like map but try not to make a copy of the list<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmapNoCopyList"></a>mapNoCopyList : <code class="type">('a -> 'a list) -> 'a list -> 'a list</code></pre><div class="info">
+Like map but each call can return a list. Try not to make a copy of the 
+    list<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstartsWith"></a>startsWith : <code class="type">string -> string -> bool</code></pre><div class="info">
+sm: return true if the first is a prefix of the second string<br>
+</div>
+<br>
+<b>An Interpreter for constructing CIL constructs</b><br>
+<br><code><span class="keyword">type</span> <a name="TYPEformatArg"></a><code class="type"></code>formatArg = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fe</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Feo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> option</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For array lengths</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fu</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fb</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fk</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEikind">ikind</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For arguments in a function call</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Ff</span> <span class="keyword">of</span> <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>)</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For a formal argument</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FF</span> <span class="keyword">of</span> <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For formal argument lists</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fva</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For the ellipsis in a function type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fv</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Flo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> option</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEoffset">offset</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fc</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fi</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FI</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Ft</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fd</span> <span class="keyword">of</span> <code class="type">int</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fg</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fs</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FA</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Fp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FP</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">FX</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
+
+</tr></table>
+
+<div class="info">
+The type of argument for the interpreter<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALd_formatarg"></a>d_formatarg : <code class="type">unit -> <a href="Cil.html#TYPEformatArg">formatArg</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-prints a format arg<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlowerConstants"></a>lowerConstants : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Do lower constant expressions into constants (default true)<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.nopCilVisitor.html b/cil/doc/api/Cil.nopCilVisitor.html
new file mode 100644
index 000000000..868e79d4b
--- /dev/null
+++ b/cil/doc/api/Cil.nopCilVisitor.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Cil.defaultCilPrinterClass.html">
+<link rel="Up" href="Cil.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.nopCilVisitor</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="Cil.html">Up</a>
+&nbsp;<a href="Cil.defaultCilPrinterClass.html">Next</a>
+</div>
+<center><h1>Class <a href="type_Cil.nopCilVisitor.html">Cil.nopCilVisitor</a></h1></center>
+<br>
+<pre><span class="keyword">class</span> <a name="TYPEnopCilVisitor"></a>nopCilVisitor : <code class="type"></code><code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a></code></pre>Default Visitor. Traverses the CIL tree without modifying anything<br>
+<hr width="100%">
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.plainCilPrinterClass.html b/cil/doc/api/Cil.plainCilPrinterClass.html
new file mode 100644
index 000000000..0d5fca584
--- /dev/null
+++ b/cil/doc/api/Cil.plainCilPrinterClass.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cil.defaultCilPrinterClass.html">
+<link rel="Up" href="Cil.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.plainCilPrinterClass</title>
+</head>
+<body>
+<div class="navbar"><a href="Cil.defaultCilPrinterClass.html">Previous</a>
+&nbsp;<a href="Cil.html">Up</a>
+&nbsp;</div>
+<center><h1>Class <a href="type_Cil.plainCilPrinterClass.html">Cil.plainCilPrinterClass</a></h1></center>
+<br>
+<pre><span class="keyword">class</span> <a name="TYPEplainCilPrinterClass"></a>plainCilPrinterClass : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre>These are pretty-printers that will show you more details on the internal 
+ CIL representation, without trying hard to make it look like C<br>
+<hr width="100%">
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cillower.html b/cil/doc/api/Cillower.html
new file mode 100644
index 000000000..d8fa8ddd3
--- /dev/null
+++ b/cil/doc/api/Cillower.html
@@ -0,0 +1,40 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Alpha.html">
+<link rel="next" href="Cfg.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cillower</title>
+</head>
+<body>
+<div class="navbar"><a href="Alpha.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Cfg.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Cillower.html">Cillower</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Cillower: <code class="code">sig</code> <a href="Cillower.html">..</a> <code class="code">end</code></pre>A number of lowering passes over CIL<br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALlowerEnumVisitor"></a>lowerEnumVisitor : <code class="type"><a href="Cil.cilVisitor.html">Cil.cilVisitor</a></code></pre><div class="info">
+Replace enumeration constants with integer constants<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Clist.html b/cil/doc/api/Clist.html
new file mode 100644
index 000000000..27f373e50
--- /dev/null
+++ b/cil/doc/api/Clist.html
@@ -0,0 +1,118 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Errormsg.html">
+<link rel="next" href="Stats.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Clist</title>
+</head>
+<body>
+<div class="navbar"><a href="Errormsg.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Stats.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Clist.html">Clist</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Clist: <code class="code">sig</code> <a href="Clist.html">..</a> <code class="code">end</code></pre>Utilities for managing "concatenable lists" (clists). We often need to
+    concatenate sequences, and using lists for this purpose is expensive. This
+    module provides routines to manage such lists more efficiently. In this
+    model, we never do cons or append explicitly. Instead we maintain
+    the elements of the list in a special data structure. Routines are provided
+    to convert to/from ordinary lists, and carry out common list operations.<br>
+<hr width="100%">
+<br><code><span class="keyword">type</span> <a name="TYPEclist"></a><code class="type">'a</code> clist = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CList</span> <span class="keyword">of</span> <code class="type">'a list</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The only representation for the empty 
+                                     list. Try to use sparingly.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CConsL</span> <span class="keyword">of</span> <code class="type">'a * 'a <a href="Clist.html#TYPEclist">clist</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not use this a lot because scanning 
+ it is not tail recursive</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CConsR</span> <span class="keyword">of</span> <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> * 'a</code></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">CSeq</span> <span class="keyword">of</span> <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> * 'a <a href="Clist.html#TYPEclist">clist</a></code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>We concatenate only two of them at this
+                                    time. Neither is the empty clist. To be
+                                    sure always use append to make these</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+The clist datatype. A clist can be an ordinary list, or a clist preceded 
+    or followed by an element, or two clists implicitly appended together<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALtoList"></a>toList : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a list</code></pre><div class="info">
+Convert a clist to an ordinary list<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfromList"></a>fromList : <code class="type">'a list -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+Convert an ordinary list to a clist<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsingle"></a>single : <code class="type">'a -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+Create a clist containing one element<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALempty"></a>empty : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+The empty clist<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALappend"></a>append : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+Append two clists<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcheckBeforeAppend"></a>checkBeforeAppend : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a> -> bool</code></pre><div class="info">
+A useful check to assert before an append. It checks that the two lists 
+ are not identically the same (Except if they are both empty)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlength"></a>length : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> int</code></pre><div class="info">
+Find the length of a clist<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmap"></a>map : <code class="type">('a -> 'b) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'b <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+Map a function over a clist. Returns another clist<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfold_left"></a>fold_left : <code class="type">('a -> 'b -> 'a) -> 'a -> 'b <a href="Clist.html#TYPEclist">clist</a> -> 'a</code></pre><div class="info">
+A version of fold_left that works on clists<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALiter"></a>iter : <code class="type">('a -> unit) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> unit</code></pre><div class="info">
+A version of iter that works on clists<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALrev"></a>rev : <code class="type">('a -> 'a) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
+Reverse a clist. The first function reverses an element.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdocCList"></a>docCList : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> ('a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a <a href="Clist.html#TYPEclist">clist</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+A document for printing a clist (similar to <code class="code">docList</code>)<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.BackwardsDataFlow.html b/cil/doc/api/Dataflow.BackwardsDataFlow.html
new file mode 100644
index 000000000..782d318c2
--- /dev/null
+++ b/cil/doc/api/Dataflow.BackwardsDataFlow.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Dataflow.ForwardsDataFlow.html">
+<link rel="Up" href="Dataflow.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsDataFlow</title>
+</head>
+<body>
+<div class="navbar"><a href="Dataflow.ForwardsDataFlow.html">Previous</a>
+&nbsp;<a href="Dataflow.html">Up</a>
+&nbsp;</div>
+<center><h1>Functor <a href="type_Dataflow.BackwardsDataFlow.html">Dataflow.BackwardsDataFlow</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> BackwardsDataFlow: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.BackwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><table border="0" cellpadding="3" width="100%">
+<tr>
+<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
+<td>
+<table class="paramstable">
+<tr>
+<td align="center" valign="top" width="15%">
+<code>T</code></td>
+<td align="center" valign="top">:</td>
+<td><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code>
+</table>
+</td>
+</tr>
+</table>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALcompute"></a>compute : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list -> unit</code></pre><div class="info">
+Fill in the T.stmtStartData, given a number of initial statements to 
+ start from (the sinks for the backwards data flow). All of the statements
+ (not just the initial ones!) must have some entry in T.stmtStartData 
+ (i.e., the initial data should not be bottom)<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.BackwardsTransfer.html b/cil/doc/api/Dataflow.BackwardsTransfer.html
new file mode 100644
index 000000000..0ff812dff
--- /dev/null
+++ b/cil/doc/api/Dataflow.BackwardsTransfer.html
@@ -0,0 +1,83 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Dataflow.ForwardsTransfer.html">
+<link rel="Up" href="Dataflow.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsTransfer</title>
+</head>
+<body>
+<div class="navbar"><a href="Dataflow.ForwardsTransfer.html">Previous</a>
+&nbsp;<a href="Dataflow.html">Up</a>
+&nbsp;</div>
+<center><h1>Module type <a href="type_Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a></h1></center>
+<br>
+<pre><span class="keyword">module type</span> BackwardsTransfer = <code class="code">sig</code> <a href="Dataflow.BackwardsTransfer.html">..</a> <code class="code">end</code></pre><hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALname"></a>name : <code class="type">string</code></pre><div class="info">
+For debugging purposes, the name of the analysis<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdebug"></a>debug : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether to turn on debugging<br>
+</div>
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
+<div class="info">
+The type of the data we compute for each block start. In many 
+ presentations of backwards data flow analysis we maintain the 
+ data at the block end. This is not easy to do with JVML because 
+ a block has many exceptional ends. So we maintain the data for 
+ the statement start.<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALpretty"></a>pretty : <code class="type">unit -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the state<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstmtStartData"></a>stmtStartData : <code class="type"><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> Inthash.t</code></pre><div class="info">
+For each block id, the data at the start. This data structure must be 
+ initialized with the initial data for each block<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcombineStmtStartData"></a>combineStmtStartData : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       old:<a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> option</code></pre><div class="info">
+When the analysis reaches the start of a block, combine the old data 
+ with the one we have just computed. Return None if the combination is 
+ the same as the old data, otherwise return the combination. In the 
+ latter case, the predecessors of the statement are put on the working 
+ list.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcombineSuccessors"></a>combineSuccessors : <code class="type"><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
+Take the data from two successors and combine it<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoStmt"></a>doStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
+The (backwards) transfer function for a branch. The <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is 
+ set before calling this. If it returns None, then we have some default 
+ handling. Otherwise, the returned data is the data before the branch 
+ (not considering the exception handlers)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoInstr"></a>doInstr : <code class="type"><a href="Cil.html#TYPEinstr">Cil.instr</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
+The (backwards) transfer function for an instruction. The 
+ <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is set before calling this. If it returns None, then we 
+ have some default handling. Otherwise, the returned data is the data 
+ before the branch (not considering the exception handlers)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfilterStmt"></a>filterStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
+Whether to put this predecessor block in the worklist. We give the 
+ predecessor and the block whose predecessor we are (and whose data has 
+ changed)<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.ForwardsDataFlow.html b/cil/doc/api/Dataflow.ForwardsDataFlow.html
new file mode 100644
index 000000000..760dc2bee
--- /dev/null
+++ b/cil/doc/api/Dataflow.ForwardsDataFlow.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Dataflow.BackwardsDataFlow.html">
+<link rel="Up" href="Dataflow.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsDataFlow</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="Dataflow.html">Up</a>
+&nbsp;<a href="Dataflow.BackwardsDataFlow.html">Next</a>
+</div>
+<center><h1>Functor <a href="type_Dataflow.ForwardsDataFlow.html">Dataflow.ForwardsDataFlow</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> ForwardsDataFlow: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.ForwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><table border="0" cellpadding="3" width="100%">
+<tr>
+<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
+<td>
+<table class="paramstable">
+<tr>
+<td align="center" valign="top" width="15%">
+<code>T</code></td>
+<td align="center" valign="top">:</td>
+<td><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code>
+</table>
+</td>
+</tr>
+</table>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALcompute"></a>compute : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list -> unit</code></pre><div class="info">
+Fill in the T.stmtStartData, given a number of initial statements to 
+ start from. All of the initial statements must have some entry in 
+ T.stmtStartData (i.e., the initial data should not be bottom)<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.ForwardsTransfer.html b/cil/doc/api/Dataflow.ForwardsTransfer.html
new file mode 100644
index 000000000..dbefaa036
--- /dev/null
+++ b/cil/doc/api/Dataflow.ForwardsTransfer.html
@@ -0,0 +1,88 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Dataflow.BackwardsTransfer.html">
+<link rel="Up" href="Dataflow.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsTransfer</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="Dataflow.html">Up</a>
+&nbsp;<a href="Dataflow.BackwardsTransfer.html">Next</a>
+</div>
+<center><h1>Module type <a href="type_Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a></h1></center>
+<br>
+<pre><span class="keyword">module type</span> ForwardsTransfer = <code class="code">sig</code> <a href="Dataflow.ForwardsTransfer.html">..</a> <code class="code">end</code></pre><hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALname"></a>name : <code class="type">string</code></pre><div class="info">
+For debugging purposes, the name of the analysis<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdebug"></a>debug : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Whether to turn on debugging<br>
+</div>
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
+<div class="info">
+The type of the data we compute for each block start. May be 
+ imperative.<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALcopy"></a>copy : <code class="type"><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
+Make a deep copy of the data<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstmtStartData"></a>stmtStartData : <code class="type"><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> Inthash.t</code></pre><div class="info">
+For each statement id, the data at the start. Not found in the hash 
+ table means nothing is known about the state at this point. At the end 
+ of the analysis this means that the block is not reachable.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpretty"></a>pretty : <code class="type">unit -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Pretty-print the state<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcomputeFirstPredecessor"></a>computeFirstPredecessor : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
+Give the first value for a predecessors, compute the value to be set 
+ for the block<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcombinePredecessors"></a>combinePredecessors : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       old:<a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> option</code></pre><div class="info">
+Take some old data for the start of a statement, and some new data for 
+ the same point. Return None if the combination is identical to the old 
+ data. Otherwise, compute the combination, and return it.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoInstr"></a>doInstr : <code class="type"><a href="Cil.html#TYPEinstr">Cil.instr</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
+The (forwards) transfer function for an instruction. The 
+ <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is set before calling this. The default action is to 
+ continue with the state unchanged.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoStmt"></a>doStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEstmtaction">Dataflow.stmtaction</a></code></pre><div class="info">
+The (forwards) transfer function for a statement. The <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> 
+ is set before calling this. The default action is to do the instructions
+ in this statement, if applicable, and continue with the successors.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdoGuard"></a>doGuard : <code class="type"><a href="Cil.html#TYPEexp">Cil.exp</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEguardaction">Dataflow.guardaction</a></code></pre><div class="info">
+Generate the successor to an If statement assuming the given expression
+ is nonzero.  Analyses that don't need guard information can return 
+ GDefault; this is equivalent to returning GUse of the input.
+ A return value of GUnreachable indicates that this half of the branch
+ will not be taken and should not be explored.  This will be called
+ twice per If, once for "then" and once for "else".<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfilterStmt"></a>filterStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
+Whether to put this statement in the worklist. This is called when a 
+ block would normally be put in the worklist.<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.html b/cil/doc/api/Dataflow.html
new file mode 100644
index 000000000..9f744ea0a
--- /dev/null
+++ b/cil/doc/api/Dataflow.html
@@ -0,0 +1,114 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cfg.html">
+<link rel="next" href="Dominators.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow</title>
+</head>
+<body>
+<div class="navbar"><a href="Cfg.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Dominators.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Dataflow.html">Dataflow</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Dataflow: <code class="code">sig</code> <a href="Dataflow.html">..</a> <code class="code">end</code></pre>A framework for data flow analysis for CIL code.  Before using 
+    this framework, you must initialize the Control-flow Graph for your
+    program, e.g using <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a><br>
+<hr width="100%">
+<br><code><span class="keyword">type</span> <a name="TYPEaction"></a><code class="type">'a</code> action = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Default</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Done</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not do the default action. Use this result</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">Post</span> <span class="keyword">of</span> <code class="type">('a -> 'a)</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action, followed by the given 
+ transformer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+
+<br><code><span class="keyword">type</span> <a name="TYPEstmtaction"></a><code class="type">'a</code> stmtaction = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SDefault</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SDone</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not visit this statement or its successors</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SUse</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Visit the instructions and successors of this statement
+                  as usual, but use the specified state instead of the 
+                  one that was passed to doStmt</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+
+<br><code><span class="keyword">type</span> <a name="TYPEguardaction"></a><code class="type">'a</code> guardaction = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GDefault</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default state</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GUse</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Use this data for the branch</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">GUnreachable</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The branch will never be taken.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+
+<pre><span class="keyword">module type</span> <a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a> = <code class="code">sig</code> <a href="Dataflow.ForwardsTransfer.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">module</span> <a href="Dataflow.ForwardsDataFlow.html">ForwardsDataFlow</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.ForwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><pre><span class="keyword">module type</span> <a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a> = <code class="code">sig</code> <a href="Dataflow.BackwardsTransfer.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">module</span> <a href="Dataflow.BackwardsDataFlow.html">BackwardsDataFlow</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.BackwardsDataFlow.html">..</a> <code class="code">end</code></div></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dominators.html b/cil/doc/api/Dominators.html
new file mode 100644
index 000000000..4d8eaf9e4
--- /dev/null
+++ b/cil/doc/api/Dominators.html
@@ -0,0 +1,58 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Dataflow.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dominators</title>
+</head>
+<body>
+<div class="navbar"><a href="Dataflow.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;</div>
+<center><h1>Module <a href="type_Dominators.html">Dominators</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Dominators: <code class="code">sig</code> <a href="Dominators.html">..</a> <code class="code">end</code></pre>Compute dominators using data flow analysis<br>
+<hr width="100%">
+<br>
+Author: George Necula   
+      5/28/2004 
+<br>
+<pre><span class="keyword">val</span> <a name="VALcomputeIDom"></a>computeIDom : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t</code></pre><div class="info">
+Invoke on a code after filling in the CFG info and it computes the 
+ immediate dominator information. We map each statement to its immediate 
+ dominator (None for the start statement, and for the unreachable 
+ statements).<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgetIdom"></a>getIdom : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option</code></pre><div class="info">
+This is like Inthash.find but gives an error if the information is 
+ Not_found<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdominates"></a>dominates : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
+Check whether one statement dominates another.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfindNaturalLoops"></a>findNaturalLoops : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> (<a href="Cil.html#TYPEstmt">Cil.stmt</a> * <a href="Cil.html#TYPEstmt">Cil.stmt</a> list) list</code></pre><div class="info">
+Compute the start of the natural loops. This assumes that the "idom" 
+ field has been computed. For each start, keep a list of origin of a back 
+ edge. The loop consists of the loop start and all predecessors of the 
+ origins of back edges, up to and including the loop start<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Errormsg.html b/cil/doc/api/Errormsg.html
new file mode 100644
index 000000000..bc194728c
--- /dev/null
+++ b/cil/doc/api/Errormsg.html
@@ -0,0 +1,141 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Pretty.html">
+<link rel="next" href="Clist.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Errormsg</title>
+</head>
+<body>
+<div class="navbar"><a href="Pretty.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Clist.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Errormsg.html">Errormsg</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Errormsg: <code class="code">sig</code> <a href="Errormsg.html">..</a> <code class="code">end</code></pre>Utility functions for error-reporting<br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALlogChannel"></a>logChannel : <code class="type">Pervasives.out_channel Pervasives.ref</code></pre><div class="info">
+A channel for printing log messages<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdebugFlag"></a>debugFlag : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+If set then print debugging info<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALverboseFlag"></a>verboseFlag : <code class="type">bool Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALwarnFlag"></a>warnFlag : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Set to true if you want to see all warnings.<br>
+</div>
+<pre><span class="keyword">exception</span> <a name="EXCEPTIONError"></a>Error</pre>
+<div class="info">
+Error reporting functions raise this exception<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALerror"></a>error : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Prints an error message of the form <code class="code">Error: ...</code>. 
+    Use in conjunction with s, for example: <code class="code">E.s (E.error ... )</code>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALbug"></a>bug : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Similar to <code class="code">error</code> except that its output has the form <code class="code">Bug: ...</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunimp"></a>unimp : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Similar to <code class="code">error</code> except that its output has the form <code class="code">Unimplemented: ...</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALs"></a>s : <code class="type">'a -> 'b</code></pre><div class="info">
+Stop the execution by raising an Error.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALhadErrors"></a>hadErrors : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+This is set whenever one of the above error functions are called. It must
+    be cleared manually<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarn"></a>warn : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> but does not raise the <a href="Errormsg.html#EXCEPTIONError"><code class="code">Errormsg.Error</code></a> 
+ exception. Return type is unit.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwarnOpt"></a>warnOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> but optional. Printed only if the 
+ <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlog"></a>log : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Print something to <code class="code">logChannel</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlogg"></a>logg : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+same as <a href="Errormsg.html#VALlog"><code class="code">Errormsg.log</code></a> but do not wrap lines<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnull"></a>null : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
+Do not actually print (i.e. print to /dev/null)<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpushContext"></a>pushContext : <code class="type">(unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit</code></pre><div class="info">
+Registers a context printing function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpopContext"></a>popContext : <code class="type">unit -> unit</code></pre><div class="info">
+Removes the last registered context printing function<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALshowContext"></a>showContext : <code class="type">unit -> unit</code></pre><div class="info">
+Show the context stack to stderr<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwithContext"></a>withContext : <code class="type">(unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
+To ensure that the context is registered and removed properly, use the 
+    function below<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnewline"></a>newline : <code class="type">unit -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALnewHline"></a>newHline : <code class="type">unit -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALgetPosition"></a>getPosition : <code class="type">unit -> int * string * int</code></pre><pre><span class="keyword">val</span> <a name="VALgetHPosition"></a>getHPosition : <code class="type">unit -> int * string</code></pre><div class="info">
+high-level position<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsetHLine"></a>setHLine : <code class="type">int -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetHFile"></a>setHFile : <code class="type">string -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetCurrentLine"></a>setCurrentLine : <code class="type">int -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetCurrentFile"></a>setCurrentFile : <code class="type">string -> unit</code></pre><br><code><span class="keyword">type</span> <a name="TYPElocation"></a><code class="type"></code>location = {</code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>file&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The file name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>line&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The line number</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>hfile&nbsp;: <code class="type">string</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The high-level file name, or "" if not present</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code>&nbsp;&nbsp;</code></td>
+<td align="left" valign="top" >
+<code>hline&nbsp;: <code class="type">int</code>;</code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The high-level line number, or 0 if not present</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+}
+
+<div class="info">
+Type for source-file locations<br>
+</div>
+
+<pre><span class="keyword">val</span> <a name="VALd_loc"></a>d_loc : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_hloc"></a>d_hloc : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALgetLocation"></a>getLocation : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a></code></pre><pre><span class="keyword">val</span> <a name="VALparse_error"></a>parse_error : <code class="type">string -> 'a</code></pre><pre><span class="keyword">val</span> <a name="VALlocUnknown"></a>locUnknown : <code class="type"><a href="Errormsg.html#TYPElocation">location</a></code></pre><div class="info">
+An unknown location for use when you need one but you don't have one<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALreadingFromStdin"></a>readingFromStdin : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+Records whether the stdin is open for reading the goal *<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALstartParsing"></a>startParsing : <code class="type">?useBasename:bool -> string -> Lexing.lexbuf</code></pre><pre><span class="keyword">val</span> <a name="VALstartParsingFromString"></a>startParsingFromString : <code class="type">?file:string -> ?line:int -> string -> Lexing.lexbuf</code></pre><pre><span class="keyword">val</span> <a name="VALfinishParsing"></a>finishParsing : <code class="type">unit -> unit</code></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Formatcil.html b/cil/doc/api/Formatcil.html
new file mode 100644
index 000000000..8dee76d77
--- /dev/null
+++ b/cil/doc/api/Formatcil.html
@@ -0,0 +1,84 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Cil.html">
+<link rel="next" href="Alpha.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Formatcil</title>
+</head>
+<body>
+<div class="navbar"><a href="Cil.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Alpha.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Formatcil.html">Formatcil</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Formatcil: <code class="code">sig</code> <a href="Formatcil.html">..</a> <code class="code">end</code></pre><b>An Interpreter for constructing CIL constructs</b><br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALcExp"></a>cExp : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEexp">Cil.exp</a></code></pre><div class="info">
+Constructs an expression based on the program and the list of arguments. 
+ Each argument consists of a name followed by the actual data. This 
+ argument will be placed instead of occurrences of "%v:name" in the pattern 
+ (where the "v" is dependent on the type of the data). The parsing of the 
+ string is memoized. * Only the first expression is parsed.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcLval"></a>cLval : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPElval">Cil.lval</a></code></pre><div class="info">
+Constructs an lval based on the program and the list of arguments. 
+ Only the first lvalue is parsed. 
+ The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcType"></a>cType : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEtyp">Cil.typ</a></code></pre><div class="info">
+Constructs a type based on the program and the list of arguments. 
+ Only the first type is parsed. 
+ The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcInstr"></a>cInstr : <code class="type">string -> <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEinstr">Cil.instr</a></code></pre><div class="info">
+Constructs an instruction based on the program and the list of arguments. 
+ Only the first instruction is parsed. 
+ The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcStmt"></a>cStmt : <code class="type">string -><br>       (string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEvarinfo">Cil.varinfo</a>) -><br>       <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEstmt">Cil.stmt</a></code></pre><pre><span class="keyword">val</span> <a name="VALcStmts"></a>cStmts : <code class="type">string -><br>       (string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEvarinfo">Cil.varinfo</a>) -><br>       <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> list</code></pre><div class="info">
+Constructs a list of statements<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdExp"></a>dExp : <code class="type">string -> <a href="Cil.html#TYPEexp">Cil.exp</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
+Deconstructs an expression based on the program. Produces an optional 
+ list of format arguments. The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdLval"></a>dLval : <code class="type">string -> <a href="Cil.html#TYPElval">Cil.lval</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
+Deconstructs an lval based on the program. Produces an optional 
+ list of format arguments. The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdType"></a>dType : <code class="type">string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
+Deconstructs a type based on the program. Produces an optional list of 
+ format arguments. The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdInstr"></a>dInstr : <code class="type">string -> <a href="Cil.html#TYPEinstr">Cil.instr</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
+Deconstructs an instruction based on the program. Produces an optional 
+ list of format arguments. The parsing of the string is memoized.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnoMemoize"></a>noMemoize : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+If set then will not memoize the parsed patterns<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtest"></a>test : <code class="type">unit -> unit</code></pre><div class="info">
+Just a testing function<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.MakeMapPrinter.html b/cil/doc/api/Pretty.MakeMapPrinter.html
new file mode 100644
index 000000000..9693a68d7
--- /dev/null
+++ b/cil/doc/api/Pretty.MakeMapPrinter.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Pretty.MakeSetPrinter.html">
+<link rel="Up" href="Pretty.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeMapPrinter</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="Pretty.html">Up</a>
+&nbsp;<a href="Pretty.MakeSetPrinter.html">Next</a>
+</div>
+<center><h1>Functor <a href="type_Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> MakeMapPrinter: <div class="sig_block"><code class="code">functor (</code><code class="code">Map</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEkey"></a><code class="type"></code>key </pre>
+
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type">'a</code> t </pre>
+
+<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(key -> 'a -> 'b -> 'b) -><br>       'a t -> 'b -> 'b</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeMapPrinter.html">..</a> <code class="code">end</code></div></pre>Format maps.<br>
+<table border="0" cellpadding="3" width="100%">
+<tr>
+<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
+<td>
+<table class="paramstable">
+<tr>
+<td align="center" valign="top" width="15%">
+<code>Map</code></td>
+<td align="center" valign="top">:</td>
+<td><code class="type">sig
+                  type key
+                  type 'a t
+                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
+                end</code>
+</table>
+</td>
+</tr>
+</table>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALdocMap"></a>docMap : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -><br>       (Map.key -> 'a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a Map.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Format a map, analogous to docList.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_map"></a>d_map : <code class="type">?dmaplet:(<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -><br>       string -><br>       (unit -> Map.key -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -><br>       (unit -> 'a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a Map.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Format a map, analogous to d_list.<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.MakeSetPrinter.html b/cil/doc/api/Pretty.MakeSetPrinter.html
new file mode 100644
index 000000000..e9343b2f1
--- /dev/null
+++ b/cil/doc/api/Pretty.MakeSetPrinter.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Pretty.MakeMapPrinter.html">
+<link rel="Up" href="Pretty.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeSetPrinter</title>
+</head>
+<body>
+<div class="navbar"><a href="Pretty.MakeMapPrinter.html">Previous</a>
+&nbsp;<a href="Pretty.html">Up</a>
+&nbsp;</div>
+<center><h1>Functor <a href="type_Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> MakeSetPrinter: <div class="sig_block"><code class="code">functor (</code><code class="code">Set</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEelt"></a><code class="type"></code>elt </pre>
+
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
+
+<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(elt -> 'a -> 'a) -><br>       t -> 'a -> 'a</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeSetPrinter.html">..</a> <code class="code">end</code></div></pre>Format sets.<br>
+<table border="0" cellpadding="3" width="100%">
+<tr>
+<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
+<td>
+<table class="paramstable">
+<tr>
+<td align="center" valign="top" width="15%">
+<code>Set</code></td>
+<td align="center" valign="top">:</td>
+<td><code class="type">sig 
+                  type elt
+                  type t
+                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
+                end</code>
+</table>
+</td>
+</tr>
+</table>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALdocSet"></a>docSet : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> (Set.elt -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> Set.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Format a set, analogous to docList.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_set"></a>d_set : <code class="type">string -> (unit -> Set.elt -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> Set.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
+Format a set, analogous to d_list.<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.html b/cil/doc/api/Pretty.html
new file mode 100644
index 000000000..c9c48c8ef
--- /dev/null
+++ b/cil/doc/api/Pretty.html
@@ -0,0 +1,268 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="next" href="Errormsg.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty</title>
+</head>
+<body>
+<div class="navbar">&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Errormsg.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Pretty.html">Pretty</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Pretty: <code class="code">sig</code> <a href="Pretty.html">..</a> <code class="code">end</code></pre>Utility functions for pretty-printing. The major features provided by 
+    this module are <ul>
+<li>An <code class="code">fprintf</code>-style interface with support for user-defined printers</li>
+<li>The printout is fit to a width by selecting some of the optional newlines</li>
+<li>Constructs for alignment and indentation</li>
+<li>Print ellipsis starting at a certain nesting depth</li>
+<li>Constructs for printing lists and arrays</li>
+</ul>
+
+ Pretty-printing occurs in two stages:<ul>
+<li>Construct a <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a> object that encodes all of the elements to be 
+  printed 
+  along with alignment specifiers and optional and mandatory newlines</li>
+<li>Format the <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a> to a certain width and emit it as a string, to an 
+  output stream or pass it to a user-defined function</li>
+</ul>
+
+ The formatting algorithm is not optimal but it does a pretty good job while 
+ still operating in linear time. The original version was based on a pretty 
+ printer by Philip Wadler which turned out to not scale to large jobs.<br>
+<hr width="100%">
+<br>
+API<br>
+<pre><span class="keyword">type</span> <a name="TYPEdoc"></a><code class="type"></code>doc </pre>
+<div class="info">
+The type of unformated documents. Elements of this type can be 
+ constructed in two ways. Either with a number of constructor shown below, 
+ or using the <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> function with a <code class="code">printf</code>-like interface. 
+ The <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> method is slightly slower so we do not use it for 
+ large jobs such as the output routines for a compiler. But we use it for 
+ small jobs such as logging and error messages.<br>
+</div>
+
+<br>
+Constructors for the doc type.<br>
+<pre><span class="keyword">val</span> <a name="VALnil"></a>nil : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Constructs an empty document<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VAL(++)"></a>(++) : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Concatenates two documents. This is an infix operator that associates to 
+    the left.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALconcat"></a>concat : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALtext"></a>text : <code class="type">string -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that prints the given string<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALnum"></a>num : <code class="type">int -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that prints an integer in decimal form<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALreal"></a>real : <code class="type">float -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that prints a real number<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALchr"></a>chr : <code class="type">char -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that prints a character. This is just like <a href="Pretty.html#VALtext"><code class="code">Pretty.text</code></a>
+    with a one-character string.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALline"></a>line : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that consists of a mandatory newline. This is just like <code class="code">(text
+    "\n")</code>. The new line will be indented to the current indentation level,
+    unless you use <a href="Pretty.html#VALleftflush"><code class="code">Pretty.leftflush</code></a> right after this.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALleftflush"></a>leftflush : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Use after a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a> to prevent the indentation. Whatever follows 
+ next will be flushed left. Indentation resumes on the next line.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALbreak"></a>break : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A document that consists of either a space or a line break. Also called
+    an optional line break. Such a break will be
+    taken only if necessary to fit the document in a given width. If the break
+    is not taken a space is printed instead.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALalign"></a>align : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Mark the current column as the current indentation level. Does not print
+    anything. All taken line breaks will align to this column. The previous
+    alignment level is saved on a stack.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunalign"></a>unalign : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Reverts to the last saved indentation level.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmark"></a>mark : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Mark the beginning of a markup section. The width of a markup section is 
+ considered 0 for the purpose of computing identation<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALunmark"></a>unmark : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+The end of a markup section<br>
+</div>
+<br>
+Syntactic sugar<br>
+<pre><span class="keyword">val</span> <a name="VALindent"></a>indent : <code class="type">int -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Indents the document. Same as <code class="code">((text "  ") ++ align ++ doc ++ unalign)</code>,
+    with the specified number of spaces.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALmarkup"></a>markup : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Prints a document as markup. The marked document cannot contain line 
+ breaks or alignment constructs.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALseq"></a>seq : <code class="type">sep:<a href="Pretty.html#TYPEdoc">doc</a> -> doit:('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> elements:'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Formats a sequence. <code class="code">sep</code> is a separator, <code class="code">doit</code> is a function that 
+ converts an element to a document.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdocList"></a>docList : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">doc</a> -> ('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+An alternative function for printing a list. The <code class="code">unit</code> argument is there 
+ to make this function more easily usable with the <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> 
+ interface. The first argument is a separator, by default a comma.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_list"></a>d_list : <code class="type">string -> (unit -> 'a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+sm: Yet another list printer.  This one accepts the same kind of
+ printing function that <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> does, and itself works 
+ in the dprintf context.  Also accepts
+ a string as the separator since that's by far the most common.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdocArray"></a>docArray : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">doc</a> -><br>       (int -> 'a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a array -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Formats an array. A separator and a function that prints an array
+    element. The default separator is a comma.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdocOpt"></a>docOpt : <code class="type">('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a option -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Prints an <code class="code">'a option</code> with <code class="code">None</code> or <code class="code">Some</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALd_int32"></a>d_int32 : <code class="type">int32 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+Print an int32<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALf_int32"></a>f_int32 : <code class="type">unit -> int32 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_int64"></a>d_int64 : <code class="type">int64 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALf_int64"></a>f_int64 : <code class="type">unit -> int64 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">module</span> <a href="Pretty.MakeMapPrinter.html">MakeMapPrinter</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">Map</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEkey"></a><code class="type"></code>key </pre>
+
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type">'a</code> t </pre>
+
+<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(key -> 'a -> 'b -> 'b) -><br>       'a t -> 'b -> 'b</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeMapPrinter.html">..</a> <code class="code">end</code></div></pre><div class="info">
+Format maps.
+</div>
+<pre><span class="keyword">module</span> <a href="Pretty.MakeSetPrinter.html">MakeSetPrinter</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">Set</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEelt"></a><code class="type"></code>elt </pre>
+
+<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
+
+<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(elt -> 'a -> 'a) -><br>       t -> 'a -> 'a</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeSetPrinter.html">..</a> <code class="code">end</code></div></pre><div class="info">
+Format sets.
+</div>
+<pre><span class="keyword">val</span> <a name="VALinsert"></a>insert : <code class="type">unit -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
+A function that is useful with the <code class="code">printf</code>-like interface<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdprintf"></a>dprintf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>, <a href="Pretty.html#TYPEdoc">doc</a>) format4 -> 'a</code></pre><div class="info">
+This function provides an alternative method for constructing 
+    <code class="code">doc</code> objects. The first argument for this function is a format string 
+    argument (of type <code class="code">('a, unit, doc) format</code>; if you insist on 
+    understanding what that means see the module <code class="code">Printf</code>). The format string 
+    is like that for the <code class="code">printf</code> function in C, except that it understands a 
+    few more formatting controls, all starting with the @ character. 
+<p>
+
+    See the gprintf function if you want to pipe the result of dprintf into 
+    some other functions.
+<p>
+
+ The following special formatting characters are understood (these do not 
+ correspond to arguments of the function):<ul>
+<li> @[ Inserts an <a href="Pretty.html#VALalign"><code class="code">Pretty.align</code></a>. Every format string must have matching 
+        <a href="Pretty.html#VALalign"><code class="code">Pretty.align</code></a> and <a href="Pretty.html#VALunalign"><code class="code">Pretty.unalign</code></a>. </li>
+<li> @] Inserts an <a href="Pretty.html#VALunalign"><code class="code">Pretty.unalign</code></a>.</li>
+<li> @!  Inserts a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a>. Just like "\n"</li>
+<li> @?  Inserts a <a href="Pretty.html#VALbreak"><code class="code">Pretty.break</code></a>.</li>
+<li> @&lt;  Inserts a <a href="Pretty.html#VALmark"><code class="code">Pretty.mark</code></a>. </li>
+<li> @&gt;  Inserts a <a href="Pretty.html#VALunmark"><code class="code">Pretty.unmark</code></a>.</li>
+<li> @^  Inserts a <a href="Pretty.html#VALleftflush"><code class="code">Pretty.leftflush</code></a>
+       Should be used immediately after @! or "\n".</li>
+<li> @@ : inserts a @ character</li>
+</ul>
+
+ In addition to the usual <code class="code">printf</code> % formatting characters the following two 
+ new characters are supported:<ul>
+<li>%t Corresponds to an argument of type <code class="code">unit -&gt; doc</code>. This argument is 
+     invoked to produce a document</li>
+<li>%a Corresponds to <b>two</b> arguments. The first of type <code class="code">unit -&gt; 'a -&gt; doc</code> 
+     and the second of type <code class="code">'a</code>. (The extra <code class="code">unit</code> is do to the 
+     peculiarities of the built-in support for format strings in Ocaml. It 
+     turns out that it is not a major problem.) Here is an example of how 
+     you use this:</li>
+</ul>
+
+<pre>dprintf "Name=%s, SSN=%7d, Children=@[%a@]\n"
+             pers.name pers.ssn (docList (chr ',' ++ break) text)
+             pers.children</pre>
+<p>
+
+ The result of <code class="code">dprintf</code> is a <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>. You can format the document and 
+ emit it using the functions <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a> and <a href="Pretty.html#VALsprint"><code class="code">Pretty.sprint</code></a>.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALgprintf"></a>gprintf : <code class="type">(<a href="Pretty.html#TYPEdoc">doc</a> -> 'a) -> ('b, unit, <a href="Pretty.html#TYPEdoc">doc</a>, 'a) format4 -> 'b</code></pre><div class="info">
+Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> but more general. It also takes a function that is 
+ invoked on the constructed document but before any formatting is done. The 
+ type of the format argument means that 'a is the type of the parameters of 
+ this function, unit is the type of the first argument to %a and %t 
+ formats, doc is the type of the intermediate result, and 'b is the type of 
+ the result of gprintf.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfprint"></a>fprint : <code class="type">Pervasives.out_channel -> width:int -> <a href="Pretty.html#TYPEdoc">doc</a> -> unit</code></pre><div class="info">
+Format the document to the given width and emit it to the given channel<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsprint"></a>sprint : <code class="type">width:int -> <a href="Pretty.html#TYPEdoc">doc</a> -> string</code></pre><div class="info">
+Format the document to the given width and emit it as a string<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfprintf"></a>fprintf : <code class="type">Pervasives.out_channel -> ('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> followed by <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintf"></a>printf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stdout</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALeprintf"></a>eprintf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
+Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stderr</code><br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALwithPrintDepth"></a>withPrintDepth : <code class="type">int -> (unit -> unit) -> unit</code></pre><div class="info">
+Invokes a thunk, with printDepth temporarily set to the specified value<br>
+</div>
+<br>
+The following variables can be used to control the operation of the printer<br>
+<pre><span class="keyword">val</span> <a name="VALprintDepth"></a>printDepth : <code class="type">int Pervasives.ref</code></pre><div class="info">
+Specifies the nesting depth of the <code class="code">align</code>/<code class="code">unalign</code> pairs at which 
+    everything is replaced with ellipsis<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprintIndent"></a>printIndent : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+If false then does not indent<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfastMode"></a>fastMode : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+If set to <code class="code">true</code> then optional breaks are taken only when the document 
+    has exceeded the given width. This means that the printout will looked 
+    more ragged but it will be faster<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALflushOften"></a>flushOften : <code class="type">bool Pervasives.ref</code></pre><div class="info">
+If true the it flushes after every print<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALcountNewLines"></a>countNewLines : <code class="type">int Pervasives.ref</code></pre><div class="info">
+Keep a running count of the taken newlines. You can read and write this 
+ from the client code if you want<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALauto_printer"></a>auto_printer : <code class="type">string -> 'a</code></pre><div class="info">
+A function that when used at top-level in a module will direct 
+ the pa_prtype module generate automatically the printing functions for a 
+ type<br>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Stats.html b/cil/doc/api/Stats.html
new file mode 100644
index 000000000..b3f8aa422
--- /dev/null
+++ b/cil/doc/api/Stats.html
@@ -0,0 +1,69 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link rel="previous" href="Clist.html">
+<link rel="next" href="Cil.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Stats</title>
+</head>
+<body>
+<div class="navbar"><a href="Clist.html">Previous</a>
+&nbsp;<a href="index.html">Up</a>
+&nbsp;<a href="Cil.html">Next</a>
+</div>
+<center><h1>Module <a href="type_Stats.html">Stats</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Stats: <code class="code">sig</code> <a href="Stats.html">..</a> <code class="code">end</code></pre>Utilities for maintaining timing statistics<br>
+<hr width="100%">
+<pre><span class="keyword">val</span> <a name="VALreset"></a>reset : <code class="type">bool -> unit</code></pre><div class="info">
+Resets all the timings. Invoke with "true" if you want to switch to using 
+ the hardware performance counters from now on. You get an exception if 
+ there are not performance counters available<br>
+</div>
+<pre><span class="keyword">exception</span> <a name="EXCEPTIONNoPerfCount"></a>NoPerfCount</pre>
+<pre><span class="keyword">val</span> <a name="VALhas_performance_counters"></a>has_performance_counters : <code class="type">unit -> bool</code></pre><div class="info">
+Check if we have performance counters<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsample_pentium_perfcount_20"></a>sample_pentium_perfcount_20 : <code class="type">unit -> int</code></pre><div class="info">
+Sample the current cycle count, in megacycles.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsample_pentium_perfcount_10"></a>sample_pentium_perfcount_10 : <code class="type">unit -> int</code></pre><div class="info">
+Sample the current cycle count, in kilocycles.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtime"></a>time : <code class="type">string -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
+Time a function and associate the time with the given string. If some
+    timing information is already associated with that string, then accumulate
+    the times. If this function is invoked within another timed function then
+    you can have a hierarchy of timings<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALrepeattime"></a>repeattime : <code class="type">float -> string -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
+repeattime is like time but runs the function several times until the total
+    running time is greater or equal to the first argument. The total time is
+    then divided by the number of times the function was run.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALprint"></a>print : <code class="type">Pervasives.out_channel -> string -> unit</code></pre><div class="info">
+Print the current stats preceeded by a message<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALlastTime"></a>lastTime : <code class="type">float Pervasives.ref</code></pre><div class="info">
+Time a function and set lastTime to the time it took<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALtimethis"></a>timethis : <code class="type">('a -> 'b) -> 'a -> 'b</code></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/index.html b/cil/doc/api/index.html
new file mode 100644
index 000000000..f9636b27f
--- /dev/null
+++ b/cil/doc/api/index.html
@@ -0,0 +1,83 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5)</title>
+</head>
+<body>
+<center><h1>CIL API Documentation (version 1.3.5)</h1></center>
+<a href="index_types.html">Index of types</a><br>
+<a href="index_exceptions.html">Index of exceptions</a><br>
+<a href="index_values.html">Index of values</a><br>
+<a href="index_methods.html">Index of class methods</a><br>
+<a href="index_classes.html">Index of classes</a><br>
+<a href="index_class_types.html">Index of class types</a><br>
+<a href="index_modules.html">Index of modules</a><br>
+<a href="index_module_types.html">Index of module types</a><br>
+<br/><br>
+<table class="indextable">
+<tr><td><a href="Pretty.html">Pretty</a></td><td><div class="info">
+Utility functions for pretty-printing.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html">Errormsg</a></td><td><div class="info">
+Utility functions for error-reporting
+</div>
+</td></tr>
+<tr><td><a href="Clist.html">Clist</a></td><td><div class="info">
+Utilities for managing "concatenable lists" (clists).
+</div>
+</td></tr>
+<tr><td><a href="Stats.html">Stats</a></td><td><div class="info">
+Utilities for maintaining timing statistics
+</div>
+</td></tr>
+<tr><td><a href="Cil.html">Cil</a></td><td><div class="info">
+CIL API Documentation.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html">Formatcil</a></td><td><div class="info">
+<b>An Interpreter for constructing CIL constructs</b>
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html">Alpha</a></td><td><div class="info">
+<b>ALPHA conversion</b>
+</div>
+</td></tr>
+<tr><td><a href="Cillower.html">Cillower</a></td><td><div class="info">
+A number of lowering passes over CIL
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html">Cfg</a></td><td><div class="info">
+Code to compute the control-flow graph of a function or file.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.html">Dataflow</a></td><td><div class="info">
+A framework for data flow analysis for CIL code.
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html">Dominators</a></td><td><div class="info">
+Compute dominators using data flow analysis
+</div>
+</td></tr>
+</table>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_attributes.html b/cil/doc/api/index_attributes.html
new file mode 100644
index 000000000..347bfa92a
--- /dev/null
+++ b/cil/doc/api/index_attributes.html
@@ -0,0 +1,30 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class attributes</title>
+</head>
+<body>
+<center><h1>Index of class attributes</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_class_types.html b/cil/doc/api/index_class_types.html
new file mode 100644
index 000000000..4c7faefef
--- /dev/null
+++ b/cil/doc/api/index_class_types.html
@@ -0,0 +1,41 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class types</title>
+</head>
+<body>
+<center><h1>Index of class types</h1></center>
+<table>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Cil.cilPrinter.html">cilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A printer interface for CIL trees.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html">cilVisitor</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A visitor interface for traversing CIL trees.
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_classes.html b/cil/doc/api/index_classes.html
new file mode 100644
index 000000000..1a5ba7d40
--- /dev/null
+++ b/cil/doc/api/index_classes.html
@@ -0,0 +1,46 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of classes</title>
+</head>
+<body>
+<center><h1>Index of classes</h1></center>
+<table>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Cil.defaultCilPrinterClass.html">defaultCilPrinterClass</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>N</td></tr>
+<tr><td><a href="Cil.nopCilVisitor.html">nopCilVisitor</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Default Visitor.
+</div>
+</td></tr>
+<tr><td align="left"><br>P</td></tr>
+<tr><td><a href="Cil.plainCilPrinterClass.html">plainCilPrinterClass</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+These are pretty-printers that will show you more details on the internal 
+ CIL representation, without trying hard to make it look like C
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_exceptions.html b/cil/doc/api/index_exceptions.html
new file mode 100644
index 000000000..e774a65a4
--- /dev/null
+++ b/cil/doc/api/index_exceptions.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of exceptions</title>
+</head>
+<body>
+<center><h1>Index of exceptions</h1></center>
+<table>
+<tr><td align="left"><br>E</td></tr>
+<tr><td><a href="Errormsg.html#EXCEPTIONError">Error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Error reporting functions raise this exception
+</div>
+</td></tr>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Cil.html#EXCEPTIONLenOfArray">LenOfArray</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Raised when <a href="Cil.html#VALlenOfArray"><code class="code">Cil.lenOfArray</code></a> fails either because the length is <code class="code">None</code> 
+ or because it is a non-constant expression
+</div>
+</td></tr>
+<tr><td align="left"><br>N</td></tr>
+<tr><td><a href="Stats.html#EXCEPTIONNoPerfCount">NoPerfCount</a> [<a href="Stats.html">Stats</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>S</td></tr>
+<tr><td><a href="Cil.html#EXCEPTIONSizeOfError">SizeOfError</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Raised when one of the bitsSizeOf functions cannot compute the size of a 
+ type.
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_methods.html b/cil/doc/api/index_methods.html
new file mode 100644
index 000000000..1558de3ef
--- /dev/null
+++ b/cil/doc/api/index_methods.html
@@ -0,0 +1,228 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class methods</title>
+</head>
+<body>
+<center><h1>Index of class methods</h1></center>
+<table>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODdBlock">dBlock</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Dump a control-flow block to a file with a given indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODdGlobal">dGlobal</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Dump a global to a file with a given indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODdInit">dInit</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Dump a global to a file with a given indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODdStmt">dStmt</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Dump a control-flow statement to a file with a given indentation.
+</div>
+</td></tr>
+<tr><td align="left"><br>P</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpAttr">pAttr</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Attribute.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpAttrParam">pAttrParam</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Attribute parameter
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpAttrs">pAttrs</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Attribute lists
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpBlock">pBlock</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpExp">pExp</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Print expressions
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpFieldDecl">pFieldDecl</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+A field declaration
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpGlobal">pGlobal</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Global (vars, types, etc.).
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpInit">pInit</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Print initializers.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpInstr">pInstr</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Invoked on each instruction occurrence.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpLabel">pLabel</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Print a label.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpLineDirective">pLineDirective</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Print a line-number.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpLval">pLval</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Invoked on each lvalue occurrence
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpOffset">pOffset</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Invoked on each offset occurrence.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpStmt">pStmt</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Control-flow statement.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpStmtKind">pStmtKind</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Print a statement kind.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpType">pType</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpVDecl">pVDecl</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Invoked for each variable declaration.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilPrinter.html#METHODpVar">pVar</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
+<td><div class="info">
+Invoked on each variable use.
+</div>
+</td></tr>
+<tr><td align="left"><br>Q</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODqueueInstr">queueInstr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Add here instructions while visiting to queue them to preceede the 
+ current statement or instruction being processed.
+</div>
+</td></tr>
+<tr><td align="left"><br>U</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODunqueueInstr">unqueueInstr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Gets the queue of instructions and resets the queue.
+</div>
+</td></tr>
+<tr><td align="left"><br>V</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvattr">vattr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Attribute.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvattrparam">vattrparam</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Attribute parameters.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvblock">vblock</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Block.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvexpr">vexpr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each expression occurrence.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvfunc">vfunc</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Function definition.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvglob">vglob</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Global (vars, types,
+                                                      etc.)
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvinit">vinit</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Initializers for globals
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvinitoffs">vinitoffs</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each offset appearing in the list of a 
+ CompoundInit initializer.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvinst">vinst</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each instruction occurrence.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvlval">vlval</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each lvalue occurrence
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvoffs">voffs</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each offset occurrence that is *not* as part
+ of an initializer list specification, i.e.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvstmt">vstmt</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Control-flow statement.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvtype">vtype</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Use of some type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvvdec">vvdec</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked for each variable declaration.
+</div>
+</td></tr>
+<tr><td><a href="Cil.cilVisitor.html#METHODvvrbl">vvrbl</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
+<td><div class="info">
+Invoked on each variable use.
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_module_types.html b/cil/doc/api/index_module_types.html
new file mode 100644
index 000000000..244d40277
--- /dev/null
+++ b/cil/doc/api/index_module_types.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of module types</title>
+</head>
+<body>
+<center><h1>Index of module types</h1></center>
+<table>
+<tr><td align="left"><br>B</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>F</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_modules.html b/cil/doc/api/index_modules.html
new file mode 100644
index 000000000..090693f57
--- /dev/null
+++ b/cil/doc/api/index_modules.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of modules</title>
+</head>
+<body>
+<center><h1>Index of modules</h1></center>
+<table>
+<tr><td align="left"><br>A</td></tr>
+<tr><td><a href="Alpha.html">Alpha</a> </td>
+<td><div class="info">
+<b>ALPHA conversion</b>
+</div>
+</td></tr>
+<tr><td align="left"><br>B</td></tr>
+<tr><td><a href="Dataflow.BackwardsDataFlow.html">BackwardsDataFlow</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Cfg.html">Cfg</a> </td>
+<td><div class="info">
+Code to compute the control-flow graph of a function or file.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html">Cil</a> </td>
+<td><div class="info">
+CIL API Documentation.
+</div>
+</td></tr>
+<tr><td><a href="Cillower.html">Cillower</a> </td>
+<td><div class="info">
+A number of lowering passes over CIL
+</div>
+</td></tr>
+<tr><td><a href="Clist.html">Clist</a> </td>
+<td><div class="info">
+Utilities for managing "concatenable lists" (clists).
+</div>
+</td></tr>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Dataflow.html">Dataflow</a> </td>
+<td><div class="info">
+A framework for data flow analysis for CIL code.
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html">Dominators</a> </td>
+<td><div class="info">
+Compute dominators using data flow analysis
+</div>
+</td></tr>
+<tr><td align="left"><br>E</td></tr>
+<tr><td><a href="Errormsg.html">Errormsg</a> </td>
+<td><div class="info">
+Utility functions for error-reporting
+</div>
+</td></tr>
+<tr><td align="left"><br>F</td></tr>
+<tr><td><a href="Formatcil.html">Formatcil</a> </td>
+<td><div class="info">
+<b>An Interpreter for constructing CIL constructs</b>
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsDataFlow.html">ForwardsDataFlow</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>M</td></tr>
+<tr><td><a href="Pretty.MakeMapPrinter.html">MakeMapPrinter</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Format maps.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.MakeSetPrinter.html">MakeSetPrinter</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Format sets.
+</div>
+</td></tr>
+<tr><td align="left"><br>P</td></tr>
+<tr><td><a href="Pretty.html">Pretty</a> </td>
+<td><div class="info">
+Utility functions for pretty-printing.
+</div>
+</td></tr>
+<tr><td align="left"><br>S</td></tr>
+<tr><td><a href="Stats.html">Stats</a> </td>
+<td><div class="info">
+Utilities for maintaining timing statistics
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_types.html b/cil/doc/api/index_types.html
new file mode 100644
index 000000000..1974acd6a
--- /dev/null
+++ b/cil/doc/api/index_types.html
@@ -0,0 +1,271 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of types</title>
+</head>
+<body>
+<center><h1>Index of types</h1></center>
+<table>
+<tr><td align="left"><br>A</td></tr>
+<tr><td><a href="Dataflow.html#TYPEaction">action</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td><a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+This is the type of the elements of the alpha renaming table.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEattribute">attribute</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#TYPEattributeClass">attributeClass</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Various classes of attributes
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEattributes">attributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Attributes are lists sorted by the attribute name.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEattrparam">attrparam</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The type of parameters of attributes
+</div>
+</td></tr>
+<tr><td align="left"><br>B</td></tr>
+<tr><td><a href="Cil.html#TYPEbinop">binop</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Binary operations
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEblock">block</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A block is a sequence of statements with the control falling through from 
+    one element to the next
+</div>
+</td></tr>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Clist.html#TYPEclist">clist</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+The clist datatype.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEcomment">comment</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#TYPEcompinfo">compinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The definition of a structure or union type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEconstant">constant</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Literal constants
+</div>
+</td></tr>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Pretty.html#TYPEdoc">doc</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+The type of unformated documents.
+</div>
+</td></tr>
+<tr><td align="left"><br>E</td></tr>
+<tr><td><a href="Cil.html#TYPEenuminfo">enuminfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Information about an enumeration
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEexistsAction">existsAction</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A datatype to be used in conjunction with <code class="code">existsType</code>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEexp">exp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Expressions (Side-effect free)
+</div>
+</td></tr>
+<tr><td align="left"><br>F</td></tr>
+<tr><td><a href="Cil.html#TYPEfeatureDescr">featureDescr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+To be able to add/remove features easily, each feature should be package 
+ as an interface with the following interface.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Information about a struct/union field
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEfile">file</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Top-level representation of a C source file
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEfkind">fkind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Various kinds of floating-point numbers
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEformatArg">formatArg</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The type of argument for the interpreter
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEfundec">fundec</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Function definitions.
+</div>
+</td></tr>
+<tr><td align="left"><br>G</td></tr>
+<tr><td><a href="Cil.html#TYPEglobal">global</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A global declaration or definition
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.html#TYPEguardaction">guardaction</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>I</td></tr>
+<tr><td><a href="Cil.html#TYPEikind">ikind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Various kinds of integers
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEinit">init</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Initializers for global variables.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEinitinfo">initinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+We want to be able to update an initializer in a global variable, so we 
+ define it as a mutable field
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEinstr">instr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Instructions.
+</div>
+</td></tr>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Cil.html#TYPElabel">label</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Labels
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPElhost">lhost</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The host part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPElineDirectiveStyle">lineDirectiveStyle</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Styles of printing line directives
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPElocation">location</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Describes a location in a source file.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#TYPElocation">location</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Type for source-file locations
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPElval">lval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+An lvalue
+</div>
+</td></tr>
+<tr><td align="left"><br>O</td></tr>
+<tr><td><a href="Cil.html#TYPEoffset">offset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The offset part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.
+</div>
+</td></tr>
+<tr><td align="left"><br>S</td></tr>
+<tr><td><a href="Cil.html#TYPEstmt">stmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Statements.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.html#TYPEstmtaction">stmtaction</a> [<a href="Dataflow.html">Dataflow</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#TYPEstmtkind">stmtkind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The various kinds of control-flow statements statements
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEstorage">storage</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Storage-class information
+</div>
+</td></tr>
+<tr><td align="left"><br>T</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+The type of the data we compute for each block start.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+The type of the data we compute for each block start.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEtyp">typ</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#TYPEtypeinfo">typeinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Information about a defined type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEtypsig">typsig</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Type signatures.
+</div>
+</td></tr>
+<tr><td align="left"><br>U</td></tr>
+<tr><td><a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+This is the type of the elements that are recorded by the alpha 
+ conversion functions in order to be able to undo changes to the tables 
+ they modify.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEunop">unop</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Unary operators
+</div>
+</td></tr>
+<tr><td align="left"><br>V</td></tr>
+<tr><td><a href="Cil.html#TYPEvarinfo">varinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Information about a variable.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#TYPEvisitAction">visitAction</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Different visiting actions.
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_values.html b/cil/doc/api/index_values.html
new file mode 100644
index 000000000..799daafde
--- /dev/null
+++ b/cil/doc/api/index_values.html
@@ -0,0 +1,1964 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of values</title>
+</head>
+<body>
+<center><h1>Index of values</h1></center>
+<table>
+<tr><td align="left"><br></td></tr>
+<tr><td><a href="Pretty.html#VAL(++)">(++)</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Concatenates two documents.
+</div>
+</td></tr>
+<tr><td align="left"><br>A</td></tr>
+<tr><td><a href="Cil.html#VALaddAttribute">addAttribute</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Add an attribute.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALaddAttributes">addAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Add a list of attributes.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALaddOffset">addOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+<code class="code">addOffset o1 o2</code> adds <code class="code">o1</code> to the end of <code class="code">o2</code>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALaddOffsetLval">addOffsetLval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Add an offset at the end of an lvalue.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALadditiveLevel">additiveLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALaddrOfLevel">addrOfLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALalign">align</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Mark the current column as the current indentation level.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALalignOf_int">alignOf_int</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The minimum alignment (in bytes) for a type.
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALappend">append</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Append two clists
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALargsToList">argsToList</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Obtain the argument list ([] if None)
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALarrowLevel">arrowLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALattributeHash">attributeHash</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+This table contains the mapping of predefined attributes to classes.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALauto_printer">auto_printer</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A function that when used at top-level in a module will direct 
+ the pa_prtype module generate automatically the printing functions for a 
+ type
+</div>
+</td></tr>
+<tr><td align="left"><br>B</td></tr>
+<tr><td><a href="Cil.html#VALbitsOffset">bitsOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Give a type of a base and an offset, returns the number of bits from the 
+ base address and the width (also expressed in bits) for the subobject 
+ denoted by the offset.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALbitsSizeOf">bitsSizeOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The size of a type, in bits.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALbitwiseLevel">bitwiseLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALbreak">break</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that consists of either a space or a line break.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALbug">bug</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALbug"><code class="code">Errormsg.bug</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALbug">bug</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Similar to <code class="code">error</code> except that its output has the form <code class="code">Bug: ...</code>
+</div>
+</td></tr>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Formatcil.html#VALcExp">cExp</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Constructs an expression based on the program and the list of arguments.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALcInstr">cInstr</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Constructs an instruction based on the program and the list of arguments.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALcLval">cLval</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Constructs an lval based on the program and the list of arguments.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALcStmt">cStmt</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Formatcil.html#VALcStmts">cStmts</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Constructs a list of statements
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALcType">cType</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Constructs a type based on the program and the list of arguments.
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALcfgFun">cfgFun</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+Compute a control flow graph for fd.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcharConstPtrType">charConstPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+char const *
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcharConstToInt">charConstToInt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Given the character c in a (CChr c), sign-extend it to 32 bits.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcharPtrType">charPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+char *
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcharType">charType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+char
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALchar_is_unsigned">char_is_unsigned</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether "char" is unsigned.
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALcheckBeforeAppend">checkBeforeAppend</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+A useful check to assert before an append.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALchr">chr</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that prints a character.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcilVersion">cilVersion</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+This are the CIL version numbers.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcilVersionMajor">cilVersionMajor</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALcilVersionMinor">cilVersionMinor</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALcilVersionRevision">cilVersionRevision</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cfg.html#VALclearCFGinfo">clearCFGinfo</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+clear the sid, succs, and preds fields of each statment in a function
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALclearFileCFG">clearFileCFG</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+clear the sid, succs, and preds fields of each statement.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcombinePredecessors">combinePredecessors</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Take some old data for the start of a statement, and some new data for 
+ the same point.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALcombineStmtStartData">combineStmtStartData</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+When the analysis reaches the start of a block, combine the old data 
+ with the one we have just computed.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALcombineSuccessors">combineSuccessors</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+Take the data from two successors and combine it
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcompFullName">compFullName</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Get the full name of a comp
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcompactStmts">compactStmts</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Try to compress statements so as to get maximal basic blocks
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcomparativeLevel">comparativeLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALcompareLoc">compareLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Comparison function for locations.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsDataFlow.html#VALcompute">compute</a> [<a href="Dataflow.BackwardsDataFlow.html">Dataflow.BackwardsDataFlow</a>]</td>
+<td><div class="info">
+Fill in the T.stmtStartData, given a number of initial statements to 
+ start from (the sinks for the backwards data flow).
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsDataFlow.html#VALcompute">compute</a> [<a href="Dataflow.ForwardsDataFlow.html">Dataflow.ForwardsDataFlow</a>]</td>
+<td><div class="info">
+Fill in the T.stmtStartData, given a number of initial statements to 
+ start from.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcomputeCFGInfo">computeCFGInfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Compute the CFG information for all statements in a fundec and return a 
+ list of the statements.
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALcomputeFileCFG">computeFileCFG</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+Compute the CFG for an entire file, by calling cfgFun on each function.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcomputeFirstPredecessor">computeFirstPredecessor</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Give the first value for a predecessors, compute the value to be set 
+ for the block
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html#VALcomputeIDom">computeIDom</a> [<a href="Dominators.html">Dominators</a>]</td>
+<td><div class="info">
+Invoke on a code after filling in the CFG info and it computes the 
+ immediate dominator information.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALconcat">concat</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALconstFold">constFold</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Do constant folding on an expression.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALconstFoldBinOp">constFoldBinOp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Do constant folding on a binary operation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALconstFoldVisitor">constFoldVisitor</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A visitor that does constant folding.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcopy">copy</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Make a deep copy of the data
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcopyCompInfo">copyCompInfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Makes a shallow copy of a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> changing the name and the key.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcopyFunction">copyFunction</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Create a deep copy of a function.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcopyVarinfo">copyVarinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a shallow copy of a <code class="code">varinfo</code> and assign a new identifier
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALcountNewLines">countNewLines</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Keep a running count of the taken newlines.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcurrentGlobal">currentGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A reference to the current global being visited
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALcurrentLoc">currentLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A reference to the current location.
+</div>
+</td></tr>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Formatcil.html#VALdExp">dExp</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Deconstructs an expression based on the program.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdExp">dExp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Generate an <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a> to be used in case of errors.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdGlobal">dGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Generate a <a href="Cil.html#TYPEglobal"><code class="code">Cil.global</code></a> to be used in case of errors.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALdInstr">dInstr</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Deconstructs an instruction based on the program.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdInstr">dInstr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Generate an <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> to be used in case of errors.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALdLval">dLval</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Deconstructs an lval based on the program.
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALdType">dType</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Deconstructs a type based on the program.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_attr">d_attr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_attrlist">d_attrlist</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a list of attributes using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_attrparam">d_attrparam</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an argument of an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_binop">d_binop</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a binary operator
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_block">d_block</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a block using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_const">d_const</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a constant
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_exp">d_exp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an expression using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_fkind">d_fkind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a floating-point kind
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_formatarg">d_formatarg</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-prints a format arg
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_global">d_global</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the internal representation of a global using 
+ <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALd_hloc">d_hloc</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALd_ikind">d_ikind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an integer of a given kind
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_init">d_init</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an initializer using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_instr">d_instr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an instruction using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALd_int32">d_int32</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Print an int32
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALd_int64">d_int64</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALd_label">d_label</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a label using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALd_list">d_list</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+sm: Yet another list printer.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_loc">d_loc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a location
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALd_loc">d_loc</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALd_lval">d_lval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an lvalue using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Pretty.MakeMapPrinter.html#VALd_map">d_map</a> [<a href="Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a>]</td>
+<td><div class="info">
+Format a map, analogous to d_list.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_offset">d_offset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an offset using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>, given the pretty 
+ printing for the base.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_plainexp">d_plainexp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the internal representation of an expression
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_plaininit">d_plaininit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the internal representation of an integer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_plainlval">d_plainlval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the internal representation of an lvalue
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_plaintype">d_plaintype</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the internal representation of a type
+</div>
+</td></tr>
+<tr><td><a href="Pretty.MakeSetPrinter.html#VALd_set">d_set</a> [<a href="Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a>]</td>
+<td><div class="info">
+Format a set, analogous to d_list.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_shortglobal">d_shortglobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a short description of the global.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_stmt">d_stmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a statement using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_storage">d_storage</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print storage-class information
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_thisloc">d_thisloc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_type">d_type</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a type using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_typsig">d_typsig</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a type signature
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALd_unop">d_unop</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a unary operator
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdebug">debug</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+Whether to turn on debugging
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdebug">debug</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Whether to turn on debugging
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALdebugFlag">debugFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+If set then print debugging info
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdefaultCilPrinter">defaultCilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALderefStarLevel">derefStarLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_attr">dn_attr</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_attrlist">dn_attrlist</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_attrparam">dn_attrparam</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_exp">dn_exp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Versions of the above pretty printers, that don't print #line directives
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdn_global">dn_global</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_init">dn_init</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_instr">dn_instr</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_lval">dn_lval</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_stmt">dn_stmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALdn_type">dn_type</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoGuard">doGuard</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Generate the successor to an If statement assuming the given expression
+ is nonzero.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdoInstr">doInstr</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+The (backwards) transfer function for an instruction.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoInstr">doInstr</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+The (forwards) transfer function for an instruction.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdoStmt">doStmt</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+The (backwards) transfer function for a branch.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoStmt">doStmt</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+The (forwards) transfer function for a statement.
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html#VALdocAlphaTable">docAlphaTable</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+Split the name in preparation for newAlphaName.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALdocArray">docArray</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Formats an array.
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALdocCList">docCList</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+A document for printing a clist (similar to <code class="code">docList</code>)
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALdocList">docList</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+An alternative function for printing a list.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.MakeMapPrinter.html#VALdocMap">docMap</a> [<a href="Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a>]</td>
+<td><div class="info">
+Format a map, analogous to docList.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALdocOpt">docOpt</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Prints an <code class="code">'a option</code> with <code class="code">None</code> or <code class="code">Some</code>
+</div>
+</td></tr>
+<tr><td><a href="Pretty.MakeSetPrinter.html#VALdocSet">docSet</a> [<a href="Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a>]</td>
+<td><div class="info">
+Format a set, analogous to docList.
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html#VALdominates">dominates</a> [<a href="Dominators.html">Dominators</a>]</td>
+<td><div class="info">
+Check whether one statement dominates another.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdoubleType">doubleType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+double
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALdprintf">dprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+This function provides an alternative method for constructing 
+    <code class="code">doc</code> objects.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdropAttribute">dropAttribute</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Remove all attributes with the given name.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdropAttributes">dropAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Remove all attributes with names appearing in the string list.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdummyFile">dummyFile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A dummy file
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdummyFunDec">dummyFunDec</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A dummy function declaration handy when you need one as a placeholder.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdummyInstr">dummyInstr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A instr to serve as a placeholder
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdummyStmt">dummyStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A statement consisting of just <code class="code">dummyInstr</code>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdumpBlock">dumpBlock</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Dump a block to a file using a given indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdumpFile">dumpFile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print an entire file.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdumpGlobal">dumpGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Pretty-print a global.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdumpInit">dumpInit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Dump an initializer to a file using a given indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALdumpStmt">dumpStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Dump a statement to a file using a given indentation.
+</div>
+</td></tr>
+<tr><td align="left"><br>E</td></tr>
+<tr><td><a href="Clist.html#VALempty">empty</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+The empty clist
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALemptyFunction">emptyFunction</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make an empty function
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALeprintf">eprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stderr</code>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALerror">error</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALerror">error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Prints an error message of the form <code class="code">Error: ...</code>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALerrorLoc">errorLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Cil.html#VALerror"><code class="code">Cil.error</code></a> except that it explicitly takes a location argument, 
+ instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALexistsType">existsType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Scans a type by applying the function on all elements.
+</div>
+</td></tr>
+<tr><td align="left"><br>F</td></tr>
+<tr><td><a href="Pretty.html#VALf_int32">f_int32</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALf_int64">f_int64</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALfastMode">fastMode</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+If set to <code class="code">true</code> then optional breaks are taken only when the document 
+    has exceeded the given width.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALfilterAttributes">filterAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Retains attributes with the given name
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALfilterStmt">filterStmt</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+Whether to put this predecessor block in the worklist.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALfilterStmt">filterStmt</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Whether to put this statement in the worklist.
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html#VALfindNaturalLoops">findNaturalLoops</a> [<a href="Dominators.html">Dominators</a>]</td>
+<td><div class="info">
+Compute the start of the natural loops.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALfinishParsing">finishParsing</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALflushOften">flushOften</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+If true the it flushes after every print
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALfoldGlobals">foldGlobals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Fold over all globals, including the global initializer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALfoldLeftCompound">foldLeftCompound</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Fold over the list of initializers in a Compound.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALfoldLeftCompoundAll">foldLeftCompoundAll</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Fold over the list of initializers in a Compound, like 
+ <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> but in the case of an array it scans even missing 
+ zero initializers at the end of the array
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALfold_left">fold_left</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+A version of fold_left that works on clists
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALforgcc">forgcc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Return the string 's' if we're printing output for gcc, suppres
+  it if we're printing for CIL to parse back in.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALfprint">fprint</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Format the document to the given width and emit it to the given channel
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALfprintf">fprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> followed by <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALfromList">fromList</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Convert an ordinary list to a clist
+</div>
+</td></tr>
+<tr><td align="left"><br>G</td></tr>
+<tr><td><a href="Cil.html#VALgccBuiltins">gccBuiltins</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A list of the GCC built-in functions.
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html#VALgetAlphaPrefix">getAlphaPrefix</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALgetCompField">getCompField</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Return a named fieldinfo in compinfo, or raise Not_found
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALgetGlobInit">getGlobInit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Get the global initializer and create one if it does not already exist.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALgetHPosition">getHPosition</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+high-level position
+</div>
+</td></tr>
+<tr><td><a href="Dominators.html#VALgetIdom">getIdom</a> [<a href="Dominators.html">Dominators</a>]</td>
+<td><div class="info">
+This is like Inthash.find but gives an error if the information is 
+ Not_found
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALgetLocation">getLocation</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALgetParenthLevel">getParenthLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Parentheses level.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALgetPosition">getPosition</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALget_globalLoc">get_globalLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Return the location of a global, or locUnknown
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALget_instrLoc">get_instrLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Return the location of an instruction
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALget_stmtLoc">get_stmtLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Return the location of a statement, or locUnknown
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALgprintf">gprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> but more general.
+</div>
+</td></tr>
+<tr><td align="left"><br>H</td></tr>
+<tr><td><a href="Errormsg.html#VALhadErrors">hadErrors</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+This is set whenever one of the above error functions are called.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALhasAttribute">hasAttribute</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the named attribute appears in the attribute list.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALhas_performance_counters">has_performance_counters</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Check if we have performance counters
+</div>
+</td></tr>
+<tr><td align="left"><br>I</td></tr>
+<tr><td><a href="Cil.html#VALincrem">increm</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Increment an expression.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALindent">indent</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Indents the document.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALindexLevel">indexLevel</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALinitCIL">initCIL</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Call this function to perform some initialization.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALinsert">insert</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A function that is useful with the <code class="code">printf</code>-like interface
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALinsertImplicitCasts">insertImplicitCasts</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Do insert implicit casts (default true)
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALintPtrType">intPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+int *
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALintType">intType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+int
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALinteger">integer</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct an integer of kind IInt.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALinvalidStmt">invalidStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+An empty statement.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisArithmeticType">isArithmeticType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the argument is an arithmetic type (i.e.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisArrayType">isArrayType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the argument is an array type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisCompleteType">isCompleteType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Returns true if this is a complete type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisConstant">isConstant</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the expression is a compile-time constant
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisFunctionType">isFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the argument is a function type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisInteger">isInteger</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the given expression is a (possibly cast'ed) 
+    character or an integer constant
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisIntegralType">isIntegralType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the argument is an integral type (i.e.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisPointerType">isPointerType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the argument is a pointer type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisSigned">isSigned</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Returns true if and only if the given integer type is signed.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALisVoidPtrType">isVoidPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALisVoidType">isVoidType</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALisZero">isZero</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+True if the given expression is a (possibly cast'ed) integer or character 
+    constant with value zero
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALiter">iter</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+A version of iter that works on clists
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALiterGlobals">iterGlobals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Iterate over all globals, including the global initializer
+</div>
+</td></tr>
+<tr><td align="left"><br>K</td></tr>
+<tr><td><a href="Cil.html#VALkinteger">kinteger</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct an integer of a given kind.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALkinteger64">kinteger64</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct an integer of a given kind, using OCaml's int64 type.
+</div>
+</td></tr>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Stats.html#VALlastTime">lastTime</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Time a function and set lastTime to the time it took
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALleftflush">leftflush</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Use after a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a> to prevent the indentation.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlenOfArray">lenOfArray</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Call to compute the array length as present in the array type, to an 
+ integer.
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALlength">length</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Find the length of a clist
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALline">line</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that consists of a mandatory newline.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlineDirectiveStyle">lineDirectiveStyle</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+How to print line directives
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlineLength">lineLength</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+The length used when wrapping output lines.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlittle_endian">little_endian</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether the machine is little endian.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALloadBinaryFile">loadBinaryFile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Read a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form from the filesystem.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlocUnknown">locUnknown</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Represents a location that cannot be determined
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALlocUnknown">locUnknown</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+An unknown location for use when you need one but you don't have one
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALlog">log</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Print something to <code class="code">logChannel</code>
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALlogChannel">logChannel</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+A channel for printing log messages
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALlogg">logg</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+same as <a href="Errormsg.html#VALlog"><code class="code">Errormsg.log</code></a> but do not wrap lines
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlongType">longType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+long
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALlowerConstants">lowerConstants</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Do lower constants (default true)
+</div>
+</td></tr>
+<tr><td><a href="Cillower.html#VALlowerEnumVisitor">lowerEnumVisitor</a> [<a href="Cillower.html">Cillower</a>]</td>
+<td><div class="info">
+Replace enumeration constants with integer constants
+</div>
+</td></tr>
+<tr><td align="left"><br>M</td></tr>
+<tr><td><a href="Cil.html#VALmakeFormalVar">makeFormalVar</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a formal variable for a function.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmakeGlobalVar">makeGlobalVar</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a global variable.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmakeLocalVar">makeLocalVar</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a local variable and add it to a function's slocals (only if insert = 
+    true, which is the default).
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmakeTempVar">makeTempVar</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a temporary variable and add it to a function's slocals.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmakeVarinfo">makeVarinfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a varinfo.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmakeZeroInit">makeZeroInit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a initializer for zero-ing a data type
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALmap">map</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Map a function over a clist.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmapGlobals">mapGlobals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Map over all globals, including the global initializer and change things 
+    in place
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmapNoCopy">mapNoCopy</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like map but try not to make a copy of the list
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmapNoCopyList">mapNoCopyList</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like map but each call can return a list.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALmark">mark</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Mark the beginning of a markup section.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALmarkup">markup</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Prints a document as markup.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmissingFieldName">missingFieldName</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+This is a constant used as the name of an unnamed bitfield.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkAddrOf">mkAddrOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make an AddrOf.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkAddrOrStartOf">mkAddrOrStartOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like mkAddrOf except if the type of lval is an array then it uses 
+    StartOf.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkBlock">mkBlock</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct a block with no attributes, given a list of statements
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkCast">mkCast</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Cil.html#VALmkCastT"><code class="code">Cil.mkCastT</code></a> but uses typeOf to get <code class="code">oldt</code>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkCastT">mkCastT</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct a cast when having the old type of the expression.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkCompInfo">mkCompInfo</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Creates a a (potentially recursive) composite type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkEmptyStmt">mkEmptyStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Returns an empty statement (of kind <code class="code">Instr</code>)
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkFor">mkFor</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a for loop for(start; guard; next) { ...
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkForIncr">mkForIncr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a for loop for(i=start; i&lt;past; i += incr) { ...
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkMem">mkMem</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a Mem, while optimizing AddrOf.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkStmt">mkStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct a statement, given its kind.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkStmtOneInstr">mkStmtOneInstr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Construct a statement consisting of just one instruction
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkString">mkString</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make an expression that is a string constant (of pointer type)
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmkWhile">mkWhile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Make a while loop.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmone">mone</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+-1
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmsvcBuiltins">msvcBuiltins</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A list of the MSVC built-in functions.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALmsvcMode">msvcMode</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether the pretty printer should print output for the MS VC compiler.
+</div>
+</td></tr>
+<tr><td align="left"><br>N</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALname">name</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+For debugging purposes, the name of the analysis
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALname">name</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+For debugging purposes, the name of the analysis
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html#VALnewAlphaName">newAlphaName</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+Create a new name based on a given name.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALnewHline">newHline</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALnewVID">newVID</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Generate a new variable ID.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALnew_sid">new_sid</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALnewline">newline</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALnil">nil</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Constructs an empty document
+</div>
+</td></tr>
+<tr><td><a href="Formatcil.html#VALnoMemoize">noMemoize</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+If set then will not memoize the parsed patterns
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALnodeList">nodeList</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+All of the nodes in a file.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALnull">null</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Do not actually print (i.e.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALnum">num</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that prints an integer in decimal form
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALnumNodes">numNodes</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+number of nodes in the CFG
+</div>
+</td></tr>
+<tr><td align="left"><br>O</td></tr>
+<tr><td><a href="Cil.html#VALone">one</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+1
+</div>
+</td></tr>
+<tr><td align="left"><br>P</td></tr>
+<tr><td><a href="Cil.html#VALparseInt">parseInt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Convert a string representing a C integer literal to an expression.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALparse_error">parse_error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALpartitionAttributes">partitionAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Partition the attributes into classes:name attributes, function type, 
+    and type attributes
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALpeepHole1">peepHole1</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Similar to <code class="code">peepHole2</code> except that the optimization window consists of 
+    one statement, not two
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALpeepHole2">peepHole2</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A peephole optimizer that processes two adjacent statements and possibly 
+    replaces them both.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALplainCilPrinter">plainCilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALpopContext">popContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Removes the last registered context printing function
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprepareCFG">prepareCFG</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Prepare a function for CFG information computation by
+ <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALpretty">pretty</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+Pretty-print the state
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALpretty">pretty</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+Pretty-print the state
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALprint">print</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Print the current stats preceeded by a message
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintAttr">printAttr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print an attribute given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintAttrs">printAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a set of attributes given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintBlock">printBlock</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a block given a pretty printer.
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALprintCfgChannel">printCfgChannel</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+print control flow graph (in dot form) for fundec to channel
+</div>
+</td></tr>
+<tr><td><a href="Cfg.html#VALprintCfgFilename">printCfgFilename</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+Print control flow graph (in dot form) for fundec to file
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintCilAsIs">printCilAsIs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether to print the CIL as they are, without trying to be smart and 
+ print nicer code.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALprintDepth">printDepth</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Specifies the nesting depth of the <code class="code">align</code>/<code class="code">unalign</code> pairs at which 
+    everything is replaced with ellipsis
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintExp">printExp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print an expression given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintGlobal">printGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a global given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALprintIndent">printIndent</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+If false then does not indent
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintInit">printInit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print an initializer given a pretty printer.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintInstr">printInstr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print an instruction given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintLval">printLval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print an lvalue given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintStmt">printStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a statement given a pretty printer.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprintType">printType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Print a type given a pretty printer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprint_CIL_Input">print_CIL_Input</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether we print something that will only be used as input to our own 
+ parser.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALprinterForMaincil">printerForMaincil</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALprintf">printf</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stdout</code>
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALpushContext">pushContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Registers a context printing function
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALpushGlobal">pushGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+CIL keeps the types at the beginning of the file and the variables at the 
+ end of the file.
+</div>
+</td></tr>
+<tr><td align="left"><br>R</td></tr>
+<tr><td><a href="Errormsg.html#VALreadingFromStdin">readingFromStdin</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Records whether the stdin is open for reading the goal *
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALreal">real</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that prints a real number
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html#VALregisterAlphaName">registerAlphaName</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+Register a name with an alpha conversion table to ensure that when later 
+ we call newAlphaName we do not end up generating this one
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALremoveOffset">removeOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Remove ONE offset from the end of an offset sequence.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALremoveOffsetLval">removeOffsetLval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Remove ONE offset from the end of an lvalue.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALrepeattime">repeattime</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+repeattime is like time but runs the function several times until the total
+    running time is greater or equal to the first argument.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALreset">reset</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Resets all the timings.
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALrev">rev</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Reverse a clist.
+</div>
+</td></tr>
+<tr><td align="left"><br>S</td></tr>
+<tr><td><a href="Errormsg.html#VALs">s</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Stop the execution by raising an Error.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALsample_pentium_perfcount_10">sample_pentium_perfcount_10</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Sample the current cycle count, in kilocycles.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALsample_pentium_perfcount_20">sample_pentium_perfcount_20</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Sample the current cycle count, in megacycles.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsaveBinaryFile">saveBinaryFile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsaveBinaryFileChannel">saveBinaryFileChannel</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALseparateStorageModifiers">separateStorageModifiers</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Separate out the storage-modifier name attributes
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALseq">seq</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Formats a sequence.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALsetCurrentFile">setCurrentFile</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALsetCurrentLine">setCurrentLine</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALsetFormals">setFormals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Update the formals of a <code class="code">fundec</code> and make sure that the function type 
+    has the same information.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsetFunctionType">setFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Set the types of arguments and results as given by the function type 
+ passed as the second argument.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsetFunctionTypeMakeFormals">setFunctionTypeMakeFormals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Set the type of the function and make formal arguments for them
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALsetHFile">setHFile</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALsetHLine">setHLine</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALsetMaxId">setMaxId</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Update the smaxid after you have populated with locals and formals 
+ (unless you constructed those using <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or 
+ <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsetTypeAttrs">setTypeAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALsetTypeSigAttrs">setTypeSigAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Replace the attributes of a signature (only at top level)
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALshowContext">showContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Show the context stack to stderr
+</div>
+</td></tr>
+<tr><td><a href="Clist.html#VALsingle">single</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Create a clist containing one element
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsizeOf">sizeOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALsplitFunctionType">splitFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Given a function type split it into return type, 
+ arguments, is_vararg and attributes.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALsplitFunctionTypeVI">splitFunctionTypeVI</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Pretty.html#VALsprint">sprint</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Format the document to the given width and emit it as a string
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALstartParsing">startParsing</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALstartParsingFromString">startParsingFromString</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cfg.html#VALstart_id">start_id</a> [<a href="Cfg.html">Cfg</a>]</td>
+<td><div class="info">
+Next statement id that will be assigned.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALstartsWith">startsWith</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+sm: return true if the first is a prefix of the second string
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.BackwardsTransfer.html#VALstmtStartData">stmtStartData</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
+<td><div class="info">
+For each block id, the data at the start.
+</div>
+</td></tr>
+<tr><td><a href="Dataflow.ForwardsTransfer.html#VALstmtStartData">stmtStartData</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
+<td><div class="info">
+For each statement id, the data at the start.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALstripCasts">stripCasts</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Removes casts from this expression, but ignores casts within
+  other expression constructs.
+</div>
+</td></tr>
+<tr><td align="left"><br>T</td></tr>
+<tr><td><a href="Formatcil.html#VALtest">test</a> [<a href="Formatcil.html">Formatcil</a>]</td>
+<td><div class="info">
+Just a testing function
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALtext">text</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+A document that prints the given string
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALtime">time</a> [<a href="Stats.html">Stats</a>]</td>
+<td><div class="info">
+Time a function and associate the time with the given string.
+</div>
+</td></tr>
+<tr><td><a href="Stats.html#VALtimethis">timethis</a> [<a href="Stats.html">Stats</a>]</td>
+<td></td></tr>
+<tr><td><a href="Clist.html#VALtoList">toList</a> [<a href="Clist.html">Clist</a>]</td>
+<td><div class="info">
+Convert a clist to an ordinary list
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeAddAttributes">typeAddAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Add some attributes to a type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeAttrs">typeAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Returns all the attributes contained in a type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeOf">typeOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Compute the type of an expression
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeOfLval">typeOfLval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Compute the type of an lvalue
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeOfSizeOf">typeOfSizeOf</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALtypeOffset">typeOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Compute the type of an offset from a base type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeRemoveAttributes">typeRemoveAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Remove all attributes with the given names from a type.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeSig">typeSig</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Compute a type signature
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeSigAttrs">typeSigAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Get the top-level attributes of a signature
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALtypeSigWithAttrs">typeSigWithAttrs</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> but customize the incorporation of attributes.
+</div>
+</td></tr>
+<tr><td align="left"><br>U</td></tr>
+<tr><td><a href="Cil.html#VALuintPtrType">uintPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+unsigned int *
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALuintType">uintType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+unsigned int
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALulongType">ulongType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+unsigned long
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALunalign">unalign</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Reverts to the last saved indentation level.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALunderscore_name">underscore_name</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether the compiler generates assembly labels by prepending "_" to the 
+    identifier.
+</div>
+</td></tr>
+<tr><td><a href="Alpha.html#VALundoAlphaChanges">undoAlphaChanges</a> [<a href="Alpha.html">Alpha</a>]</td>
+<td><div class="info">
+Undo the changes to a table
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALunimp">unimp</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALunimp"><code class="code">Errormsg.unimp</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>is also printed
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALunimp">unimp</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Similar to <code class="code">error</code> except that its output has the form <code class="code">Unimplemented: ...</code>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALuniqueVarNames">uniqueVarNames</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Assign unique names to local variables.
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALunmark">unmark</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+The end of a markup section
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALunrollType">unrollType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Unroll a type until it exposes a non 
+ <code class="code">TNamed</code>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALunrollTypeDeep">unrollTypeDeep</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Unroll all the TNamed in a type (even under type constructors such as 
+ <code class="code">TPtr</code>, <code class="code">TFun</code> or <code class="code">TArray</code>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALupointType">upointType</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALuseLogicalOperators">useLogicalOperators</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Whether to use the logical operands LAnd and LOr.
+</div>
+</td></tr>
+<tr><td align="left"><br>V</td></tr>
+<tr><td><a href="Cil.html#VALvar">var</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Makes an lvalue out of a given variable
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALverboseFlag">verboseFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALvisitCilAttributes">visitCilAttributes</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a list of attributes
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilBlock">visitCilBlock</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a block
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilExpr">visitCilExpr</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Cil.html#VALvisitCilFile">visitCilFile</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a file.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilFileSameGlobals">visitCilFileSameGlobals</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+A visitor for the whole file that does not change the globals (but maybe
+ changes things inside the globals).
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilFunction">visitCilFunction</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a function definition
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilGlobal">visitCilGlobal</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a global
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilInit">visitCilInit</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit an initializer
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilInitOffset">visitCilInitOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit an initializer offset
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilInstr">visitCilInstr</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit an instruction
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilLval">visitCilLval</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit an lvalue
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilOffset">visitCilOffset</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit an lvalue or recursive offset
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilStmt">visitCilStmt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a statement
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilType">visitCilType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a type
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvisitCilVarDecl">visitCilVarDecl</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Visit a variable declaration
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvoidPtrType">voidPtrType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+void *
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALvoidType">voidType</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+void
+</div>
+</td></tr>
+<tr><td align="left"><br>W</td></tr>
+<tr><td><a href="Cil.html#VALwarn">warn</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALwarn">warn</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> but does not raise the <a href="Errormsg.html#EXCEPTIONError"><code class="code">Errormsg.Error</code></a> 
+ exception.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwarnContext">warnContext</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context 
+    is also printed
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwarnContextOpt">warnContextOpt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context is also 
+ printed.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALwarnFlag">warnFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Set to true if you want to see all warnings.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwarnLoc">warnLoc</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Cil.html#VALwarn"><code class="code">Cil.warn</code></a> except that it explicitly takes a location argument, 
+ instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwarnOpt">warnOpt</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALwarnOpt"><code class="code">Errormsg.warnOpt</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed.
+</div>
+</td></tr>
+<tr><td><a href="Errormsg.html#VALwarnOpt">warnOpt</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> but optional.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwcharKind">wcharKind</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+wchar_t (depends on architecture) and is set when you call 
+ <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.
+</div>
+</td></tr>
+<tr><td><a href="Cil.html#VALwcharType">wcharType</a> [<a href="Cil.html">Cil</a>]</td>
+<td></td></tr>
+<tr><td><a href="Errormsg.html#VALwithContext">withContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
+<td><div class="info">
+To ensure that the context is registered and removed properly, use the 
+    function below
+</div>
+</td></tr>
+<tr><td><a href="Pretty.html#VALwithPrintDepth">withPrintDepth</a> [<a href="Pretty.html">Pretty</a>]</td>
+<td><div class="info">
+Invokes a thunk, with printDepth temporarily set to the specified value
+</div>
+</td></tr>
+<tr><td align="left"><br>Z</td></tr>
+<tr><td><a href="Cil.html#VALzero">zero</a> [<a href="Cil.html">Cil</a>]</td>
+<td><div class="info">
+0
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/cil/doc/api/style.css b/cil/doc/api/style.css
new file mode 100644
index 000000000..11ed40ce5
--- /dev/null
+++ b/cil/doc/api/style.css
@@ -0,0 +1,32 @@
+a:visited {color : #416DFF; text-decoration : none; }
+a:link {color : #416DFF; text-decoration : none;}
+a:hover {color : Red; text-decoration : none; background-color: #5FFF88}
+a:active {color : Red; text-decoration : underline; }
+.keyword { font-weight : bold ; color : Red }
+.keywordsign { color : #C04600 }
+.superscript { font-size : 4 }
+.subscript { font-size : 4 }
+.comment { color : Green }
+.constructor { color : Blue }
+.type { color : #5C6585 }
+.string { color : Maroon }
+.warning { color : Red ; font-weight : bold }
+.info { margin-left : 3em; margin-right : 3em }
+.code { color : #465F91 ; }
+h1 { font-size : 20pt ; text-align: center; }
+h2 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90BDFF ;padding: 2px; }
+h3 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90DDFF ;padding: 2px; }
+h4 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90EDFF ;padding: 2px; }
+h5 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90FDFF ;padding: 2px; }
+h6 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #C0FFFF ; padding: 2px; }
+div.h7 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #E0FFFF ; padding: 2px; }
+div.h8 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #F0FFFF ; padding: 2px; }
+div.h9 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #FFFFFF ; padding: 2px; }
+.typetable { border-style : hidden }
+.indextable { border-style : hidden }
+.paramstable { border-style : hidden ; padding: 5pt 5pt}
+body { background-color : White }
+tr { background-color : White }
+td.typefieldcomment { background-color : #FFFFFF }
+pre { margin-bottom: 4px }
+div.sig_block {margin-left: 2em}
\ No newline at end of file
diff --git a/cil/doc/api/type_Alpha.html b/cil/doc/api/type_Alpha.html
new file mode 100644
index 000000000..b97c835fc
--- /dev/null
+++ b/cil/doc/api/type_Alpha.html
@@ -0,0 +1,43 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Alpha</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;undoAlphaElement<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;alphaTableData<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newAlphaName&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;data:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;*&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;registerAlphaName&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;data:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docAlphaTable&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getAlphaPrefix&nbsp;:&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;undoAlphaChanges&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cfg.html b/cil/doc/api/type_Cfg.html
new file mode 100644
index 000000000..996d7739a
--- /dev/null
+++ b/cil/doc/api/type_Cfg.html
@@ -0,0 +1,35 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cfg</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFileCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;clearFileCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cfgFun&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;clearCFGinfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCfgChannel&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCfgFilename&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;start_id&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nodeList&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;numNodes&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.cilPrinter.html b/cil/doc/api/type_Cil.cilPrinter.html
new file mode 100644
index 000000000..ff117f5d0
--- /dev/null
+++ b/cil/doc/api/type_Cil.cilPrinter.html
@@ -0,0 +1,48 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilPrinter</title>
+</head>
+<body>
+<code class="code"><span class="keyword">object</span><br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dBlock&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dInit&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dStmt&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;*&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrParam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrs&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pBlock&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pExp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pFieldDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pGlobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLabel&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLineDirective&nbsp;:&nbsp;?forcefile:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pOffset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmtKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pType&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.cilVisitor.html b/cil/doc/api/type_Cil.cilVisitor.html
new file mode 100644
index 000000000..efe3d138d
--- /dev/null
+++ b/cil/doc/api/type_Cil.cilVisitor.html
@@ -0,0 +1,43 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilVisitor</title>
+</head>
+<body>
+<code class="code"><span class="keyword">object</span><br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;queueInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;unqueueInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattrparam&nbsp;:&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vblock&nbsp;:&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vexpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vfunc&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vglob&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinitoffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinst&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vlval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;voffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vstmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvdec&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvrbl&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.defaultCilPrinterClass.html b/cil/doc/api/type_Cil.defaultCilPrinterClass.html
new file mode 100644
index 000000000..75a36eb77
--- /dev/null
+++ b/cil/doc/api/type_Cil.defaultCilPrinterClass.html
@@ -0,0 +1,25 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.defaultCilPrinterClass</title>
+</head>
+<body>
+<code class="code"><span class="constructor">Cil</span>.cilPrinter</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.html b/cil/doc/api/type_Cil.html
new file mode 100644
index 000000000..da6f9e967
--- /dev/null
+++ b/cil/doc/api/type_Cil.html
@@ -0,0 +1,622 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;initCIL&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersion&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionMajor&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionMinor&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionRevision&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;file&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fileName&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globals&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;option;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globinitcalled&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;comment&nbsp;=&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;global&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">GType</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typeinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GCompTag</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GCompTagDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GEnumTag</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GEnumTagDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GVarDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GVar</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.initinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GAsm</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GPragma</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GText</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typ&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">TVoid</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TInt</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TFloat</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TPtr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TArray</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TNamed</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typeinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TComp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TBuiltin_va_list</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;ikind&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">IChar</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ISChar</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUChar</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IInt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUInt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IShort</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUShort</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ILong</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IULong</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ILongLong</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IULongLong</span><br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fkind&nbsp;=&nbsp;<span class="constructor">FFloat</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FDouble</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FLongDouble</span><br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attribute&nbsp;=&nbsp;<span class="constructor">Attr</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attributes&nbsp;=&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attrparam&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">AInt</span>&nbsp;<span class="keyword">of</span>&nbsp;int<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ACons</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOfS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOfS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AUnOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ABinOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ADot</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;*&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;compinfo&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cstruct&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cname&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ckey&nbsp;:&nbsp;int;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cfields&nbsp;:&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cdefined&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;creferenced&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fieldinfo&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fcomp&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fname&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ftype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fbitfield&nbsp;:&nbsp;int&nbsp;option;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;floc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;enuminfo&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ename&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;eitems&nbsp;:&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location)&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;eattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ereferenced&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typeinfo&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;tname&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ttype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;treferenced&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;varinfo&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vname&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vstorage&nbsp;:&nbsp;<span class="constructor">Cil</span>.storage;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vglob&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vinline&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vdecl&nbsp;:&nbsp;<span class="constructor">Cil</span>.location;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vid&nbsp;:&nbsp;int;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vaddrof&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vreferenced&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;storage&nbsp;=&nbsp;<span class="constructor">NoStorage</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Static</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Register</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Extern</span><br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;exp&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Const</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.constant<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Lval</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOfStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AlignOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AlignOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">UnOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BinOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CastE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AddrOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">StartOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;constant&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CInt64</span>&nbsp;<span class="keyword">of</span>&nbsp;int64&nbsp;*&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;*&nbsp;string&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CWStr</span>&nbsp;<span class="keyword">of</span>&nbsp;int64&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CChr</span>&nbsp;<span class="keyword">of</span>&nbsp;char<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CReal</span>&nbsp;<span class="keyword">of</span>&nbsp;float&nbsp;*&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;*&nbsp;string&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.enuminfo<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;unop&nbsp;=&nbsp;<span class="constructor">Neg</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BNot</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LNot</span><br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;binop&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">PlusA</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">PlusPI</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IndexPI</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusA</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusPI</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusPP</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mult</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Div</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mod</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Shiftlt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Shiftrt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Lt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Gt</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Le</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ge</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Eq</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ne</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BAnd</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BXor</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BOr</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LAnd</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LOr</span><br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;lval&nbsp;=&nbsp;<span class="constructor">Cil</span>.lhost&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;lhost&nbsp;=&nbsp;<span class="constructor">Var</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mem</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;offset&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">NoOffset</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Field</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Index</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;init&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">SingleInit</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CompoundInit</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;initinfo&nbsp;=&nbsp;{&nbsp;<span class="keyword">mutable</span>&nbsp;init&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;option;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fundec&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;svar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sformals&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;slocals&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;smaxid&nbsp;:&nbsp;int;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sbody&nbsp;:&nbsp;<span class="constructor">Cil</span>.block;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;smaxstmtid&nbsp;:&nbsp;int&nbsp;option;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sallstmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;block&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;battrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;bstmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;stmt&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;labels&nbsp;:&nbsp;<span class="constructor">Cil</span>.label&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;skind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sid&nbsp;:&nbsp;int;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;succs&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;preds&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;label&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Label</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;bool<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Case</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Default</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;stmtkind&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Instr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Return</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Goto</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Break</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Continue</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">If</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Switch</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Loop</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Block</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TryFinally</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TryExcept</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp)&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;instr&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Set</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Call</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Asm</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;*&nbsp;string&nbsp;list&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.lval)&nbsp;list&nbsp;*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp)&nbsp;list&nbsp;*&nbsp;string&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;location&nbsp;=&nbsp;{&nbsp;line&nbsp;:&nbsp;int;&nbsp;file&nbsp;:&nbsp;string;&nbsp;byte&nbsp;:&nbsp;int;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typsig&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">TSArray</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;int64&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSPtr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSComp</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;*&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;list&nbsp;*&nbsp;bool&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSBase</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lowerConstants&nbsp;:&nbsp;bool&nbsp;ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;insertImplicitCasts&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;featureDescr&nbsp;=&nbsp;{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_enabled&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_name&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_description&nbsp;:&nbsp;string;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_extraopt&nbsp;:&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Arg</span>.spec&nbsp;*&nbsp;string)&nbsp;list;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_doit&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;fd_post_check&nbsp;:&nbsp;bool;<br>
+&nbsp;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compareLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;emptyFunction&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFormals&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFunctionType&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFunctionTypeMakeFormals&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setMaxId&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyFunDec&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.file<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;saveBinaryFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;saveBinaryFileChannel&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;loadBinaryFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getGlobInit&nbsp;:&nbsp;?main_name:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;iterGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;new_sid&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;prepareCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeCFGInfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyFunction&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pushGlobal&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;types:<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;variables:<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;invalidStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;gccBuiltins&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;list&nbsp;*&nbsp;bool)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;msvcBuiltins&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;list&nbsp;*&nbsp;bool)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeZeroInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldLeftCompound&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;doinit:(<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;ct:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;initl:(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;acc:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldLeftCompoundAll&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;doinit:(<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;ct:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;initl:(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;acc:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;voidType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isVoidType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isVoidPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;intType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uintType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;longType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;ulongType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;wcharKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;wcharType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charConstPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;voidPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;intPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uintPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doubleType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;upointType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOfSizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isSigned&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCompInfo&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;int&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;*&nbsp;<span class="constructor">Cil</span>.location)&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyCompInfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;missingFieldName&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compFullName&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isCompleteType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unrollType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unrollTypeDeep&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;separateStorageModifiers&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isIntegralType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isArithmeticType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isPointerType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isFunctionType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;argsToList&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isArrayType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">LenOfArray</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lenOfArray&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getCompField&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;existsAction&nbsp;=&nbsp;<span class="constructor">ExistsTrue</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ExistsFalse</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ExistsMaybe</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;existsType&nbsp;:&nbsp;(<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.existsAction)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;splitFunctionType&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*&nbsp;bool&nbsp;*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;splitFunctionTypeVI&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*&nbsp;bool&nbsp;*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_typsig&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSig&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSigWithAttrs&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;?ignoreSign:bool&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setTypeSigAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSigAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeVarinfo&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeFormalVar&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?where:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeLocalVar&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?insert:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeTempVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?name:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeGlobalVar&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyVarinfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newVID&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addOffsetLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;removeOffsetLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;removeOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOfLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;zero&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;one&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mone&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;kinteger64&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;kinteger&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;integer&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isInteger&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isConstant&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isZero&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charConstToInt&nbsp;:&nbsp;char&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.constant<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFold&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFoldBinOp&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;increm&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;var&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkAddrOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkAddrOrStartOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkMem&nbsp;:&nbsp;addr:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;off:<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkString&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCastT&nbsp;:&nbsp;e:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;oldt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;newt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCast&nbsp;:&nbsp;e:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;newt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stripCasts&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;parseInt&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkStmtOneInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compactStmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkEmptyStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkWhile&nbsp;:&nbsp;guard:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkForIncr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;iter:<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;first:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;stopat:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;incr:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkFor&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;start:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;guard:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;next:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;attributeClass&nbsp;=&nbsp;<span class="constructor">AttrName</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AttrFunType</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AttrType</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;attributeHash&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.attributeClass)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;partitionAttributes&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;default:<span class="constructor">Cil</span>.attributeClass&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addAttribute&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addAttributes&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dropAttribute&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dropAttributes&nbsp;:&nbsp;string&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterAttributes&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;hasAttribute&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setTypeAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeAddAttributes&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeRemoveAttributes&nbsp;:&nbsp;string&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;visitAction&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">SkipChildren</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">DoChildren</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ChangeTo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ChangeDoChildrenPost</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)<br>
+&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;cilVisitor&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">object</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;queueInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;unqueueInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattrparam&nbsp;:&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vblock&nbsp;:&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vexpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vfunc&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vglob&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinitoffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinst&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vlval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;voffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vstmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvdec&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvrbl&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;nopCilVisitor&nbsp;:&nbsp;cilVisitor<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFileSameGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFunction&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilExpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInitOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilType&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilVarDecl&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilAttributes&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;msvcMode&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;useLogicalOperators&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFoldVisitor&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.cilVisitor<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;lineDirectiveStyle&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">LineComment</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LinePreprocessorInput</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LinePreprocessorOutput</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lineDirectiveStyle&nbsp;:&nbsp;<span class="constructor">Cil</span>.lineDirectiveStyle&nbsp;option&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;print_CIL_Input&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCilAsIs&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lineLength&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;forgcc&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;currentLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;currentGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_loc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_thisloc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_ikind&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_fkind&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_storage&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.storage&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_const&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.constant&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;derefStarLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;indexLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;arrowLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addrOfLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;additiveLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;comparativeLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitwiseLevel&nbsp;:&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getParenthLevel&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;cilPrinter&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">object</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dBlock&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dInit&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dStmt&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;*&nbsp;bool<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrParam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrs&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pBlock&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pExp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pFieldDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pGlobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLabel&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLineDirective&nbsp;:&nbsp;?forcefile:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pOffset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmtKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pType&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;defaultCilPrinterClass&nbsp;:&nbsp;cilPrinter<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;defaultCilPrinter&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter<br>
+&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;plainCilPrinterClass&nbsp;:&nbsp;cilPrinter<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;plainCilPrinter&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printerForMaincil&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printType&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printExp&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpStmt&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpBlock&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpInit&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_type&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_exp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_lval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_offset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_init&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_binop&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_unop&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attrparam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attrlist&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_instr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_label&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_stmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_block&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_global&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_exp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_lval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_init&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_type&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_global&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attrlist&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attrparam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_stmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_instr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_shortglobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpGlobal&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpFile&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bug&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unimp&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;error&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;errorLoc&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warn&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnContext&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnContextOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnLoc&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plainexp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plaininit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plainlval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plaintype&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uniqueVarNames&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;peepHole2&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;*&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;option)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;peepHole1&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;option)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">SizeOfError</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitsSizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;alignOf_int&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitsOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;char_is_unsigned&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;little_endian&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;underscore_name&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;locUnknown&nbsp;:&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_instrLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_globalLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_stmtLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dExp&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dInstr&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapNoCopy&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapNoCopyList&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startsWith&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;formatArg&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Fe</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Feo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fu</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fb</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fk</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.ikind<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ff</span>&nbsp;<span class="keyword">of</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FF</span>&nbsp;<span class="keyword">of</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fva</span>&nbsp;<span class="keyword">of</span>&nbsp;bool<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fv</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Flo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fc</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fi</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FI</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ft</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fd</span>&nbsp;<span class="keyword">of</span>&nbsp;int<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fg</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fs</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FA</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FP</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FX</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_formatarg&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lowerConstants&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.nopCilVisitor.html b/cil/doc/api/type_Cil.nopCilVisitor.html
new file mode 100644
index 000000000..0ac6c96ba
--- /dev/null
+++ b/cil/doc/api/type_Cil.nopCilVisitor.html
@@ -0,0 +1,25 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.nopCilVisitor</title>
+</head>
+<body>
+<code class="code"><span class="constructor">Cil</span>.cilVisitor</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.plainCilPrinterClass.html b/cil/doc/api/type_Cil.plainCilPrinterClass.html
new file mode 100644
index 000000000..ecd631718
--- /dev/null
+++ b/cil/doc/api/type_Cil.plainCilPrinterClass.html
@@ -0,0 +1,25 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.plainCilPrinterClass</title>
+</head>
+<body>
+<code class="code"><span class="constructor">Cil</span>.cilPrinter</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cillower.html b/cil/doc/api/type_Cillower.html
new file mode 100644
index 000000000..a8924ed6c
--- /dev/null
+++ b/cil/doc/api/type_Cillower.html
@@ -0,0 +1,25 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cillower</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;lowerEnumVisitor&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Clist.html b/cil/doc/api/type_Clist.html
new file mode 100644
index 000000000..c7dbd02fb
--- /dev/null
+++ b/cil/doc/api/type_Clist.html
@@ -0,0 +1,44 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Clist</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;clist&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CList</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CConsL</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CConsR</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;*&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CSeq</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;toList&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fromList&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;single&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;empty&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;append&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;checkBeforeAppend&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;length&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;map&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold_left&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;iter&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;rev&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docCList&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.BackwardsDataFlow.html b/cil/doc/api/type_Dataflow.BackwardsDataFlow.html
new file mode 100644
index 000000000..78ffeba37
--- /dev/null
+++ b/cil/doc/api/type_Dataflow.BackwardsDataFlow.html
@@ -0,0 +1,26 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsDataFlow</title>
+</head>
+<body>
+<code class="code"><span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">BackwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.BackwardsTransfer.html b/cil/doc/api/type_Dataflow.BackwardsTransfer.html
new file mode 100644
index 000000000..763df7485
--- /dev/null
+++ b/cil/doc/api/type_Dataflow.BackwardsTransfer.html
@@ -0,0 +1,44 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsTransfer</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineStmtStartData&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineSuccessors&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.ForwardsDataFlow.html b/cil/doc/api/type_Dataflow.ForwardsDataFlow.html
new file mode 100644
index 000000000..a042cfcee
--- /dev/null
+++ b/cil/doc/api/type_Dataflow.ForwardsDataFlow.html
@@ -0,0 +1,25 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsDataFlow</title>
+</head>
+<body>
+<code class="code"><span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">ForwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.ForwardsTransfer.html b/cil/doc/api/type_Dataflow.ForwardsTransfer.html
new file mode 100644
index 000000000..1e4d48b7a
--- /dev/null
+++ b/cil/doc/api/type_Dataflow.ForwardsTransfer.html
@@ -0,0 +1,51 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsTransfer</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copy&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFirstPredecessor&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combinePredecessors&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.stmtaction<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doGuard&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.guardaction<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.html b/cil/doc/api/type_Dataflow.html
new file mode 100644
index 000000000..fa0347640
--- /dev/null
+++ b/cil/doc/api/type_Dataflow.html
@@ -0,0 +1,85 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;action&nbsp;=&nbsp;<span class="constructor">Default</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Done</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Post</span>&nbsp;<span class="keyword">of</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;stmtaction&nbsp;=&nbsp;<span class="constructor">SDefault</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SDone</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SUse</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;guardaction&nbsp;=&nbsp;<span class="constructor">GDefault</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GUse</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GUnreachable</span><br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="keyword">type</span>&nbsp;<span class="constructor">ForwardsTransfer</span>&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copy&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFirstPredecessor&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combinePredecessors&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.stmtaction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doGuard&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.guardaction<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">ForwardsDataFlow</span>&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">ForwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="keyword">type</span>&nbsp;<span class="constructor">BackwardsTransfer</span>&nbsp;=<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineStmtStartData&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;option<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineSuccessors&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">BackwardsDataFlow</span>&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">BackwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span><br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dominators.html b/cil/doc/api/type_Dominators.html
new file mode 100644
index 000000000..a9fef53e5
--- /dev/null
+++ b/cil/doc/api/type_Dominators.html
@@ -0,0 +1,32 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dominators</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeIDom&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getIdom&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dominates&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;findNaturalLoops&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.stmt&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list)&nbsp;list<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Errormsg.html b/cil/doc/api/type_Errormsg.html
new file mode 100644
index 000000000..3ad0a8602
--- /dev/null
+++ b/cil/doc/api/type_Errormsg.html
@@ -0,0 +1,64 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Errormsg</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;logChannel&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debugFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;verboseFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">Error</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;error&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bug&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unimp&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;s&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;hadErrors&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warn&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;log&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;logg&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;null&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pushContext&nbsp;:&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;popContext&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;showContext&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;withContext&nbsp;:&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newline&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newHline&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getPosition&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;string&nbsp;*&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getHPosition&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setHLine&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setHFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setCurrentLine&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setCurrentFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;location&nbsp;=&nbsp;{&nbsp;file&nbsp;:&nbsp;string;&nbsp;line&nbsp;:&nbsp;int;&nbsp;hfile&nbsp;:&nbsp;string;&nbsp;hline&nbsp;:&nbsp;int;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_loc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_hloc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getLocation&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;parse_error&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;locUnknown&nbsp;:&nbsp;<span class="constructor">Errormsg</span>.location<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;readingFromStdin&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startParsing&nbsp;:&nbsp;?useBasename:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Lexing</span>.lexbuf<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startParsingFromString&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;?file:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?line:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Lexing</span>.lexbuf<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;finishParsing&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Formatcil.html b/cil/doc/api/type_Formatcil.html
new file mode 100644
index 000000000..7c5139b92
--- /dev/null
+++ b/cil/doc/api/type_Formatcil.html
@@ -0,0 +1,45 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Formatcil</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cExp&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cLval&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cType&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cInstr&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cStmt&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cStmts&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dExp&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dLval&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dType&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dInstr&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;noMemoize&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;test&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.MakeMapPrinter.html b/cil/doc/api/type_Pretty.MakeMapPrinter.html
new file mode 100644
index 000000000..0b9d35ee2
--- /dev/null
+++ b/cil/doc/api/type_Pretty.MakeMapPrinter.html
@@ -0,0 +1,42 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeMapPrinter</title>
+</head>
+<body>
+<code class="code"><span class="keyword">functor</span><br>
+&nbsp;&nbsp;(<span class="constructor">Map</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;key<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docMap&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_map&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dmaplet:(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.MakeSetPrinter.html b/cil/doc/api/type_Pretty.MakeSetPrinter.html
new file mode 100644
index 000000000..c5e04661a
--- /dev/null
+++ b/cil/doc/api/type_Pretty.MakeSetPrinter.html
@@ -0,0 +1,40 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeSetPrinter</title>
+</head>
+<body>
+<code class="code"><span class="keyword">functor</span><br>
+&nbsp;&nbsp;(<span class="constructor">Set</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;elt<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docSet&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_set&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.html b/cil/doc/api/type_Pretty.html
new file mode 100644
index 000000000..fc70f65b2
--- /dev/null
+++ b/cil/doc/api/type_Pretty.html
@@ -0,0 +1,111 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nil&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;(&nbsp;++&nbsp;)&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;concat&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;text&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;num&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;real&nbsp;:&nbsp;float&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;chr&nbsp;:&nbsp;char&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;line&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;leftflush&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;break&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;align&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unalign&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mark&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unmark&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;indent&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;markup&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;seq&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;doit:(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;elements:<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docList&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_list&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docArray&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;(int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;array&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_int32&nbsp;:&nbsp;int32&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;f_int32&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int32&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_int64&nbsp;:&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;f_int64&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">MakeMapPrinter</span>&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;key<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docMap&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_map&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dmaplet:(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">MakeSetPrinter</span>&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;elt<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docSet&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_set&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;insert&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dprintf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;gprintf&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>b,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;<span class="keywordsign">'</span>a)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fprint&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;width:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sprint&nbsp;:&nbsp;width:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fprintf&nbsp;:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;eprintf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;withPrintDepth&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printDepth&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printIndent&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fastMode&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;flushOften&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;countNewLines&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;auto_printer&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Stats.html b/cil/doc/api/type_Stats.html
new file mode 100644
index 000000000..77cd21813
--- /dev/null
+++ b/cil/doc/api/type_Stats.html
@@ -0,0 +1,36 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of class methods" rel=Appendix href="index_methods.html">
+<link title="Index of classes" rel=Appendix href="index_classes.html">
+<link title="Index of class types" rel=Appendix href="index_class_types.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Index of module types" rel=Appendix href="index_module_types.html">
+<link title="Pretty" rel="Chapter" href="Pretty.html">
+<link title="Errormsg" rel="Chapter" href="Errormsg.html">
+<link title="Clist" rel="Chapter" href="Clist.html">
+<link title="Stats" rel="Chapter" href="Stats.html">
+<link title="Cil" rel="Chapter" href="Cil.html">
+<link title="Formatcil" rel="Chapter" href="Formatcil.html">
+<link title="Alpha" rel="Chapter" href="Alpha.html">
+<link title="Cillower" rel="Chapter" href="Cillower.html">
+<link title="Cfg" rel="Chapter" href="Cfg.html">
+<link title="Dataflow" rel="Chapter" href="Dataflow.html">
+<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Stats</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;reset&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">NoPerfCount</span><br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;has_performance_counters&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sample_pentium_perfcount_20&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sample_pentium_perfcount_10&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;time&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;repeattime&nbsp;:&nbsp;float&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;print&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lastTime&nbsp;:&nbsp;float&nbsp;<span class="constructor">Pervasives</span>.ref<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;timethis&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/changes.html b/cil/doc/changes.html
new file mode 100644
index 000000000..17ffdf717
--- /dev/null
+++ b/cil/doc/changes.html
@@ -0,0 +1,486 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Changes
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil019.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc49">20</A>&nbsp;&nbsp;Changes</H2><A NAME="sec-changes"></A>
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<B>May 20, 2006</B>: <B>Released version 1.3.5</B>
+<LI CLASS="li-itemize"><B>May 19, 2006</B>: <TT>Makefile.cil.in</TT>/<TT>Makefile.cil</TT> have
+ been renamed <TT>Makefile.in</TT>/<TT>Makefile</TT>. And <TT>maincil.ml</TT> has
+ been renamed <TT>main.ml</TT>.
+<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added a new module <A HREF="api/Cfg.html">Cfg</A> to compute the
+ control-flow graph. Unlike the older <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>,
+ the new version does not modify the code. 
+<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added several new analyses: reaching
+ definitions, available expressions, liveness analysis, and dead code
+ elimination. See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>.
+<LI CLASS="li-itemize"><B>May 2, 2006</B>: Added a flag <TT>--noInsertImplicitCasts</TT>.
+ When this flag is used, CIL code will only include casts inserted by
+ the programmer. Implicit coercions are not changed to explicit casts.
+<LI CLASS="li-itemize"><B>April 16, 2006</B>: Minor improvements to the <TT>--stats</TT>
+ flag (Section&nbsp;<A HREF="cil007.html#sec-cilly-asm-options">7.2</A>). We now use Pentium performance
+ counters by default, if your processor supports them.
+<LI CLASS="li-itemize"><B>April 10, 2006</B>: Extended <TT>machdep.c</TT> to support
+ microcontroller compilers where the struct alignment of integer
+ types does not match the size of the type. Thanks to Nathan
+ Cooprider for the patch.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for global initializers of unions when
+ the union field being initialized is not the first one, and for
+ missing initializers of unions when the first field is not the
+ largest field.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for bitfields in the SFI module.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Various fixes for gcc attributes.
+ <TT>packed</TT>, <TT>section</TT>, and <TT>always_inline</TT> attributes are now
+ parsed correctly. Also fixed printing of attributes on enum types.
+<LI CLASS="li-itemize"><B>March 30, 2006</B>: Fix for <TT>rmtemps.ml</TT>, which deletes
+ unused inline functions. When in <TT>gcc</TT> mode CIL now leaves all
+ inline functions in place, since <TT>gcc</TT> treats these as externally
+ visible. 
+<LI CLASS="li-itemize"><B>March 15, 2006</B>: Fix for <TT>typeof(<I>e</I>)</TT> when <I>e</I> has type
+ <TT>void</TT>.
+<LI CLASS="li-itemize"><B>March 3, 2006</B>: Assume inline assembly instructions can
+ fall through for the purposes of adding return statements. Thanks to
+ Nathan Cooprider for the patch.
+<LI CLASS="li-itemize"><B>February 27, 2006</B>: Fix for extern inline functions when
+ the output of CIL is fed back into CIL.
+<LI CLASS="li-itemize"><B>January 30, 2006</B>: Fix parsing of <TT>switch</TT> without braces.
+<LI CLASS="li-itemize"><B>January 30, 2006</B>: Allow `$' to appear in identifiers.
+<LI CLASS="li-itemize"><B>January 13, 2006</B>: Added support for gcc's alias attribute
+ on functions. See Section&nbsp;<A HREF="cil016.html#sec-ugly-gcc">16.2</A>, item 8. 
+<LI CLASS="li-itemize"><B>December 9, 2005</B>: Christoph Spiel fixed the Golf and
+ Olf modules so that Golf can be used with the points-to analysis.
+ He also added performance fixes and cleaned up the documentation.
+<LI CLASS="li-itemize"><B>December 1, 2005</B>: Major rewrite of the ext/callgraph module. 
+<LI CLASS="li-itemize"><B>December 1, 2005</B>: Preserve enumeration constants in CIL. Default
+is the old behavior to replace them with integers.
+<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added support for many GCC <TT>__builtin</TT>
+ functions. 
+<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added the EXTRAFEATURES configure
+ option, making it easier to add Features to the build process.
+<LI CLASS="li-itemize"><B>November 23, 2005</B>: In MSVC mode do not remove any locals whose name
+ appears as a substring in an inline assembly. 
+<LI CLASS="li-itemize"><B>November 23, 2005</B>: Do not add a return to functions that have the
+ noreturn attribute. 
+<LI CLASS="li-itemize"><B>November 22, 2005</B>: <B>Released version 1.3.4</B>
+<LI CLASS="li-itemize"><B>November 21, 2005</B>: Performance and correctness fixes for
+ the Points-to Analysis module. Thanks to Christoph Spiel for the
+ patches.
+<LI CLASS="li-itemize"><B>October 5, 2005</B>: CIL now builds on SPARC/Solaris. Thanks
+ to Nick Petroni and Remco van Engelen for the patches.
+<LI CLASS="li-itemize"><B>September 26, 2005</B>: CIL no longer uses the `<TT>-I-</TT>' flag
+ by default when preprocessing with gcc.
+<LI CLASS="li-itemize"><B>August 24, 2005</B>: Added a command-line option
+ &#8220;--forceRLArgEval&#8221; that forces function arguments to be evaluated
+ right-to-left. This is the default behavior in unoptimized gcc and
+ MSVC, but the order of evaluation is undefined when using
+ optimizations, unless you apply this CIL transformation. This flag
+ does not affect the order of evaluation of e.g. binary operators,
+ which remains undefined. Thanks to Nathan Cooprider for the patch.
+<LI CLASS="li-itemize"><B>August 9, 2005</B>: Fixed merging when there are more than 20
+ input files.
+<LI CLASS="li-itemize"><B>August 3, 2005</B>: When merging, it is now an error to
+ declare the same global variable twice with different initializers.
+<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in transparent unions.
+<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in collectInitializer. Thanks to
+ Benjamin Monate for the patch.
+<LI CLASS="li-itemize"><B>July 26, 2005</B>: Better support for extended inline assembly
+ in gcc.
+<LI CLASS="li-itemize"><B>July 26, 2005</B>: Added many more gcc __builtin* functions
+ to CIL. Most are treated as Call instructions, but a few are
+ translated into expressions so that they can be used in global
+ initializers. For example, &#8220;<TT>__builtin_offsetof(t, field)</TT>&#8221; is
+ rewritten as &#8220;<TT>&amp;((t*)0)-&gt;field</TT>&#8221;, the traditional way of calculating
+ an offset.
+<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug in the constant folding of shifts
+ when the second argument was negative or too large.
+<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug where casts were not always
+ inserted in function calls.
+<LI CLASS="li-itemize"><B>June 10, 2005</B>: Fixed bug in the code that makes implicit
+ returns explicit. We weren't handling switch blocks correctly.
+<LI CLASS="li-itemize"><B>June 1, 2005</B>: <B>Released version 1.3.3</B>
+<LI CLASS="li-itemize"><B>May 31, 2005</B>: Fixed handling of noreturn attribute for function
+ pointers. 
+<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the handling of constructors in gcc.
+<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the generation of global variable IDs.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Reimplemented the translation of function calls so
+ that we can intercept some builtins. This is important for the uses of
+ __builtin_constant_p in constants. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Export the plainCilPrinter, for debugging.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug with printing of const attribute for
+ arrays. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in generation of type signatures. Now they
+ should not contain expressions anymore, so you can use structural equality.
+ This used to lead to Out_of_Memory exceptions.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in type comparisons using
+ TBuiltin_va_list.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Improved the constant folding in array lengths and
+ case expressions. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the <TT>__builtin_frame_address</TT> to the set
+ of gcc builtins.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the CIL project to SourceForge.
+<LI CLASS="li-itemize"><B>April 23, 2005</B>: The cattr field was not visited.
+<LI CLASS="li-itemize"><B>March 6, 2005</B>: Debian packaging support
+<LI CLASS="li-itemize"><B>February 16, 2005</B>: Merger fixes.
+<LI CLASS="li-itemize"><B>February 11, 2005</B>: Fixed a bug in <TT>--dopartial</TT>. Thanks to
+Nathan Cooprider for this fix. 
+<LI CLASS="li-itemize"><B>January 31, 2005</B>: Make sure the input file is closed even if a
+ parsing error is encountered. 
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: <B>Released version 1.3.2</B>
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: Fixed printing of integer constants whose
+ integer kind is shorter than an int. 
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: Added checks for negative size arrays and arrays
+ too big. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Added support for GCC attribute &#8220;volatile&#8221; for
+ tunctions (as a synonim for noreturn). 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Improved the comparison of array sizes when
+ comparing array types. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed handling of shell metacharacters in the
+ cilly command lione.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed dropping of cast in initialization of
+ local variable with the result of a function call.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed some structural comparisons that were
+ broken in the Ocaml 3.08.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed the <TT>unrollType</TT> function to not forget
+ attributes. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Better keeping track of locations of function
+ prototypes and definitions. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed bug with the expansion of enumeration
+ constants in attributes.
+<LI CLASS="li-itemize"><B>October 18, 2004</B>: Fixed a bug in cabsvisit.ml. CIl would wrap a
+ BLOCK around a single atom unnecessarily. 
+<LI CLASS="li-itemize"><B>August 7, 2004</B>: <B>Released version 1.3.1</B>
+<LI CLASS="li-itemize"><B>August 4, 2004</B>: Fixed a bug in splitting of structs using 
+ <TT>--dosimplify</TT>
+<LI CLASS="li-itemize"><B>July 29, 2004</B>: Minor changes to the type typeSig (type signatures)
+ to ensure that they do not contain types, so that you can do structural
+ comparison without danger of nontermination. 
+<LI CLASS="li-itemize"><B>July 28, 2004</B>: Ocaml version 3.08 is required. Numerous small 
+ changes while porting to Ocaml 3.08. 
+<LI CLASS="li-itemize"><B>July 7, 2004</B>: <B>Released version 1.2.6</B>
+<LI CLASS="li-itemize"><B>July 2, 2004</B>: Character constants such as <TT>'c'</TT> should
+ have type <TT>int</TT>, not <TT>char</TT>. Added a utility function
+ <TT>Cil.charConstToInt</TT> that sign-extends chars greater than 128, if needed.
+<LI CLASS="li-itemize"><B>July 2, 2004</B>: Fixed a bug that was casting values to int
+ before applying the logical negation operator !. This caused
+ problems for floats, and for integer types bigger than <TT>int</TT>.
+<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added the field <TT>sallstmts</TT> to a function
+ description, to hold all statements in the function.
+<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added new extensions for data flow analyses, and
+ for computing dominators.
+<LI CLASS="li-itemize"><B>June 10, 2004</B>: Force initialization of CIL at the start of
+Cabs2cil. 
+<LI CLASS="li-itemize"><B>June 9, 2004</B>: Added support for GCC <TT>__attribute_used__</TT>
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: <B>Released version 1.2.5</B>
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Allow now to run ./configure CC=cl and set the MSVC
+compiler to be the default. The MSVC driver will now select the default name
+of the .exe file like the CL compiler. 
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed a bug in the driver. The temporary files are
+deleted by the Perl script before the CL compiler gets to them?
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added the - form of arguments to the MSVC driver.
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added a few more GCC-specific string escapes, (, [,
+{, %, E. 
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed bug with continuation lines in MSVC.
+<LI CLASS="li-itemize"><B>April 6, 2004</B>: Fixed embarassing bug in the parser: the precedence
+ of casts and unary operators was switched. 
+<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug involving statements mixed between
+declarations containing initializers. Now we make sure that the initializers
+are run in the proper order with respect to the statements.
+<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug in the merger. The merger was keeping
+separate alpha renaming talbes (namespaces) for variables and types. This
+means that it might end up with a type and a variable named the same way, if
+they come from different files, which breaks an important CIL invariant.
+<LI CLASS="li-itemize"><B>March 11, 2004</B> : Fixed a bug in the Cil.copyFunction function. The
+new local variables were not getting fresh IDs. 
+<LI CLASS="li-itemize"><B>March 5, 2004</B>: Fixed a bug in the handling of static function
+ prototypes in a block scope. They used to be renamed. Now we just consider
+ them global. 
+<LI CLASS="li-itemize"><B>February 20, 2004</B>: <B>Released version 1.2.4</B>
+<LI CLASS="li-itemize"><B>February 15, 2004</B>: Changed the parser to allow extra semicolons
+ after field declarations.
+<LI CLASS="li-itemize"><B>February 14, 2004</B>: Changed the Errormsg functions: error, unimp,
+bug to not raise an exception. Instead they just set Errormsg.hadErrors. 
+<LI CLASS="li-itemize"><B>February 13, 2004</B>: Change the parsing of attributes to recognize
+ enumeration constants.
+<LI CLASS="li-itemize"><B>February 10, 2004</B>: In some versions of <TT>gcc</TT> the identifier
+ _{thread is an identifier and in others it is a keyword. Added code
+ during configuration to detect which is the case. 
+<LI CLASS="li-itemize"><B>January 7, 2004</B>: <B>Released version 1.2.3</B>
+<LI CLASS="li-itemize"><B>January 7, 2004</B>: Changed the alpha renamer to be less
+conservative. It will remember all versions of a name that were seen and will
+only create a new name if we have not seen one. 
+<LI CLASS="li-itemize"><B>December 30, 2003</B> : Extended the <TT>cilly</TT> command to understand
+ better linker command options <TT>-lfoo</TT>. 
+<LI CLASS="li-itemize"><B>December 5, 2003</B>: Added markup commands to the pretty-printer
+module. Also, changed the &#8220;@&lt;&#8221; left-flush command into &#8220;@''.
+<LI CLASS="li-itemize"><B>December 4, 2003</B>: Wide string literals are now handled
+directly by Cil (rather than being exploded into arrays). This is
+apparently handy for Microsoft Device Driver APIs that use intrinsic
+functions that require literal constant wide-string arguments. 
+<LI CLASS="li-itemize"><B>December 3, 2003</B>: Added support for structured exception handling
+ extensions for the Microsoft compilers.
+<LI CLASS="li-itemize"><B>December 1, 2003</B>: Fixed a Makefile bug in the generation of the 
+Cil library (e.g., <TT>cil.cma</TT>) that was causing it to be unusable. Thanks
+to KEvin Millikin for pointing out this bug. 
+<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added support for linkage specifications
+ (extern &#8220;C&#8221;). 
+<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added the ocamlutil directory to contain some
+utilities shared with other projects. 
+<LI CLASS="li-itemize"><B>November 25, 2003</B>: <B>Released version 1.2.2</B>
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that allowed a static local to
+ conflict with a global with the same name that is declared later in the
+ file. 
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Removed the <TT>--keep</TT> option of the <TT>cilly</TT>
+ driver and replaced it with <TT>--save-temps</TT>.
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Added printing of what CIL features are being
+ run.
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that resulted in attributes being
+ dropped for integer types. 
+<LI CLASS="li-itemize"><B>November 11, 2003</B>: Fixed a bug in the visitor for enumeration
+ definitions. 
+<LI CLASS="li-itemize"><B>October 24, 2003</B>: Fixed a problem in the configuration script. It
+ was not recognizing the Ocaml version number for beta versions. 
+<LI CLASS="li-itemize"><B>October 15, 2003</B>: Fixed a problem in version 1.2.1 that was
+ preventing compilation on OCaml 3.04.
+<LI CLASS="li-itemize"><B>September 17, 2003: Released version 1.2.1.</B>
+<LI CLASS="li-itemize"><B>September 7, 2003</B>: Redesigned the interface for choosing
+ <TT>#line</TT> directive printing styles. Cil.printLn and
+ Cil.printLnComment have been merged into Cil.lineDirectiveStyle.
+<LI CLASS="li-itemize"><B>August 8, 2003</B>: Do not silently pad out functions calls with
+arguments to match the prototype. 
+<LI CLASS="li-itemize"><B>August 1, 2003</B>: A variety of fixes suggested by Steve Chamberlain:
+initializers for externs, prohibit float literals in enum, initializers for
+unsized arrays were not working always, an overflow problem in Ocaml, changed
+the processing of attributes before struct specifiers<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 14, 2003</B>: Add basic support for GCC's "__thread" storage
+qualifier. If given, it will appear as a "thread" attribute at the top of the
+type of the declared object. Treatment is very similar to "__declspec(...)"
+in MSVC<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed some of the __alignof computations. Fixed
+ bug in the designated initializers for arrays (Array.get error).
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed infinite loop bug (Stack Overflow) in the
+ visitor for __alignof.
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed bug in the conversion to CIL. A function or
+ array argument of
+ the GCC __typeof() was being converted to pointer type. Instead, it should
+ be left alone, just like for sizeof. 
+<LI CLASS="li-itemize"><B>July 7, 2003</B>: New Escape module provides utility functions
+ for escaping characters and strings in accordance with C lexical
+ rules.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 2, 2003</B>: Relax CIL's rules for when two enumeration types are
+considered compatible. Previously CIL considered two enums to be compatible if
+they were the same enum. Now we follow the C99 standard.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 28, 2003</B>: In the Formatparse module, Eric Haugh found and
+ fixed a bug in the handling of lvalues of the form &#8220;lv-&gt;field.more&#8221;.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 28, 2003</B>: Extended the handling of gcc command lines
+arguments in the Perl scripts. <BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 23, 2003</B>: In Rmtmps module, simplified the API for
+ customizing the root set. Clients may supply a predicate that
+ returns true for each root global. Modifying various
+ &#8220;<TT>referenced</TT>&#8221; fields directly is no longer supported.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 17, 2003</B>: Reimplement internal utility routine
+ <TT>Cil.escape_char</TT>. Faster and better. <BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 14, 2003</B>: Implemented support for <TT>__attribute__s</TT>
+appearing between "struct" and the struct tag name (also for unions and
+enums), since gcc supports this as documented in section 4.30 of the gcc
+(2.95.3) manual<BR>
+<BR>
+<LI CLASS="li-itemize"><B>May 30, 2003</B>: Released the regression tests. 
+<LI CLASS="li-itemize"><B>May 28, 2003</B>: <B>Released version 1.1.2</B>
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Add the <TT>simplify</TT> module that compiles CIL
+expressions into simpler expressions, similar to those that appear in a
+3-address intermediate language.
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Various fixes and improvements to the pointer
+analysis modules. 
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Added optional consistency checking for
+transformations.
+<LI CLASS="li-itemize"><B>May 25, 2003</B>: Added configuration support for big endian machines.
+Now <A HREF="api/Cil.html#VALlittle_endian">Cil.little_endian</A> can be used to test whether the machine is
+little endian or not. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed a bug in the handling of inline functions. The
+CIL merger used to turn these functions into &#8220;static&#8221;, which is incorrect. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Expanded the CIL consistency checker to verify
+undesired sharing relationships between data structures. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed bug in the <TT>oneret</TT> CIL module: it was
+mishandling certain labeled return statements. 
+<LI CLASS="li-itemize"><B>May 5, 2003</B>: <B>Released version 1.0.11</B>
+<LI CLASS="li-itemize"><B>May 5, 2003</B>: OS X (powerpc/darwin) support for CIL. Special 
+thanks to Jeff Foster, Andy Begel and Tim Leek. 
+<LI CLASS="li-itemize"><B>April 30, 2003</B>: Better description of how to use CIL for your
+analysis. 
+<LI CLASS="li-itemize"><B>April 28, 2003</B>: Fixed a bug with <TT>--dooneRet</TT> and
+<TT>--doheapify</TT>. Thanks, Manos Renieris.
+<LI CLASS="li-itemize"><B>April 16, 2003</B>: Reworked management of
+ temporary/intermediate output files in Perl driver scripts. Default
+ behavior is now to remove all such files. To keep intermediate
+ files, use one of the following existing flags:
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ <TT>--keepmerged</TT> for the single-file merge of all sources
+ <LI CLASS="li-itemize"><TT>--keep=&lt;<I>dir</I></TT><TT>&gt;</TT> for various other CIL and
+ CCured output files
+ <LI CLASS="li-itemize"><TT>--save-temps</TT> for various gcc intermediate files; MSVC
+ has no equivalent option
+ </UL>
+ As part of this change, some intermediate files have changed their
+ names slightly so that new suffixes are always preceded by a
+ period. For example, CCured output that used to appear in
+ &#8220;<TT>foocured.c</TT>&#8221; now appears in &#8220;<TT>foo.cured.c</TT>&#8221;.
+<LI CLASS="li-itemize"><B>April 7, 2003</B>: Changed the representation of the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
+global constructor. Now it is possible to update the initializer without
+reconstructing the global (which in turn it would require reconstructing the
+list of globals that make up a program). We did this because it is often
+tempting to use <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
+was the only global that could not be updated in place. 
+<LI CLASS="li-itemize"><B>April 6, 2003</B>: Reimplemented parts of the cilly.pl script to make
+it more robust in the presence of complex compiler arguments. 
+<LI CLASS="li-itemize"><B>March 10, 2003</B>: <B>Released version 1.0.9</B>
+<LI CLASS="li-itemize"><B>March 10, 2003</B>: Unified and documented a large number of CIL
+Library Modules: oneret, simplemem, makecfg, heapify, stackguard, partial.
+Also documented the main client interface for the pointer analysis. 
+<LI CLASS="li-itemize"><B>February 18, 2003</B>: Fixed a bug in logwrites that was causing it
+to produce invalid C code on writes to bitfields. Thanks, David Park. 
+<LI CLASS="li-itemize"><B>February 15, 2003</B>: <B>Released version 1.0.8</B>
+<LI CLASS="li-itemize"><B>February 15, 2003</B>: PDF versions of the manual and API are
+available for those who would like to print them out. 
+<LI CLASS="li-itemize"><B>February 14, 2003</B>: CIL now comes bundled with alias analyses. 
+<LI CLASS="li-itemize"><B>February 11, 2003</B>: Added support for adding/removing options from
+ <TT>./configure</TT>. 
+<LI CLASS="li-itemize"><B>February 3, 2003</B>: <B>Released version 1.0.7</B>
+<LI CLASS="li-itemize"><B>February 1, 2003</B>: Some bug fixes in the handling of variable
+argument functions in new versions of <TT>gcc</TT> And <TT>glibc</TT>. 
+<LI CLASS="li-itemize"><B>January 29, 2003</B>: Added the logical AND and OR operators.
+Exapanded the translation to CIL to handle more complicated initializers
+(including those that contain logical operators).
+<LI CLASS="li-itemize"><B>January 28, 2003</B>: <B>Released version 1.0.6</B>
+<LI CLASS="li-itemize"><B>January 28, 2003</B>: Added support for the new handling of
+variable-argument functions in new versions of <TT>glibc</TT>. 
+<LI CLASS="li-itemize"><B>January 19, 2003</B>: Added support for declarations in interpreted
+ constructors. Relaxed the semantics of the patterns for variables. 
+<LI CLASS="li-itemize"><B>January 17, 2003</B>: Added built-in prototypes for the gcc built-in
+ functions. Changed the <TT>pGlobal</TT> method in the printers to print the
+ carriage return as well.
+<LI CLASS="li-itemize"><B>January 9, 2003</B>: Reworked lexer and parser's strategy for
+ tracking source file names and line numbers to more closely match
+ typical native compiler behavior. The visible CIL interface is
+ unchanged.
+<LI CLASS="li-itemize"><B>January 9, 2003</B>: Changed the interface to the alpha convertor. Now
+you can pass a list where it will record undo information that you can use to
+revert the changes that it makes to the scope tables.
+<LI CLASS="li-itemize"><B>January 6, 2003</B>: <B>Released version 1.0.5</B>
+<LI CLASS="li-itemize"><B>January 4, 2003</B>: Changed the interface for the Formatcil module.
+ Now the placeholders in the pattern have names. Also expanded the
+ documentation of the Formatcil module.
+ Now the placeholders in the pattern have names.
+<LI CLASS="li-itemize"><B>January 3, 2003</B>: Extended the <TT>rmtmps</TT> module to also remove
+ unused labels that are generated in the conversion to CIL. This reduces the
+ number of warnings that you get from <TT>cgcc</TT> afterwards.
+<LI CLASS="li-itemize"><B>December 17, 2002</B>: Fixed a few bugs in CIL related to the
+ representation of string literals. The standard says that a string literal
+ is an array. In CIL, a string literal has type pointer to character. This is
+ Ok, except as an argument of sizeof. To support this exception, we have
+ added to CIL the expression constructor SizeOfStr. This allowed us to fix
+ bugs with computing <TT>sizeof("foo bar")</TT> and <TT>sizeof((char*)"foo bar")</TT>
+ (the former is 8 and the latter is 4).<BR>
+<BR>
+<LI CLASS="li-itemize"><B>December 8, 2002</B>: Fixed a few bugs in the lexer and parser
+ relating to hex and octal escapes in string literals. Also fixed
+ the dependencies between the lexer and parser.
+<LI CLASS="li-itemize"><B>December 5, 2002</B>: Fixed visitor bugs that were causing
+ some attributes not to be visited and some queued instructions to be
+ dropped.
+<LI CLASS="li-itemize"><B>December 3, 2002</B>: Added a transformation to catch stack
+ overflows. Fixed the heapify transformation.
+<LI CLASS="li-itemize"><B>October 14, 2002</B>: CIL is now available under the BSD license
+(see the License section or the file LICENSE). <B>Released version 1.0.4</B>
+<LI CLASS="li-itemize"><B>October 9, 2002</B>: More FreeBSD configuration changes, support
+for the GCC-ims <TT>__signed</TT> and <TT>__volatile</TT>. Thanks to Axel
+Simon for pointing out these problems. <B>Released version 1.0.3</B>
+<LI CLASS="li-itemize"><B>October 8, 2002</B>: FreeBSD configuration and porting fixes.
+Thanks to Axel Simon for pointing out these problems. 
+<LI CLASS="li-itemize"><B>September 10, 2002</B>: Fixed bug in conversion to CIL. Now we drop
+all &#8220;const&#8221; qualifiers from the types of locals, even from the fields of
+local structures or elements of arrays.
+<LI CLASS="li-itemize"><B>September 7, 2002</B>: Extended visitor interface to distinguish visitng
+ offsets inside lvalues from offsets inside initializer lists.
+<LI CLASS="li-itemize"><B>September 7, 2002</B>: <B>Released version 1.0.1</B>
+<LI CLASS="li-itemize"><B>September 6, 2002</B>: Extended the patcher with the <TT>ateof</TT> flag.
+<LI CLASS="li-itemize"><B>September 4, 2002</B>: Fixed bug in the elaboration to CIL. In some
+cases constant folding of <TT>||</TT> and <TT>&amp;&amp;</TT> was computed wrong.
+<LI CLASS="li-itemize"><B>September 3, 2002</B>: Fixed the merger documentation. 
+<LI CLASS="li-itemize"><B>August 29, 2002</B>: <B>Released version 1.0.0.</B>
+<LI CLASS="li-itemize"><B>August 29, 2002</B>: Started numbering versions with a major nubmer,
+minor and revisions. Released version 1.0.0.
+<LI CLASS="li-itemize"><B>August 25, 2002</B>: Fixed the implementation of the unique
+identifiers for global variables and composites. Now those identifiers are
+globally unique.
+<LI CLASS="li-itemize"><B>August 24, 2002</B>: Added to the machine-dependent configuration the
+<TT>sizeofvoid</TT>. It is 1 on gcc and 0 on MSVC. Extended the implementation of
+<TT>Cil.bitsSizeOf</TT> to handle this (it was previously returning an error when
+trying to compute the size of <TT>void</TT>).
+<LI CLASS="li-itemize"><B>August 24, 2002</B>: Changed the representation of structure and
+unions to distinguish between undefined structures and those that are defined
+to be empty (allowed on gcc). The sizeof operator is undefined for the former
+and returns 0 for the latter.
+<LI CLASS="li-itemize"><B>August 22, 2002</B>: Apply a patch from Richard H. Y. to support
+FreeBSD installations. Thanks, Richard!
+<LI CLASS="li-itemize"><B>August 12, 2002</B>: Fixed a bug in the translation of wide-character
+strings. Now this translation matches that of the underlying compiler. Changed
+the implementation of the compiler dependencies.
+<LI CLASS="li-itemize"><B>May 25, 2002</B>: Added interpreted constructors and destructors.
+<LI CLASS="li-itemize"><B>May 17, 2002</B>: Changed the representation of functions to move the
+&#8220;inline&#8221; information to the varinfo. This way we can print the &#8220;inline&#8221;
+even in declarations which is what gcc does. 
+<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the visitor for initializers to make two
+tail-recursive passes (the second is a <TT>List.rev</TT> and only done if one of
+the initializers change). This prevents <TT>Stack_Overflow</TT> for large
+initializers. Also improved the processing of initializers when converting to
+CIL. 
+<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the front-end to allow the use of <TT>MSVC</TT>
+mode even on machines that do not have MSVC. The machine-dependent parameters
+for GCC will be used in that case. 
+<LI CLASS="li-itemize"><B>May 11, 2002</B>: Changed the representation of formals in function
+types. Now the function type is purely functional. 
+<LI CLASS="li-itemize"><B>May 4, 2002</B>: Added the function
+<A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and changed <A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> to be
+tail recursive. This prevents stack overflow on huge files.
+<LI CLASS="li-itemize"><B>February 28, 2002</B>: Changed the significance of the
+<TT>CompoundInit</TT> in <A HREF="api/Cil.html#TYPEinit">Cil.init</A> to allow for missing initializers at the
+end of an array initializer. Added the API function
+<A HREF="api/Cil.html#VALfoldLeftCompoundAll">Cil.foldLeftCompoundAll</A>.
+</UL>
+<HR>
+<A HREF="cil019.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil.css b/cil/doc/cil.css
new file mode 100644
index 000000000..7466cf4d9
--- /dev/null
+++ b/cil/doc/cil.css
@@ -0,0 +1,10 @@
+
+.toc{list-style:none;}
+.title{margin:auto;text-align:center}
+.center{text-align:center;margin-left:auto;margin-right:auto;}
+.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
+.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
+DIV TABLE{margin-left:inherit;margin-right:inherit;}
+PRE{text-align:left;margin-left:0ex;margin-right:auto;}
+BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
+.part{margin:auto;text-align:center}
diff --git a/cil/doc/cil.html b/cil/doc/cil.html
new file mode 100644
index 000000000..4d912d331
--- /dev/null
+++ b/cil/doc/cil.html
@@ -0,0 +1,3532 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+
+<HEAD>
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+<STYLE type="text/css">
+.toc{list-style:none;}
+.title{margin:auto;text-align:center}
+.center{text-align:center;margin-left:auto;margin-right:auto;}
+.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
+.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
+DIV TABLE{margin-left:inherit;margin-right:inherit;}
+PRE{text-align:left;margin-left:0ex;margin-right:auto;}
+BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
+.part{margin:auto;text-align:center}
+</STYLE>
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+</HEAD>
+
+<BODY >
+<!--HEVEA command line is: /usr/bin/hevea -exec xxdate.exe ../../cilpp -->
+<!--HTMLHEAD-->
+<!--ENDHTML-->
+<!--PREFIX <ARG ></ARG>-->
+<!--CUT DEF section 1 -->
+
+
+
+<TABLE CLASS="title">
+<TR><TD></TD>
+</TR></TABLE><BR>
+<!--TOC section Introduction-->
+
+<H2 CLASS="section"><A NAME="htoc1">1</A>&nbsp;&nbsp;Introduction</H2><!--SEC END -->
+
+New: CIL now has a Source Forge page: 
+ <A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
+<BR>
+CIL (<B>C</B> <B>I</B>ntermediate <B>L</B>anguage) is a high-level representation
+along with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.<BR>
+<BR>
+CIL is both lower-level than abstract-syntax trees, by clarifying ambiguous
+constructs and removing redundant ones, and also higher-level than typical
+intermediate languages designed for compilation, by maintaining types and a
+close relationship with the source program. The main advantage of CIL is that
+it compiles all valid C programs into a few core constructs with a very clean
+semantics. Also CIL has a syntax-directed type system that makes it easy to
+analyze and manipulate C programs. Furthermore, the CIL front-end is able to
+process not only ANSI-C programs but also those using Microsoft C or GNU C
+extensions. If you do not use CIL and want instead to use just a C parser and
+analyze programs expressed as abstract-syntax trees then your analysis will
+have to handle a lot of ugly corners of the language (let alone the fact that
+parsing C itself is not a trivial task). See Section&nbsp;<A HREF="#sec-simplec">16</A> for some
+examples of such extreme programs that CIL simplifies for you.<BR>
+<BR>
+In essence, CIL is a highly-structured, &#8220;clean&#8221; subset of C. CIL features a
+reduced number of syntactic and conceptual forms. For example, all looping
+constructs are reduced to a single form, all function bodies are given
+explicit <TT>return</TT> statements, syntactic sugar like <TT>"-&gt;"</TT> is
+eliminated and function arguments with array types become pointers. (For an
+extensive list of how CIL simplifies C programs, see Section&nbsp;<A HREF="#sec-cabs2cil">4</A>.)
+This reduces the number of cases that must be considered when manipulating a C
+program. CIL also separates type declarations from code and flattens scopes
+within function bodies. This structures the program in a manner more amenable
+to rapid analysis and transformation. CIL computes the types of all program
+expressions, and makes all type promotions and casts explicit. CIL supports
+all GCC and MSVC extensions except for nested functions and complex numbers.
+Finally, CIL organizes C's imperative features into expressions, instructions
+and statements based on the presence and absence of side-effects and
+control-flow. Every statement can be annotated with successor and predecessor
+information. Thus CIL provides an integrated program representation that can
+be used with routines that require an AST (e.g. type-based analyses and
+pretty-printers), as well as with routines that require a CFG (e.g., dataflow
+analyses). CIL also supports even lower-level representations (e.g.,
+three-address code), see Section&nbsp;<A HREF="#sec-Extension">8</A>. <BR>
+<BR>
+CIL comes accompanied by a number of Perl scripts that perform generally
+useful operations on code:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+A <A HREF="#sec-driver">driver</A> which behaves as either the <TT>gcc</TT> or
+Microsoft VC compiler and can invoke the preprocessor followed by the CIL
+application. The advantage of this script is that you can easily use CIL and
+the analyses written for CIL with existing make files.
+<LI CLASS="li-itemize">A <A HREF="#sec-merger">whole-program merger</A> that you can use as a
+replacement for your compiler and it learns all the files you compile when you
+make a project and merges all of the preprocessed source files into a single
+one. This makes it easy to do whole-program analysis.
+<LI CLASS="li-itemize">A <A HREF="#sec-patcher">patcher</A> makes it easy to create modified
+copies of the system include files. The CIL driver can then be told to use
+these patched copies instead of the standard ones.
+</UL>
+CIL has been tested very extensively. It is able to process the SPECINT95
+benchmarks, the Linux kernel, GIMP and other open-source projects. All of
+these programs are compiled to the simple CIL and then passed to <TT>gcc</TT> and
+they still run! We consider the compilation of Linux a major feat especially
+since Linux contains many of the ugly GCC extensions (see Section&nbsp;<A HREF="#sec-ugly-gcc">16.2</A>).
+This adds to about 1,000,000 lines of code that we tested it on. It is also
+able to process the few Microsoft NT device drivers that we have had access
+to. CIL was tested against GCC's c-torture testsuite and (except for the tests
+involving complex numbers and inner functions, which CIL does not currently
+implement) CIL passes most of the tests. Specifically CIL fails 23 tests out
+of the 904 c-torture tests that it should pass. GCC itself fails 19 tests. A
+total of 1400 regression test cases are run automatically on each change to
+the CIL sources.<BR>
+<BR>
+CIL is relatively independent on the underlying machine and compiler. When
+you build it CIL will configure itself according to the underlying compiler.
+However, CIL has only been tested on Intel x86 using the gcc compiler on Linux
+and cygwin and using the MS Visual C compiler. (See below for specific
+versions of these compilers that we have used CIL for.)<BR>
+<BR>
+The largest application we have used CIL for is
+<A HREF="javascript:loadTop('../ccured/index.html')">CCured</A>, a compiler that compiles C code into
+type-safe code by analyzing your pointer usage and inserting runtime checks in
+the places that cannot be guaranteed statically to be type safe. <BR>
+<BR>
+You can also use CIL to &#8220;compile&#8221; code that uses GCC extensions (e.g. the
+Linux kernel) into standard C code.<BR>
+<BR>
+CIL also comes accompanies by a growing library of extensions (see
+Section&nbsp;<A HREF="#sec-Extension">8</A>). You can use these for your projects or as examples of
+using CIL. <BR>
+<BR>
+<TT>PDF</TT> versions of <A HREF="CIL.pdf">this manual</A> and the
+<A HREF="CIL-API.pdf">CIL API</A> are available. However, we recommend the
+<TT>HTML</TT> versions because the postprocessed code examples are easier to
+view. <BR>
+<BR>
+If you use CIL in your project, we would appreciate letting us know. If you
+want to cite CIL in your research writings, please refer to the paper &#8220;CIL:
+Intermediate Language and Tools for Analysis and Transformation of C
+Programs&#8221; by George C. Necula, Scott McPeak, S.P. Rahul and Westley Weimer,
+in &#8220;Proceedings of Conference on Compilier Construction&#8221;, 2002.<BR>
+<BR>
+<!--TOC section Installation-->
+
+<H2 CLASS="section"><A NAME="htoc2">2</A>&nbsp;&nbsp;Installation</H2><!--SEC END -->
+
+You will need OCaml release 3.08 or higher to build CIL. CIL has been tested
+on Linux and on Windows (where it can behave at either Microsoft Visual C or
+gcc).<BR>
+<BR>
+If you want to use CIL on Windows then you must get a complete installation
+of <TT>cygwin</TT> and the source-code OCaml distribution and compile it yourself
+using the cygwin tools (as opposed to getting the Win32 native-code version of
+OCaml). If you have not done this before then take a look
+<A HREF="../ccured/setup.html">here</A>. (Don't need to worry about <TT>cvs</TT> and
+<TT>ssh</TT> unless you will need to use the master CVS repository for CIL.)
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Download the CIL <A HREF="distrib">distribution</A> (latest version is
+<A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A>). See the Section&nbsp;<A HREF="#sec-changes">20</A> for recent changes to the CIL distribution.
+<LI CLASS="li-enumerate">Unzip and untar the source distribution. This will create a directory
+ called <TT>cil</TT> whose structure is explained below.<BR>
+<TT>tar xvfz cil-1.3.5.tar.gz</TT>
+<LI CLASS="li-enumerate">Enter the <TT>cil</TT> directory and run the <TT>configure</TT> script and then 
+ GNU make to build the distribution. If you are on Windows, at least the
+ <TT>configure</TT> step must be run from within <TT>bash</TT>.<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>cd cil</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>./configure</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make quicktest</CODE><BR>
+<LI CLASS="li-enumerate">You should now find <TT>cilly.asm.exe</TT> in a
+subdirectory of <TT>obj</TT>. The name of the subdirectory is either <TT>x86_WIN32</TT>
+if you are using <TT>cygwin</TT> on Windows or <TT>x86_LINUX</TT> if you are using
+Linux (although you should be using instead the Perl wrapper <TT>bin/cilly</TT>).
+Note that we do not have an <TT>install</TT> make target and you should use Cil
+from the development directory. 
+<LI CLASS="li-enumerate">If you decide to use CIL, <B>please</B>
+<A HREF="mailto:necula@cs.berkeley.edu">send us a note</A>. This will help recharge
+our batteries after more than a year of development. And of course, do send us
+your bug reports as well.</OL>
+The <TT>configure</TT> script tries to find appropriate defaults for your system.
+You can control its actions by passing the following arguments:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>CC=foo</TT> Specifies the path for the <TT>gcc</TT> executable. By default
+whichever version is in the PATH is used. If <TT>CC</TT> specifies the Microsoft
+<TT>cl</TT> compiler, then that compiler will be set as the default one. Otherwise,
+the <TT>gcc</TT> compiler will be the default.
+</UL>
+CIL requires an underlying C compiler and preprocessor. CIL depends on the
+underlying compiler and machine for the sizes and alignment of types.The
+installation procedure for CIL queries the underlying compiler for
+architecture and compiler dependent configuration parameters, such as the size
+of a pointer or the particular alignment rules for structure fields. (This
+means, of course, that you should re-run <TT>./configure</TT> when you move CIL to
+another machine.)<BR>
+<BR>
+We have tested CIL on the following compilers:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+On Windows, <TT>cl</TT> compiler version 12.00.8168 (MSVC 6),
+ 13.00.9466 (MSVC .Net), and 13.10.3077 (MSVC .Net 2003). Run <TT>cl</TT>
+ with no arguments to get the compiler version. 
+<LI CLASS="li-itemize">On Windows, using <TT>cygwin</TT> and <TT>gcc</TT> version 2.95.3, 3.0,
+ 3.2, 3.3, and 3.4.
+<LI CLASS="li-itemize">On Linux, using <TT>gcc</TT> version 2.95.3, 3.0, 3.2, 3.3, and 4.0.
+</UL>
+Others have successfully used CIL with Mac OS X (on both PowerPC and
+x86), Solaris, and *BSD. If you make any changes to the build
+system in order to run CIL on your platform, please send us a patch.<BR>
+<BR>
+ <!--TOC section Distribution Contents-->
+
+<H2 CLASS="section"><A NAME="htoc3">3</A>&nbsp;&nbsp;Distribution Contents</H2><!--SEC END -->
+
+The file <A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A> 
+contains the complete source CIL distribution, 
+consisting of the following files:<BR>
+<TABLE CELLSPACING=2 CELLPADDING=0>
+<TR><TD ALIGN=left NOWRAP>Filename</TD>
+<TD ALIGN=left NOWRAP>Description</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>Makefile.in</TT></TD>
+<TD ALIGN=left NOWRAP><TT>configure</TT> source for the 
+ Makefile that builds CIL</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>configure</TT></TD>
+<TD ALIGN=left NOWRAP>The configure script</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>configure.in</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>autoconf</TT> source for <TT>configure</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>config.guess</TT>, <TT>config.sub</TT>, <TT>install-sh</TT></TD>
+<TD ALIGN=left NOWRAP>stuff required by
+ <TT>configure</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>doc/</TT></TD>
+<TD ALIGN=left NOWRAP>HTML documentation of the CIL API</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/</TT></TD>
+<TD ALIGN=left NOWRAP>Directory that will contain the compiled
+ CIL modules and executables</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>bin/cilly.in</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>configure</TT> source for a Perl script 
+ that can be invoked with the 
+ same arguments as either <TT>gcc</TT> or
+ Microsoft Visual C and will convert the
+ program to CIL, perform some simple
+ transformations, emit it and compile it as
+ usual.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>lib/CompilerStub.pm</TT></TD>
+<TD ALIGN=left NOWRAP>A Perl class that can be used to write code
+ that impersonates a compiler. <TT>cilly</TT>
+ uses it.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>lib/Merger.pm</TT></TD>
+<TD ALIGN=left NOWRAP>A subclass of <TT>CompilerStub.pm</TT> that can
+ be used to merge source files into a single
+ source file.<TT>cilly</TT>
+ uses it.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>bin/patcher.in</TT></TD>
+<TD ALIGN=left NOWRAP>A Perl script that applies specified patches
+ to standard include files.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/check.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Checks the well-formedness of a CIL file</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/cil.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Definition of CIL abstract syntax and
+ utilities for manipulating it</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/clist.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for efficiently managing lists
+ that need to be concatenated often</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/errormsg.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for error reporting</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/heapify.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that moves array local
+ variables from the stack to the heap</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/logcalls.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that logs every
+ function call</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/sfi.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that can log every
+ memory read and write</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/clexer.mll</TT></TD>
+<TD ALIGN=left NOWRAP>The lexer</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cparser.mly</TT></TD>
+<TD ALIGN=left NOWRAP>The parser</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The abstract syntax</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cprint.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The pretty printer for CABS</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs2cil.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The elaborator to CIL</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/main.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>cilly</TT> application</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/pretty.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for pretty printing</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/rmtmps.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL tranformation that removes unused
+ types, variables and inlined functions</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/stats.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for maintaining timing statistics</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/testcil.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A random test of CIL (against the resident 
+ C compiler)</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/trace.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities useful for printing debugging
+ information</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/</TT></TD>
+<TD ALIGN=left NOWRAP>Miscellaneous libraries that are not
+ specific to CIL.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml</TT></TD>
+<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml.build</TT></TD>
+<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/perfcount.c</TT></TD>
+<TD ALIGN=left NOWRAP>C code that links with src/stats.ml
+ and reads Intel performance
+ counters.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/feature_config.ml</TT></TD>
+<TD ALIGN=left NOWRAP>File generated by the Makefile
+ describing which extra &#8220;features&#8221;
+ to compile. See Section&nbsp;<A HREF="#sec-cil">5</A></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/machdep.ml</TT></TD>
+<TD ALIGN=left NOWRAP>File generated by the Makefile containing
+ information about your architecture,
+ such as the size of a pointer</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/machdep.c</TT></TD>
+<TD ALIGN=left NOWRAP>C program that generates
+ <TT>machdep.ml</TT> files</TD>
+</TR></TABLE><BR>
+<!--TOC section Compiling C to CIL-->
+
+<H2 CLASS="section"><A NAME="htoc4">4</A>&nbsp;&nbsp;Compiling C to CIL</H2><!--SEC END -->
+<A NAME="sec-cabs2cil"></A>
+In this section we try to describe a few of the many transformations that are
+applied to a C program to convert it to CIL. The module that implements this
+conversion is about 5000 lines of OCaml code. In contrast a simple program
+transformation that instruments all functions to keep a shadow stack of the
+true return address (thus preventing stack smashing) is only 70 lines of code.
+This example shows that the analysis is so much simpler because it has to
+handle only a few simple C constructs and also because it can leverage on CIL
+infrastructure such as visitors and pretty-printers.<BR>
+<BR>
+In no particular order these are a few of the most significant ways in which
+C programs are compiled into CIL:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+CIL will eliminate all declarations for unused entities. This means that
+just because your hello world program includes <TT>stdio.h</TT> it does not mean
+that your analysis has to handle all the ugly stuff from <TT>stdio.h</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">Type specifiers are interpreted and normalized:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int long signed x;
+signed long extern x;
+long static int long y;
+
+// Some code that uses these declaration, so that CIL does not remove them
+int main() { return x + y; }
+</FONT></PRE>
+See the <A HREF="examples/ex1.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Anonymous structure and union declarations are given a name. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ struct { int x; } s;
+</FONT></PRE>
+See the <A HREF="examples/ex2.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Nested structure tag definitions are pulled apart. This means that all
+structure tag definitions can be found by a simple scan of the globals.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct foo {
+   struct bar {
+      union baz { 
+          int x1; 
+          double x2;
+      } u1;
+      int y;
+   } s1;
+   int z;
+} f;
+</FONT></PRE>
+See the <A HREF="examples/ex3.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All structure, union, enumeration definitions and the type definitions
+from inners scopes are moved to global scope (with appropriate renaming). This
+facilitates moving around of the references to these entities.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int main() {
+  struct foo { 
+        int x; } foo; 
+  {
+     struct foo { 
+        double d;
+     };
+     return foo.x;
+  }      
+}
+</FONT></PRE>
+See the <A HREF="examples/ex4.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Prototypes are added for those functions that are called before being
+defined. Furthermore, if a prototype exists but does not specify the type of
+parameters that is fixed. But CIL will not be able to add prototypes for those
+functions that are neither declared nor defined (but are used!).
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int f();  // Prototype without arguments
+  int f(double x) {
+      return g(x);
+  }
+  int g(double x) {
+     return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex5.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Array lengths are computed based on the initializers or by constant
+folding.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int a1[] = {1,2,3};
+  int a2[sizeof(int) &gt;= 4 ? 8 : 16];
+</FONT></PRE>
+See the <A HREF="examples/ex6.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Enumeration tags are computed using constant folding:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int main() {
+  enum { 
+     FIVE = 5, 
+     SIX, SEVEN, 
+     FOUR = FIVE - 1, 
+     EIGHT = sizeof(double)
+  } x = FIVE;
+ return x;
+}
+
+</FONT></PRE>
+See the <A HREF="examples/ex7.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializers are normalized to include specific initialization for the
+missing elements:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int a1[5] = {1,2,3};
+  struct foo { int x, y; } s1 = { 4 };
+</FONT></PRE>
+See the <A HREF="examples/ex8.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializer designators are interpreted and eliminated. Subobjects are
+properly marked with braces. CIL implements
+the whole ISO C99 specification for initializer (neither GCC nor MSVC do) and
+a few GCC extensions. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  struct foo { 
+     int x, y; 
+     int a[5];
+     struct inner {
+        int z;
+     } inner;
+  } s = { 0, .inner.z = 3, .a[1 ... 2] = 5, 4, y : 8 };
+</FONT></PRE>
+See the <A HREF="examples/ex9.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">String initializers for arrays of characters are processed
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+char foo[] = "foo plus bar";
+</FONT></PRE>
+See the <A HREF="examples/ex10.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">String constants are concatenated
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+char *foo = "foo " " plus " " bar ";
+</FONT></PRE>
+See the <A HREF="examples/ex11.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializers for local variables are turned into assignments. This is in
+order to separate completely the declarative part of a function body from the
+statements. This has the unfortunate effect that we have to drop the <TT>const</TT>
+qualifier from local variables !
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  struct foo { int f1, f2; } a [] = {1, 2, 3, 4, 5 };
+</FONT></PRE>
+See the <A HREF="examples/ex12.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Local variables in inner scopes are pulled to function scope (with
+appropriate renaming). Local scopes thus disappear. This makes it easy to find
+and operate on all local variables in a function.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  int main() {
+    int x = 6;
+    { 
+      int x = 7;
+      return x;
+    }
+    return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex13.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Global declarations in local scopes are moved to global scope:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  int main() {
+    int x = 6;
+    { 
+      static int x = 7;
+      return x;
+    }
+    return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex14.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Return statements are added for functions that are missing them. If the
+return type is not a base type then a <TT>return</TT> without a value is added.
+The guaranteed presence of return statements makes it easy to implement a
+transformation that inserts some code to be executed immediately before
+returning from a function.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo() {
+    int x = 5;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex15.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">One of the most significant transformations is that expressions that
+contain side-effects are separated into statements. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, f(int);
+   return (x ++ + f(x));
+</FONT></PRE>
+See the <A HREF="examples/ex16.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+Internally, the <TT>x ++</TT> statement is turned into an assignment which the
+pretty-printer prints like the original. CIL has only three forms of basic
+statements: assignments, function calls and inline assembly.<BR>
+<BR>
+<LI CLASS="li-enumerate">Shortcut evaluation of boolean expressions and the <TT>?:</TT> operator are
+compiled into explicit conditionals:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x;
+  int y = x ? 2 : 4;
+  int z = x || y;
+  // Here we duplicate the return statement
+  if(x &amp;&amp; y) { return 0; } else { return 1; }
+  // To avoid excessive duplication, CIL uses goto's for 
+  // statement that have more than 5 instructions
+  if(x &amp;&amp; y || z) { x ++; y ++; z ++; x ++; y ++; return z; }
+</FONT></PRE>
+See the <A HREF="examples/ex17.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC's conditional expression with missing operands are also compiled
+into conditionals:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int f();;
+  return f() ? : 4;
+</FONT></PRE>
+See the <A HREF="examples/ex18.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All forms of loops (<TT>while</TT>, <TT>for</TT> and <TT>do</TT>) are compiled
+internally as a single <TT>while(1)</TT> looping construct with explicit <TT>break</TT>
+statement for termination. For simple <TT>while</TT> loops the pretty printer is
+able to print back the original:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, y;
+   for(int i = 0; i&lt;5; i++) {
+      if(i == 5) continue;
+      if(i == 4) break;
+      i += 2;
+   } 
+   while(x &lt; 5) {
+     if(x == 3) continue;
+     x ++;
+   }
+</FONT></PRE>
+See the <A HREF="examples/ex19.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC's block expressions are compiled away. (That's right there is an
+infinite loop in this code.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x = 5, y = x;
+   int z = ({ x++; L: y -= x; y;});
+   return ({ goto L; 0; });
+</FONT></PRE>
+See the <A HREF="examples/ex20.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL contains support for both MSVC and GCC inline assembly (both in one
+internal construct)<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL compiles away the GCC extension that allows many kinds of constructs
+to be used as lvalues:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, y, z;
+   return &amp;(x ? y : z) - &amp; (x ++, x);
+</FONT></PRE>
+See the <A HREF="examples/ex21.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All types are computed and explicit casts are inserted for all
+promotions and conversions that a compiler must insert:<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL will turn old-style function definition (without prototype) into
+new-style definitions. This will make the compiler less forgiving when
+checking function calls, and will catch for example cases when a function is
+called with too few arguments. This happens in old-style code for the purpose
+of implementing variable argument functions.<BR>
+<BR>
+<LI CLASS="li-enumerate">Since CIL sees the source after preprocessing the code after CIL does
+not contain the comments and the preprocessing directives.<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL will remove from the source file those type declarations, local
+variables and inline functions that are not used in the file. This means that
+your analysis does not have to see all the ugly stuff that comes from the
+header files: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+#include &lt;stdio.h&gt;
+
+typedef int unused_type;
+
+static char unused_static (void) { return 0; }
+
+int main() {
+  int unused_local;
+  printf("Hello world\n"); // Only printf will be kept from stdio.h     
+}
+</FONT></PRE>
+See the <A HREF="examples/ex22.txt">CIL output</A> for this
+code fragment</OL>
+<!--TOC section How to Use CIL-->
+
+<H2 CLASS="section"><A NAME="htoc5">5</A>&nbsp;&nbsp;How to Use CIL</H2><!--SEC END -->
+<A NAME="sec-cil"></A><!--NAME cilly.html-->
+<BR>
+<BR>
+There are two predominant ways to use CIL to write a program analysis or
+transformation. The first is to phrase your analysis as a module that is
+called by our existing driver. The second is to use CIL as a stand-alone
+library. We highly recommend that you use <TT>cilly</TT>, our driver. <BR>
+<BR>
+<!--TOC subsection Using <TT>cilly</TT>, the CIL driver-->
+
+<H3 CLASS="subsection"><A NAME="htoc6">5.1</A>&nbsp;&nbsp;Using <TT>cilly</TT>, the CIL driver</H3><!--SEC END -->
+
+The most common way to use CIL is to write an Ocaml module containing your
+analysis and transformation, which you then link into our boilerplate
+driver application called <TT>cilly</TT>. <TT>cilly</TT> is a Perl script that
+processes and mimics <TT>GCC</TT> and <TT>MSVC</TT> command-line arguments and then
+calls <TT>cilly.byte.exe</TT> or <TT>cilly.asm.exe</TT> (CIL's Ocaml executable). <BR>
+<BR>
+An example of such module is <TT>logwrites.ml</TT>, a transformation that is
+distributed with CIL and whose purpose is to instrument code to print the
+addresses of memory locations being written. (We plan to release a
+C-language interface to CIL so that you can write your analyses in C
+instead of Ocaml.) See Section&nbsp;<A HREF="#sec-Extension">8</A> for a survey of other example
+modules. <BR>
+<BR>
+Assuming that you have written <TT>/home/necula/logwrites.ml</TT>, 
+here is how you use it: 
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Modify <TT>logwrites.ml</TT> so that it includes a CIL &#8220;feature
+ descriptor&#8221; like this: 
+<PRE CLASS="verbatim">
+let feature : featureDescr = 
+  { fd_name = "logwrites";              
+    fd_enabled = ref false;
+    fd_description = "generation of code to log memory writes";
+    fd_extraopt = [];
+    fd_doit = 
+    (function (f: file) -&gt; 
+      let lwVisitor = new logWriteVisitor in
+      visitCilFileSameGlobals lwVisitor f)
+  } 
+</PRE>The <TT>fd_name</TT> field names the feature and its associated
+ command-line arguments. The <TT>fd_enabled</TT> field is a <TT>bool ref</TT>.
+ &#8220;<TT>fd_doit</TT>&#8221; will be invoked if <TT>!fd_enabled</TT> is true after
+ argument parsing, so initialize the ref cell to true if you want
+ this feature to be enabled by default.<BR>
+<BR>
+When the user passes the <TT>--dologwrites</TT>
+ command-line option to <TT>cilly</TT>, the variable associated with the
+ <TT>fd_enabled</TT> flag is set and the <TT>fd_doit</TT> function is called
+ on the <TT>Cil.file</TT> that represents the merger (see Section&nbsp;<A HREF="#sec-merger">13</A>) of
+ all C files listed as arguments. <BR>
+<BR>
+<LI CLASS="li-enumerate">Invoke <TT>configure</TT> with the arguments
+<PRE CLASS="verbatim">
+./configure EXTRASRCDIRS=/home/necula EXTRAFEATURES=logwrites
+</PRE>
+ This step works if each feature is packaged into its own ML file, and the
+name of the entry point in the file is <TT>feature</TT>.<BR>
+<BR>
+An alternative way to specify the new features is to change the build files
+yourself, as explained below. You'll need to use this method if a single
+feature is split across multiple files.
+<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Put <TT>logwrites.ml</TT> in the <TT>src</TT> or <TT>src/ext</TT> directory. This
+ will make sure that <TT>make</TT> can find it. If you want to put it in some
+ other directory, modify <TT>Makefile.in</TT> and add to <TT>SOURCEDIRS</TT> your
+ directory. Alternately, you can create a symlink from <TT>src</TT> or
+ <TT>src/ext</TT> to your file.<BR>
+<BR>
+<LI CLASS="li-enumerate">Modify the <TT>Makefile.in</TT> and add your module to the 
+ <TT>CILLY_MODULES</TT> or
+ <TT>CILLY_LIBRARY_MODULES</TT> variables. The order of the modules matters. Add
+ your modules somewhere after <TT>cil</TT> and before <TT>main</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">If you have any helper files for your module, add those to
+ the makefile in the same way. e.g.:
+<PRE CLASS="verbatim">
+CILLY_MODULES = $(CILLY_LIBRARY_MODULES) \
+                myutilities1 myutilities2 logwrites \
+                main
+</PRE>
+ Again, order is important: <TT>myutilities2.ml</TT> will be able to refer
+ to Myutilities1 but not Logwrites. If you have any ocamllex or ocamlyacc
+ files, add them to both <TT>CILLY_MODULES</TT> and either <TT>MLLS</TT> or
+ <TT>MLYS</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">Modify <TT>main.ml</TT> so that your new feature descriptor appears in
+ the global list of CIL features. 
+<PRE CLASS="verbatim">
+let features : C.featureDescr list = 
+  [ Logcalls.feature;
+    Oneret.feature;    
+    Heapify.feature1;  
+    Heapify.feature2;
+    makeCFGFeature; 
+    Partial.feature;
+    Simplemem.feature;
+    Logwrites.feature;  (* add this line to include the logwrites feature! *)
+  ] 
+  @ Feature_config.features 
+</PRE>
+ Features are processed in the order they appear on this list. Put
+ your feature last on the list if you plan to run any of CIL's
+ built-in features (such as makeCFGfeature) before your own.</OL><BR>
+Standard code in <TT>cilly</TT> takes care of adding command-line arguments,
+ printing the description, and calling your function automatically. 
+ Note: do not worry about introducing new bugs into CIL by adding a single
+ line to the feature list. <BR>
+<BR>
+<LI CLASS="li-enumerate">Now you can invoke the <TT>cilly</TT> application on a preprocessed file, or
+ instead use the <TT>cilly</TT> driver which provides a convenient compiler-like
+ interface to <TT>cilly</TT>. See Section&nbsp;<A HREF="#sec-driver">7</A> for details using <TT>cilly</TT>.
+ Remember to enable your analysis by passing the right argument (e.g.,
+ <TT>--dologwrites</TT>). </OL>
+<!--TOC subsection Using CIL as a library-->
+
+<H3 CLASS="subsection"><A NAME="htoc7">5.2</A>&nbsp;&nbsp;Using CIL as a library</H3><!--SEC END -->
+
+CIL can also be built as a library that is called from your stand-alone
+application. Add <TT>cil/src</TT>, <TT>cil/src/frontc</TT>, <TT>cil/obj/x86_LINUX</TT>
+(or <TT>cil/obj/x86_WIN32</TT>) to your Ocaml project <TT>-I</TT> include paths.
+Building CIL will also build the library <TT>cil/obj/*/cil.cma</TT> (or
+<TT>cil/obj/*/cil.cmxa</TT>). You can then link your application against that
+library. <BR>
+<BR>
+You can call the <TT>Frontc.parse: string -&gt; unit -&gt; Cil.file</TT> function with
+the name of a file containing the output of the C preprocessor.
+The <TT>Mergecil.merge: Cil.file list -&gt; string -&gt; Cil.file</TT> function merges
+multiple files. You can then invoke your analysis function on the resulting
+<TT>Cil.file</TT> data structure. You might want to call
+<TT>Rmtmps.removeUnusedTemps</TT> first to clean up the prototypes and variables
+that are not used. Then you can call the function <TT>Cil.dumpFile:
+cilPrinter -&gt; out_channel -&gt; Cil.file -&gt; unit</TT> to print the file to a
+given output channel. A good <TT>cilPrinter</TT> to use is
+<TT>defaultCilPrinter</TT>. <BR>
+<BR>
+Check out <TT>src/main.ml</TT> and <TT>bin/cilly</TT> for other good ideas
+about high-level file processing. Again, we highly recommend that you just
+our <TT>cilly</TT> driver so that you can avoid spending time re-inventing the
+wheel to provide drop-in support for standard <TT>makefile</TT>s. <BR>
+<BR>
+Here is a concrete example of compiling and linking your project against
+CIL. Imagine that your program analysis or transformation is contained in
+the single file <TT>main.ml</TT>. 
+<PRE CLASS="verbatim">
+$ ocamlopt -c -I $(CIL)/obj/x86_LINUX/ main.ml
+$ ocamlopt -ccopt -L$(CIL)/obj/x86_LINUX/ -o main unix.cmxa str.cmxa \ 
+        $(CIL)/obj/x86_LINUX/cil.cmxa main.cmx
+</PRE>
+The first line compiles your analysis, the second line links it against CIL
+(as a library) and the Ocaml Unix library. For more information about
+compiling and linking Ocaml programs, see the Ocaml home page
+at <A HREF="javascript:loadTop('http://caml.inria.fr/ocaml/')">http://caml.inria.fr/ocaml/</A>. <BR>
+<BR>
+In the next section we give an overview of the API that you can use
+to write your analysis and transformation. <BR>
+<BR>
+<!--TOC section CIL API Documentation-->
+
+<H2 CLASS="section"><A NAME="htoc8">6</A>&nbsp;&nbsp;CIL API Documentation</H2><!--SEC END -->
+<A NAME="sec-api"></A> 
+The CIL API is documented in the file <TT>src/cil.mli</TT>. We also have an
+<A HREF="api/index.html">online documentation</A> extracted from <TT>cil.mli</TT>. We
+index below the main types that are used to represent C programs in CIL: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/index_types.html">An index of all types</A>
+<LI CLASS="li-itemize"><A HREF="api/index_values.html">An index of all values</A>
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfile">Cil.file</A> is the representation of a file.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEglobal">Cil.global</A> is the representation of a global declaration or
+definitions. Values for <A HREF="api/Cil.html#VALemptyFunction">operating on globals</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEtyp">Cil.typ</A> is the representation of a type. 
+Values for <A HREF="api/Cil.html#VALvoidType">operating on types</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEcompinfo">Cil.compinfo</A> is the representation of a structure or a union
+type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfieldinfo">Cil.fieldinfo</A> is the representation of a field in a structure
+or a union
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEenuminfo">Cil.enuminfo</A> is the representation of an enumeration type. 
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEvarinfo">Cil.varinfo</A> is the representation of a variable 
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfundec">Cil.fundec</A> is the representation of a function
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPElval">Cil.lval</A> is the representation of an lvalue.
+Values for <A HREF="api/Cil.html#VALmakeVarInfo">operating on lvalues</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEexp">Cil.exp</A> is the representation of an expression without
+side-effects. 
+Values for <A HREF="api/Cil.html#VALzero">operating on expressions</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEinstr">Cil.instr</A> is the representation of an instruction (with
+side-effects but without control-flow)
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> is the representation of a control-flow statements. 
+Values for <A HREF="api/Cil.html#VALmkStmt">operating on statements</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A> is the representation of attributes. 
+Values for <A HREF="api/Cil.html#TYPEattributeClass">operating on attributes</A>.
+</UL>
+<!--TOC subsection Using the visitor-->
+
+<H3 CLASS="subsection"><A NAME="htoc9">6.1</A>&nbsp;&nbsp;Using the visitor</H3><!--SEC END -->
+<A NAME="sec-visitor"></A>
+One of the most useful tools exported by the CIL API is an implementation of
+the visitor pattern for CIL programs. The visiting engine scans depth-first
+the structure of a CIL program and at each node is queries a user-provided
+visitor structure whether it should do one of the following operations: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+Ignore this node and all its descendants
+<LI CLASS="li-itemize">Descend into all of the children and when done rebuild the node if any
+of the children have changed. 
+<LI CLASS="li-itemize">Replace the subtree rooted at the node with another tree.
+<LI CLASS="li-itemize">Replace the subtree with another tree, then descend into the children
+and rebuild the node if necessary and then invoke a user-specified function. 
+<LI CLASS="li-itemize">In addition to all of the above actions then visitor can specify that
+some instructions should be queued to be inserted before the current
+instruction or statement being visited. 
+</UL>
+By writing visitors you can customize the program traversal and
+transformation. One major limitation of the visiting engine is that it does
+not propagate information from one node to another. Each visitor must use its
+own private data to achieve this effect if necessary. <BR>
+<BR>
+Each visitor is an object that is an instance of a class of type <A HREF="api/Cil.cilVisitor.html#.">Cil.cilVisitor..</A>
+The most convenient way to obtain such classes is to specialize the
+<A HREF="api/Cil.nopCilVisitor.html#c">Cil.nopCilVisitor.c</A>lass (which just traverses the tree doing
+nothing). Any given specialization typically overrides only a few of the
+methods. Take a look for example at the visitor defined in the module
+<TT>logwrites.ml</TT>. Another, more elaborate example of a visitor is the
+[copyFunctionVisitor] defined in <TT>cil.ml</TT>.<BR>
+<BR>
+Once you have defined a visitor you can invoke it with one of the functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> or <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> - visit a file
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilGlobal">Cil.visitCilGlobal</A> - visit a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilFunction">Cil.visitCilFunction</A> - visit a function definition
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilExp">Cil.visitCilExp</A> - visit an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilLval">Cil.visitCilLval</A> - visit an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilInstr">Cil.visitCilInstr</A> - visit an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilStmt">Cil.visitCilStmt</A> - visit a statement
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilType">Cil.visitCilType</A> - visit a type. Note that this does not visit
+the files of a composite type. use visitGlobal to visit the [GCompTag] that
+defines the fields.
+</UL>
+Some transformations may want to use visitors to insert additional
+instructions before statements and instructions. To do so, pass a list of
+instructions to the <A HREF="api/Cil.html#VALqueueInstr">Cil.queueInstr</A> method of the specialized
+object. The instructions will automatically be inserted before that
+instruction in the transformed code. The <A HREF="api/Cil.html#VALunqueueInstr">Cil.unqueueInstr</A> method
+should not normally be called by the user. <BR>
+<BR>
+<!--TOC subsection Interpreted Constructors and Deconstructors-->
+
+<H3 CLASS="subsection"><A NAME="htoc10">6.2</A>&nbsp;&nbsp;Interpreted Constructors and Deconstructors</H3><!--SEC END -->
+
+Interpreted constructors and deconstructors are a facility for constructing
+and deconstructing CIL constructs using a pattern with holes that can be
+filled with a variety of kinds of elements. The pattern is a string that uses
+the C syntax to represent C language elements. For example, the following
+code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cType "void * const (*)(int x)"
+</FONT></PRE>
+is an alternative way to construct the internal representation of the type of pointer to function
+with an integer argument and a void * const as result: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+TPtr(TFun(TVoid [Attr("const", [])],
+          [ ("x", TInt(IInt, []), []) ], false, []), [])
+</FONT></PRE>
+The advantage of the interpreted constructors is that you can use familiar C
+syntax to construct CIL abstract-syntax trees. <BR>
+<BR>
+You can construct this way types, lvalues, expressions, instructions and
+statements. The pattern string can also contain a number of placeholders that
+are replaced during construction with CIL items passed as additional argument
+to the construction function. For example, the <TT>%e:id</TT> placeholder means
+that the argument labeled &#8220;id&#8221; (expected to be of form <TT>Fe exp</TT>) will
+supply the expression to replace the placeholder. For example, the following
+code constructs an increment instruction at location <TT>loc</TT>:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cInstr "%v:x = %v:x + %e:something"
+        loc
+        [ ("something", Fe some_exp);
+          ("x", Fv some_varinfo) ]
+</FONT></PRE>
+An alternative way to construct the same CIL instruction is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Set((Var some_varinfo, NoOffset),
+    BinOp(PlusA, Lval (Var some_varinfo, NoOffset),
+          some_exp, intType), 
+    loc)
+</FONT></PRE>
+See <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> for a definition of the placeholders that are
+understood.<BR>
+<BR>
+A dual feature is the interpreted deconstructors. This can be used to test
+whether a CIL construct has a certain form:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.dType "void * const (*)(int x)" t
+</FONT></PRE>
+will test whether the actual argument <TT>t</TT> is indeed a function pointer of
+the required type. If it is then the result is <TT>Some []</TT> otherwise it is
+<TT>None</TT>. Furthermore, for the purpose of the interpreted deconstructors
+placeholders in patterns match anything of the right type. For example, 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.dType "void * (*)(%F:t)" t
+</FONT></PRE>
+will match any function pointer type, independent of the type and number of
+the formals. If the match succeeds the result is <TT>Some [ FF forms ]</TT> where
+<TT>forms</TT> is a list of names and types of the formals. Note that each member
+in the resulting list corresponds positionally to a placeholder in the
+pattern.<BR>
+<BR>
+The interpreted constructors and deconstructors do not support the complete C
+syntax, but only a substantial fragment chosen to simplify the parsing. The
+following is the syntax that is supported:
+<PRE CLASS="verbatim">
+Expressions:
+  E ::= %e:ID | %d:ID | %g:ID | n | L | ( E ) | Unop E | E Binop E 
+        | sizeof E | sizeof ( T ) | alignof E  | alignof ( T ) 
+        | &amp; L | ( T ) E 
+
+Unary operators:
+  Unop ::= + | - | ~ | %u:ID
+
+Binary operators:
+  Binop ::= + | - | * | / | &lt;&lt; | &gt;&gt; | &amp; | ``|'' | ^ 
+          | == | != | &lt; | &gt; | &lt;= | &gt;= | %b:ID
+
+Lvalues:
+  L ::= %l:ID | %v:ID Offset | * E | (* E) Offset | E -&gt; ident Offset 
+
+Offsets:
+  Offset ::= empty | %o:ID | . ident Offset | [ E ] Offset
+
+Types:
+  T ::= Type_spec Attrs Decl
+
+Type specifiers:
+  Type_spec ::= void | char | unsigned char | short | unsigned short
+            | int | unsigned int | long | unsigned long | %k:ID | float 
+            | double | struct %c:ID | union %c:ID 
+
+
+Declarators:
+  Decl ::= * Attrs Decl | Direct_decl
+
+
+Direct declarators:
+  Direct_decl ::= empty | ident | ( Attrs Decl ) 
+                 | Direct_decl [ Exp_opt ]
+                 | ( Attrs Decl )( Parameters )
+
+Optional expressions
+  Exp_opt ::= empty | E | %eo:ID
+
+Formal parameters
+  Parameters ::= empty | ... | %va:ID | %f:ID | T | T , Parameters
+
+List of attributes
+  Attrs ::= empty | %A:ID | Attrib Attrs
+
+Attributes
+  Attrib ::= const | restrict | volatile | __attribute__ ( ( GAttr ) )
+
+GCC Attributes
+  GAttr ::= ident | ident ( AttrArg_List )
+
+Lists of GCC Attribute arguments:
+  AttrArg_List ::= AttrArg | %P:ID | AttrArg , AttrArg_List
+
+GCC Attribute arguments  
+  AttrArg ::= %p:ID | ident | ident ( AttrArg_List )
+
+Instructions
+  Instr ::= %i:ID ; | L = E ; | L Binop= E | Callres L ( Args )
+
+Actual arguments
+   Args ::= empty | %E:ID | E | E , Args
+
+Call destination
+   Callres ::= empty | L = | %lo:ID
+
+Statements
+  Stmt ::= %s:ID | if ( E ) then Stmt ; | if ( E ) then Stmt else Stmt ;
+       | return Exp_opt | break ; | continue ; | { Stmt_list } 
+       | while (E ) Stmt | Instr_list 
+
+Lists of statements
+   Stmt_list ::= empty | %S:ID | Stmt Stmt_list  
+                | Type_spec Attrs Decl ; Stmt_list
+                | Type_spec Attrs Decl = E ; Stmt_list
+                | Type_spec Attrs Decl = L (Args) ; Stmt_list
+
+List of instructions
+   Instr_list ::= Instr | %I:ID | Instr Instr_list
+</PRE>
+Notes regarding the syntax:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+In the grammar description above non-terminals are written with
+uppercase initial<BR>
+<BR>
+<LI CLASS="li-itemize">All of the patterns consist of the <TT>%</TT> character followed by one or
+two letters, followed by &#8220;:&#8221; and an indentifier. For each such
+pattern there is a corresponding constructor of the <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A>
+type, whose name is the letter 'F' followed by the same one or two letters as
+in the pattern. That constructor is used by the user code to pass a
+<A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> actual argument to the interpreted constructor and by
+the interpreted deconstructor to return what was matched for a pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">If the pattern name is uppercase, it designates a list of the elements
+designated by the corresponding lowercase pattern. E.g. %E designated lists
+of expressions (as in the actual arguments of a call).<BR>
+<BR>
+<LI CLASS="li-itemize">The two-letter patterns whose second letter is &#8220;o&#8221; designate an
+optional element. E.g. %eo designates an optional expression (as in the
+length of an array). <BR>
+<BR>
+<LI CLASS="li-itemize">Unlike in calls to <TT>printf</TT>, the pattern %g is used for strings. <BR>
+<BR>
+<LI CLASS="li-itemize">The usual precedence and associativity rules as in C apply <BR>
+<BR>
+<LI CLASS="li-itemize">The pattern string can contain newlines and comments, using both the
+<TT>/* ... */</TT> style as well as the <TT>//</TT> one. <BR>
+<BR>
+<LI CLASS="li-itemize">When matching a &#8220;cast&#8221; pattern of the form <TT>( T ) E</TT>, the
+deconstructor will match even expressions that do not have the actual cast but
+in that case the type is matched against the type of the expression. E.g. the
+patters <TT>"(int)%e"</TT> will match any expression of type <TT>int</TT> whether it
+has an explicit cast or not. <BR>
+<BR>
+<LI CLASS="li-itemize">The %k pattern is used to construct and deconstruct an integer type of
+any kind. <BR>
+<BR>
+<LI CLASS="li-itemize">Notice that the syntax of types and declaration are the same (in order
+to simplify the parser). This means that technically you can write a whole
+declaration instead of a type in the cast. In this case the name that you
+declare is ignored.<BR>
+<BR>
+<LI CLASS="li-itemize">In lists of formal parameters and lists of attributes, an empty list in
+the pattern matches any formal parameters or attributes. <BR>
+<BR>
+<LI CLASS="li-itemize">When matching types, uses of named types are unrolled to expose a real
+type before matching. <BR>
+<BR>
+<LI CLASS="li-itemize">The order of the attributes is ignored during matching. The the pattern
+for a list of attributes contains %A then the resulting <TT>formatArg</TT> will be
+bound to <B>all</B> attributes in the list. For example, the pattern <TT>"const
+%A"</TT> matches any list of attributes that contains <TT>const</TT> and binds the
+corresponding placeholder to the entire list of attributes, including
+<TT>const</TT>. <BR>
+<BR>
+<LI CLASS="li-itemize">All instruction-patterns must be terminated by semicolon<BR>
+<BR>
+<LI CLASS="li-itemize">The autoincrement and autodecrement instructions are not supported. Also
+not supported are complex expressions, the <TT>&amp;&amp;</TT> and <TT>||</TT> shortcut
+operators, and a number of other more complex instructions or statements. In
+general, the patterns support only constructs that can be represented directly
+in CIL.<BR>
+<BR>
+<LI CLASS="li-itemize">The pattern argument identifiers are not used during deconstruction.
+Instead, the result contains a sequence of values in the same order as the
+appearance of pattern arguments in the pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">You can mix statements with declarations. For each declaration a new
+ temporary will be constructed (using a function you provive). You can then
+ refer to that temporary by name in the rest of the pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">The <TT>%v:</TT> pattern specifier is optional.
+</UL>
+The following function are defined in the <TT>Formatcil</TT> module for
+constructing and deconstructing:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Formatcil.html#VALcExp">Formatcil.cExp</A> constructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcType">Formatcil.cType</A> constructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcLval">Formatcil.cLval</A> constructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcInstr">Formatcil.cInstr</A> constructs <A HREF="api/Cil.html#TYPEinstr">Cil.instr</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcStmt">Formatcil.cStmt</A> and <A HREF="api/Formatcil.html#VALcStmts">Formatcil.cStmts</A> construct <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdExp">Formatcil.dExp</A> deconstructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdType">Formatcil.dType</A> deconstructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdLval">Formatcil.dLval</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdInstr">Formatcil.dInstr</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+</UL>
+Below is an example using interpreted constructors. This example generates
+the CIL representation of code that scans an array backwards and initializes
+every even-index element with an expression:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cStmts
+  loc
+  "int idx = sizeof(array) / sizeof(array[0]) - 1;
+   while(idx &gt;= 0) {
+     // Some statements to be run for all the elements of the array
+     %S:init
+     if(! (idx &amp; 1)) 
+       array[idx] = %e:init_even;
+     /* Do not forget to decrement the index variable */
+     idx = idx - 1;
+   }"
+  (fun n t -&gt; makeTempVar myfunc ~name:n t)
+  [ ("array", Fv myarray); 
+    ("init", FS [stmt1; stmt2; stmt3]);
+    ("init_even", Fe init_expr_for_even_elements) ]
+</FONT></PRE>
+To write the same CIL statement directly in CIL would take much more effort.
+Note that the pattern is parsed only once and the result (a function that
+takes the arguments and constructs the statement) is memoized. <BR>
+<BR>
+<!--TOC subsubsection Performance considerations for interpreted constructors-->
+
+<H4 CLASS="subsubsection"><A NAME="htoc11">6.2.1</A>&nbsp;&nbsp;Performance considerations for interpreted constructors</H4><!--SEC END -->
+
+Parsing the patterns is done with a LALR parser and it takes some time. To
+improve performance the constructors and deconstructors memoize the parsed
+patterns and will only compile a pattern once. Also all construction and
+deconstruction functions can be applied partially to the pattern string to
+produce a function that can be later used directly to construct or
+deconstruct. This function appears to be about two times slower than if the
+construction is done using the CIL constructors (without memoization the
+process would be one order of magnitude slower.) However, the convenience of
+interpreted constructor might make them a viable choice in many situations
+when performance is not paramount (e.g. prototyping).<BR>
+<BR>
+<!--TOC subsection Printing and Debugging support-->
+
+<H3 CLASS="subsection"><A NAME="htoc12">6.3</A>&nbsp;&nbsp;Printing and Debugging support</H3><!--SEC END -->
+
+The Modules <A HREF="api/Pretty.html">Pretty</A> and <A HREF="api/Errormsg.html">Errormsg</A> contain respectively
+utilities for pretty printing and reporting errors and provide a convenient
+<TT>printf</TT>-like interface. <BR>
+<BR>
+Additionally, CIL defines for each major type a pretty-printing function that
+you can use in conjunction with the <A HREF="api/Pretty.html">Pretty</A> interface. The
+following are some of the pretty-printing functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALd_exp">Cil.d_exp</A> - print an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_type">Cil.d_type</A> - print a type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_lval">Cil.d_lval</A> - print an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_global">Cil.d_global</A> - print a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_stmt">Cil.d_stmt</A> - print a statment
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_instr">Cil.d_instr</A> - print an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_init">Cil.d_init</A> - print an initializer
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attr">Cil.d_attr</A> - print an attribute
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attrlist">Cil.d_attrlist</A> - print a set of attributes
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_loc">Cil.d_loc</A> - print a location
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_ikind">Cil.d_ikind</A> - print an integer kind
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_fkind">Cil.d_fkind</A> - print a floating point kind
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_const">Cil.d_const</A> - print a constant
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_storage">Cil.d_storage</A> - print a storage specifier
+</UL>
+You can even customize the pretty-printer by creating instances of
+<A HREF="api/Cil.cilPrinter.html#.">Cil.cilPrinter..</A> Typically such an instance extends
+<A HREF="api/Cil.html#VALdefaultCilPrinter">Cil.defaultCilPrinter</A>. Once you have a customized pretty-printer you
+can use the following printing functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALprintExp">Cil.printExp</A> - print an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintType">Cil.printType</A> - print a type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintLval">Cil.printLval</A> - print an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintGlobal">Cil.printGlobal</A> - print a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintStmt">Cil.printStmt</A> - print a statment
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInstr">Cil.printInstr</A> - print an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInit">Cil.printInit</A> - print an initializer
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttr">Cil.printAttr</A> - print an attribute
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttrs">Cil.printAttrs</A> - print a set of attributes
+</UL>
+CIL has certain internal consistency invariants. For example, all references
+to a global variable must point to the same <TT>varinfo</TT> structure. This
+ensures that one can rename the variable by changing the name in the
+<TT>varinfo</TT>. These constraints are mentioned in the API documentation. There
+is also a consistency checker in file <TT>src/check.ml</TT>. If you suspect that
+your transformation is breaking these constraints then you can pass the
+<TT>--check</TT> option to cilly and this will ensure that the consistency checker
+is run after each transformation. <BR>
+<BR>
+<!--TOC subsection Attributes-->
+
+<H3 CLASS="subsection"><A NAME="htoc13">6.4</A>&nbsp;&nbsp;Attributes</H3><!--SEC END -->
+<A NAME="sec-attrib"></A>
+In CIL you can attach attributes to types and to names (variables, functions
+and fields). Attributes are represented using the type <A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A>.
+An attribute consists of a name and a number of arguments (represented using
+the type <A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). Almost any expression can be used as an
+attribute argument. Attributes are stored in lists sorted by the name of the
+attribute. To maintain list ordering, use the functions
+<A HREF="api/Cil.html#VALtypeAttrs">Cil.typeAttrs</A> to retrieve the attributes of a type and the functions
+<A HREF="api/Cil.html#VALaddAttribute">Cil.addAttribute</A> and <A HREF="api/Cil.html#VALaddAttributes">Cil.addAttributes</A> to add attributes.
+Alternatively you can use <A HREF="api/Cil.html#VALtypeAddAttributes">Cil.typeAddAttributes</A> to add an attribute to
+a type (and return the new type).<BR>
+<BR>
+GCC already has extensive support for attributes, and CIL extends this
+support to user-defined attributes. A GCC attribute has the syntax:
+<PRE CLASS="verbatim">
+ gccattribute ::= __attribute__((attribute))    (Note the double parentheses)
+</PRE>
+ Since GCC and MSVC both support various flavors of each attribute (with or
+without leading or trailing _) we first strip ALL leading and trailing _
+from the attribute name (but not the identified in [ACons] parameters in
+<A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). When we print attributes, for GCC we add two leading
+and two trailing _; for MSVC we add just two leading _.<BR>
+<BR>
+There is support in CIL so that you can control the printing of attributes
+(see <A HREF="api/Cil.html#VALsetCustomPrintAttribute">Cil.setCustomPrintAttribute</A> and
+<A HREF="api/Cil.html#VALsetCustomPrintAttributeScope">Cil.setCustomPrintAttributeScope</A>). This custom-printing support is now
+used to print the "const" qualifier as "<TT>const</TT>" and not as
+"<TT>__attribute__((const))</TT>".<BR>
+<BR>
+The attributes are specified in declarations. This is unfortunate since the C
+syntax for declarations is already quite complicated and after writing the
+parser and elaborator for declarations I am convinced that few C programmers
+understand it completely. Anyway, this seems to be the easiest way to support
+attributes. <BR>
+<BR>
+Name attributes must be specified at the very end of the declaration, just
+before the <TT>=</TT> for the initializer or before the <TT>,</TT> the separates a
+declaration in a group of declarations or just before the <TT>;</TT> that
+terminates the declaration. A name attribute for a function being defined can
+be specified just before the brace that starts the function body.<BR>
+<BR>
+For example (in the following examples <TT>A1</TT>,...,<TT>An</TT> are type attributes
+and <TT>N</TT> is a name attribute (each of these uses the <TT>__attribute__</TT> syntax):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ int x N;
+ int x N, * y N = 0, z[] N;
+ extern void exit() N;
+ int fact(int x) N { ... }
+</FONT></PRE>
+Type attributes can be specified along with the type using the following
+ rules: 
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ The type attributes for a base type (int, float, named type, reference
+ to struct or union or enum) must be specified immediately following the
+ type (actually it is Ok to mix attributes with the specification of the
+ type, in between unsigned and int for example).<BR>
+<BR>
+For example:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int A1 x N;  /* A1 applies to the type int. An example is an attribute
+                   "even" restricting the type int to even values. */
+  struct foo A1 A2 x; // Both A1 and A2 apply to the struct foo type
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-enumerate">The type attributes for a pointer type must be specified immediately
+ after the * symbol.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ /* A pointer (A1) to an int (A2) */
+ int A2 * A1 x;
+ /* A pointer (A1) to a pointer (A2) to a float (A3) */
+ float A3 * A2 * A1 x;
+</FONT></PRE>
+Note: The attributes for base types and for pointer types are a strict
+ extension of the ANSI C type qualifiers (const, volatile and restrict). In
+ fact CIL treats these qualifiers as attributes. <BR>
+<BR>
+<LI CLASS="li-enumerate">The attributes for a function type or for an array type can be
+ specified using parenthesized declarators.<BR>
+<BR>
+For example:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   /* A function (A1) from int (A2) to float (A3) */
+   float A3 (A1 f)(int A2);
+
+   /* A pointer (A1) to a function (A2) that returns an int (A3) */
+   int A3 (A2 * A1 pfun)(void);
+
+   /* An array (A1) of int (A2) */
+   int A2 (A1 x0)[]
+
+   /* Array (A1) of pointers (A2) to functions (A3) that take an int (A4) and 
+    * return a pointer (A5) to int (A6)  */
+   int A6 * A5 (A3 * A2 (A1 x1)[5])(int A4);
+
+
+   /* A function (A4) that takes a float (A5) and returns a pointer (A6) to an 
+    * int (A7) */
+   extern int A7 * A6 (A4 x2)(float A5 x);
+
+   /* A function (A1) that takes a int (A2) and that returns a pointer (A3) to 
+    * a function (A4) that takes a float (A5) and returns a pointer (A6) to an 
+    * int (A7) */
+   int A7 * A6 (A4 * A3 (A1 x3)(int A2 x))(float A5) {
+      return &amp; x2;
+   }
+</FONT></PRE></OL>
+Note: ANSI C does not allow the specification of type qualifiers for function
+and array types, although it allows for the parenthesized declarator. With
+just a bit of thought (looking at the first few examples above) I hope that
+the placement of attributes for function and array types will seem intuitive.<BR>
+<BR>
+This extension is not without problems however. If you want to refer just to
+a type (in a cast for example) then you leave the name out. But this leads to
+strange conflicts due to the parentheses that we introduce to scope the
+attributes. Take for example the type of x0 from above. It should be written
+as: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+        int A2 (A1 )[]
+</FONT></PRE>
+But this will lead most C parsers into deep confusion because the parentheses
+around A1 will be confused for parentheses of a function designator. To push
+this problem around (I don't know a solution) whenever we are about to print a
+parenthesized declarator with no name but with attributes, we comment out the
+attributes so you can see them (for whatever is worth) without confusing the
+compiler. For example, here is how we would print the above type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+        int A2 /*(A1 )*/[]
+</FONT></PRE>
+<!--TOC paragraph Handling of predefined GCC attributes-->
+
+<H5 CLASS="paragraph">Handling of predefined GCC attributes</H5><!--SEC END -->
+
+GCC already supports attributes in a lot of places in declarations. The only
+place where we support attributes and GCC does not is right before the { that
+starts a function body. <BR>
+<BR>
+GCC classifies its attributes in attributes for functions, for variables and
+for types, although the latter category is only usable in definition of struct
+or union types and is not nearly as powerful as the CIL type attributes. We
+have made an effort to reclassify GCC attributes as name and type attributes
+(they only apply for function types). Here is what we came up with:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+ GCC name attributes:<BR>
+<BR>
+section, constructor, destructor, unused, weak, no_instrument_function,
+ noreturn, alias, no_check_memory_usage, dllinport, dllexport, exception,
+ model<BR>
+<BR>
+Note: the "noreturn" attribute would be more appropriately qualified as a
+ function type attribute. But we classify it as a name attribute to make
+ it easier to support a similarly named MSVC attribute. <BR>
+<BR>
+<LI CLASS="li-itemize">GCC function type attributes:<BR>
+<BR>
+fconst (printed as "const"), format, regparm, stdcall,
+ cdecl, longcall<BR>
+<BR>
+I was not able to completely decipher the position in which these attributes
+ must go. So, the CIL elaborator knows these names and applies the following
+ rules: 
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ All of the name attributes that appear in the specifier part (i.e. at
+ the beginning) of a declaration are associated with all declared names. <BR>
+<BR>
+<LI CLASS="li-itemize">All of the name attributes that appear at the end of a declarator are
+ associated with the particular name being declared.<BR>
+<BR>
+<LI CLASS="li-itemize">More complicated is the handling of the function type attributes, since
+ there can be more than one function in a single declaration (a function
+ returning a pointer to a function). Lacking any real understanding of how
+ GCC handles this, I attach the function type attribute to the "nearest"
+ function. This means that if a pointer to a function is "nearby" the
+ attribute will be correctly associated with the function. In truth I pray
+ that nobody uses declarations as that of x3 above. 
+ </UL>
+</UL>
+<!--TOC paragraph Handling of predefined MSVC attributes-->
+
+<H5 CLASS="paragraph">Handling of predefined MSVC attributes</H5><!--SEC END -->
+
+MSVC has two kinds of attributes, declaration modifiers to be printed before
+ the storage specifier using the notation "<TT>__declspec(...)</TT>" and a few
+ function type attributes, printed almost as our CIL function type
+ attributes. <BR>
+<BR>
+The following are the name attributes that are printed using
+ <TT>__declspec</TT> right before the storage designator of the declaration:
+ thread, naked, dllimport, dllexport, noreturn<BR>
+<BR>
+The following are the function type attributes supported by MSVC: 
+ fastcall, cdecl, stdcall<BR>
+<BR>
+It is not worth going into the obscure details of where MSVC accepts these
+ type attributes. The parser thinks it knows these details and it pulls
+ these attributes from wherever they might be placed. The important thing
+ is that MSVC will accept if we print them according to the rules of the CIL
+ attributes ! <BR>
+<BR>
+<!--TOC section The CIL Driver-->
+
+<H2 CLASS="section"><A NAME="htoc14">7</A>&nbsp;&nbsp;The CIL Driver</H2><!--SEC END -->
+<A NAME="sec-driver"></A>
+We have packaged CIL as an application <TT>cilly</TT> that contains certain
+example modules, such as <TT>logwrites.ml</TT> (a module
+that instruments code to print the addresses of memory locations being
+written). Normally, you write another module like that, add command-line
+options and an invocation of your module in <TT>src/main.ml</TT>. Once you compile
+CIL you will obtain the file <TT>obj/cilly.asm.exe</TT>. <BR>
+<BR>
+We wrote a driver for this executable that makes it easy to invoke your
+analysis on existing C code with very little manual intervention. This driver
+is <TT>bin/cilly</TT> and is quite powerful. Note that the <TT>cilly</TT> script
+is configured during installation with the path where CIL resides. This means
+that you can move it to any place you want. <BR>
+<BR>
+A simple use of the driver is:
+<PRE CLASS="verbatim">
+bin/cilly --save-temps -D HAPPY_MOOD -I myincludes hello.c -o hello
+</PRE>
+<FONT COLOR=blue>--save-temps</FONT> tells CIL to save the resulting output files in the
+current directory. Otherwise, they'll be put in <TT>/tmp</TT> and deleted
+automatically. Not that this is the only CIL-specific flag in the
+list &ndash; the other flags use <TT>gcc</TT>'s syntax.<BR>
+<BR>
+This performs the following actions: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+preprocessing using the -D and -I arguments with the resulting 
+ file left in <TT>hello.i</TT>, 
+<LI CLASS="li-itemize">the invocation of the <TT>cilly.asm</TT> application which parses <TT>hello.i</TT>
+ converts it to CIL and the pretty-prints it to <TT>hello.cil.c</TT>
+<LI CLASS="li-itemize">another round of preprocessing with the result placed in <TT>hello.cil.i</TT>
+<LI CLASS="li-itemize">the true compilation with the result in <TT>hello.cil.o</TT>
+<LI CLASS="li-itemize">a linking phase with the result in <TT>hello</TT>
+</UL>
+Note that <TT>cilly</TT> behaves like the <TT>gcc</TT> compiler. This makes it
+easy to use it with existing <TT>Makefiles</TT>:
+<PRE CLASS="verbatim">
+make CC="bin/cilly" LD="bin/cilly"
+</PRE>
+ <TT>cilly</TT> can also behave as the Microsoft Visual C compiler, if the first
+ argument is <TT>--mode=MSVC</TT>:
+<PRE CLASS="verbatim">
+bin/cilly --mode=MSVC /D HAPPY_MOOD /I myincludes hello.c /Fe hello.exe
+</PRE>
+ (This in turn will pass a <TT>--MSVC</TT> flag to the underlying <TT>cilly.asm</TT>
+ process which will make it understand the Microsoft Visual C extensions)<BR>
+<BR>
+<TT>cilly</TT> can also behave as the archiver <TT>ar</TT>, if it is passed an
+argument <TT>--mode=AR</TT>. Note that only the <TT>cr</TT> mode is supported (create a
+new archive and replace all files in there). Therefore the previous version of
+the archive is lost. <BR>
+<BR>
+Furthermore, <TT>cilly</TT> allows you to pass some arguments on to the
+underlying <TT>cilly.asm</TT> process. As a general rule all arguments that start
+with <TT>--</TT> and that <TT>cilly</TT> itself does not process, are passed on. For
+example, 
+<PRE CLASS="verbatim">
+bin/cilly --dologwrites -D HAPPY_MOOD -I myincludes hello.c -o hello.exe
+</PRE>
+ will produce a file <TT>hello.cil.c</TT> that prints all the memory addresses
+written by the application. <BR>
+<BR>
+The most powerful feature of <TT>cilly</TT> is that it can collect all the
+sources in your project, merge them into one file and then apply CIL. This
+makes it a breeze to do whole-program analysis and transformation. All you
+have to do is to pass the <TT>--merge</TT> flag to <TT>cilly</TT>:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --save-temps --dologwrites --merge"
+</PRE>
+ You can even leave some files untouched:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --save-temps --dologwrites --merge --leavealone=foo --leavealone=bar"
+</PRE>
+ This will merge all the files except those with the basename <TT>foo</TT> and
+<TT>bar</TT>. Those files will be compiled as usual and then linked in at the very
+end. <BR>
+<BR>
+The sequence of actions performed by <TT>cilly</TT> depends on whether merging
+is turned on or not:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+If merging is off
+ <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ For every file <TT>file.c</TT> to compile
+ <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Preprocess the file with the given arguments to 
+ produce <TT>file.i</TT>
+ <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>file.cil.c</TT>
+ <LI CLASS="li-enumerate">Preprocess to <TT>file.cil.i</TT>
+ <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>file.cil.o</TT>
+ </OL>
+ <LI CLASS="li-enumerate">Link the resulting objects
+ </OL>
+<LI CLASS="li-itemize">If merging is on
+ <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ For every file <TT>file.c</TT> to compile
+ <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Preprocess the file with the given arguments to 
+ produce <TT>file.i</TT>
+ <LI CLASS="li-enumerate">Save the preprocessed source as <TT>file.o</TT>
+ </OL>
+ <LI CLASS="li-enumerate">When linking executable <TT>hello.exe</TT>, look at every object 
+ file that must be linked and see if it actually 
+ contains preprocessed source. Pass all those files to a 
+ special merging application (described in
+ Section&nbsp;<A HREF="#sec-merger">13</A>) to produce <TT>hello.exe_comb.c</TT>
+ <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>hello.exe_comb.cil.c</TT>
+ <LI CLASS="li-enumerate">Preprocess to <TT>hello.exe_comb.cil.i</TT>
+ <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>hello.exe_comb.cil.o</TT>
+ <LI CLASS="li-enumerate">Invoke the actual linker to produce <TT>hello.exe</TT>
+ </OL>
+</UL>
+Note that files that you specify with <TT>--leavealone</TT> are not merged and
+never presented to CIL. They are compiled as usual and then are linked in at
+the end. <BR>
+<BR>
+And a final feature of <TT>cilly</TT> is that it can substitute copies of the
+system's include files:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --includedir=myinclude"
+</PRE>
+ This will force the preprocessor to use the file <TT>myinclude/xxx/stdio.h</TT>
+(if it exists) whenever it encounters <TT>#include &lt;stdio.h&gt;</TT>. The <TT>xxx</TT> is
+a string that identifies the compiler version you are using. This modified
+include files should be produced with the patcher script (see
+Section&nbsp;<A HREF="#sec-patcher">14</A>).<BR>
+<BR>
+<!--TOC subsection <TT>cilly</TT> Options-->
+
+<H3 CLASS="subsection"><A NAME="htoc15">7.1</A>&nbsp;&nbsp;<TT>cilly</TT> Options</H3><!--SEC END -->
+
+Among the options for the <TT>cilly</TT> you can put anything that can normally
+go in the command line of the compiler that <TT>cilly</TT> is impersonating.
+<TT>cilly</TT> will do its best to pass those options along to the appropriate
+subprocess. In addition, the following options are supported (a complete and
+up-to-date list can always be obtained by running <TT>cilly --help</TT>):
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>--mode=mode</TT> This must be the first argument if present. It makes
+<TT>cilly</TT> behave as a given compiled. The following modes are recognized: 
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ GNUCC - the GNU C Compiler. This is the default.
+ <LI CLASS="li-itemize">MSVC - the Microsoft Visual C compiler. Of course, you should
+ pass only MSVC valid options in this case. 
+ <LI CLASS="li-itemize">AR - the archiver <TT>ar</TT>. Only the mode <TT>cr</TT> is supported and
+ the original version of the archive is lost. 
+ </UL>
+<LI CLASS="li-itemize"><TT>--help</TT> Prints a list of the options supported.
+<LI CLASS="li-itemize"><TT>--verbose</TT> Prints lots of messages about what is going on.
+<LI CLASS="li-itemize"><TT>--stages</TT> Less than <TT>--verbose</TT> but lets you see what <TT>cilly</TT>
+ is doing. 
+<LI CLASS="li-itemize"><TT>--merge</TT> This tells <TT>cilly</TT> to first attempt to collect into one
+source file all of the sources that make your application, and then to apply
+<TT>cilly.asm</TT> on the resulting source. The sequence of actions in this case is
+described above and the merger itself is described in Section&nbsp;<A HREF="#sec-merger">13</A>.<BR>
+<BR>
+<LI CLASS="li-itemize"><TT>--leavealone=xxx</TT>. Do not merge and do not present to CIL the files
+whose basename is "xxx". These files are compiled as usual and linked in at
+the end. 
+<LI CLASS="li-itemize"><TT>--includedir=xxx</TT>. Override the include files with those in the given
+directory. The given directory is the same name that was given an an argument
+to the patcher (see Section&nbsp;<A HREF="#sec-patcher">14</A>). In particular this means that
+that directory contains subdirectories named based on the current compiler
+version. The patcher creates those directories. 
+<LI CLASS="li-itemize"><TT>--usecabs</TT>. Do not CIL, but instead just parse the source and print
+its AST out. This should looked like the preprocessed file. This is useful
+when you suspect that the conversion to CIL phase changes the meaning of the
+program. 
+<LI CLASS="li-itemize"><TT>--save-temps=xxx</TT>. Temporary files are preserved in the xxx
+ directory. For example, the output of CIL will be put in a file
+ named <TT>*.cil.c</TT>.
+<LI CLASS="li-itemize"><TT>--save-temps</TT>. Temporay files are preserved in the current directory.
+</UL>
+<!--TOC subsection <TT>cilly.asm</TT> Options-->
+
+<H3 CLASS="subsection"><A NAME="htoc16">7.2</A>&nbsp;&nbsp;<TT>cilly.asm</TT> Options</H3><!--SEC END -->
+
+ <A NAME="sec-cilly-asm-options"></A>
+All of the options that start with <TT>--</TT> and are not understood by
+<TT>cilly</TT> are passed on to <TT>cilly.asm</TT>. <TT>cilly</TT> also passes along to
+<TT>cilly.asm</TT> flags such as <TT>--MSVC</TT> that both need to know
+about. The following options are supported:<BR>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>General Options:</B>
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+ <TT>--version</TT> output version information and exit
+ <LI CLASS="li-itemize"><TT>--verbose</TT> Print lots of random stuff. This is passed on from cilly
+ <LI CLASS="li-itemize"><TT>--warnall</TT> Show all warnings.
+ <LI CLASS="li-itemize"><TT>--debug=xxx</TT> turns on debugging flag xxx
+ <LI CLASS="li-itemize"><TT>--nodebug=xxx</TT> turns off debugging flag xxx
+ <LI CLASS="li-itemize"><TT>--flush</TT> Flush the output streams often (aids debugging).
+ <LI CLASS="li-itemize"><TT>--check</TT> Run a consistency check over the CIL after every operation.
+ <LI CLASS="li-itemize"><TT>--nocheck</TT> turns off consistency checking of CIL.
+ <LI CLASS="li-itemize"><TT>--noPrintLn</TT> Don't output #line directives in the output.
+ <LI CLASS="li-itemize"><TT>--commPrintLn</TT> Print #line directives in the output, but
+ put them in comments.
+ <LI CLASS="li-itemize"><TT>--log=xxx</TT> Set the name of the log file. By default stderr is used
+ <LI CLASS="li-itemize"><TT>--MSVC</TT> Enable MSVC compatibility. Default is GNU.
+ <LI CLASS="li-itemize"><TT>--ignore-merge-conflicts</TT> ignore merging conflicts.
+ <LI CLASS="li-itemize"><TT>--extrafiles=filename</TT>: the name of a file that contains
+ a list of additional files to process, separated by whitespace.
+ <LI CLASS="li-itemize"><TT>--stats</TT> Print statistics about the running time of the
+ parser, conversion to CIL, etc. Also prints memory-usage
+ statistics. You can time parts of your own code as well. Calling
+ (<TT>Stats.time &#8220;label&#8221; func arg</TT>) will evaluate <TT>(func arg)</TT>
+ and remember how long this takes. If you call <TT>Stats.time</TT>
+ repeatedly with the same label, CIL will report the aggregate
+ time.<BR>
+<BR>
+If available, CIL uses the x86 performance counters for these
+ stats. This is very precise, but results in &#8220;wall-clock time.&#8221;
+ To report only user-mode time, find the call to <TT>Stats.reset</TT> in
+ <TT>main.ml</TT>, and change it to <TT>Stats.reset false</TT>.<BR>
+<BR>
+<B>Lowering Options</B>
+ <LI CLASS="li-itemize"><TT>--noLowerConstants</TT> do not lower constant expressions.
+ <LI CLASS="li-itemize"><TT>--noInsertImplicitCasts</TT> do not insert implicit casts.
+ <LI CLASS="li-itemize"><TT>--forceRLArgEval</TT> Forces right to left evaluation of function arguments.
+ <LI CLASS="li-itemize"><TT>--disallowDuplication</TT> Prevent small chunks of code from being duplicated.
+ <LI CLASS="li-itemize"><TT>--keepunused</TT> Do not remove the unused variables and types.
+ <LI CLASS="li-itemize"><TT>--rmUnusedInlines</TT> Delete any unused inline functions. This is the default in MSVC mode.<BR>
+<BR>
+<B>Output Options:</B>
+ <LI CLASS="li-itemize"><TT>--printCilAsIs</TT> Do not try to simplify the CIL when
+ printing. Without this flag, CIL will attempt to produce prettier
+ output by e.g. changing <TT>while(1)</TT> into more meaningful loops.
+ <LI CLASS="li-itemize"><TT>--noWrap</TT> do not wrap long lines when printing
+ <LI CLASS="li-itemize"><TT>--out=xxx</TT> the name of the output CIL file. <TT>cilly</TT>
+ sets this for you.
+ <LI CLASS="li-itemize"><TT>--mergedout=xxx</TT> specify the name of the merged file
+ <LI CLASS="li-itemize"><TT>--cabsonly=xxx</TT> CABS output file name
+<BR>
+<BR>
+ <B>Selected features.</B> See Section&nbsp;<A HREF="#sec-Extension">8</A> for more information.
+<LI CLASS="li-itemize"><TT>--dologcalls</TT>. Insert code in the processed source to print the name of
+functions as are called. Implemented in <TT>src/ext/logcalls.ml</TT>.
+<LI CLASS="li-itemize"><TT>--dologwrites</TT>. Insert code in the processed source to print the
+address of all memory writes. Implemented in <TT>src/ext/logwrites.ml</TT>.
+<LI CLASS="li-itemize"><TT>--dooneRet</TT>. Make each function have at most one 'return'.
+Implemented in <TT>src/ext/oneret.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dostackGuard</TT>. Instrument function calls and returns to
+maintain a separate stack for return addresses. Implemeted in
+<TT>src/ext/heapify.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--domakeCFG</TT>. Make the program look more like a CFG. Implemented
+in <TT>src/cil.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dopartial</TT>. Do interprocedural partial evaluation and
+constant folding. Implemented in <TT>src/ext/partial.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dosimpleMem</TT>. Simplify all memory expressions. Implemented in
+<TT>src/ext/simplemem.ml</TT>. <BR>
+<BR>
+For an up-to-date list of available options, run <TT>cilly.asm --help</TT>. </UL>
+<!--TOC section Library of CIL Modules-->
+
+<H2 CLASS="section"><A NAME="htoc17">8</A>&nbsp;&nbsp;Library of CIL Modules</H2><!--SEC END -->
+ <A NAME="sec-Extension"></A><!--NAME ext.html-->
+<BR>
+<BR>
+We are developing a suite of modules that use CIL for program analyses and
+transformations that we have found useful. You can use these modules directly
+on your code, or generally as inspiration for writing similar modules. A
+particularly big and complex application written on top of CIL is CCured
+(<A HREF="../ccured/index.html"><TT>../ccured/index.html</TT></A>).<BR>
+<BR>
+<!--TOC subsection Control-Flow Graphs-->
+
+<H3 CLASS="subsection"><A NAME="htoc18">8.1</A>&nbsp;&nbsp;Control-Flow Graphs</H3><!--SEC END -->
+ <A NAME="sec-cfg"></A>
+The <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> datatype includes fields for intraprocedural
+control-flow information: the predecessor and successor statements of
+the current statement. This information is not computed by default.
+If you want to use the control-flow graph, or any of the extensions in
+this section that require it, you have to explicitly ask CIL to
+compute the CFG.<BR>
+<BR>
+<!--TOC subsubsection The CFG module (new in CIL 1.3.5)-->
+
+<H4 CLASS="subsubsection"><A NAME="htoc19">8.1.1</A>&nbsp;&nbsp;The CFG module (new in CIL 1.3.5)</H4><!--SEC END -->
+
+The best way to compute the CFG is with the CFG module. Just invoke
+<A HREF="api/Cfg.html#VALcomputeFileCFG">Cfg.computeFileCFG</A> on your file. The <A HREF="api/Cfg.html">Cfg</A> API
+describes the rest of actions you can take with this module, including
+computing the CFG for one function at a time, or printing the CFG in
+<TT>dot</TT> form.<BR>
+<BR>
+<!--TOC subsubsection Simplified control flow-->
+
+<H4 CLASS="subsubsection"><A NAME="htoc20">8.1.2</A>&nbsp;&nbsp;Simplified control flow</H4><!--SEC END -->
+
+CIL can reduce high-level C control-flow constructs like <TT>switch</TT> and
+<TT>continue</TT> to lower-level <TT>goto</TT>s. This completely eliminates some
+possible classes of statements from the program and may make the result
+easier to analyze (e.g., it simplifies data-flow analysis).<BR>
+<BR>
+You can invoke this transformation on the command line with
+<TT>--domakeCFG</TT> or programatically with <A HREF="api/Cil.html#VALprepareCFG">Cil.prepareCFG</A>.
+After calling Cil.prepareCFG, you can use <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>
+to compute the CFG information and find the successor and predecessor
+of each statement.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --domakeCFG</TT>
+transforms the following code (note the fall-through in case 1): 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo (int predicate) {
+    int x = 0;
+    switch (predicate) {
+      case 0: return 111;
+      case 1: x = x + 1;
+      case 2: return (x+3);
+      case 3: break;
+      default: return 222;
+    }
+    return 333;
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex23.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Data flow analysis framework-->
+
+<H3 CLASS="subsection"><A NAME="htoc21">8.2</A>&nbsp;&nbsp;Data flow analysis framework</H3><!--SEC END -->
+
+The <A HREF="api/Dataflow.html">Dataflow</A> module (click for the ocamldoc) contains a
+parameterized framework for forward and backward data flow
+analyses. You provide the transfer functions and this module does the
+analysis. You must compute control-flow information (Section&nbsp;<A HREF="#sec-cfg">8.1</A>)
+before invoking the Dataflow module.<BR>
+<BR>
+<!--TOC subsection Dominators-->
+
+<H3 CLASS="subsection"><A NAME="htoc22">8.3</A>&nbsp;&nbsp;Dominators</H3><!--SEC END -->
+ 
+The module <A HREF="api/Dominators.html">Dominators</A> contains the computation of immediate
+ dominators. It uses the <A HREF="api/Dataflow.html">Dataflow</A> module. <BR>
+<BR>
+<!--TOC subsection Points-to Analysis-->
+
+<H3 CLASS="subsection"><A NAME="htoc23">8.4</A>&nbsp;&nbsp;Points-to Analysis</H3><!--SEC END -->
+
+The module <TT>ptranal.ml</TT> contains two interprocedural points-to
+analyses for CIL: <TT>Olf</TT> and <TT>Golf</TT>. <TT>Olf</TT> is the default.
+(Switching from <TT>olf.ml</TT> to <TT>golf.ml</TT> requires a change in
+<TT>Ptranal</TT> and a recompiling <TT>cilly</TT>.)<BR>
+<BR>
+The analyses have the following characteristics:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+Not based on C types (inferred pointer relationships are sound
+ despite most kinds of C casts)
+<LI CLASS="li-itemize">One level of subtyping 
+<LI CLASS="li-itemize">One level of context sensitivity (Golf only)
+<LI CLASS="li-itemize">Monomorphic type structures
+<LI CLASS="li-itemize">Field insensitive (fields of structs are conflated)
+<LI CLASS="li-itemize">Demand-driven (points-to queries are solved on demand)
+<LI CLASS="li-itemize">Handle function pointers
+</UL>
+The analysis itself is factored into two components: <TT>Ptranal</TT>,
+which walks over the CIL file and generates constraints, and <TT>Olf</TT>
+or <TT>Golf</TT>, which solve the constraints. The analysis is invoked
+with the function <TT>Ptranal.analyze_file: Cil.file -&gt;
+ unit</TT>. This function builds the points-to graph for the CIL file
+and stores it internally. There is currently no facility for clearing
+internal state, so <TT>Ptranal.analyze_file</TT> should only be called
+once.<BR>
+<BR>
+The constructed points-to graph supports several kinds of queries,
+including alias queries (may two expressions be aliased?) and
+points-to queries (to what set of locations may an expression point?).<BR>
+<BR>
+The main interface with the alias analysis is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.may_alias: Cil.exp -&gt; Cil.exp -&gt; bool</TT>. If
+ <TT>true</TT>, the two expressions may have the same value.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_lval: Cil.lval -&gt; (Cil.varinfo
+ list)</TT>. Returns the list of variables to which the given
+ left-hand value may point.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_exp: Cil.exp -&gt; (Cil.varinfo list)</TT>.
+ Returns the list of variables to which the given expression may
+ point.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_funptr: Cil.exp -&gt; (Cil.fundec
+ list)</TT>. Returns the list of functions to which the given
+ expression may point.
+</UL>
+The precision of the analysis can be customized by changing the values
+of several flags:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.no_sub: bool ref</TT>.
+ If <TT>true</TT>, subtyping is disabled. Associated commandline option:
+ <B>--ptr_unify</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.analyze_mono: bool ref</TT>.
+ (Golf only) If <TT>true</TT>, context sensitivity is disabled and the
+ analysis is effectively monomorphic. Commandline option:
+ <B>--ptr_mono</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.smart_aliases: bool ref</TT>.
+ (Golf only) If <TT>true</TT>, &#8220;smart&#8221; disambiguation of aliases is
+ enabled. Otherwise, aliases are computed by intersecting points-to
+ sets. This is an experimental feature.
+<LI CLASS="li-itemize"><TT>Ptranal.model_strings: bool ref</TT>.
+ Make the alias analysis model string constants by treating them as
+ pointers to chars. Commandline option: <B>--ptr_model_strings</B>
+<LI CLASS="li-itemize"><TT>Ptranal.conservative_undefineds: bool ref</TT>.
+ Make the most pessimistic assumptions about globals if an undefined
+ function is present. Such a function can write to every global
+ variable. Commandline option: <B>--ptr_conservative</B>
+</UL>
+In practice, the best precision/efficiency tradeoff is achieved by
+setting <TT>Ptranal.no_sub</TT> to <TT>false</TT>, <TT>Ptranal.analyze_mono</TT> to
+<TT>true</TT>, and <TT>Ptranal.smart_aliases</TT> to <TT>false</TT>. These are the
+default values of the flags.<BR>
+<BR>
+There are also a few flags that can be used to inspect or serialize
+the results of the analysis.
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.debug_may_aliases</TT>.
+ Print the may-alias relationship of each pair of expressions in the
+ program. Commandline option: <B>--ptr_may_aliases</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.print_constraints: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print each constraint as it is
+ generated.
+<LI CLASS="li-itemize"><TT>Ptranal.print_types: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print the inferred type of each
+ variable in the program.<BR>
+<BR>
+If <TT>Ptranal.analyze_mono</TT> and <TT>Ptranal.no_sub</TT> are both
+ <TT>true</TT>, this output is sufficient to reconstruct the points-to
+ graph. One nice feature is that there is a pretty printer for
+ recursive types, so the print routine does not loop.
+<LI CLASS="li-itemize"><TT>Ptranal.compute_results: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print out the points-to set of each
+ variable in the program. This will essentially serialize the
+ points-to graph.
+</UL>
+<!--TOC subsection StackGuard-->
+
+<H3 CLASS="subsection"><A NAME="htoc24">8.5</A>&nbsp;&nbsp;StackGuard</H3><!--SEC END -->
+
+The module <TT>heapify.ml</TT> contains a transformation similar to the one
+described in &#8220;StackGuard: Automatic Adaptive Detection and Prevention of
+Buffer-Overflow Attacks&#8221;, <EM>Proceedings of the 7th USENIX Security
+Conference</EM>. In essence it modifies the program to maintain a separate
+stack for return addresses. Even if a buffer overrun attack occurs the
+actual correct return address will be taken from the special stack. <BR>
+<BR>
+Although it does work, this CIL module is provided mainly as an example of
+how to perform a simple source-to-source program analysis and
+transformation. As an optimization only functions that contain a dangerous
+local array make use of the special return address stack. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dostackGuard</TT>
+transforms the following dangerous code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int dangerous() {
+    char array[10];
+    scanf("%s",array); // possible buffer overrun!
+  }
+
+  int main () {
+    return dangerous();
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex24.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Heapify-->
+
+<H3 CLASS="subsection"><A NAME="htoc25">8.6</A>&nbsp;&nbsp;Heapify</H3><!--SEC END -->
+
+The module <TT>heapify.ml</TT> also contains a transformation that moves all
+dangerous local arrays to the heap. This also prevents a number of buffer
+overruns. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --doheapify</TT>
+transforms the following dangerous code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int dangerous() {
+    char array[10];
+    scanf("%s",array); // possible buffer overrun!
+  }
+
+  int main () {
+    return dangerous();
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex25.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection One Return-->
+
+<H3 CLASS="subsection"><A NAME="htoc26">8.7</A>&nbsp;&nbsp;One Return</H3><!--SEC END -->
+
+The module <TT>oneret.ml</TT> contains a transformation the ensures that all
+function bodies have at most one return statement. This simplifies a number
+of analyses by providing a canonical exit-point. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dooneRet</TT>
+transforms the following code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo (int predicate) {
+    if (predicate &lt;= 0) {
+      return 1;
+    } else {
+      if (predicate &gt; 5)
+        return 2;
+      return 3;
+    }
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex26.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Partial Evaluation and Constant Folding-->
+
+<H3 CLASS="subsection"><A NAME="htoc27">8.8</A>&nbsp;&nbsp;Partial Evaluation and Constant Folding</H3><!--SEC END -->
+ 
+The <TT>partial.ml</TT> module provides a simple interprocedural partial
+evaluation and constant folding data-flow analysis and transformation. This
+transformation requires the <TT>--domakeCFG</TT> option. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --domakeCFG --dopartial</TT>
+transforms the following code (note the eliminated <TT>if</TT> branch and the
+partial optimization of <TT>foo</TT>): 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo(int x, int y) {
+    int unknown;
+    if (unknown)
+      return y+2;     
+    return x+3;      
+  }
+
+  int main () {
+    int a,b,c;
+    a = foo(5,7) + foo(6,7);
+    b = 4;
+    c = b * b;      
+    if (b &gt; c)     
+      return b-c;
+    else
+      return b+c; 
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex27.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Reaching Definitions-->
+
+<H3 CLASS="subsection"><A NAME="htoc28">8.9</A>&nbsp;&nbsp;Reaching Definitions</H3><!--SEC END -->
+
+The <TT>reachingdefs.ml</TT> module uses the dataflow framework and CFG
+information to calculate the definitions that reach each
+statement. After computing the CFG (Section&nbsp;<A HREF="#sec-cfg">8.1</A>) and calling
+<TT>computeRDs</TT> on a 
+function declaration, <TT>ReachingDef.stmtStartData</TT> will contain a
+mapping from statement IDs to data about which definitions reach each
+statement. In particular, it is a mapping from statement IDs to a
+triple the first two members of which are used internally. The third
+member is a mapping from variable IDs to Sets of integer options. If
+the set contains <TT>Some(i)</TT>, then the definition of that variable
+with ID <TT>i</TT> reaches that statement. If the set contains <TT>None</TT>,
+then there is a path to that statement on which there is no definition
+of that variable. Also, if the variable ID is unmapped at a
+statement, then no definition of that variable reaches that statement.<BR>
+<BR>
+To summarize, reachingdefs.ml has the following interface:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeRDs</TT> &ndash; Computes reaching definitions. Requires that
+CFG information has already been computed for each statement.
+<LI CLASS="li-itemize"><TT>ReachingDef.stmtStartData</TT> &ndash; contains reaching
+definition data after <TT>computeRDs</TT> is called.
+<LI CLASS="li-itemize"><TT>ReachingDef.defIdStmtHash</TT> &ndash; Contains a mapping
+from definition IDs to the ID of the statement in which
+the definition occurs.
+<LI CLASS="li-itemize"><TT>getRDs</TT> &ndash; Takes a statement ID and returns
+reaching definition data for that statement.
+<LI CLASS="li-itemize"><TT>instrRDs</TT> &ndash; Takes a list of instructions and the
+definitions that reach the first instruction, and for
+each instruction calculates the definitions that reach
+either into or out of that instruction.
+<LI CLASS="li-itemize"><TT>rdVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
+can be extended such that the current reaching definition
+data is available when expressions are visited through
+the <TT>get_cur_iosh</TT> method of the class.
+</UL>
+<!--TOC subsection Available Expressions-->
+
+<H3 CLASS="subsection"><A NAME="htoc29">8.10</A>&nbsp;&nbsp;Available Expressions</H3><!--SEC END -->
+
+The <TT>availexps.ml</TT> module uses the dataflow framework and CFG
+information to calculate something similar to a traditional available
+expressions analysis. After <TT>computeAEs</TT> is called following a CFG
+calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>AvailableExps.stmtStartData</TT> will
+contain a mapping
+from statement IDs to data about what expressions are available at
+that statement. The data for each statement is a mapping for each
+variable ID to the whole expression available at that point(in the
+traditional sense) which the variable was last defined to be. So,
+this differs from a traditional available expressions analysis in that
+only whole expressions from a variable definition are considered rather
+than all expressions.<BR>
+<BR>
+The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeAEs</TT> &ndash; Computes available expressions. Requires
+that CFG information has already been comptued for each statement.
+<LI CLASS="li-itemize"><TT>AvailableExps.stmtStartData</TT> &ndash; Contains available
+expressions data for each statement after <TT>computeAEs</TT> has been
+called.
+<LI CLASS="li-itemize"><TT>getAEs</TT> &ndash; Takes a statement ID and returns
+available expression data for that statement.
+<LI CLASS="li-itemize"><TT>instrAEs</TT> &ndash; Takes a list of instructions and
+the availalbe expressions at the first instruction, and
+for each instruction calculates the expressions available
+on entering or exiting each instruction.
+<LI CLASS="li-itemize"><TT>aeVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
+can be extended such that the current available expressions
+data is available when expressions are visited through the
+<TT>get_cur_eh</TT> method of the class.
+</UL>
+<!--TOC subsection Liveness Analysis-->
+
+<H3 CLASS="subsection"><A NAME="htoc30">8.11</A>&nbsp;&nbsp;Liveness Analysis</H3><!--SEC END -->
+
+The <TT>liveness.ml</TT> module uses the dataflow framework and
+CFG information to calculate which variables are live at
+each program point. After <TT>computeLiveness</TT> is called
+following a CFG calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>LiveFlow.stmtStartData</TT> will
+contain a mapping for each statement ID to a set of <TT>varinfo</TT>s
+for varialbes live at that program point.<BR>
+<BR>
+The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeLiveness</TT> &ndash; Computes live variables. Requires
+that CFG information has already been computed for each statement.
+<LI CLASS="li-itemize"><TT>LiveFlow.stmtStartData</TT> &ndash; Contains live variable data
+for each statement after <TT>computeLiveness</TT> has been called.
+</UL>
+Also included in this module is a command line interface that
+will cause liveness data to be printed to standard out for
+a particular function or label.
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>&ndash;doliveness</TT> &ndash; Instructs cilly to comptue liveness
+information and to print on standard out the variables live
+at the points specified by <TT>&ndash;live_func</TT> and <TT>live_label</TT>.
+If both are ommitted, then nothing is printed.
+<LI CLASS="li-itemize"><TT>&ndash;live_func</TT> &ndash; The name of the function whose
+liveness data is of interest. If <TT>&ndash;live_label</TT> is ommitted,
+then data for each statement is printed.
+<LI CLASS="li-itemize"><TT>&ndash;live_label</TT> &ndash; The name of the label at which
+the liveness data will be printed.
+</UL>
+<!--TOC subsection Dead Code Elimination-->
+
+<H3 CLASS="subsection"><A NAME="htoc31">8.12</A>&nbsp;&nbsp;Dead Code Elimination</H3><!--SEC END -->
+
+The module <TT>deadcodeelim.ml</TT> uses the reaching definitions
+analysis to eliminate assignment instructions whose results
+are not used. The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>elim_dead_code</TT> &ndash; Performs dead code elimination
+on a function. Requires that CFG information has already
+been computed (Section&nbsp;<A HREF="#sec-cfg">8.1</A>).
+<LI CLASS="li-itemize"><TT>dce</TT> &ndash; Performs dead code elimination on an
+entire file. Requires that CFG information has already
+been computed.
+</UL>
+<!--TOC subsection Simple Memory Operations-->
+
+<H3 CLASS="subsection"><A NAME="htoc32">8.13</A>&nbsp;&nbsp;Simple Memory Operations</H3><!--SEC END -->
+ 
+The <TT>simplemem.ml</TT> module allows CIL lvalues that contain memory
+accesses to be even futher simplified via the introduction of
+well-typed temporaries. After this transformation all lvalues involve
+at most one memory reference.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dosimpleMem</TT> 
+transforms the following code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int main () {
+    int ***three;
+    int **two;
+    ***three = **two; 
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex28.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Simple Three-Address Code-->
+
+<H3 CLASS="subsection"><A NAME="htoc33">8.14</A>&nbsp;&nbsp;Simple Three-Address Code</H3><!--SEC END -->
+ 
+The <TT>simplify.ml</TT> module further reduces the complexity of program
+expressions and gives you a form of three-address code. After this
+transformation all expressions will adhere to the following grammar: 
+<PRE CLASS="verbatim">
+ basic::=
+    Const _ 
+    Addrof(Var v, NoOffset)
+    StartOf(Var v, NoOffset)
+    Lval(Var v, off), where v is a variable whose address is not taken
+                      and off contains only "basic"
+
+ exp::=
+    basic
+    Lval(Mem basic, NoOffset)
+    BinOp(bop, basic, basic)
+    UnOp(uop, basic)
+    CastE(t, basic)
+   
+ lval ::= 
+    Mem basic, NoOffset
+    Var v, off, where v is a variable whose address is not taken and off
+                contains only "basic"
+</PRE>In addition, all <TT>sizeof</TT> and <TT>alignof</TT> forms are turned into
+constants. Accesses to arrays and variables whose address is taken are
+turned into "Mem" accesses. All field and index computations are turned
+into address arithmetic.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dosimplify</TT> 
+transforms the following code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int main() {
+    struct mystruct {
+      int a;
+      int b;
+    } m;
+    int local;
+    int arr[3];
+    int *ptr;
+
+    ptr = &amp;local;
+    m.a = local + sizeof(m) + arr[2];
+    return m.a; 
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex29.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<!--TOC subsection Converting C to C++-->
+
+<H3 CLASS="subsection"><A NAME="htoc34">8.15</A>&nbsp;&nbsp;Converting C to C++</H3><!--SEC END -->
+
+The module canonicalize.ml performs several transformations to correct
+differences between C and C++, so that the output is (hopefully) valid
+C++ code. This may be incomplete &mdash; certain fixes which are necessary
+for some programs are not yet implemented.<BR>
+<BR>
+Using the <TT>--doCanonicalize</TT> option with CIL will perform the
+following changes to your program:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Any variables that use C++ keywords as identifiers are renamed.
+<LI CLASS="li-enumerate">C allows global variables to have multiple declarations and
+ multiple (equivalent) definitions. This transformation removes
+ all but one declaration and all but one definition.
+<LI CLASS="li-enumerate"><TT>__inline</TT> is #defined to <TT>inline</TT>, and <TT>__restrict</TT> 
+ is #defined to nothing.
+<LI CLASS="li-enumerate">C allows function pointers with no specified arguments to be used on
+ any argument list. To make C++ accept this code, we insert a cast
+ from the function pointer to a type that matches the arguments. Of
+ course, this does nothing to guarantee that the pointer actually has
+ that type.
+<LI CLASS="li-enumerate">Makes casts from int to enum types explicit. (CIL changes enum
+ constants to int constants, but doesn't use a cast.)
+</OL>
+<!--TOC section Controlling CIL-->
+
+<H2 CLASS="section"><A NAME="htoc35">9</A>&nbsp;&nbsp;Controlling CIL</H2><!--SEC END -->
+
+In the process of converting a C file to CIL we drop the unused prototypes
+and even inline function definitions. This results in much smaller files. If
+you do not want this behavior then you must pass the <TT>--keepunused</TT> argument
+to the CIL application. <BR>
+<BR>
+Alternatively you can put the following pragma in the code (instructing CIL
+to specifically keep the declarations and definitions of the function
+<TT>func1</TT> and variable <TT>var2</TT>, the definition of type <TT>foo</TT> and of
+structure <TT>bar</TT>):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+#pragma cilnoremove("func1", "var2", "type foo", "struct bar")
+</FONT></PRE>
+<!--TOC section GCC Extensions-->
+
+<H2 CLASS="section"><A NAME="htoc36">10</A>&nbsp;&nbsp;GCC Extensions</H2><!--SEC END -->
+
+The CIL parser handles most of the <TT>gcc</TT>
+<A HREF="javascript:loadTop('http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_5.html#SEC67')">extensions</A>
+and compiles them to CIL. The following extensions are not handled (note that
+we are able to compile a large number of programs, including the Linux kernel,
+without encountering these):
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Nested function definitions.
+<LI CLASS="li-enumerate">Constructing function calls.
+<LI CLASS="li-enumerate">Naming an expression's type.
+<LI CLASS="li-enumerate">Complex numbers
+<LI CLASS="li-enumerate">Hex floats
+<LI CLASS="li-enumerate">Subscripts on non-lvalue arrays.
+<LI CLASS="li-enumerate">Forward function parameter declarations
+</OL>
+The following extensions are handled, typically by compiling them away:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Attributes for functions, variables and types. In fact, we have a clear
+specification (see Section&nbsp;<A HREF="#sec-attrib">6.4</A>) of how attributes are interpreted. The
+specification extends that of <TT>gcc</TT>.
+<LI CLASS="li-enumerate">Old-style function definitions and prototypes. These are translated to
+new-style. 
+<LI CLASS="li-enumerate">Locally-declared labels. As part of the translation to CIL, we generate
+new labels as needed. 
+<LI CLASS="li-enumerate">Labels as values and computed goto. This allows a program to take the
+address of a label and to manipulate it as any value and also to perform a
+computed goto. We compile this by assigning each label whose address is taken
+a small integer that acts as its address. Every computed <TT>goto</TT> in the body
+of the function is replaced with a <TT>switch</TT> statement. If you want to invoke
+the label from another function, you are on your own (the <TT>gcc</TT>
+documentation says the same.)
+<LI CLASS="li-enumerate">Generalized lvalues. You can write code like <TT>(a, b) += 5</TT> and it gets
+translated to CIL. 
+<LI CLASS="li-enumerate">Conditionals with omitted operands. Things like <TT>x ? : y</TT> are
+translated to CIL.
+<LI CLASS="li-enumerate">Double word integers. The type <TT>long long</TT> and the <TT>LL</TT> suffix on
+constants is understood. This is currently interpreted as 64-bit integers.
+<LI CLASS="li-enumerate">Local arrays of variable length. These are converted to uses of
+<TT>alloca</TT>, the array variable is replaced with a pointer to the allocated
+array and the instances of <TT>sizeof(a)</TT> are adjusted to return the size of
+the array and not the size of the pointer. 
+<LI CLASS="li-enumerate">Non-constant local initializers. Like all local initializers these are
+compiled into assignments. 
+<LI CLASS="li-enumerate">Compound literals. These are also turned into assignments.
+<LI CLASS="li-enumerate">Designated initializers. The CIL parser actually supports the full ISO
+syntax for initializers, which is more than both <TT>gcc</TT> and <TT>MSVC</TT>. I
+(George) think that this is the most complicated part of the C language and
+whoever designed it should be banned from ever designing languages again.
+<LI CLASS="li-enumerate">Case ranges. These are compiled into separate cases. There is no code
+duplication, just a larger number of <TT>case</TT> statements.
+<LI CLASS="li-enumerate">Transparent unions. This is a strange feature that allows you to define
+a function whose formal argument has a (tranparent) union type, but the
+argument is called as if it were the first element of the union. This is
+compiled away by saying that the type of the formal argument is that of the
+first field, and the first thing in the function body we copy the formal into
+a union. <BR>
+<BR>
+<LI CLASS="li-enumerate">Inline assembly-language. The full syntax is supported and it is carried
+as such in CIL.<BR>
+<BR>
+<LI CLASS="li-enumerate">Function names as strings. The identifiers <TT>__FUNCTION__</TT> and
+<TT>__PRETTY_FUNCTION__</TT> are replaced with string literals. <BR>
+<BR>
+<LI CLASS="li-enumerate">Keywords <TT>typeof</TT>, <TT>alignof</TT>, <TT>inline</TT> are supported. 
+</OL>
+<!--TOC section CIL Limitations-->
+
+<H2 CLASS="section"><A NAME="htoc37">11</A>&nbsp;&nbsp;CIL Limitations</H2><!--SEC END -->
+
+There are several implementation details of CIL that might make it unusable
+ or less than ideal for certain tasks:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+CIL operates after preprocessing. If you need to see comments, for
+example, you cannot use CIL. But you can use attributes and pragmas instead.
+And there is some support to help you patch the include files before they are
+seen by the preprocessor. For example, this is how we turn some
+<TT>#define</TT>s that we don't like into function calls. <BR>
+<BR>
+<LI CLASS="li-itemize">CIL does transform the code in a non-trivial way. This is done in order
+to make most analyses easier. But if you want to see the code <TT>e1, e2++</TT>
+exactly as it appears in the code, then you should not use CIL. <BR>
+<BR>
+<LI CLASS="li-itemize">CIL removes all local scopes and moves all variables to function
+scope. It also separates a declaration with an initializer into a declaration
+plus an assignment. The unfortunate effect of this transformation is that
+local variables cannot have the <TT>const</TT> qualifier.</UL>
+<!--TOC section Known Bugs and Limitations-->
+
+<H2 CLASS="section"><A NAME="htoc38">12</A>&nbsp;&nbsp;Known Bugs and Limitations</H2><!--SEC END -->
+
+<UL CLASS="itemize"><LI CLASS="li-itemize">In the new versions of <TT>glibc</TT> there is a function
+ <TT>__builtin_va_arg</TT> that takes a type as its second argument. CIL
+ handles that through a slight trick. As it parses the function it changes a
+ call like:
+<PRE CLASS="verbatim">
+  mytype x = __builtin_va_arg(marker, mytype)
+</PRE>into 
+<PRE CLASS="verbatim">
+ mytype x;
+ __builtin_va_arg(marker, sizeof(mytype), &amp;x);
+</PRE>
+ The latter form is used internally in CIL. However, the CIL pretty printer
+ will try to emit the original code. <BR>
+<BR>
+Similarly, <TT>__builtin_types_compatible_p(t1, t2)</TT>, which takes
+ types as arguments, is represented internally as
+ <TT>__builtin_types_compatible_p(sizeof t1, sizeof t2)</TT>, but the
+ sizeofs are removed when printing.<BR>
+<BR>
+<LI CLASS="li-itemize">The implementation of <TT>bitsSizeOf</TT> does not take into account the
+packing pragmas. However it was tested to be accurate on cygwin/gcc-2.95.3,
+Linux/gcc-2.95.3 and on Windows/MSVC.<BR>
+<BR>
+<LI CLASS="li-itemize">We do not support tri-graph sequences (ISO 5.2.1.1).<BR>
+<BR>
+<LI CLASS="li-itemize">GCC has a strange feature called &#8220;extern inline&#8221;. Such a function can
+be defined twice: first with the &#8220;extern inline&#8221; specifier and the second
+time without it. If optimizations are turned off then the &#8220;extern inline&#8221;
+definition is considered a prototype (its body is ignored). If optimizations
+are turned on then the extern inline function is inlined at all of its
+occurrences from the point of its definition all the way to the point where the
+(optional) second definition appears. No body is generated for an extern
+inline function. A body is generated for the real definition and that one is
+used in the rest of the file. <BR>
+<BR>
+CIL will rename your extern inline function (and its uses) with the suffix
+ <TT>__extinline</TT>. This means that if you have two such definition, that do
+ different things and the optimizations are not on, then the CIL version might
+ compute a different answer !<BR>
+<BR>
+Also, if you have multiple extern inline declarations then CIL will ignore
+but the first one. This is not so bad because GCC itself would not like it. <BR>
+<BR>
+<LI CLASS="li-itemize">There are still a number of bugs in handling some obscure features of
+GCC. For example, when you use variable-length arrays, CIL turns them into
+calls to <TT>alloca</TT>. This means that they are deallocated when the function
+returns and not when the local scope ends. <BR>
+<BR>
+Variable-length arrays are not supported as fields of a struct or union.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL cannot parse arbitrary <TT>#pragma</TT> directives. Their
+ syntax must follow gcc's attribute syntax to be understood. If you
+ need a pragma that does not follow gcc syntax, add that pragma's name
+ to <TT>no_parse_pragma</TT> in <TT>src/frontc/clexer.mll</TT> to indicate that
+ CIL should treat that pragma as a monolithic string rather than try
+ to parse its arguments.<BR>
+<BR>
+CIL cannot parse a line containing an empty <TT>#pragma</TT>.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL only parses <TT>#pragma</TT> directives at the "top level", this is,
+ outside of any enum, structure, union, or function definitions.<BR>
+<BR>
+If your compiler uses pragmas in places other than the top-level,
+ you may have to preprocess the sources in a special way (sed, perl,
+ etc.) to remove pragmas from these locations.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL cannot parse the following code (fixing this problem would require
+extensive hacking of the LALR grammar):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int bar(int ()); // This prototype cannot be parsed
+int bar(int x()); // If you add a name to the function, it works
+int bar(int (*)()); // This also works (and it is more appropriate)
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">CIL also cannot parse certain K&amp;R old-style prototypes with missing
+return type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+g(); // This cannot be parsed
+int g(); // This is Ok
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">CIL does not understand some obscure combinations of type specifiers
+(&#8220;signed&#8221; and &#8220;unsigned&#8221; applied to typedefs that themselves contain a
+sign specification; you could argue that this should not be allowed anyway):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+typedef signed char __s8;
+__s8 unsigned uchartest; // This is unsigned char for gcc
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">The statement <TT>x = 3 + x ++</TT> will perform the increment of <TT>x</TT>
+ before the assignment, while <TT>gcc</TT> delays the increment after the
+ assignment. It turned out that this behavior is much easier to implement
+ than gcc's one, and either way is correct (since the behavior is unspecified
+ in this case). Similarly, if you write <TT>x = x ++;</TT> then CIL will perform
+ the increment before the assignment, whereas GCC and MSVC will perform it
+ after the assignment. 
+</UL>
+<!--TOC section Using the merger-->
+
+<H2 CLASS="section"><A NAME="htoc39">13</A>&nbsp;&nbsp;Using the merger</H2><!--SEC END -->
+<A NAME="sec-merger"></A><!--NAME merger.html-->
+<BR>
+<BR>
+There are many program analyses that are more effective when
+done on the whole program.<BR>
+<BR>
+The merger is a tool that combines all of the C source files in a project
+into a single C file. There are two tasks that a merger must perform:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Detect what are all the sources that make a project and with what
+compiler arguments they are compiled.<BR>
+<BR>
+<LI CLASS="li-enumerate">Merge all of the source files into a single file. 
+</OL>
+For the first task the merger impersonates a compiler and a linker (both a
+GCC and a Microsoft Visual C mode are supported) and it expects to be invoked
+(from a build script or a Makefile) on all sources of the project. When
+invoked to compile a source the merger just preprocesses the source and saves
+the result using the name of the requested object file. By preprocessing at
+this time the merger is able to take into account variations in the command
+line arguments that affect preprocessing of different source files.<BR>
+<BR>
+When the merger is invoked to link a number of object files it collects the
+preprocessed sources that were stored with the names of the object files, and
+invokes the merger proper. Note that arguments that affect the compilation or
+linking must be the same for all source files.<BR>
+<BR>
+For the second task, the merger essentially concatenates the preprocessed
+sources with care to rename conflicting file-local declarations (we call this
+process alpha-conversion of a file). The merger also attempts to remove
+duplicate global declarations and definitions. Specifically the following
+actions are taken: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+File-scope names (<TT>static</TT> globals, names of types defined with
+<TT>typedef</TT>, and structure/union/enumeration tags) are given new names if they
+conflict with declarations from previously processed sources. The new name is
+formed by appending the suffix <TT>___n</TT>, where <TT>n</TT> is a unique integer
+identifier. Then the new names are applied to their occurrences in the file. <BR>
+<BR>
+<LI CLASS="li-itemize">Non-static declarations and definitions of globals are never renamed.
+But we try to remove duplicate ones. Equality of globals is detected by
+comparing the printed form of the global (ignoring the line number directives)
+after the body has been alpha-converted. This process is intended to remove
+those declarations (e.g. function prototypes) that originate from the same
+include file. Similarly, we try to eliminate duplicate definitions of
+<TT>inline</TT> functions, since these occasionally appear in include files.<BR>
+<BR>
+<LI CLASS="li-itemize">The types of all global declarations with the same name from all files
+are compared for type isomorphism. During this process, the merger detects all
+those isomorphisms between structures and type definitions that are <B>required</B> for the merged program to be legal. Such structure tags and
+typenames are coalesced and given the same name. <BR>
+<BR>
+<LI CLASS="li-itemize">Besides the structure tags and type names that are required to be
+isomorphic, the merger also tries to coalesce definitions of structures and
+types with the same name from different file. However, in this case the merger
+will not give an error if such definitions are not isomorphic; it will just
+use different names for them. <BR>
+<BR>
+<LI CLASS="li-itemize">In rare situations, it can happen that a file-local global in
+encountered first and it is not renamed, only to discover later when
+processing another file that there is an external symbol with the same name.
+In this case, a second pass is made over the merged file to rename the
+file-local symbol. 
+</UL>
+Here is an example of using the merger:<BR>
+<BR>
+The contents of <TT>file1.c</TT> is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct foo; // Forward declaration
+extern struct foo *global;
+</FONT></PRE>
+The contents of <TT>file2.c</TT> is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct bar {
+ int x;
+ struct bar *next;
+};
+extern struct bar *global;
+struct foo {
+ int y;
+};
+extern struct foo another;
+void main() {
+}
+</FONT></PRE>
+There are several ways in which one might create an executable from these
+files:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<PRE CLASS="verbatim">
+gcc file1.c file2.c -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ld file1.o file2.o -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ar r libfile2.a file2.o
+gcc file1.o libfile2.a -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ar r libfile2.a file2.o
+gcc file1.o -lfile2 -o a.out
+</PRE></UL>
+In each of the cases above you must replace all occurrences of <TT>gcc</TT> and
+<TT>ld</TT> with <TT>cilly --merge</TT>, and all occurrences of <TT>ar</TT> with <TT>cilly
+--merge --mode=AR</TT>. It is very important that the <TT>--merge</TT> flag be used
+throughout the build process. If you want to see the merged source file you
+must also pass the <TT>--keepmerged</TT> flag to the linking phase. <BR>
+<BR>
+The result of merging file1.c and file2.c is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+// from file1.c
+struct foo; // Forward declaration
+extern struct foo *global;
+
+// from file2.c
+struct foo {
+ int x;
+ struct foo *next;
+};
+struct foo___1 {
+ int y;
+};
+extern struct foo___1 another;
+</FONT></PRE>
+<!--TOC section Using the patcher-->
+
+<H2 CLASS="section"><A NAME="htoc40">14</A>&nbsp;&nbsp;Using the patcher</H2><!--SEC END -->
+<A NAME="sec-patcher"></A><!--NAME patcher.html-->
+<BR>
+<BR>
+Occasionally we have needed to modify slightly the standard include files.
+So, we developed a simple mechanism that allows us to create modified copies
+of the include files and use them instead of the standard ones. For this
+purpose we specify a patch file and we run a program caller Patcher which
+makes modified copies of include files and applies the patch.<BR>
+<BR>
+The patcher is invoked as follows: 
+<PRE CLASS="verbatim">
+bin/patcher [options]
+
+Options:
+  --help       Prints this help message
+  --verbose    Prints a lot of information about what is being done
+  --mode=xxx   What tool to emulate: 
+                GNUCC     - GNU CC
+                MSVC      - MS VC cl compiler
+
+  --dest=xxx   The destination directory. Will make one if it does not exist
+  --patch=xxx  Patch file (can be specified multiple times)
+  --ppargs=xxx An argument to be passed to the preprocessor (can be specified
+               multiple times)
+
+  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
+  --sfile=xxx  A system-include file to be patched (treated as \#include &lt;xxx&gt;)
+ 
+  --clean       Remove all files in the destination directory
+  --dumpversion Print the version name used for the current compiler
+
+ All of the other arguments are passed to the preprocessor. You should pass
+ enough arguments (e.g., include directories) so that the patcher can find the
+ right include files to be patched.
+</PRE>
+ Based on the given <TT>mode</TT> and the current version of the compiler (which
+the patcher can print when given the <TT>dumpversion</TT> argument) the patcher
+will create a subdirectory of the <TT>dest</TT> directory (say <TT>/usr/home/necula/cil/include</TT>), such as:
+<PRE CLASS="verbatim">
+/usr/home/necula/cil/include/gcc_2.95.3-5
+</PRE>
+ In that file the patcher will copy the modified versions of the include files
+specified with the <TT>ufile</TT> and <TT>sfile</TT> options. Each of these options can
+be specified multiple times. <BR>
+<BR>
+The patch file (specified with the <TT>patch</TT> option) has a format inspired by
+the Unix <TT>patch</TT> tool. The file has the following grammar:
+<PRE CLASS="verbatim">
+&lt;&lt;&lt; flags
+patterns
+===
+replacement
+&gt;&gt;&gt;
+</PRE>
+ The flags are a comma separated, case-sensitive, sequence of keywords or
+keyword = value. The following flags are supported:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>file=foo.h</TT> - will only apply the patch on files whose name is
+ <TT>foo.h</TT>. 
+<LI CLASS="li-itemize"><TT>optional</TT> - this means that it is Ok if the current patch does not
+match any of the processed files. 
+<LI CLASS="li-itemize"><TT>group=foo</TT> - will add this patch to the named group. If this is not
+specified then a unique group is created to contain just the current patch.
+When all files specified in the command line have been patched, an error
+message is generated for all groups for whom no member patch was used. We use
+this mechanism to receive notice when the patch triggers are out-dated with
+respect to the new include files. 
+<LI CLASS="li-itemize"><TT>system=sysname</TT> - will only consider this pattern on a given
+operating system. The &#8220;sysname&#8221; is reported by the &#8220;$Ô&#8221; variable in
+Perl, except that Windows is always considered to have sysname
+&#8220;cygwin.&#8221; For Linux use &#8220;linux&#8221; (capitalization matters).
+<LI CLASS="li-itemize"><TT>ateof</TT> - In this case the patterns are ignored and the replacement
+text is placed at the end of the patched file. Use the <TT>file</TT> flag if you
+want to restrict the files in which this replacement is performed. 
+<LI CLASS="li-itemize"><TT>atsof</TT> - The patterns are ignored and the replacement text is placed
+at the start of the patched file. Uf the <TT>file</TT> flag to restrict the
+application of this patch to a certain file. 
+<LI CLASS="li-itemize"><TT>disabled</TT> - Use this flag if you want to disable the pattern.
+</UL>
+The patterns can consist of several groups of lines separated by the <TT>|||</TT>
+marker. Each of these group of lines is a multi-line pattern that if found in
+the file will be replaced with the text given at the end of the block. <BR>
+<BR>
+The matching is space-insensitive.<BR>
+<BR>
+All of the markers <TT>&lt;&lt;&lt;</TT>, <TT>|||</TT>, <TT>===</TT> and <TT>&gt;&gt;&gt;</TT> must appear at the
+beginning of a line but they can be followed by arbitrary text (which is
+ignored).<BR>
+<BR>
+The replacement text can contain the special keyword <TT>@__pattern__@</TT>,
+which is substituted with the pattern that matched. <BR>
+<BR>
+<!--TOC section Debugging support-->
+
+<H2 CLASS="section"><A NAME="htoc41">15</A>&nbsp;&nbsp;Debugging support</H2><!--SEC END -->
+<A NAME="sec-debugger"></A>
+Most of the time we debug our code using the Errormsg module along with the
+pretty printer. But if you want to use the Ocaml debugger here is an easy way
+to do it. Say that you want to debug the invocation of cilly that arises out
+of the following command:
+<PRE CLASS="verbatim">
+cilly -c hello.c 
+</PRE>
+ You must follow the installation <A HREF="../ccured/setup.html">instructions</A>
+to install the Elist support files for ocaml and to extend your .emacs
+appropriately. Then from within Emacs you do
+<PRE CLASS="verbatim">
+ALT-X my-camldebug
+</PRE>
+ This will ask you for the command to use for running the Ocaml debugger
+(initially the default will be &#8220;ocamldebug&#8221; or the last command you
+introduced). You use the following command:
+<PRE CLASS="verbatim">
+cilly --ocamldebug -c hello.c 
+</PRE>
+ This will run <TT>cilly</TT> as usual and invoke the Ocaml debugger when the cilly
+engine starts. The advantage of this way of invoking the debugger is that the
+directory search paths are set automatically and the right set or arguments is
+passed to the debugger. <BR>
+<BR>
+<!--TOC section Who Says C is Simple?-->
+
+<H2 CLASS="section"><A NAME="htoc42">16</A>&nbsp;&nbsp;Who Says C is Simple?</H2><!--SEC END -->
+<A NAME="sec-simplec"></A>
+When I (George) started to write CIL I thought it was going to take two weeks.
+Exactly a year has passed since then and I am still fixing bugs in it. This
+gross underestimate was due to the fact that I thought parsing and making
+sense of C is simple. You probably think the same. What I did not expect was
+how many dark corners this language has, especially if you want to parse
+real-world programs such as those written for GCC or if you are more ambitious
+and you want to parse the Linux or Windows NT sources (both of these were
+written without any respect for the standard and with the expectation that
+compilers will be changed to accommodate the program). <BR>
+<BR>
+The following examples were actually encountered either in real programs or
+are taken from the ISO C99 standard or from the GCC's testcases. My first
+reaction when I saw these was: <EM>Is this C?</EM>. The second one was : <EM>What the hell does it mean?</EM>. <BR>
+<BR>
+If you are contemplating doing program analysis for C on abstract-syntax
+trees then your analysis ought to be able to handle these things. Or, you can
+use CIL and let CIL translate them into clean C code. <BR>
+<BR>
+<!--TOC subsection Standard C-->
+
+<H3 CLASS="subsection"><A NAME="htoc43">16.1</A>&nbsp;&nbsp;Standard C</H3><!--SEC END -->
+
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Why does the following code return 0 for most values of <TT>x</TT>? (This
+should be easy.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x;
+  return x == (1 &amp;&amp; x);
+</FONT></PRE>
+See the <A HREF="examples/ex30.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Why does the following code return 0 and not -1? (Answer: because
+<TT>sizeof</TT> is unsigned, thus the result of the subtraction is unsigned, thus
+the shift is logical.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ((1 - sizeof(int)) &gt;&gt; 32);
+</FONT></PRE>
+See the <A HREF="examples/ex31.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Scoping rules can be tricky. This function returns 5.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int x = 5;
+int f() {
+  int x = 3;
+  {
+    extern int x;
+    return x;
+  }
+}
+</FONT></PRE>
+See the <A HREF="examples/ex32.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Functions and function pointers are implicitly converted to each other. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int (*pf)(void);
+int f(void) {
+
+   pf = &amp;f; // This looks ok
+   pf = ***f; // Dereference a function?
+   pf(); // Invoke a function pointer?     
+   (****pf)();  // Looks strange but Ok
+   (***************f)(); // Also Ok             
+}
+</FONT></PRE>
+See the <A HREF="examples/ex33.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializer with designators are one of the hardest parts about ISO C.
+Neither MSVC or GCC implement them fully. GCC comes close though. What is the
+final value of <TT>i.nested.y</TT> and <TT>i.nested.z</TT>? (Answer: 2 and respectively
+6). 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct { 
+   int x; 
+   struct { 
+       int y, z; 
+   } nested;
+} i = { .nested.y = 5, 6, .x = 1, 2 };               
+</FONT></PRE>
+See the <A HREF="examples/ex34.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">This is from c-torture. This function returns 1.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+typedef struct
+{
+  char *key;
+  char *value;
+} T1;
+
+typedef struct
+{
+  long type;
+  char *value;
+} T3;
+
+T1 a[] =
+{
+  {
+    "",
+    ((char *)&amp;((T3) {1, (char *) 1}))
+  }
+};
+int main() {
+   T3 *pt3 = (T3*)a[0].value;
+   return pt3-&gt;value;
+}
+</FONT></PRE>
+See the <A HREF="examples/ex35.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Another one with constructed literals. This one is legal according to
+the GCC documentation but somehow GCC chokes on (it works in CIL though). This
+code returns 2.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ((int []){1,2,3,4})[1];
+</FONT></PRE>
+See the <A HREF="examples/ex36.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">In the example below there is one copy of &#8220;bar&#8221; and two copies of
+ &#8220;pbar&#8221; (static prototypes at block scope have file scope, while for all
+ other types they have block scope). 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo() {
+     static bar();
+     static (*pbar)() = bar;
+
+  }
+
+  static bar() { 
+    return 1;
+  }
+
+  static (*pbar)() = 0;
+</FONT></PRE>
+See the <A HREF="examples/ex37.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Two years after heavy use of CIL, by us and others, I discovered a bug
+ in the parser. The return value of the following function depends on what
+ precedence you give to casts and unary minus:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  unsigned long foo() {
+    return (unsigned long) - 1 / 8;
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex38.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+The correct interpretation is <TT>((unsigned long) - 1) / 8</TT>, which is a
+ relatively large number, as opposed to <TT>(unsigned long) (- 1 / 8)</TT>, which
+ is 0. </OL>
+<!--TOC subsection GCC ugliness-->
+
+<H3 CLASS="subsection"><A NAME="htoc44">16.2</A>&nbsp;&nbsp;GCC ugliness</H3><!--SEC END -->
+<A NAME="sec-ugly-gcc"></A>
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">GCC has generalized lvalues. You can take the address of a lot of
+strange things:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x, y, z;
+  return &amp;(x ? y : z) - &amp; (x++, x);
+</FONT></PRE>
+See the <A HREF="examples/ex39.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC lets you omit the second component of a conditional expression.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  extern int f();
+  return f() ? : -1; // Returns the result of f unless it is 0
+</FONT></PRE>
+See the <A HREF="examples/ex40.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Computed jumps can be tricky. CIL compiles them away in a fairly clean
+way but you are on your own if you try to jump into another function this way.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+static void *jtab[2]; // A jump table
+static int doit(int x){
+ 
+  static int jtab_init = 0;
+  if(!jtab_init) { // Initialize the jump table
+    jtab[0] = &amp;&amp;lbl1;
+    jtab[1] = &amp;&amp;lbl2;
+    jtab_init = 1;
+  }
+  goto *jtab[x]; // Jump through the table
+lbl1:
+  return 0;
+lbl2:
+  return 1;
+}
+ 
+int main(void){
+  if (doit(0) != 0) exit(1);
+  if (doit(1) != 1) exit(1);
+  exit(0);
+}
+</FONT></PRE>
+See the <A HREF="examples/ex41.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">A cute little example that we made up. What is the returned value?
+(Answer: 1); 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ({goto L; 0;}) &amp;&amp; ({L: 5;});
+</FONT></PRE>
+See the <A HREF="examples/ex42.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate"><TT>extern inline</TT> is a strange feature of GNU C. Can you guess what the
+following code computes?
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+extern inline foo(void) { return 1; }
+int firstuse(void) { return foo(); }
+
+// A second, incompatible definition of foo
+int foo(void) { return 2; }
+
+int main() {
+    return foo() + firstuse();
+}
+</FONT></PRE>
+See the <A HREF="examples/ex43.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+The answer depends on whether the optimizations are turned on. If they are
+then the answer is 3 (the first definition is inlined at all occurrences until
+the second definition). If the optimizations are off, then the first
+definition is ignore (treated like a prototype) and the answer is 4. <BR>
+<BR>
+CIL will misbehave on this example, if the optimizations are turned off (it
+ always returns 3).<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC allows you to cast an object of a type T into a union as long as the
+union has a field of that type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+union u { 
+   int i; 
+   struct s { 
+      int i1, i2;
+   } s;
+};
+
+union u x = (union u)6;
+
+int main() {
+  struct s y = {1, 2};
+  union u  z = (union u)y;
+}
+</FONT></PRE>
+See the <A HREF="examples/ex44.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC allows you to use the <TT>__mode__</TT> attribute to specify the size
+of the integer instead of the standard <TT>char</TT>, <TT>short</TT> and so on:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int __attribute__ ((__mode__ (  __QI__ ))) i8;
+int __attribute__ ((__mode__ (  __HI__ ))) i16;
+int __attribute__ ((__mode__ (  __SI__ ))) i32;
+int __attribute__ ((__mode__ (  __DI__ ))) i64;
+</FONT></PRE>
+See the <A HREF="examples/ex45.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">The &#8220;alias&#8221; attribute on a function declaration tells the
+ linker to treat this declaration as another name for the specified
+ function. CIL will replace the declaration with a trampoline
+ function pointing to the specified target.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+    static int bar(int x, char y) {
+      return x + y;
+    }
+
+    //foo is considered another name for bar.
+    int foo(int x, char y) __attribute__((alias("bar")));
+</FONT></PRE>
+See the <A HREF="examples/ex46.txt">CIL output</A> for this
+code fragment</OL>
+<!--TOC subsection Microsoft VC ugliness-->
+
+<H3 CLASS="subsection"><A NAME="htoc45">16.3</A>&nbsp;&nbsp;Microsoft VC ugliness</H3><!--SEC END -->
+
+This compiler has few extensions, so there is not much to say here.
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Why does the following code return 0 and not -1? (Answer: because of a
+bug in Microsoft Visual C. It thinks that the shift is unsigned just because
+the second operator is unsigned. CIL reproduces this bug when in MSVC mode.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return -3 &gt;&gt; (8 * sizeof(int));
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-enumerate">Unnamed fields in a structure seem really strange at first. It seems
+that Microsoft Visual C introduced this extension, then GCC picked it up (but
+in the process implemented it wrongly: in GCC the field <TT>y</TT> overlaps with
+<TT>x</TT>!).
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct {
+  int x;
+  struct {
+     int y, z;
+     struct {
+       int u, v;
+     };
+ };
+} a;
+return a.x + a.y + a.z + a.u + a.v;
+</FONT></PRE>
+See the <A HREF="examples/ex47.txt">CIL output</A> for this
+code fragment</OL>
+<!--TOC section Authors-->
+
+<H2 CLASS="section"><A NAME="htoc46">17</A>&nbsp;&nbsp;Authors</H2><!--SEC END -->
+
+The CIL parser was developed starting from Hugues Casse's <TT>frontc</TT>
+front-end for C although all the files from the <TT>frontc</TT> distribution have
+been changed very extensively. The intermediate language and the elaboration
+stage are all written from scratch. The main author is
+<A HREF="mailto:necula@cs.berkeley.edu">George Necula</A>, with significant
+contributions from <A HREF="mailto:smcpeak@cs.berkeley.edu">Scott McPeak</A>,
+<A HREF="mailto:weimer@cs.berkeley.edu">Westley Weimer</A>,
+<A HREF="mailto:liblit@cs.wisc.edu">Ben Liblit</A>,
+<A HREF="javascript:loadTop('http://www.cs.berkeley.edu/~matth/')">Matt Harren</A>, 
+Raymond To and Aman Bhargava.<BR>
+<BR>
+This work is based upon work supported in part by the National Science
+Foundation under Grants No. 9875171, 0085949 and 0081588, and gifts from
+Microsoft Research. Any opinions, findings, and conclusions or recommendations
+expressed in this material are those of the author(s) and do not necessarily
+reflect the views of the National Science Foundation or the other sponsors.<BR>
+<BR>
+<!--TOC section License-->
+
+<H2 CLASS="section"><A NAME="htoc47">18</A>&nbsp;&nbsp;License</H2><!--SEC END -->
+
+Copyright (c) 2001-2005, 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+George C. Necula &lt;necula@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Scott McPeak &lt;smcpeak@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Wes Weimer &lt;weimer@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Ben Liblit &lt;liblit@cs.wisc.edu&gt;
+</UL>
+All rights reserved.<BR>
+<BR>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:<BR>
+<BR>
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.<BR>
+<BR>
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.<BR>
+<BR>
+3. The names of the contributors may not be used to endorse or promote
+products derived from this software without specific prior written
+permission.<BR>
+<BR>
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.<BR>
+<BR>
+<!--TOC section Bug reports-->
+
+<H2 CLASS="section"><A NAME="htoc48">19</A>&nbsp;&nbsp;Bug reports</H2><!--SEC END -->
+
+We are certain that there are still some remaining bugs in CIL. If you find
+one please file a bug report in our Source Forge space 
+<A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
+<BR>
+You can find there the latest announcements, a source distribution,
+bug report submission instructions and a mailing list: cil-users[at
+sign]lists.sourceforge.net. Please use this list to ask questions about CIL,
+as it will ensure your message is viewed by a broad audience. <BR>
+<BR>
+<!--TOC section Changes-->
+
+<H2 CLASS="section"><A NAME="htoc49">20</A>&nbsp;&nbsp;Changes</H2><!--SEC END -->
+<A NAME="sec-changes"></A><!--NAME changes.html-->
+
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<B>May 20, 2006</B>: <B>Released version 1.3.5</B>
+<LI CLASS="li-itemize"><B>May 19, 2006</B>: <TT>Makefile.cil.in</TT>/<TT>Makefile.cil</TT> have
+ been renamed <TT>Makefile.in</TT>/<TT>Makefile</TT>. And <TT>maincil.ml</TT> has
+ been renamed <TT>main.ml</TT>.
+<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added a new module <A HREF="api/Cfg.html">Cfg</A> to compute the
+ control-flow graph. Unlike the older <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>,
+ the new version does not modify the code. 
+<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added several new analyses: reaching
+ definitions, available expressions, liveness analysis, and dead code
+ elimination. See Section&nbsp;<A HREF="#sec-Extension">8</A>.
+<LI CLASS="li-itemize"><B>May 2, 2006</B>: Added a flag <TT>--noInsertImplicitCasts</TT>.
+ When this flag is used, CIL code will only include casts inserted by
+ the programmer. Implicit coercions are not changed to explicit casts.
+<LI CLASS="li-itemize"><B>April 16, 2006</B>: Minor improvements to the <TT>--stats</TT>
+ flag (Section&nbsp;<A HREF="#sec-cilly-asm-options">7.2</A>). We now use Pentium performance
+ counters by default, if your processor supports them.
+<LI CLASS="li-itemize"><B>April 10, 2006</B>: Extended <TT>machdep.c</TT> to support
+ microcontroller compilers where the struct alignment of integer
+ types does not match the size of the type. Thanks to Nathan
+ Cooprider for the patch.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for global initializers of unions when
+ the union field being initialized is not the first one, and for
+ missing initializers of unions when the first field is not the
+ largest field.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for bitfields in the SFI module.
+<LI CLASS="li-itemize"><B>April 6, 2006</B>: Various fixes for gcc attributes.
+ <TT>packed</TT>, <TT>section</TT>, and <TT>always_inline</TT> attributes are now
+ parsed correctly. Also fixed printing of attributes on enum types.
+<LI CLASS="li-itemize"><B>March 30, 2006</B>: Fix for <TT>rmtemps.ml</TT>, which deletes
+ unused inline functions. When in <TT>gcc</TT> mode CIL now leaves all
+ inline functions in place, since <TT>gcc</TT> treats these as externally
+ visible. 
+<LI CLASS="li-itemize"><B>March 15, 2006</B>: Fix for <TT>typeof(<I>e</I>)</TT> when <I>e</I> has type
+ <TT>void</TT>.
+<LI CLASS="li-itemize"><B>March 3, 2006</B>: Assume inline assembly instructions can
+ fall through for the purposes of adding return statements. Thanks to
+ Nathan Cooprider for the patch.
+<LI CLASS="li-itemize"><B>February 27, 2006</B>: Fix for extern inline functions when
+ the output of CIL is fed back into CIL.
+<LI CLASS="li-itemize"><B>January 30, 2006</B>: Fix parsing of <TT>switch</TT> without braces.
+<LI CLASS="li-itemize"><B>January 30, 2006</B>: Allow `$' to appear in identifiers.
+<LI CLASS="li-itemize"><B>January 13, 2006</B>: Added support for gcc's alias attribute
+ on functions. See Section&nbsp;<A HREF="#sec-ugly-gcc">16.2</A>, item 8. 
+<LI CLASS="li-itemize"><B>December 9, 2005</B>: Christoph Spiel fixed the Golf and
+ Olf modules so that Golf can be used with the points-to analysis.
+ He also added performance fixes and cleaned up the documentation.
+<LI CLASS="li-itemize"><B>December 1, 2005</B>: Major rewrite of the ext/callgraph module. 
+<LI CLASS="li-itemize"><B>December 1, 2005</B>: Preserve enumeration constants in CIL. Default
+is the old behavior to replace them with integers.
+<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added support for many GCC <TT>__builtin</TT>
+ functions. 
+<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added the EXTRAFEATURES configure
+ option, making it easier to add Features to the build process.
+<LI CLASS="li-itemize"><B>November 23, 2005</B>: In MSVC mode do not remove any locals whose name
+ appears as a substring in an inline assembly. 
+<LI CLASS="li-itemize"><B>November 23, 2005</B>: Do not add a return to functions that have the
+ noreturn attribute. 
+<LI CLASS="li-itemize"><B>November 22, 2005</B>: <B>Released version 1.3.4</B>
+<LI CLASS="li-itemize"><B>November 21, 2005</B>: Performance and correctness fixes for
+ the Points-to Analysis module. Thanks to Christoph Spiel for the
+ patches.
+<LI CLASS="li-itemize"><B>October 5, 2005</B>: CIL now builds on SPARC/Solaris. Thanks
+ to Nick Petroni and Remco van Engelen for the patches.
+<LI CLASS="li-itemize"><B>September 26, 2005</B>: CIL no longer uses the `<TT>-I-</TT>' flag
+ by default when preprocessing with gcc.
+<LI CLASS="li-itemize"><B>August 24, 2005</B>: Added a command-line option
+ &#8220;--forceRLArgEval&#8221; that forces function arguments to be evaluated
+ right-to-left. This is the default behavior in unoptimized gcc and
+ MSVC, but the order of evaluation is undefined when using
+ optimizations, unless you apply this CIL transformation. This flag
+ does not affect the order of evaluation of e.g. binary operators,
+ which remains undefined. Thanks to Nathan Cooprider for the patch.
+<LI CLASS="li-itemize"><B>August 9, 2005</B>: Fixed merging when there are more than 20
+ input files.
+<LI CLASS="li-itemize"><B>August 3, 2005</B>: When merging, it is now an error to
+ declare the same global variable twice with different initializers.
+<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in transparent unions.
+<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in collectInitializer. Thanks to
+ Benjamin Monate for the patch.
+<LI CLASS="li-itemize"><B>July 26, 2005</B>: Better support for extended inline assembly
+ in gcc.
+<LI CLASS="li-itemize"><B>July 26, 2005</B>: Added many more gcc __builtin* functions
+ to CIL. Most are treated as Call instructions, but a few are
+ translated into expressions so that they can be used in global
+ initializers. For example, &#8220;<TT>__builtin_offsetof(t, field)</TT>&#8221; is
+ rewritten as &#8220;<TT>&amp;((t*)0)-&gt;field</TT>&#8221;, the traditional way of calculating
+ an offset.
+<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug in the constant folding of shifts
+ when the second argument was negative or too large.
+<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug where casts were not always
+ inserted in function calls.
+<LI CLASS="li-itemize"><B>June 10, 2005</B>: Fixed bug in the code that makes implicit
+ returns explicit. We weren't handling switch blocks correctly.
+<LI CLASS="li-itemize"><B>June 1, 2005</B>: <B>Released version 1.3.3</B>
+<LI CLASS="li-itemize"><B>May 31, 2005</B>: Fixed handling of noreturn attribute for function
+ pointers. 
+<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the handling of constructors in gcc.
+<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the generation of global variable IDs.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Reimplemented the translation of function calls so
+ that we can intercept some builtins. This is important for the uses of
+ __builtin_constant_p in constants. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Export the plainCilPrinter, for debugging.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug with printing of const attribute for
+ arrays. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in generation of type signatures. Now they
+ should not contain expressions anymore, so you can use structural equality.
+ This used to lead to Out_of_Memory exceptions.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in type comparisons using
+ TBuiltin_va_list.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Improved the constant folding in array lengths and
+ case expressions. 
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the <TT>__builtin_frame_address</TT> to the set
+ of gcc builtins.
+<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the CIL project to SourceForge.
+<LI CLASS="li-itemize"><B>April 23, 2005</B>: The cattr field was not visited.
+<LI CLASS="li-itemize"><B>March 6, 2005</B>: Debian packaging support
+<LI CLASS="li-itemize"><B>February 16, 2005</B>: Merger fixes.
+<LI CLASS="li-itemize"><B>February 11, 2005</B>: Fixed a bug in <TT>--dopartial</TT>. Thanks to
+Nathan Cooprider for this fix. 
+<LI CLASS="li-itemize"><B>January 31, 2005</B>: Make sure the input file is closed even if a
+ parsing error is encountered. 
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: <B>Released version 1.3.2</B>
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: Fixed printing of integer constants whose
+ integer kind is shorter than an int. 
+<LI CLASS="li-itemize"><B>January 11, 2005</B>: Added checks for negative size arrays and arrays
+ too big. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Added support for GCC attribute &#8220;volatile&#8221; for
+ tunctions (as a synonim for noreturn). 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Improved the comparison of array sizes when
+ comparing array types. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed handling of shell metacharacters in the
+ cilly command lione.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed dropping of cast in initialization of
+ local variable with the result of a function call.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed some structural comparisons that were
+ broken in the Ocaml 3.08.
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed the <TT>unrollType</TT> function to not forget
+ attributes. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Better keeping track of locations of function
+ prototypes and definitions. 
+<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed bug with the expansion of enumeration
+ constants in attributes.
+<LI CLASS="li-itemize"><B>October 18, 2004</B>: Fixed a bug in cabsvisit.ml. CIl would wrap a
+ BLOCK around a single atom unnecessarily. 
+<LI CLASS="li-itemize"><B>August 7, 2004</B>: <B>Released version 1.3.1</B>
+<LI CLASS="li-itemize"><B>August 4, 2004</B>: Fixed a bug in splitting of structs using 
+ <TT>--dosimplify</TT>
+<LI CLASS="li-itemize"><B>July 29, 2004</B>: Minor changes to the type typeSig (type signatures)
+ to ensure that they do not contain types, so that you can do structural
+ comparison without danger of nontermination. 
+<LI CLASS="li-itemize"><B>July 28, 2004</B>: Ocaml version 3.08 is required. Numerous small 
+ changes while porting to Ocaml 3.08. 
+<LI CLASS="li-itemize"><B>July 7, 2004</B>: <B>Released version 1.2.6</B>
+<LI CLASS="li-itemize"><B>July 2, 2004</B>: Character constants such as <TT>'c'</TT> should
+ have type <TT>int</TT>, not <TT>char</TT>. Added a utility function
+ <TT>Cil.charConstToInt</TT> that sign-extends chars greater than 128, if needed.
+<LI CLASS="li-itemize"><B>July 2, 2004</B>: Fixed a bug that was casting values to int
+ before applying the logical negation operator !. This caused
+ problems for floats, and for integer types bigger than <TT>int</TT>.
+<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added the field <TT>sallstmts</TT> to a function
+ description, to hold all statements in the function.
+<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added new extensions for data flow analyses, and
+ for computing dominators.
+<LI CLASS="li-itemize"><B>June 10, 2004</B>: Force initialization of CIL at the start of
+Cabs2cil. 
+<LI CLASS="li-itemize"><B>June 9, 2004</B>: Added support for GCC <TT>__attribute_used__</TT>
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: <B>Released version 1.2.5</B>
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Allow now to run ./configure CC=cl and set the MSVC
+compiler to be the default. The MSVC driver will now select the default name
+of the .exe file like the CL compiler. 
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed a bug in the driver. The temporary files are
+deleted by the Perl script before the CL compiler gets to them?
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added the - form of arguments to the MSVC driver.
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added a few more GCC-specific string escapes, (, [,
+{, %, E. 
+<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed bug with continuation lines in MSVC.
+<LI CLASS="li-itemize"><B>April 6, 2004</B>: Fixed embarassing bug in the parser: the precedence
+ of casts and unary operators was switched. 
+<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug involving statements mixed between
+declarations containing initializers. Now we make sure that the initializers
+are run in the proper order with respect to the statements.
+<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug in the merger. The merger was keeping
+separate alpha renaming talbes (namespaces) for variables and types. This
+means that it might end up with a type and a variable named the same way, if
+they come from different files, which breaks an important CIL invariant.
+<LI CLASS="li-itemize"><B>March 11, 2004</B> : Fixed a bug in the Cil.copyFunction function. The
+new local variables were not getting fresh IDs. 
+<LI CLASS="li-itemize"><B>March 5, 2004</B>: Fixed a bug in the handling of static function
+ prototypes in a block scope. They used to be renamed. Now we just consider
+ them global. 
+<LI CLASS="li-itemize"><B>February 20, 2004</B>: <B>Released version 1.2.4</B>
+<LI CLASS="li-itemize"><B>February 15, 2004</B>: Changed the parser to allow extra semicolons
+ after field declarations.
+<LI CLASS="li-itemize"><B>February 14, 2004</B>: Changed the Errormsg functions: error, unimp,
+bug to not raise an exception. Instead they just set Errormsg.hadErrors. 
+<LI CLASS="li-itemize"><B>February 13, 2004</B>: Change the parsing of attributes to recognize
+ enumeration constants.
+<LI CLASS="li-itemize"><B>February 10, 2004</B>: In some versions of <TT>gcc</TT> the identifier
+ _{thread is an identifier and in others it is a keyword. Added code
+ during configuration to detect which is the case. 
+<LI CLASS="li-itemize"><B>January 7, 2004</B>: <B>Released version 1.2.3</B>
+<LI CLASS="li-itemize"><B>January 7, 2004</B>: Changed the alpha renamer to be less
+conservative. It will remember all versions of a name that were seen and will
+only create a new name if we have not seen one. 
+<LI CLASS="li-itemize"><B>December 30, 2003</B> : Extended the <TT>cilly</TT> command to understand
+ better linker command options <TT>-lfoo</TT>. 
+<LI CLASS="li-itemize"><B>December 5, 2003</B>: Added markup commands to the pretty-printer
+module. Also, changed the &#8220;@&lt;&#8221; left-flush command into &#8220;@''.
+<LI CLASS="li-itemize"><B>December 4, 2003</B>: Wide string literals are now handled
+directly by Cil (rather than being exploded into arrays). This is
+apparently handy for Microsoft Device Driver APIs that use intrinsic
+functions that require literal constant wide-string arguments. 
+<LI CLASS="li-itemize"><B>December 3, 2003</B>: Added support for structured exception handling
+ extensions for the Microsoft compilers.
+<LI CLASS="li-itemize"><B>December 1, 2003</B>: Fixed a Makefile bug in the generation of the 
+Cil library (e.g., <TT>cil.cma</TT>) that was causing it to be unusable. Thanks
+to KEvin Millikin for pointing out this bug. 
+<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added support for linkage specifications
+ (extern &#8220;C&#8221;). 
+<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added the ocamlutil directory to contain some
+utilities shared with other projects. 
+<LI CLASS="li-itemize"><B>November 25, 2003</B>: <B>Released version 1.2.2</B>
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that allowed a static local to
+ conflict with a global with the same name that is declared later in the
+ file. 
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Removed the <TT>--keep</TT> option of the <TT>cilly</TT>
+ driver and replaced it with <TT>--save-temps</TT>.
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Added printing of what CIL features are being
+ run.
+<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that resulted in attributes being
+ dropped for integer types. 
+<LI CLASS="li-itemize"><B>November 11, 2003</B>: Fixed a bug in the visitor for enumeration
+ definitions. 
+<LI CLASS="li-itemize"><B>October 24, 2003</B>: Fixed a problem in the configuration script. It
+ was not recognizing the Ocaml version number for beta versions. 
+<LI CLASS="li-itemize"><B>October 15, 2003</B>: Fixed a problem in version 1.2.1 that was
+ preventing compilation on OCaml 3.04.
+<LI CLASS="li-itemize"><B>September 17, 2003: Released version 1.2.1.</B>
+<LI CLASS="li-itemize"><B>September 7, 2003</B>: Redesigned the interface for choosing
+ <TT>#line</TT> directive printing styles. Cil.printLn and
+ Cil.printLnComment have been merged into Cil.lineDirectiveStyle.
+<LI CLASS="li-itemize"><B>August 8, 2003</B>: Do not silently pad out functions calls with
+arguments to match the prototype. 
+<LI CLASS="li-itemize"><B>August 1, 2003</B>: A variety of fixes suggested by Steve Chamberlain:
+initializers for externs, prohibit float literals in enum, initializers for
+unsized arrays were not working always, an overflow problem in Ocaml, changed
+the processing of attributes before struct specifiers<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 14, 2003</B>: Add basic support for GCC's "__thread" storage
+qualifier. If given, it will appear as a "thread" attribute at the top of the
+type of the declared object. Treatment is very similar to "__declspec(...)"
+in MSVC<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed some of the __alignof computations. Fixed
+ bug in the designated initializers for arrays (Array.get error).
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed infinite loop bug (Stack Overflow) in the
+ visitor for __alignof.
+<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed bug in the conversion to CIL. A function or
+ array argument of
+ the GCC __typeof() was being converted to pointer type. Instead, it should
+ be left alone, just like for sizeof. 
+<LI CLASS="li-itemize"><B>July 7, 2003</B>: New Escape module provides utility functions
+ for escaping characters and strings in accordance with C lexical
+ rules.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>July 2, 2003</B>: Relax CIL's rules for when two enumeration types are
+considered compatible. Previously CIL considered two enums to be compatible if
+they were the same enum. Now we follow the C99 standard.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 28, 2003</B>: In the Formatparse module, Eric Haugh found and
+ fixed a bug in the handling of lvalues of the form &#8220;lv-&gt;field.more&#8221;.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 28, 2003</B>: Extended the handling of gcc command lines
+arguments in the Perl scripts. <BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 23, 2003</B>: In Rmtmps module, simplified the API for
+ customizing the root set. Clients may supply a predicate that
+ returns true for each root global. Modifying various
+ &#8220;<TT>referenced</TT>&#8221; fields directly is no longer supported.<BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 17, 2003</B>: Reimplement internal utility routine
+ <TT>Cil.escape_char</TT>. Faster and better. <BR>
+<BR>
+<LI CLASS="li-itemize"><B>June 14, 2003</B>: Implemented support for <TT>__attribute__s</TT>
+appearing between "struct" and the struct tag name (also for unions and
+enums), since gcc supports this as documented in section 4.30 of the gcc
+(2.95.3) manual<BR>
+<BR>
+<LI CLASS="li-itemize"><B>May 30, 2003</B>: Released the regression tests. 
+<LI CLASS="li-itemize"><B>May 28, 2003</B>: <B>Released version 1.1.2</B>
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Add the <TT>simplify</TT> module that compiles CIL
+expressions into simpler expressions, similar to those that appear in a
+3-address intermediate language.
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Various fixes and improvements to the pointer
+analysis modules. 
+<LI CLASS="li-itemize"><B>May 26, 2003</B>: Added optional consistency checking for
+transformations.
+<LI CLASS="li-itemize"><B>May 25, 2003</B>: Added configuration support for big endian machines.
+Now <A HREF="api/Cil.html#VALlittle_endian">Cil.little_endian</A> can be used to test whether the machine is
+little endian or not. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed a bug in the handling of inline functions. The
+CIL merger used to turn these functions into &#8220;static&#8221;, which is incorrect. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Expanded the CIL consistency checker to verify
+undesired sharing relationships between data structures. 
+<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed bug in the <TT>oneret</TT> CIL module: it was
+mishandling certain labeled return statements. 
+<LI CLASS="li-itemize"><B>May 5, 2003</B>: <B>Released version 1.0.11</B>
+<LI CLASS="li-itemize"><B>May 5, 2003</B>: OS X (powerpc/darwin) support for CIL. Special 
+thanks to Jeff Foster, Andy Begel and Tim Leek. 
+<LI CLASS="li-itemize"><B>April 30, 2003</B>: Better description of how to use CIL for your
+analysis. 
+<LI CLASS="li-itemize"><B>April 28, 2003</B>: Fixed a bug with <TT>--dooneRet</TT> and
+<TT>--doheapify</TT>. Thanks, Manos Renieris.
+<LI CLASS="li-itemize"><B>April 16, 2003</B>: Reworked management of
+ temporary/intermediate output files in Perl driver scripts. Default
+ behavior is now to remove all such files. To keep intermediate
+ files, use one of the following existing flags:
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ <TT>--keepmerged</TT> for the single-file merge of all sources
+ <LI CLASS="li-itemize"><TT>--keep=&lt;<I>dir</I></TT><TT>&gt;</TT> for various other CIL and
+ CCured output files
+ <LI CLASS="li-itemize"><TT>--save-temps</TT> for various gcc intermediate files; MSVC
+ has no equivalent option
+ </UL>
+ As part of this change, some intermediate files have changed their
+ names slightly so that new suffixes are always preceded by a
+ period. For example, CCured output that used to appear in
+ &#8220;<TT>foocured.c</TT>&#8221; now appears in &#8220;<TT>foo.cured.c</TT>&#8221;.
+<LI CLASS="li-itemize"><B>April 7, 2003</B>: Changed the representation of the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
+global constructor. Now it is possible to update the initializer without
+reconstructing the global (which in turn it would require reconstructing the
+list of globals that make up a program). We did this because it is often
+tempting to use <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
+was the only global that could not be updated in place. 
+<LI CLASS="li-itemize"><B>April 6, 2003</B>: Reimplemented parts of the cilly.pl script to make
+it more robust in the presence of complex compiler arguments. 
+<LI CLASS="li-itemize"><B>March 10, 2003</B>: <B>Released version 1.0.9</B>
+<LI CLASS="li-itemize"><B>March 10, 2003</B>: Unified and documented a large number of CIL
+Library Modules: oneret, simplemem, makecfg, heapify, stackguard, partial.
+Also documented the main client interface for the pointer analysis. 
+<LI CLASS="li-itemize"><B>February 18, 2003</B>: Fixed a bug in logwrites that was causing it
+to produce invalid C code on writes to bitfields. Thanks, David Park. 
+<LI CLASS="li-itemize"><B>February 15, 2003</B>: <B>Released version 1.0.8</B>
+<LI CLASS="li-itemize"><B>February 15, 2003</B>: PDF versions of the manual and API are
+available for those who would like to print them out. 
+<LI CLASS="li-itemize"><B>February 14, 2003</B>: CIL now comes bundled with alias analyses. 
+<LI CLASS="li-itemize"><B>February 11, 2003</B>: Added support for adding/removing options from
+ <TT>./configure</TT>. 
+<LI CLASS="li-itemize"><B>February 3, 2003</B>: <B>Released version 1.0.7</B>
+<LI CLASS="li-itemize"><B>February 1, 2003</B>: Some bug fixes in the handling of variable
+argument functions in new versions of <TT>gcc</TT> And <TT>glibc</TT>. 
+<LI CLASS="li-itemize"><B>January 29, 2003</B>: Added the logical AND and OR operators.
+Exapanded the translation to CIL to handle more complicated initializers
+(including those that contain logical operators).
+<LI CLASS="li-itemize"><B>January 28, 2003</B>: <B>Released version 1.0.6</B>
+<LI CLASS="li-itemize"><B>January 28, 2003</B>: Added support for the new handling of
+variable-argument functions in new versions of <TT>glibc</TT>. 
+<LI CLASS="li-itemize"><B>January 19, 2003</B>: Added support for declarations in interpreted
+ constructors. Relaxed the semantics of the patterns for variables. 
+<LI CLASS="li-itemize"><B>January 17, 2003</B>: Added built-in prototypes for the gcc built-in
+ functions. Changed the <TT>pGlobal</TT> method in the printers to print the
+ carriage return as well.
+<LI CLASS="li-itemize"><B>January 9, 2003</B>: Reworked lexer and parser's strategy for
+ tracking source file names and line numbers to more closely match
+ typical native compiler behavior. The visible CIL interface is
+ unchanged.
+<LI CLASS="li-itemize"><B>January 9, 2003</B>: Changed the interface to the alpha convertor. Now
+you can pass a list where it will record undo information that you can use to
+revert the changes that it makes to the scope tables.
+<LI CLASS="li-itemize"><B>January 6, 2003</B>: <B>Released version 1.0.5</B>
+<LI CLASS="li-itemize"><B>January 4, 2003</B>: Changed the interface for the Formatcil module.
+ Now the placeholders in the pattern have names. Also expanded the
+ documentation of the Formatcil module.
+ Now the placeholders in the pattern have names.
+<LI CLASS="li-itemize"><B>January 3, 2003</B>: Extended the <TT>rmtmps</TT> module to also remove
+ unused labels that are generated in the conversion to CIL. This reduces the
+ number of warnings that you get from <TT>cgcc</TT> afterwards.
+<LI CLASS="li-itemize"><B>December 17, 2002</B>: Fixed a few bugs in CIL related to the
+ representation of string literals. The standard says that a string literal
+ is an array. In CIL, a string literal has type pointer to character. This is
+ Ok, except as an argument of sizeof. To support this exception, we have
+ added to CIL the expression constructor SizeOfStr. This allowed us to fix
+ bugs with computing <TT>sizeof("foo bar")</TT> and <TT>sizeof((char*)"foo bar")</TT>
+ (the former is 8 and the latter is 4).<BR>
+<BR>
+<LI CLASS="li-itemize"><B>December 8, 2002</B>: Fixed a few bugs in the lexer and parser
+ relating to hex and octal escapes in string literals. Also fixed
+ the dependencies between the lexer and parser.
+<LI CLASS="li-itemize"><B>December 5, 2002</B>: Fixed visitor bugs that were causing
+ some attributes not to be visited and some queued instructions to be
+ dropped.
+<LI CLASS="li-itemize"><B>December 3, 2002</B>: Added a transformation to catch stack
+ overflows. Fixed the heapify transformation.
+<LI CLASS="li-itemize"><B>October 14, 2002</B>: CIL is now available under the BSD license
+(see the License section or the file LICENSE). <B>Released version 1.0.4</B>
+<LI CLASS="li-itemize"><B>October 9, 2002</B>: More FreeBSD configuration changes, support
+for the GCC-ims <TT>__signed</TT> and <TT>__volatile</TT>. Thanks to Axel
+Simon for pointing out these problems. <B>Released version 1.0.3</B>
+<LI CLASS="li-itemize"><B>October 8, 2002</B>: FreeBSD configuration and porting fixes.
+Thanks to Axel Simon for pointing out these problems. 
+<LI CLASS="li-itemize"><B>September 10, 2002</B>: Fixed bug in conversion to CIL. Now we drop
+all &#8220;const&#8221; qualifiers from the types of locals, even from the fields of
+local structures or elements of arrays.
+<LI CLASS="li-itemize"><B>September 7, 2002</B>: Extended visitor interface to distinguish visitng
+ offsets inside lvalues from offsets inside initializer lists.
+<LI CLASS="li-itemize"><B>September 7, 2002</B>: <B>Released version 1.0.1</B>
+<LI CLASS="li-itemize"><B>September 6, 2002</B>: Extended the patcher with the <TT>ateof</TT> flag.
+<LI CLASS="li-itemize"><B>September 4, 2002</B>: Fixed bug in the elaboration to CIL. In some
+cases constant folding of <TT>||</TT> and <TT>&amp;&amp;</TT> was computed wrong.
+<LI CLASS="li-itemize"><B>September 3, 2002</B>: Fixed the merger documentation. 
+<LI CLASS="li-itemize"><B>August 29, 2002</B>: <B>Released version 1.0.0.</B>
+<LI CLASS="li-itemize"><B>August 29, 2002</B>: Started numbering versions with a major nubmer,
+minor and revisions. Released version 1.0.0.
+<LI CLASS="li-itemize"><B>August 25, 2002</B>: Fixed the implementation of the unique
+identifiers for global variables and composites. Now those identifiers are
+globally unique.
+<LI CLASS="li-itemize"><B>August 24, 2002</B>: Added to the machine-dependent configuration the
+<TT>sizeofvoid</TT>. It is 1 on gcc and 0 on MSVC. Extended the implementation of
+<TT>Cil.bitsSizeOf</TT> to handle this (it was previously returning an error when
+trying to compute the size of <TT>void</TT>).
+<LI CLASS="li-itemize"><B>August 24, 2002</B>: Changed the representation of structure and
+unions to distinguish between undefined structures and those that are defined
+to be empty (allowed on gcc). The sizeof operator is undefined for the former
+and returns 0 for the latter.
+<LI CLASS="li-itemize"><B>August 22, 2002</B>: Apply a patch from Richard H. Y. to support
+FreeBSD installations. Thanks, Richard!
+<LI CLASS="li-itemize"><B>August 12, 2002</B>: Fixed a bug in the translation of wide-character
+strings. Now this translation matches that of the underlying compiler. Changed
+the implementation of the compiler dependencies.
+<LI CLASS="li-itemize"><B>May 25, 2002</B>: Added interpreted constructors and destructors.
+<LI CLASS="li-itemize"><B>May 17, 2002</B>: Changed the representation of functions to move the
+&#8220;inline&#8221; information to the varinfo. This way we can print the &#8220;inline&#8221;
+even in declarations which is what gcc does. 
+<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the visitor for initializers to make two
+tail-recursive passes (the second is a <TT>List.rev</TT> and only done if one of
+the initializers change). This prevents <TT>Stack_Overflow</TT> for large
+initializers. Also improved the processing of initializers when converting to
+CIL. 
+<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the front-end to allow the use of <TT>MSVC</TT>
+mode even on machines that do not have MSVC. The machine-dependent parameters
+for GCC will be used in that case. 
+<LI CLASS="li-itemize"><B>May 11, 2002</B>: Changed the representation of formals in function
+types. Now the function type is purely functional. 
+<LI CLASS="li-itemize"><B>May 4, 2002</B>: Added the function
+<A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and changed <A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> to be
+tail recursive. This prevents stack overflow on huge files.
+<LI CLASS="li-itemize"><B>February 28, 2002</B>: Changed the significance of the
+<TT>CompoundInit</TT> in <A HREF="api/Cil.html#TYPEinit">Cil.init</A> to allow for missing initializers at the
+end of an array initializer. Added the API function
+<A HREF="api/Cil.html#VALfoldLeftCompoundAll">Cil.foldLeftCompoundAll</A>.
+</UL>
+<!--HTMLFOOT-->
+<!--ENDHTML-->
+<!--FOOTER-->
+<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
+</EM><A HREF="http://pauillac.inria.fr/~maranget/hevea/index.html"><EM>H<FONT SIZE=2><sup>E</sup></FONT>V<FONT SIZE=2><sup>E</sup></FONT>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
+</HTML>
diff --git a/cil/doc/cil.version.tex b/cil/doc/cil.version.tex
new file mode 100644
index 000000000..c58485945
--- /dev/null
+++ b/cil/doc/cil.version.tex
@@ -0,0 +1,2 @@
+\def\cilversion{1.3.5}
+\def\ccuredversion{@CCURED_VERSION@}
diff --git a/cil/doc/cil001.html b/cil/doc/cil001.html
new file mode 100644
index 000000000..5edc5daa2
--- /dev/null
+++ b/cil/doc/cil001.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Introduction
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil002.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc1">1</A>&nbsp;&nbsp;Introduction</H2>
+New: CIL now has a Source Forge page: 
+ <A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
+<BR>
+CIL (<B>C</B> <B>I</B>ntermediate <B>L</B>anguage) is a high-level representation
+along with a set of tools that permit easy analysis and source-to-source
+transformation of C programs.<BR>
+<BR>
+CIL is both lower-level than abstract-syntax trees, by clarifying ambiguous
+constructs and removing redundant ones, and also higher-level than typical
+intermediate languages designed for compilation, by maintaining types and a
+close relationship with the source program. The main advantage of CIL is that
+it compiles all valid C programs into a few core constructs with a very clean
+semantics. Also CIL has a syntax-directed type system that makes it easy to
+analyze and manipulate C programs. Furthermore, the CIL front-end is able to
+process not only ANSI-C programs but also those using Microsoft C or GNU C
+extensions. If you do not use CIL and want instead to use just a C parser and
+analyze programs expressed as abstract-syntax trees then your analysis will
+have to handle a lot of ugly corners of the language (let alone the fact that
+parsing C itself is not a trivial task). See Section&nbsp;<A HREF="cil016.html#sec-simplec">16</A> for some
+examples of such extreme programs that CIL simplifies for you.<BR>
+<BR>
+In essence, CIL is a highly-structured, &#8220;clean&#8221; subset of C. CIL features a
+reduced number of syntactic and conceptual forms. For example, all looping
+constructs are reduced to a single form, all function bodies are given
+explicit <TT>return</TT> statements, syntactic sugar like <TT>"-&gt;"</TT> is
+eliminated and function arguments with array types become pointers. (For an
+extensive list of how CIL simplifies C programs, see Section&nbsp;<A HREF="cil004.html#sec-cabs2cil">4</A>.)
+This reduces the number of cases that must be considered when manipulating a C
+program. CIL also separates type declarations from code and flattens scopes
+within function bodies. This structures the program in a manner more amenable
+to rapid analysis and transformation. CIL computes the types of all program
+expressions, and makes all type promotions and casts explicit. CIL supports
+all GCC and MSVC extensions except for nested functions and complex numbers.
+Finally, CIL organizes C's imperative features into expressions, instructions
+and statements based on the presence and absence of side-effects and
+control-flow. Every statement can be annotated with successor and predecessor
+information. Thus CIL provides an integrated program representation that can
+be used with routines that require an AST (e.g. type-based analyses and
+pretty-printers), as well as with routines that require a CFG (e.g., dataflow
+analyses). CIL also supports even lower-level representations (e.g.,
+three-address code), see Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>. <BR>
+<BR>
+CIL comes accompanied by a number of Perl scripts that perform generally
+useful operations on code:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+A <A HREF="cil007.html#sec-driver">driver</A> which behaves as either the <TT>gcc</TT> or
+Microsoft VC compiler and can invoke the preprocessor followed by the CIL
+application. The advantage of this script is that you can easily use CIL and
+the analyses written for CIL with existing make files.
+<LI CLASS="li-itemize">A <A HREF="merger.html#sec-merger">whole-program merger</A> that you can use as a
+replacement for your compiler and it learns all the files you compile when you
+make a project and merges all of the preprocessed source files into a single
+one. This makes it easy to do whole-program analysis.
+<LI CLASS="li-itemize">A <A HREF="patcher.html#sec-patcher">patcher</A> makes it easy to create modified
+copies of the system include files. The CIL driver can then be told to use
+these patched copies instead of the standard ones.
+</UL>
+CIL has been tested very extensively. It is able to process the SPECINT95
+benchmarks, the Linux kernel, GIMP and other open-source projects. All of
+these programs are compiled to the simple CIL and then passed to <TT>gcc</TT> and
+they still run! We consider the compilation of Linux a major feat especially
+since Linux contains many of the ugly GCC extensions (see Section&nbsp;<A HREF="cil016.html#sec-ugly-gcc">16.2</A>).
+This adds to about 1,000,000 lines of code that we tested it on. It is also
+able to process the few Microsoft NT device drivers that we have had access
+to. CIL was tested against GCC's c-torture testsuite and (except for the tests
+involving complex numbers and inner functions, which CIL does not currently
+implement) CIL passes most of the tests. Specifically CIL fails 23 tests out
+of the 904 c-torture tests that it should pass. GCC itself fails 19 tests. A
+total of 1400 regression test cases are run automatically on each change to
+the CIL sources.<BR>
+<BR>
+CIL is relatively independent on the underlying machine and compiler. When
+you build it CIL will configure itself according to the underlying compiler.
+However, CIL has only been tested on Intel x86 using the gcc compiler on Linux
+and cygwin and using the MS Visual C compiler. (See below for specific
+versions of these compilers that we have used CIL for.)<BR>
+<BR>
+The largest application we have used CIL for is
+<A HREF="javascript:loadTop('../ccured/index.html')">CCured</A>, a compiler that compiles C code into
+type-safe code by analyzing your pointer usage and inserting runtime checks in
+the places that cannot be guaranteed statically to be type safe. <BR>
+<BR>
+You can also use CIL to &#8220;compile&#8221; code that uses GCC extensions (e.g. the
+Linux kernel) into standard C code.<BR>
+<BR>
+CIL also comes accompanies by a growing library of extensions (see
+Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>). You can use these for your projects or as examples of
+using CIL. <BR>
+<BR>
+<TT>PDF</TT> versions of <A HREF="CIL.pdf">this manual</A> and the
+<A HREF="CIL-API.pdf">CIL API</A> are available. However, we recommend the
+<TT>HTML</TT> versions because the postprocessed code examples are easier to
+view. <BR>
+<BR>
+If you use CIL in your project, we would appreciate letting us know. If you
+want to cite CIL in your research writings, please refer to the paper &#8220;CIL:
+Intermediate Language and Tools for Analysis and Transformation of C
+Programs&#8221; by George C. Necula, Scott McPeak, S.P. Rahul and Westley Weimer,
+in &#8220;Proceedings of Conference on Compilier Construction&#8221;, 2002.<BR>
+<BR>
+<HR>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil002.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil002.html b/cil/doc/cil002.html
new file mode 100644
index 000000000..e575ce39f
--- /dev/null
+++ b/cil/doc/cil002.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Installation
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil001.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil003.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc2">2</A>&nbsp;&nbsp;Installation</H2>
+You will need OCaml release 3.08 or higher to build CIL. CIL has been tested
+on Linux and on Windows (where it can behave at either Microsoft Visual C or
+gcc).<BR>
+<BR>
+If you want to use CIL on Windows then you must get a complete installation
+of <TT>cygwin</TT> and the source-code OCaml distribution and compile it yourself
+using the cygwin tools (as opposed to getting the Win32 native-code version of
+OCaml). If you have not done this before then take a look
+<A HREF="../ccured/setup.html">here</A>. (Don't need to worry about <TT>cvs</TT> and
+<TT>ssh</TT> unless you will need to use the master CVS repository for CIL.)
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Download the CIL <A HREF="distrib">distribution</A> (latest version is
+<A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A>). See the Section&nbsp;<A HREF="changes.html#sec-changes">20</A> for recent changes to the CIL distribution.
+<LI CLASS="li-enumerate">Unzip and untar the source distribution. This will create a directory
+ called <TT>cil</TT> whose structure is explained below.<BR>
+<TT>tar xvfz cil-1.3.5.tar.gz</TT>
+<LI CLASS="li-enumerate">Enter the <TT>cil</TT> directory and run the <TT>configure</TT> script and then 
+ GNU make to build the distribution. If you are on Windows, at least the
+ <TT>configure</TT> step must be run from within <TT>bash</TT>.<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>cd cil</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>./configure</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make</CODE><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make quicktest</CODE><BR>
+<LI CLASS="li-enumerate">You should now find <TT>cilly.asm.exe</TT> in a
+subdirectory of <TT>obj</TT>. The name of the subdirectory is either <TT>x86_WIN32</TT>
+if you are using <TT>cygwin</TT> on Windows or <TT>x86_LINUX</TT> if you are using
+Linux (although you should be using instead the Perl wrapper <TT>bin/cilly</TT>).
+Note that we do not have an <TT>install</TT> make target and you should use Cil
+from the development directory. 
+<LI CLASS="li-enumerate">If you decide to use CIL, <B>please</B>
+<A HREF="mailto:necula@cs.berkeley.edu">send us a note</A>. This will help recharge
+our batteries after more than a year of development. And of course, do send us
+your bug reports as well.</OL>
+The <TT>configure</TT> script tries to find appropriate defaults for your system.
+You can control its actions by passing the following arguments:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>CC=foo</TT> Specifies the path for the <TT>gcc</TT> executable. By default
+whichever version is in the PATH is used. If <TT>CC</TT> specifies the Microsoft
+<TT>cl</TT> compiler, then that compiler will be set as the default one. Otherwise,
+the <TT>gcc</TT> compiler will be the default.
+</UL>
+CIL requires an underlying C compiler and preprocessor. CIL depends on the
+underlying compiler and machine for the sizes and alignment of types.The
+installation procedure for CIL queries the underlying compiler for
+architecture and compiler dependent configuration parameters, such as the size
+of a pointer or the particular alignment rules for structure fields. (This
+means, of course, that you should re-run <TT>./configure</TT> when you move CIL to
+another machine.)<BR>
+<BR>
+We have tested CIL on the following compilers:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+On Windows, <TT>cl</TT> compiler version 12.00.8168 (MSVC 6),
+ 13.00.9466 (MSVC .Net), and 13.10.3077 (MSVC .Net 2003). Run <TT>cl</TT>
+ with no arguments to get the compiler version. 
+<LI CLASS="li-itemize">On Windows, using <TT>cygwin</TT> and <TT>gcc</TT> version 2.95.3, 3.0,
+ 3.2, 3.3, and 3.4.
+<LI CLASS="li-itemize">On Linux, using <TT>gcc</TT> version 2.95.3, 3.0, 3.2, 3.3, and 4.0.
+</UL>
+Others have successfully used CIL with Mac OS X (on both PowerPC and
+x86), Solaris, and *BSD. If you make any changes to the build
+system in order to run CIL on your platform, please send us a patch.<BR>
+<BR>
+ <HR>
+<A HREF="cil001.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil003.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil003.html b/cil/doc/cil003.html
new file mode 100644
index 000000000..4b885f35a
--- /dev/null
+++ b/cil/doc/cil003.html
@@ -0,0 +1,187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Distribution Contents
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil002.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil004.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc3">3</A>&nbsp;&nbsp;Distribution Contents</H2>
+The file <A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A> 
+contains the complete source CIL distribution, 
+consisting of the following files:<BR>
+<TABLE CELLSPACING=2 CELLPADDING=0>
+<TR><TD ALIGN=left NOWRAP>Filename</TD>
+<TD ALIGN=left NOWRAP>Description</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>Makefile.in</TT></TD>
+<TD ALIGN=left NOWRAP><TT>configure</TT> source for the 
+ Makefile that builds CIL</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>configure</TT></TD>
+<TD ALIGN=left NOWRAP>The configure script</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>configure.in</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>autoconf</TT> source for <TT>configure</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>config.guess</TT>, <TT>config.sub</TT>, <TT>install-sh</TT></TD>
+<TD ALIGN=left NOWRAP>stuff required by
+ <TT>configure</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>doc/</TT></TD>
+<TD ALIGN=left NOWRAP>HTML documentation of the CIL API</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/</TT></TD>
+<TD ALIGN=left NOWRAP>Directory that will contain the compiled
+ CIL modules and executables</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>bin/cilly.in</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>configure</TT> source for a Perl script 
+ that can be invoked with the 
+ same arguments as either <TT>gcc</TT> or
+ Microsoft Visual C and will convert the
+ program to CIL, perform some simple
+ transformations, emit it and compile it as
+ usual.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>lib/CompilerStub.pm</TT></TD>
+<TD ALIGN=left NOWRAP>A Perl class that can be used to write code
+ that impersonates a compiler. <TT>cilly</TT>
+ uses it.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>lib/Merger.pm</TT></TD>
+<TD ALIGN=left NOWRAP>A subclass of <TT>CompilerStub.pm</TT> that can
+ be used to merge source files into a single
+ source file.<TT>cilly</TT>
+ uses it.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>bin/patcher.in</TT></TD>
+<TD ALIGN=left NOWRAP>A Perl script that applies specified patches
+ to standard include files.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/check.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Checks the well-formedness of a CIL file</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/cil.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Definition of CIL abstract syntax and
+ utilities for manipulating it</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/clist.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for efficiently managing lists
+ that need to be concatenated often</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/errormsg.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for error reporting</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/heapify.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that moves array local
+ variables from the stack to the heap</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/logcalls.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that logs every
+ function call</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/ext/sfi.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL transformation that can log every
+ memory read and write</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/clexer.mll</TT></TD>
+<TD ALIGN=left NOWRAP>The lexer</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cparser.mly</TT></TD>
+<TD ALIGN=left NOWRAP>The parser</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The abstract syntax</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cprint.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The pretty printer for CABS</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs2cil.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The elaborator to CIL</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/main.ml</TT></TD>
+<TD ALIGN=left NOWRAP>The <TT>cilly</TT> application</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/pretty.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for pretty printing</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/rmtmps.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>A CIL tranformation that removes unused
+ types, variables and inlined functions</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/stats.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities for maintaining timing statistics</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/testcil.ml</TT></TD>
+<TD ALIGN=left NOWRAP>A random test of CIL (against the resident 
+ C compiler)</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/trace.ml,mli</TT></TD>
+<TD ALIGN=left NOWRAP>Utilities useful for printing debugging
+ information</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/</TT></TD>
+<TD ALIGN=left NOWRAP>Miscellaneous libraries that are not
+ specific to CIL.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml</TT></TD>
+<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml.build</TT></TD>
+<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/perfcount.c</TT></TD>
+<TD ALIGN=left NOWRAP>C code that links with src/stats.ml
+ and reads Intel performance
+ counters.</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/feature_config.ml</TT></TD>
+<TD ALIGN=left NOWRAP>File generated by the Makefile
+ describing which extra &#8220;features&#8221;
+ to compile. See Section&nbsp;<A HREF="cilly.html#sec-cil">5</A></TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/machdep.ml</TT></TD>
+<TD ALIGN=left NOWRAP>File generated by the Makefile containing
+ information about your architecture,
+ such as the size of a pointer</TD>
+</TR>
+<TR><TD ALIGN=left NOWRAP><TT>src/machdep.c</TT></TD>
+<TD ALIGN=left NOWRAP>C program that generates
+ <TT>machdep.ml</TT> files</TD>
+</TR></TABLE><BR>
+<HR>
+<A HREF="cil002.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil004.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil004.html b/cil/doc/cil004.html
new file mode 100644
index 000000000..16fde3929
--- /dev/null
+++ b/cil/doc/cil004.html
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Compiling C to CIL
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil003.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cilly.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc4">4</A>&nbsp;&nbsp;Compiling C to CIL</H2><A NAME="sec-cabs2cil"></A>
+In this section we try to describe a few of the many transformations that are
+applied to a C program to convert it to CIL. The module that implements this
+conversion is about 5000 lines of OCaml code. In contrast a simple program
+transformation that instruments all functions to keep a shadow stack of the
+true return address (thus preventing stack smashing) is only 70 lines of code.
+This example shows that the analysis is so much simpler because it has to
+handle only a few simple C constructs and also because it can leverage on CIL
+infrastructure such as visitors and pretty-printers.<BR>
+<BR>
+In no particular order these are a few of the most significant ways in which
+C programs are compiled into CIL:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+CIL will eliminate all declarations for unused entities. This means that
+just because your hello world program includes <TT>stdio.h</TT> it does not mean
+that your analysis has to handle all the ugly stuff from <TT>stdio.h</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">Type specifiers are interpreted and normalized:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int long signed x;
+signed long extern x;
+long static int long y;
+
+// Some code that uses these declaration, so that CIL does not remove them
+int main() { return x + y; }
+</FONT></PRE>
+See the <A HREF="examples/ex1.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Anonymous structure and union declarations are given a name. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ struct { int x; } s;
+</FONT></PRE>
+See the <A HREF="examples/ex2.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Nested structure tag definitions are pulled apart. This means that all
+structure tag definitions can be found by a simple scan of the globals.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct foo {
+   struct bar {
+      union baz { 
+          int x1; 
+          double x2;
+      } u1;
+      int y;
+   } s1;
+   int z;
+} f;
+</FONT></PRE>
+See the <A HREF="examples/ex3.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All structure, union, enumeration definitions and the type definitions
+from inners scopes are moved to global scope (with appropriate renaming). This
+facilitates moving around of the references to these entities.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int main() {
+  struct foo { 
+        int x; } foo; 
+  {
+     struct foo { 
+        double d;
+     };
+     return foo.x;
+  }      
+}
+</FONT></PRE>
+See the <A HREF="examples/ex4.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Prototypes are added for those functions that are called before being
+defined. Furthermore, if a prototype exists but does not specify the type of
+parameters that is fixed. But CIL will not be able to add prototypes for those
+functions that are neither declared nor defined (but are used!).
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int f();  // Prototype without arguments
+  int f(double x) {
+      return g(x);
+  }
+  int g(double x) {
+     return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex5.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Array lengths are computed based on the initializers or by constant
+folding.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int a1[] = {1,2,3};
+  int a2[sizeof(int) &gt;= 4 ? 8 : 16];
+</FONT></PRE>
+See the <A HREF="examples/ex6.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Enumeration tags are computed using constant folding:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int main() {
+  enum { 
+     FIVE = 5, 
+     SIX, SEVEN, 
+     FOUR = FIVE - 1, 
+     EIGHT = sizeof(double)
+  } x = FIVE;
+ return x;
+}
+
+</FONT></PRE>
+See the <A HREF="examples/ex7.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializers are normalized to include specific initialization for the
+missing elements:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int a1[5] = {1,2,3};
+  struct foo { int x, y; } s1 = { 4 };
+</FONT></PRE>
+See the <A HREF="examples/ex8.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializer designators are interpreted and eliminated. Subobjects are
+properly marked with braces. CIL implements
+the whole ISO C99 specification for initializer (neither GCC nor MSVC do) and
+a few GCC extensions. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  struct foo { 
+     int x, y; 
+     int a[5];
+     struct inner {
+        int z;
+     } inner;
+  } s = { 0, .inner.z = 3, .a[1 ... 2] = 5, 4, y : 8 };
+</FONT></PRE>
+See the <A HREF="examples/ex9.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">String initializers for arrays of characters are processed
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+char foo[] = "foo plus bar";
+</FONT></PRE>
+See the <A HREF="examples/ex10.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">String constants are concatenated
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+char *foo = "foo " " plus " " bar ";
+</FONT></PRE>
+See the <A HREF="examples/ex11.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializers for local variables are turned into assignments. This is in
+order to separate completely the declarative part of a function body from the
+statements. This has the unfortunate effect that we have to drop the <TT>const</TT>
+qualifier from local variables !
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  struct foo { int f1, f2; } a [] = {1, 2, 3, 4, 5 };
+</FONT></PRE>
+See the <A HREF="examples/ex12.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Local variables in inner scopes are pulled to function scope (with
+appropriate renaming). Local scopes thus disappear. This makes it easy to find
+and operate on all local variables in a function.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  int main() {
+    int x = 6;
+    { 
+      int x = 7;
+      return x;
+    }
+    return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex13.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Global declarations in local scopes are moved to global scope:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x = 5; 
+  int main() {
+    int x = 6;
+    { 
+      static int x = 7;
+      return x;
+    }
+    return x;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex14.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Return statements are added for functions that are missing them. If the
+return type is not a base type then a <TT>return</TT> without a value is added.
+The guaranteed presence of return statements makes it easy to implement a
+transformation that inserts some code to be executed immediately before
+returning from a function.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo() {
+    int x = 5;
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex15.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">One of the most significant transformations is that expressions that
+contain side-effects are separated into statements. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, f(int);
+   return (x ++ + f(x));
+</FONT></PRE>
+See the <A HREF="examples/ex16.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+Internally, the <TT>x ++</TT> statement is turned into an assignment which the
+pretty-printer prints like the original. CIL has only three forms of basic
+statements: assignments, function calls and inline assembly.<BR>
+<BR>
+<LI CLASS="li-enumerate">Shortcut evaluation of boolean expressions and the <TT>?:</TT> operator are
+compiled into explicit conditionals:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x;
+  int y = x ? 2 : 4;
+  int z = x || y;
+  // Here we duplicate the return statement
+  if(x &amp;&amp; y) { return 0; } else { return 1; }
+  // To avoid excessive duplication, CIL uses goto's for 
+  // statement that have more than 5 instructions
+  if(x &amp;&amp; y || z) { x ++; y ++; z ++; x ++; y ++; return z; }
+</FONT></PRE>
+See the <A HREF="examples/ex17.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC's conditional expression with missing operands are also compiled
+into conditionals:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int f();;
+  return f() ? : 4;
+</FONT></PRE>
+See the <A HREF="examples/ex18.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All forms of loops (<TT>while</TT>, <TT>for</TT> and <TT>do</TT>) are compiled
+internally as a single <TT>while(1)</TT> looping construct with explicit <TT>break</TT>
+statement for termination. For simple <TT>while</TT> loops the pretty printer is
+able to print back the original:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, y;
+   for(int i = 0; i&lt;5; i++) {
+      if(i == 5) continue;
+      if(i == 4) break;
+      i += 2;
+   } 
+   while(x &lt; 5) {
+     if(x == 3) continue;
+     x ++;
+   }
+</FONT></PRE>
+See the <A HREF="examples/ex19.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC's block expressions are compiled away. (That's right there is an
+infinite loop in this code.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x = 5, y = x;
+   int z = ({ x++; L: y -= x; y;});
+   return ({ goto L; 0; });
+</FONT></PRE>
+See the <A HREF="examples/ex20.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL contains support for both MSVC and GCC inline assembly (both in one
+internal construct)<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL compiles away the GCC extension that allows many kinds of constructs
+to be used as lvalues:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   int x, y, z;
+   return &amp;(x ? y : z) - &amp; (x ++, x);
+</FONT></PRE>
+See the <A HREF="examples/ex21.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">All types are computed and explicit casts are inserted for all
+promotions and conversions that a compiler must insert:<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL will turn old-style function definition (without prototype) into
+new-style definitions. This will make the compiler less forgiving when
+checking function calls, and will catch for example cases when a function is
+called with too few arguments. This happens in old-style code for the purpose
+of implementing variable argument functions.<BR>
+<BR>
+<LI CLASS="li-enumerate">Since CIL sees the source after preprocessing the code after CIL does
+not contain the comments and the preprocessing directives.<BR>
+<BR>
+<LI CLASS="li-enumerate">CIL will remove from the source file those type declarations, local
+variables and inline functions that are not used in the file. This means that
+your analysis does not have to see all the ugly stuff that comes from the
+header files: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+#include &lt;stdio.h&gt;
+
+typedef int unused_type;
+
+static char unused_static (void) { return 0; }
+
+int main() {
+  int unused_local;
+  printf("Hello world\n"); // Only printf will be kept from stdio.h     
+}
+</FONT></PRE>
+See the <A HREF="examples/ex22.txt">CIL output</A> for this
+code fragment</OL>
+<HR>
+<A HREF="cil003.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cilly.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil006.html b/cil/doc/cil006.html
new file mode 100644
index 000000000..8fc319490
--- /dev/null
+++ b/cil/doc/cil006.html
@@ -0,0 +1,627 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+CIL API Documentation
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cilly.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil007.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc8">6</A>&nbsp;&nbsp;CIL API Documentation</H2><A NAME="sec-api"></A> 
+The CIL API is documented in the file <TT>src/cil.mli</TT>. We also have an
+<A HREF="api/index.html">online documentation</A> extracted from <TT>cil.mli</TT>. We
+index below the main types that are used to represent C programs in CIL: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/index_types.html">An index of all types</A>
+<LI CLASS="li-itemize"><A HREF="api/index_values.html">An index of all values</A>
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfile">Cil.file</A> is the representation of a file.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEglobal">Cil.global</A> is the representation of a global declaration or
+definitions. Values for <A HREF="api/Cil.html#VALemptyFunction">operating on globals</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEtyp">Cil.typ</A> is the representation of a type. 
+Values for <A HREF="api/Cil.html#VALvoidType">operating on types</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEcompinfo">Cil.compinfo</A> is the representation of a structure or a union
+type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfieldinfo">Cil.fieldinfo</A> is the representation of a field in a structure
+or a union
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEenuminfo">Cil.enuminfo</A> is the representation of an enumeration type. 
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEvarinfo">Cil.varinfo</A> is the representation of a variable 
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfundec">Cil.fundec</A> is the representation of a function
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPElval">Cil.lval</A> is the representation of an lvalue.
+Values for <A HREF="api/Cil.html#VALmakeVarInfo">operating on lvalues</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEexp">Cil.exp</A> is the representation of an expression without
+side-effects. 
+Values for <A HREF="api/Cil.html#VALzero">operating on expressions</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEinstr">Cil.instr</A> is the representation of an instruction (with
+side-effects but without control-flow)
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> is the representation of a control-flow statements. 
+Values for <A HREF="api/Cil.html#VALmkStmt">operating on statements</A>.
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A> is the representation of attributes. 
+Values for <A HREF="api/Cil.html#TYPEattributeClass">operating on attributes</A>.
+</UL>
+<A NAME="toc3"></A>
+<H3 CLASS="subsection"><A NAME="htoc9">6.1</A>&nbsp;&nbsp;Using the visitor</H3><A NAME="sec-visitor"></A>
+One of the most useful tools exported by the CIL API is an implementation of
+the visitor pattern for CIL programs. The visiting engine scans depth-first
+the structure of a CIL program and at each node is queries a user-provided
+visitor structure whether it should do one of the following operations: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+Ignore this node and all its descendants
+<LI CLASS="li-itemize">Descend into all of the children and when done rebuild the node if any
+of the children have changed. 
+<LI CLASS="li-itemize">Replace the subtree rooted at the node with another tree.
+<LI CLASS="li-itemize">Replace the subtree with another tree, then descend into the children
+and rebuild the node if necessary and then invoke a user-specified function. 
+<LI CLASS="li-itemize">In addition to all of the above actions then visitor can specify that
+some instructions should be queued to be inserted before the current
+instruction or statement being visited. 
+</UL>
+By writing visitors you can customize the program traversal and
+transformation. One major limitation of the visiting engine is that it does
+not propagate information from one node to another. Each visitor must use its
+own private data to achieve this effect if necessary. <BR>
+<BR>
+Each visitor is an object that is an instance of a class of type <A HREF="api/Cil.cilVisitor.html#.">Cil.cilVisitor..</A>
+The most convenient way to obtain such classes is to specialize the
+<A HREF="api/Cil.nopCilVisitor.html#c">Cil.nopCilVisitor.c</A>lass (which just traverses the tree doing
+nothing). Any given specialization typically overrides only a few of the
+methods. Take a look for example at the visitor defined in the module
+<TT>logwrites.ml</TT>. Another, more elaborate example of a visitor is the
+[copyFunctionVisitor] defined in <TT>cil.ml</TT>.<BR>
+<BR>
+Once you have defined a visitor you can invoke it with one of the functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> or <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> - visit a file
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilGlobal">Cil.visitCilGlobal</A> - visit a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilFunction">Cil.visitCilFunction</A> - visit a function definition
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilExp">Cil.visitCilExp</A> - visit an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilLval">Cil.visitCilLval</A> - visit an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilInstr">Cil.visitCilInstr</A> - visit an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilStmt">Cil.visitCilStmt</A> - visit a statement
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilType">Cil.visitCilType</A> - visit a type. Note that this does not visit
+the files of a composite type. use visitGlobal to visit the [GCompTag] that
+defines the fields.
+</UL>
+Some transformations may want to use visitors to insert additional
+instructions before statements and instructions. To do so, pass a list of
+instructions to the <A HREF="api/Cil.html#VALqueueInstr">Cil.queueInstr</A> method of the specialized
+object. The instructions will automatically be inserted before that
+instruction in the transformed code. The <A HREF="api/Cil.html#VALunqueueInstr">Cil.unqueueInstr</A> method
+should not normally be called by the user. <BR>
+<BR>
+<A NAME="toc4"></A>
+<H3 CLASS="subsection"><A NAME="htoc10">6.2</A>&nbsp;&nbsp;Interpreted Constructors and Deconstructors</H3>
+Interpreted constructors and deconstructors are a facility for constructing
+and deconstructing CIL constructs using a pattern with holes that can be
+filled with a variety of kinds of elements. The pattern is a string that uses
+the C syntax to represent C language elements. For example, the following
+code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cType "void * const (*)(int x)"
+</FONT></PRE>
+is an alternative way to construct the internal representation of the type of pointer to function
+with an integer argument and a void * const as result: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+TPtr(TFun(TVoid [Attr("const", [])],
+          [ ("x", TInt(IInt, []), []) ], false, []), [])
+</FONT></PRE>
+The advantage of the interpreted constructors is that you can use familiar C
+syntax to construct CIL abstract-syntax trees. <BR>
+<BR>
+You can construct this way types, lvalues, expressions, instructions and
+statements. The pattern string can also contain a number of placeholders that
+are replaced during construction with CIL items passed as additional argument
+to the construction function. For example, the <TT>%e:id</TT> placeholder means
+that the argument labeled &#8220;id&#8221; (expected to be of form <TT>Fe exp</TT>) will
+supply the expression to replace the placeholder. For example, the following
+code constructs an increment instruction at location <TT>loc</TT>:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cInstr "%v:x = %v:x + %e:something"
+        loc
+        [ ("something", Fe some_exp);
+          ("x", Fv some_varinfo) ]
+</FONT></PRE>
+An alternative way to construct the same CIL instruction is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Set((Var some_varinfo, NoOffset),
+    BinOp(PlusA, Lval (Var some_varinfo, NoOffset),
+          some_exp, intType), 
+    loc)
+</FONT></PRE>
+See <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> for a definition of the placeholders that are
+understood.<BR>
+<BR>
+A dual feature is the interpreted deconstructors. This can be used to test
+whether a CIL construct has a certain form:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.dType "void * const (*)(int x)" t
+</FONT></PRE>
+will test whether the actual argument <TT>t</TT> is indeed a function pointer of
+the required type. If it is then the result is <TT>Some []</TT> otherwise it is
+<TT>None</TT>. Furthermore, for the purpose of the interpreted deconstructors
+placeholders in patterns match anything of the right type. For example, 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.dType "void * (*)(%F:t)" t
+</FONT></PRE>
+will match any function pointer type, independent of the type and number of
+the formals. If the match succeeds the result is <TT>Some [ FF forms ]</TT> where
+<TT>forms</TT> is a list of names and types of the formals. Note that each member
+in the resulting list corresponds positionally to a placeholder in the
+pattern.<BR>
+<BR>
+The interpreted constructors and deconstructors do not support the complete C
+syntax, but only a substantial fragment chosen to simplify the parsing. The
+following is the syntax that is supported:
+<PRE CLASS="verbatim">
+Expressions:
+  E ::= %e:ID | %d:ID | %g:ID | n | L | ( E ) | Unop E | E Binop E 
+        | sizeof E | sizeof ( T ) | alignof E  | alignof ( T ) 
+        | &amp; L | ( T ) E 
+
+Unary operators:
+  Unop ::= + | - | ~ | %u:ID
+
+Binary operators:
+  Binop ::= + | - | * | / | &lt;&lt; | &gt;&gt; | &amp; | ``|'' | ^ 
+          | == | != | &lt; | &gt; | &lt;= | &gt;= | %b:ID
+
+Lvalues:
+  L ::= %l:ID | %v:ID Offset | * E | (* E) Offset | E -&gt; ident Offset 
+
+Offsets:
+  Offset ::= empty | %o:ID | . ident Offset | [ E ] Offset
+
+Types:
+  T ::= Type_spec Attrs Decl
+
+Type specifiers:
+  Type_spec ::= void | char | unsigned char | short | unsigned short
+            | int | unsigned int | long | unsigned long | %k:ID | float 
+            | double | struct %c:ID | union %c:ID 
+
+
+Declarators:
+  Decl ::= * Attrs Decl | Direct_decl
+
+
+Direct declarators:
+  Direct_decl ::= empty | ident | ( Attrs Decl ) 
+                 | Direct_decl [ Exp_opt ]
+                 | ( Attrs Decl )( Parameters )
+
+Optional expressions
+  Exp_opt ::= empty | E | %eo:ID
+
+Formal parameters
+  Parameters ::= empty | ... | %va:ID | %f:ID | T | T , Parameters
+
+List of attributes
+  Attrs ::= empty | %A:ID | Attrib Attrs
+
+Attributes
+  Attrib ::= const | restrict | volatile | __attribute__ ( ( GAttr ) )
+
+GCC Attributes
+  GAttr ::= ident | ident ( AttrArg_List )
+
+Lists of GCC Attribute arguments:
+  AttrArg_List ::= AttrArg | %P:ID | AttrArg , AttrArg_List
+
+GCC Attribute arguments  
+  AttrArg ::= %p:ID | ident | ident ( AttrArg_List )
+
+Instructions
+  Instr ::= %i:ID ; | L = E ; | L Binop= E | Callres L ( Args )
+
+Actual arguments
+   Args ::= empty | %E:ID | E | E , Args
+
+Call destination
+   Callres ::= empty | L = | %lo:ID
+
+Statements
+  Stmt ::= %s:ID | if ( E ) then Stmt ; | if ( E ) then Stmt else Stmt ;
+       | return Exp_opt | break ; | continue ; | { Stmt_list } 
+       | while (E ) Stmt | Instr_list 
+
+Lists of statements
+   Stmt_list ::= empty | %S:ID | Stmt Stmt_list  
+                | Type_spec Attrs Decl ; Stmt_list
+                | Type_spec Attrs Decl = E ; Stmt_list
+                | Type_spec Attrs Decl = L (Args) ; Stmt_list
+
+List of instructions
+   Instr_list ::= Instr | %I:ID | Instr Instr_list
+</PRE>
+Notes regarding the syntax:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+In the grammar description above non-terminals are written with
+uppercase initial<BR>
+<BR>
+<LI CLASS="li-itemize">All of the patterns consist of the <TT>%</TT> character followed by one or
+two letters, followed by &#8220;:&#8221; and an indentifier. For each such
+pattern there is a corresponding constructor of the <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A>
+type, whose name is the letter 'F' followed by the same one or two letters as
+in the pattern. That constructor is used by the user code to pass a
+<A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> actual argument to the interpreted constructor and by
+the interpreted deconstructor to return what was matched for a pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">If the pattern name is uppercase, it designates a list of the elements
+designated by the corresponding lowercase pattern. E.g. %E designated lists
+of expressions (as in the actual arguments of a call).<BR>
+<BR>
+<LI CLASS="li-itemize">The two-letter patterns whose second letter is &#8220;o&#8221; designate an
+optional element. E.g. %eo designates an optional expression (as in the
+length of an array). <BR>
+<BR>
+<LI CLASS="li-itemize">Unlike in calls to <TT>printf</TT>, the pattern %g is used for strings. <BR>
+<BR>
+<LI CLASS="li-itemize">The usual precedence and associativity rules as in C apply <BR>
+<BR>
+<LI CLASS="li-itemize">The pattern string can contain newlines and comments, using both the
+<TT>/* ... */</TT> style as well as the <TT>//</TT> one. <BR>
+<BR>
+<LI CLASS="li-itemize">When matching a &#8220;cast&#8221; pattern of the form <TT>( T ) E</TT>, the
+deconstructor will match even expressions that do not have the actual cast but
+in that case the type is matched against the type of the expression. E.g. the
+patters <TT>"(int)%e"</TT> will match any expression of type <TT>int</TT> whether it
+has an explicit cast or not. <BR>
+<BR>
+<LI CLASS="li-itemize">The %k pattern is used to construct and deconstruct an integer type of
+any kind. <BR>
+<BR>
+<LI CLASS="li-itemize">Notice that the syntax of types and declaration are the same (in order
+to simplify the parser). This means that technically you can write a whole
+declaration instead of a type in the cast. In this case the name that you
+declare is ignored.<BR>
+<BR>
+<LI CLASS="li-itemize">In lists of formal parameters and lists of attributes, an empty list in
+the pattern matches any formal parameters or attributes. <BR>
+<BR>
+<LI CLASS="li-itemize">When matching types, uses of named types are unrolled to expose a real
+type before matching. <BR>
+<BR>
+<LI CLASS="li-itemize">The order of the attributes is ignored during matching. The the pattern
+for a list of attributes contains %A then the resulting <TT>formatArg</TT> will be
+bound to <B>all</B> attributes in the list. For example, the pattern <TT>"const
+%A"</TT> matches any list of attributes that contains <TT>const</TT> and binds the
+corresponding placeholder to the entire list of attributes, including
+<TT>const</TT>. <BR>
+<BR>
+<LI CLASS="li-itemize">All instruction-patterns must be terminated by semicolon<BR>
+<BR>
+<LI CLASS="li-itemize">The autoincrement and autodecrement instructions are not supported. Also
+not supported are complex expressions, the <TT>&amp;&amp;</TT> and <TT>||</TT> shortcut
+operators, and a number of other more complex instructions or statements. In
+general, the patterns support only constructs that can be represented directly
+in CIL.<BR>
+<BR>
+<LI CLASS="li-itemize">The pattern argument identifiers are not used during deconstruction.
+Instead, the result contains a sequence of values in the same order as the
+appearance of pattern arguments in the pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">You can mix statements with declarations. For each declaration a new
+ temporary will be constructed (using a function you provive). You can then
+ refer to that temporary by name in the rest of the pattern.<BR>
+<BR>
+<LI CLASS="li-itemize">The <TT>%v:</TT> pattern specifier is optional.
+</UL>
+The following function are defined in the <TT>Formatcil</TT> module for
+constructing and deconstructing:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Formatcil.html#VALcExp">Formatcil.cExp</A> constructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcType">Formatcil.cType</A> constructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcLval">Formatcil.cLval</A> constructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcInstr">Formatcil.cInstr</A> constructs <A HREF="api/Cil.html#TYPEinstr">Cil.instr</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcStmt">Formatcil.cStmt</A> and <A HREF="api/Formatcil.html#VALcStmts">Formatcil.cStmts</A> construct <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdExp">Formatcil.dExp</A> deconstructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdType">Formatcil.dType</A> deconstructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdLval">Formatcil.dLval</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdInstr">Formatcil.dInstr</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
+</UL>
+Below is an example using interpreted constructors. This example generates
+the CIL representation of code that scans an array backwards and initializes
+every even-index element with an expression:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+Formatcil.cStmts
+  loc
+  "int idx = sizeof(array) / sizeof(array[0]) - 1;
+   while(idx &gt;= 0) {
+     // Some statements to be run for all the elements of the array
+     %S:init
+     if(! (idx &amp; 1)) 
+       array[idx] = %e:init_even;
+     /* Do not forget to decrement the index variable */
+     idx = idx - 1;
+   }"
+  (fun n t -&gt; makeTempVar myfunc ~name:n t)
+  [ ("array", Fv myarray); 
+    ("init", FS [stmt1; stmt2; stmt3]);
+    ("init_even", Fe init_expr_for_even_elements) ]
+</FONT></PRE>
+To write the same CIL statement directly in CIL would take much more effort.
+Note that the pattern is parsed only once and the result (a function that
+takes the arguments and constructs the statement) is memoized. <BR>
+<BR>
+
+<H4 CLASS="subsubsection"><A NAME="htoc11">6.2.1</A>&nbsp;&nbsp;Performance considerations for interpreted constructors</H4>
+Parsing the patterns is done with a LALR parser and it takes some time. To
+improve performance the constructors and deconstructors memoize the parsed
+patterns and will only compile a pattern once. Also all construction and
+deconstruction functions can be applied partially to the pattern string to
+produce a function that can be later used directly to construct or
+deconstruct. This function appears to be about two times slower than if the
+construction is done using the CIL constructors (without memoization the
+process would be one order of magnitude slower.) However, the convenience of
+interpreted constructor might make them a viable choice in many situations
+when performance is not paramount (e.g. prototyping).<BR>
+<BR>
+<A NAME="toc5"></A>
+<H3 CLASS="subsection"><A NAME="htoc12">6.3</A>&nbsp;&nbsp;Printing and Debugging support</H3>
+The Modules <A HREF="api/Pretty.html">Pretty</A> and <A HREF="api/Errormsg.html">Errormsg</A> contain respectively
+utilities for pretty printing and reporting errors and provide a convenient
+<TT>printf</TT>-like interface. <BR>
+<BR>
+Additionally, CIL defines for each major type a pretty-printing function that
+you can use in conjunction with the <A HREF="api/Pretty.html">Pretty</A> interface. The
+following are some of the pretty-printing functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALd_exp">Cil.d_exp</A> - print an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_type">Cil.d_type</A> - print a type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_lval">Cil.d_lval</A> - print an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_global">Cil.d_global</A> - print a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_stmt">Cil.d_stmt</A> - print a statment
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_instr">Cil.d_instr</A> - print an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_init">Cil.d_init</A> - print an initializer
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attr">Cil.d_attr</A> - print an attribute
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attrlist">Cil.d_attrlist</A> - print a set of attributes
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_loc">Cil.d_loc</A> - print a location
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_ikind">Cil.d_ikind</A> - print an integer kind
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_fkind">Cil.d_fkind</A> - print a floating point kind
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_const">Cil.d_const</A> - print a constant
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_storage">Cil.d_storage</A> - print a storage specifier
+</UL>
+You can even customize the pretty-printer by creating instances of
+<A HREF="api/Cil.cilPrinter.html#.">Cil.cilPrinter..</A> Typically such an instance extends
+<A HREF="api/Cil.html#VALdefaultCilPrinter">Cil.defaultCilPrinter</A>. Once you have a customized pretty-printer you
+can use the following printing functions:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<A HREF="api/Cil.html#VALprintExp">Cil.printExp</A> - print an expression
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintType">Cil.printType</A> - print a type
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintLval">Cil.printLval</A> - print an lvalue
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintGlobal">Cil.printGlobal</A> - print a global
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintStmt">Cil.printStmt</A> - print a statment
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInstr">Cil.printInstr</A> - print an instruction
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInit">Cil.printInit</A> - print an initializer
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttr">Cil.printAttr</A> - print an attribute
+<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttrs">Cil.printAttrs</A> - print a set of attributes
+</UL>
+CIL has certain internal consistency invariants. For example, all references
+to a global variable must point to the same <TT>varinfo</TT> structure. This
+ensures that one can rename the variable by changing the name in the
+<TT>varinfo</TT>. These constraints are mentioned in the API documentation. There
+is also a consistency checker in file <TT>src/check.ml</TT>. If you suspect that
+your transformation is breaking these constraints then you can pass the
+<TT>--check</TT> option to cilly and this will ensure that the consistency checker
+is run after each transformation. <BR>
+<BR>
+<A NAME="toc6"></A>
+<H3 CLASS="subsection"><A NAME="htoc13">6.4</A>&nbsp;&nbsp;Attributes</H3><A NAME="sec-attrib"></A>
+In CIL you can attach attributes to types and to names (variables, functions
+and fields). Attributes are represented using the type <A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A>.
+An attribute consists of a name and a number of arguments (represented using
+the type <A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). Almost any expression can be used as an
+attribute argument. Attributes are stored in lists sorted by the name of the
+attribute. To maintain list ordering, use the functions
+<A HREF="api/Cil.html#VALtypeAttrs">Cil.typeAttrs</A> to retrieve the attributes of a type and the functions
+<A HREF="api/Cil.html#VALaddAttribute">Cil.addAttribute</A> and <A HREF="api/Cil.html#VALaddAttributes">Cil.addAttributes</A> to add attributes.
+Alternatively you can use <A HREF="api/Cil.html#VALtypeAddAttributes">Cil.typeAddAttributes</A> to add an attribute to
+a type (and return the new type).<BR>
+<BR>
+GCC already has extensive support for attributes, and CIL extends this
+support to user-defined attributes. A GCC attribute has the syntax:
+<PRE CLASS="verbatim">
+ gccattribute ::= __attribute__((attribute))    (Note the double parentheses)
+</PRE>
+ Since GCC and MSVC both support various flavors of each attribute (with or
+without leading or trailing _) we first strip ALL leading and trailing _
+from the attribute name (but not the identified in [ACons] parameters in
+<A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). When we print attributes, for GCC we add two leading
+and two trailing _; for MSVC we add just two leading _.<BR>
+<BR>
+There is support in CIL so that you can control the printing of attributes
+(see <A HREF="api/Cil.html#VALsetCustomPrintAttribute">Cil.setCustomPrintAttribute</A> and
+<A HREF="api/Cil.html#VALsetCustomPrintAttributeScope">Cil.setCustomPrintAttributeScope</A>). This custom-printing support is now
+used to print the "const" qualifier as "<TT>const</TT>" and not as
+"<TT>__attribute__((const))</TT>".<BR>
+<BR>
+The attributes are specified in declarations. This is unfortunate since the C
+syntax for declarations is already quite complicated and after writing the
+parser and elaborator for declarations I am convinced that few C programmers
+understand it completely. Anyway, this seems to be the easiest way to support
+attributes. <BR>
+<BR>
+Name attributes must be specified at the very end of the declaration, just
+before the <TT>=</TT> for the initializer or before the <TT>,</TT> the separates a
+declaration in a group of declarations or just before the <TT>;</TT> that
+terminates the declaration. A name attribute for a function being defined can
+be specified just before the brace that starts the function body.<BR>
+<BR>
+For example (in the following examples <TT>A1</TT>,...,<TT>An</TT> are type attributes
+and <TT>N</TT> is a name attribute (each of these uses the <TT>__attribute__</TT> syntax):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ int x N;
+ int x N, * y N = 0, z[] N;
+ extern void exit() N;
+ int fact(int x) N { ... }
+</FONT></PRE>
+Type attributes can be specified along with the type using the following
+ rules: 
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ The type attributes for a base type (int, float, named type, reference
+ to struct or union or enum) must be specified immediately following the
+ type (actually it is Ok to mix attributes with the specification of the
+ type, in between unsigned and int for example).<BR>
+<BR>
+For example:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int A1 x N;  /* A1 applies to the type int. An example is an attribute
+                   "even" restricting the type int to even values. */
+  struct foo A1 A2 x; // Both A1 and A2 apply to the struct foo type
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-enumerate">The type attributes for a pointer type must be specified immediately
+ after the * symbol.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ /* A pointer (A1) to an int (A2) */
+ int A2 * A1 x;
+ /* A pointer (A1) to a pointer (A2) to a float (A3) */
+ float A3 * A2 * A1 x;
+</FONT></PRE>
+Note: The attributes for base types and for pointer types are a strict
+ extension of the ANSI C type qualifiers (const, volatile and restrict). In
+ fact CIL treats these qualifiers as attributes. <BR>
+<BR>
+<LI CLASS="li-enumerate">The attributes for a function type or for an array type can be
+ specified using parenthesized declarators.<BR>
+<BR>
+For example:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+   /* A function (A1) from int (A2) to float (A3) */
+   float A3 (A1 f)(int A2);
+
+   /* A pointer (A1) to a function (A2) that returns an int (A3) */
+   int A3 (A2 * A1 pfun)(void);
+
+   /* An array (A1) of int (A2) */
+   int A2 (A1 x0)[]
+
+   /* Array (A1) of pointers (A2) to functions (A3) that take an int (A4) and 
+    * return a pointer (A5) to int (A6)  */
+   int A6 * A5 (A3 * A2 (A1 x1)[5])(int A4);
+
+
+   /* A function (A4) that takes a float (A5) and returns a pointer (A6) to an 
+    * int (A7) */
+   extern int A7 * A6 (A4 x2)(float A5 x);
+
+   /* A function (A1) that takes a int (A2) and that returns a pointer (A3) to 
+    * a function (A4) that takes a float (A5) and returns a pointer (A6) to an 
+    * int (A7) */
+   int A7 * A6 (A4 * A3 (A1 x3)(int A2 x))(float A5) {
+      return &amp; x2;
+   }
+</FONT></PRE></OL>
+Note: ANSI C does not allow the specification of type qualifiers for function
+and array types, although it allows for the parenthesized declarator. With
+just a bit of thought (looking at the first few examples above) I hope that
+the placement of attributes for function and array types will seem intuitive.<BR>
+<BR>
+This extension is not without problems however. If you want to refer just to
+a type (in a cast for example) then you leave the name out. But this leads to
+strange conflicts due to the parentheses that we introduce to scope the
+attributes. Take for example the type of x0 from above. It should be written
+as: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+        int A2 (A1 )[]
+</FONT></PRE>
+But this will lead most C parsers into deep confusion because the parentheses
+around A1 will be confused for parentheses of a function designator. To push
+this problem around (I don't know a solution) whenever we are about to print a
+parenthesized declarator with no name but with attributes, we comment out the
+attributes so you can see them (for whatever is worth) without confusing the
+compiler. For example, here is how we would print the above type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+        int A2 /*(A1 )*/[]
+</FONT></PRE>
+
+<H5 CLASS="paragraph">Handling of predefined GCC attributes</H5>
+GCC already supports attributes in a lot of places in declarations. The only
+place where we support attributes and GCC does not is right before the { that
+starts a function body. <BR>
+<BR>
+GCC classifies its attributes in attributes for functions, for variables and
+for types, although the latter category is only usable in definition of struct
+or union types and is not nearly as powerful as the CIL type attributes. We
+have made an effort to reclassify GCC attributes as name and type attributes
+(they only apply for function types). Here is what we came up with:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+ GCC name attributes:<BR>
+<BR>
+section, constructor, destructor, unused, weak, no_instrument_function,
+ noreturn, alias, no_check_memory_usage, dllinport, dllexport, exception,
+ model<BR>
+<BR>
+Note: the "noreturn" attribute would be more appropriately qualified as a
+ function type attribute. But we classify it as a name attribute to make
+ it easier to support a similarly named MSVC attribute. <BR>
+<BR>
+<LI CLASS="li-itemize">GCC function type attributes:<BR>
+<BR>
+fconst (printed as "const"), format, regparm, stdcall,
+ cdecl, longcall<BR>
+<BR>
+I was not able to completely decipher the position in which these attributes
+ must go. So, the CIL elaborator knows these names and applies the following
+ rules: 
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ All of the name attributes that appear in the specifier part (i.e. at
+ the beginning) of a declaration are associated with all declared names. <BR>
+<BR>
+<LI CLASS="li-itemize">All of the name attributes that appear at the end of a declarator are
+ associated with the particular name being declared.<BR>
+<BR>
+<LI CLASS="li-itemize">More complicated is the handling of the function type attributes, since
+ there can be more than one function in a single declaration (a function
+ returning a pointer to a function). Lacking any real understanding of how
+ GCC handles this, I attach the function type attribute to the "nearest"
+ function. This means that if a pointer to a function is "nearby" the
+ attribute will be correctly associated with the function. In truth I pray
+ that nobody uses declarations as that of x3 above. 
+ </UL>
+</UL>
+
+<H5 CLASS="paragraph">Handling of predefined MSVC attributes</H5>
+MSVC has two kinds of attributes, declaration modifiers to be printed before
+ the storage specifier using the notation "<TT>__declspec(...)</TT>" and a few
+ function type attributes, printed almost as our CIL function type
+ attributes. <BR>
+<BR>
+The following are the name attributes that are printed using
+ <TT>__declspec</TT> right before the storage designator of the declaration:
+ thread, naked, dllimport, dllexport, noreturn<BR>
+<BR>
+The following are the function type attributes supported by MSVC: 
+ fastcall, cdecl, stdcall<BR>
+<BR>
+It is not worth going into the obscure details of where MSVC accepts these
+ type attributes. The parser thinks it knows these details and it pulls
+ these attributes from wherever they might be placed. The important thing
+ is that MSVC will accept if we print them according to the rules of the CIL
+ attributes ! <BR>
+<BR>
+<HR>
+<A HREF="cilly.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil007.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil007.html b/cil/doc/cil007.html
new file mode 100644
index 000000000..7d6c02309
--- /dev/null
+++ b/cil/doc/cil007.html
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+The CIL Driver
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil006.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="ext.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc14">7</A>&nbsp;&nbsp;The CIL Driver</H2><A NAME="sec-driver"></A>
+We have packaged CIL as an application <TT>cilly</TT> that contains certain
+example modules, such as <TT>logwrites.ml</TT> (a module
+that instruments code to print the addresses of memory locations being
+written). Normally, you write another module like that, add command-line
+options and an invocation of your module in <TT>src/main.ml</TT>. Once you compile
+CIL you will obtain the file <TT>obj/cilly.asm.exe</TT>. <BR>
+<BR>
+We wrote a driver for this executable that makes it easy to invoke your
+analysis on existing C code with very little manual intervention. This driver
+is <TT>bin/cilly</TT> and is quite powerful. Note that the <TT>cilly</TT> script
+is configured during installation with the path where CIL resides. This means
+that you can move it to any place you want. <BR>
+<BR>
+A simple use of the driver is:
+<PRE CLASS="verbatim">
+bin/cilly --save-temps -D HAPPY_MOOD -I myincludes hello.c -o hello
+</PRE>
+<FONT COLOR=blue>--save-temps</FONT> tells CIL to save the resulting output files in the
+current directory. Otherwise, they'll be put in <TT>/tmp</TT> and deleted
+automatically. Not that this is the only CIL-specific flag in the
+list &ndash; the other flags use <TT>gcc</TT>'s syntax.<BR>
+<BR>
+This performs the following actions: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+preprocessing using the -D and -I arguments with the resulting 
+ file left in <TT>hello.i</TT>, 
+<LI CLASS="li-itemize">the invocation of the <TT>cilly.asm</TT> application which parses <TT>hello.i</TT>
+ converts it to CIL and the pretty-prints it to <TT>hello.cil.c</TT>
+<LI CLASS="li-itemize">another round of preprocessing with the result placed in <TT>hello.cil.i</TT>
+<LI CLASS="li-itemize">the true compilation with the result in <TT>hello.cil.o</TT>
+<LI CLASS="li-itemize">a linking phase with the result in <TT>hello</TT>
+</UL>
+Note that <TT>cilly</TT> behaves like the <TT>gcc</TT> compiler. This makes it
+easy to use it with existing <TT>Makefiles</TT>:
+<PRE CLASS="verbatim">
+make CC="bin/cilly" LD="bin/cilly"
+</PRE>
+ <TT>cilly</TT> can also behave as the Microsoft Visual C compiler, if the first
+ argument is <TT>--mode=MSVC</TT>:
+<PRE CLASS="verbatim">
+bin/cilly --mode=MSVC /D HAPPY_MOOD /I myincludes hello.c /Fe hello.exe
+</PRE>
+ (This in turn will pass a <TT>--MSVC</TT> flag to the underlying <TT>cilly.asm</TT>
+ process which will make it understand the Microsoft Visual C extensions)<BR>
+<BR>
+<TT>cilly</TT> can also behave as the archiver <TT>ar</TT>, if it is passed an
+argument <TT>--mode=AR</TT>. Note that only the <TT>cr</TT> mode is supported (create a
+new archive and replace all files in there). Therefore the previous version of
+the archive is lost. <BR>
+<BR>
+Furthermore, <TT>cilly</TT> allows you to pass some arguments on to the
+underlying <TT>cilly.asm</TT> process. As a general rule all arguments that start
+with <TT>--</TT> and that <TT>cilly</TT> itself does not process, are passed on. For
+example, 
+<PRE CLASS="verbatim">
+bin/cilly --dologwrites -D HAPPY_MOOD -I myincludes hello.c -o hello.exe
+</PRE>
+ will produce a file <TT>hello.cil.c</TT> that prints all the memory addresses
+written by the application. <BR>
+<BR>
+The most powerful feature of <TT>cilly</TT> is that it can collect all the
+sources in your project, merge them into one file and then apply CIL. This
+makes it a breeze to do whole-program analysis and transformation. All you
+have to do is to pass the <TT>--merge</TT> flag to <TT>cilly</TT>:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --save-temps --dologwrites --merge"
+</PRE>
+ You can even leave some files untouched:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --save-temps --dologwrites --merge --leavealone=foo --leavealone=bar"
+</PRE>
+ This will merge all the files except those with the basename <TT>foo</TT> and
+<TT>bar</TT>. Those files will be compiled as usual and then linked in at the very
+end. <BR>
+<BR>
+The sequence of actions performed by <TT>cilly</TT> depends on whether merging
+is turned on or not:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+If merging is off
+ <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ For every file <TT>file.c</TT> to compile
+ <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Preprocess the file with the given arguments to 
+ produce <TT>file.i</TT>
+ <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>file.cil.c</TT>
+ <LI CLASS="li-enumerate">Preprocess to <TT>file.cil.i</TT>
+ <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>file.cil.o</TT>
+ </OL>
+ <LI CLASS="li-enumerate">Link the resulting objects
+ </OL>
+<LI CLASS="li-itemize">If merging is on
+ <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+ For every file <TT>file.c</TT> to compile
+ <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Preprocess the file with the given arguments to 
+ produce <TT>file.i</TT>
+ <LI CLASS="li-enumerate">Save the preprocessed source as <TT>file.o</TT>
+ </OL>
+ <LI CLASS="li-enumerate">When linking executable <TT>hello.exe</TT>, look at every object 
+ file that must be linked and see if it actually 
+ contains preprocessed source. Pass all those files to a 
+ special merging application (described in
+ Section&nbsp;<A HREF="merger.html#sec-merger">13</A>) to produce <TT>hello.exe_comb.c</TT>
+ <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>hello.exe_comb.cil.c</TT>
+ <LI CLASS="li-enumerate">Preprocess to <TT>hello.exe_comb.cil.i</TT>
+ <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>hello.exe_comb.cil.o</TT>
+ <LI CLASS="li-enumerate">Invoke the actual linker to produce <TT>hello.exe</TT>
+ </OL>
+</UL>
+Note that files that you specify with <TT>--leavealone</TT> are not merged and
+never presented to CIL. They are compiled as usual and then are linked in at
+the end. <BR>
+<BR>
+And a final feature of <TT>cilly</TT> is that it can substitute copies of the
+system's include files:
+<PRE CLASS="verbatim">
+make CC="bin/cilly --includedir=myinclude"
+</PRE>
+ This will force the preprocessor to use the file <TT>myinclude/xxx/stdio.h</TT>
+(if it exists) whenever it encounters <TT>#include &lt;stdio.h&gt;</TT>. The <TT>xxx</TT> is
+a string that identifies the compiler version you are using. This modified
+include files should be produced with the patcher script (see
+Section&nbsp;<A HREF="patcher.html#sec-patcher">14</A>).<BR>
+<BR>
+<A NAME="toc7"></A>
+<H3 CLASS="subsection"><A NAME="htoc15">7.1</A>&nbsp;&nbsp;<TT>cilly</TT> Options</H3>
+Among the options for the <TT>cilly</TT> you can put anything that can normally
+go in the command line of the compiler that <TT>cilly</TT> is impersonating.
+<TT>cilly</TT> will do its best to pass those options along to the appropriate
+subprocess. In addition, the following options are supported (a complete and
+up-to-date list can always be obtained by running <TT>cilly --help</TT>):
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>--mode=mode</TT> This must be the first argument if present. It makes
+<TT>cilly</TT> behave as a given compiled. The following modes are recognized: 
+ <UL CLASS="itemize"><LI CLASS="li-itemize">
+ GNUCC - the GNU C Compiler. This is the default.
+ <LI CLASS="li-itemize">MSVC - the Microsoft Visual C compiler. Of course, you should
+ pass only MSVC valid options in this case. 
+ <LI CLASS="li-itemize">AR - the archiver <TT>ar</TT>. Only the mode <TT>cr</TT> is supported and
+ the original version of the archive is lost. 
+ </UL>
+<LI CLASS="li-itemize"><TT>--help</TT> Prints a list of the options supported.
+<LI CLASS="li-itemize"><TT>--verbose</TT> Prints lots of messages about what is going on.
+<LI CLASS="li-itemize"><TT>--stages</TT> Less than <TT>--verbose</TT> but lets you see what <TT>cilly</TT>
+ is doing. 
+<LI CLASS="li-itemize"><TT>--merge</TT> This tells <TT>cilly</TT> to first attempt to collect into one
+source file all of the sources that make your application, and then to apply
+<TT>cilly.asm</TT> on the resulting source. The sequence of actions in this case is
+described above and the merger itself is described in Section&nbsp;<A HREF="merger.html#sec-merger">13</A>.<BR>
+<BR>
+<LI CLASS="li-itemize"><TT>--leavealone=xxx</TT>. Do not merge and do not present to CIL the files
+whose basename is "xxx". These files are compiled as usual and linked in at
+the end. 
+<LI CLASS="li-itemize"><TT>--includedir=xxx</TT>. Override the include files with those in the given
+directory. The given directory is the same name that was given an an argument
+to the patcher (see Section&nbsp;<A HREF="patcher.html#sec-patcher">14</A>). In particular this means that
+that directory contains subdirectories named based on the current compiler
+version. The patcher creates those directories. 
+<LI CLASS="li-itemize"><TT>--usecabs</TT>. Do not CIL, but instead just parse the source and print
+its AST out. This should looked like the preprocessed file. This is useful
+when you suspect that the conversion to CIL phase changes the meaning of the
+program. 
+<LI CLASS="li-itemize"><TT>--save-temps=xxx</TT>. Temporary files are preserved in the xxx
+ directory. For example, the output of CIL will be put in a file
+ named <TT>*.cil.c</TT>.
+<LI CLASS="li-itemize"><TT>--save-temps</TT>. Temporay files are preserved in the current directory.
+</UL>
+<A NAME="toc8"></A>
+<H3 CLASS="subsection"><A NAME="htoc16">7.2</A>&nbsp;&nbsp;<TT>cilly.asm</TT> Options</H3>
+ <A NAME="sec-cilly-asm-options"></A>
+All of the options that start with <TT>--</TT> and are not understood by
+<TT>cilly</TT> are passed on to <TT>cilly.asm</TT>. <TT>cilly</TT> also passes along to
+<TT>cilly.asm</TT> flags such as <TT>--MSVC</TT> that both need to know
+about. The following options are supported:<BR>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>General Options:</B>
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+ <TT>--version</TT> output version information and exit
+ <LI CLASS="li-itemize"><TT>--verbose</TT> Print lots of random stuff. This is passed on from cilly
+ <LI CLASS="li-itemize"><TT>--warnall</TT> Show all warnings.
+ <LI CLASS="li-itemize"><TT>--debug=xxx</TT> turns on debugging flag xxx
+ <LI CLASS="li-itemize"><TT>--nodebug=xxx</TT> turns off debugging flag xxx
+ <LI CLASS="li-itemize"><TT>--flush</TT> Flush the output streams often (aids debugging).
+ <LI CLASS="li-itemize"><TT>--check</TT> Run a consistency check over the CIL after every operation.
+ <LI CLASS="li-itemize"><TT>--nocheck</TT> turns off consistency checking of CIL.
+ <LI CLASS="li-itemize"><TT>--noPrintLn</TT> Don't output #line directives in the output.
+ <LI CLASS="li-itemize"><TT>--commPrintLn</TT> Print #line directives in the output, but
+ put them in comments.
+ <LI CLASS="li-itemize"><TT>--log=xxx</TT> Set the name of the log file. By default stderr is used
+ <LI CLASS="li-itemize"><TT>--MSVC</TT> Enable MSVC compatibility. Default is GNU.
+ <LI CLASS="li-itemize"><TT>--ignore-merge-conflicts</TT> ignore merging conflicts.
+ <LI CLASS="li-itemize"><TT>--extrafiles=filename</TT>: the name of a file that contains
+ a list of additional files to process, separated by whitespace.
+ <LI CLASS="li-itemize"><TT>--stats</TT> Print statistics about the running time of the
+ parser, conversion to CIL, etc. Also prints memory-usage
+ statistics. You can time parts of your own code as well. Calling
+ (<TT>Stats.time &#8220;label&#8221; func arg</TT>) will evaluate <TT>(func arg)</TT>
+ and remember how long this takes. If you call <TT>Stats.time</TT>
+ repeatedly with the same label, CIL will report the aggregate
+ time.<BR>
+<BR>
+If available, CIL uses the x86 performance counters for these
+ stats. This is very precise, but results in &#8220;wall-clock time.&#8221;
+ To report only user-mode time, find the call to <TT>Stats.reset</TT> in
+ <TT>main.ml</TT>, and change it to <TT>Stats.reset false</TT>.<BR>
+<BR>
+<B>Lowering Options</B>
+ <LI CLASS="li-itemize"><TT>--noLowerConstants</TT> do not lower constant expressions.
+ <LI CLASS="li-itemize"><TT>--noInsertImplicitCasts</TT> do not insert implicit casts.
+ <LI CLASS="li-itemize"><TT>--forceRLArgEval</TT> Forces right to left evaluation of function arguments.
+ <LI CLASS="li-itemize"><TT>--disallowDuplication</TT> Prevent small chunks of code from being duplicated.
+ <LI CLASS="li-itemize"><TT>--keepunused</TT> Do not remove the unused variables and types.
+ <LI CLASS="li-itemize"><TT>--rmUnusedInlines</TT> Delete any unused inline functions. This is the default in MSVC mode.<BR>
+<BR>
+<B>Output Options:</B>
+ <LI CLASS="li-itemize"><TT>--printCilAsIs</TT> Do not try to simplify the CIL when
+ printing. Without this flag, CIL will attempt to produce prettier
+ output by e.g. changing <TT>while(1)</TT> into more meaningful loops.
+ <LI CLASS="li-itemize"><TT>--noWrap</TT> do not wrap long lines when printing
+ <LI CLASS="li-itemize"><TT>--out=xxx</TT> the name of the output CIL file. <TT>cilly</TT>
+ sets this for you.
+ <LI CLASS="li-itemize"><TT>--mergedout=xxx</TT> specify the name of the merged file
+ <LI CLASS="li-itemize"><TT>--cabsonly=xxx</TT> CABS output file name
+<BR>
+<BR>
+ <B>Selected features.</B> See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A> for more information.
+<LI CLASS="li-itemize"><TT>--dologcalls</TT>. Insert code in the processed source to print the name of
+functions as are called. Implemented in <TT>src/ext/logcalls.ml</TT>.
+<LI CLASS="li-itemize"><TT>--dologwrites</TT>. Insert code in the processed source to print the
+address of all memory writes. Implemented in <TT>src/ext/logwrites.ml</TT>.
+<LI CLASS="li-itemize"><TT>--dooneRet</TT>. Make each function have at most one 'return'.
+Implemented in <TT>src/ext/oneret.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dostackGuard</TT>. Instrument function calls and returns to
+maintain a separate stack for return addresses. Implemeted in
+<TT>src/ext/heapify.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--domakeCFG</TT>. Make the program look more like a CFG. Implemented
+in <TT>src/cil.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dopartial</TT>. Do interprocedural partial evaluation and
+constant folding. Implemented in <TT>src/ext/partial.ml</TT>. 
+<LI CLASS="li-itemize"><TT>--dosimpleMem</TT>. Simplify all memory expressions. Implemented in
+<TT>src/ext/simplemem.ml</TT>. <BR>
+<BR>
+For an up-to-date list of available options, run <TT>cilly.asm --help</TT>. </UL>
+<HR>
+<A HREF="cil006.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="ext.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil009.html b/cil/doc/cil009.html
new file mode 100644
index 000000000..f408d0062
--- /dev/null
+++ b/cil/doc/cil009.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Controlling CIL
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="ext.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil010.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc35">9</A>&nbsp;&nbsp;Controlling CIL</H2>
+In the process of converting a C file to CIL we drop the unused prototypes
+and even inline function definitions. This results in much smaller files. If
+you do not want this behavior then you must pass the <TT>--keepunused</TT> argument
+to the CIL application. <BR>
+<BR>
+Alternatively you can put the following pragma in the code (instructing CIL
+to specifically keep the declarations and definitions of the function
+<TT>func1</TT> and variable <TT>var2</TT>, the definition of type <TT>foo</TT> and of
+structure <TT>bar</TT>):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+#pragma cilnoremove("func1", "var2", "type foo", "struct bar")
+</FONT></PRE>
+<HR>
+<A HREF="ext.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil010.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil010.html b/cil/doc/cil010.html
new file mode 100644
index 000000000..e7b1e4b08
--- /dev/null
+++ b/cil/doc/cil010.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+GCC Extensions
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil009.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil011.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc36">10</A>&nbsp;&nbsp;GCC Extensions</H2>
+The CIL parser handles most of the <TT>gcc</TT>
+<A HREF="javascript:loadTop('http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_5.html#SEC67')">extensions</A>
+and compiles them to CIL. The following extensions are not handled (note that
+we are able to compile a large number of programs, including the Linux kernel,
+without encountering these):
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Nested function definitions.
+<LI CLASS="li-enumerate">Constructing function calls.
+<LI CLASS="li-enumerate">Naming an expression's type.
+<LI CLASS="li-enumerate">Complex numbers
+<LI CLASS="li-enumerate">Hex floats
+<LI CLASS="li-enumerate">Subscripts on non-lvalue arrays.
+<LI CLASS="li-enumerate">Forward function parameter declarations
+</OL>
+The following extensions are handled, typically by compiling them away:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Attributes for functions, variables and types. In fact, we have a clear
+specification (see Section&nbsp;<A HREF="cil006.html#sec-attrib">6.4</A>) of how attributes are interpreted. The
+specification extends that of <TT>gcc</TT>.
+<LI CLASS="li-enumerate">Old-style function definitions and prototypes. These are translated to
+new-style. 
+<LI CLASS="li-enumerate">Locally-declared labels. As part of the translation to CIL, we generate
+new labels as needed. 
+<LI CLASS="li-enumerate">Labels as values and computed goto. This allows a program to take the
+address of a label and to manipulate it as any value and also to perform a
+computed goto. We compile this by assigning each label whose address is taken
+a small integer that acts as its address. Every computed <TT>goto</TT> in the body
+of the function is replaced with a <TT>switch</TT> statement. If you want to invoke
+the label from another function, you are on your own (the <TT>gcc</TT>
+documentation says the same.)
+<LI CLASS="li-enumerate">Generalized lvalues. You can write code like <TT>(a, b) += 5</TT> and it gets
+translated to CIL. 
+<LI CLASS="li-enumerate">Conditionals with omitted operands. Things like <TT>x ? : y</TT> are
+translated to CIL.
+<LI CLASS="li-enumerate">Double word integers. The type <TT>long long</TT> and the <TT>LL</TT> suffix on
+constants is understood. This is currently interpreted as 64-bit integers.
+<LI CLASS="li-enumerate">Local arrays of variable length. These are converted to uses of
+<TT>alloca</TT>, the array variable is replaced with a pointer to the allocated
+array and the instances of <TT>sizeof(a)</TT> are adjusted to return the size of
+the array and not the size of the pointer. 
+<LI CLASS="li-enumerate">Non-constant local initializers. Like all local initializers these are
+compiled into assignments. 
+<LI CLASS="li-enumerate">Compound literals. These are also turned into assignments.
+<LI CLASS="li-enumerate">Designated initializers. The CIL parser actually supports the full ISO
+syntax for initializers, which is more than both <TT>gcc</TT> and <TT>MSVC</TT>. I
+(George) think that this is the most complicated part of the C language and
+whoever designed it should be banned from ever designing languages again.
+<LI CLASS="li-enumerate">Case ranges. These are compiled into separate cases. There is no code
+duplication, just a larger number of <TT>case</TT> statements.
+<LI CLASS="li-enumerate">Transparent unions. This is a strange feature that allows you to define
+a function whose formal argument has a (tranparent) union type, but the
+argument is called as if it were the first element of the union. This is
+compiled away by saying that the type of the formal argument is that of the
+first field, and the first thing in the function body we copy the formal into
+a union. <BR>
+<BR>
+<LI CLASS="li-enumerate">Inline assembly-language. The full syntax is supported and it is carried
+as such in CIL.<BR>
+<BR>
+<LI CLASS="li-enumerate">Function names as strings. The identifiers <TT>__FUNCTION__</TT> and
+<TT>__PRETTY_FUNCTION__</TT> are replaced with string literals. <BR>
+<BR>
+<LI CLASS="li-enumerate">Keywords <TT>typeof</TT>, <TT>alignof</TT>, <TT>inline</TT> are supported. 
+</OL>
+<HR>
+<A HREF="cil009.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil011.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil011.html b/cil/doc/cil011.html
new file mode 100644
index 000000000..975c8dd86
--- /dev/null
+++ b/cil/doc/cil011.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+CIL Limitations
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil010.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil012.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc37">11</A>&nbsp;&nbsp;CIL Limitations</H2>
+There are several implementation details of CIL that might make it unusable
+ or less than ideal for certain tasks:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+CIL operates after preprocessing. If you need to see comments, for
+example, you cannot use CIL. But you can use attributes and pragmas instead.
+And there is some support to help you patch the include files before they are
+seen by the preprocessor. For example, this is how we turn some
+<TT>#define</TT>s that we don't like into function calls. <BR>
+<BR>
+<LI CLASS="li-itemize">CIL does transform the code in a non-trivial way. This is done in order
+to make most analyses easier. But if you want to see the code <TT>e1, e2++</TT>
+exactly as it appears in the code, then you should not use CIL. <BR>
+<BR>
+<LI CLASS="li-itemize">CIL removes all local scopes and moves all variables to function
+scope. It also separates a declaration with an initializer into a declaration
+plus an assignment. The unfortunate effect of this transformation is that
+local variables cannot have the <TT>const</TT> qualifier.</UL>
+<HR>
+<A HREF="cil010.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil012.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil012.html b/cil/doc/cil012.html
new file mode 100644
index 000000000..5d18fd52d
--- /dev/null
+++ b/cil/doc/cil012.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Known Bugs and Limitations
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil011.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="merger.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc38">12</A>&nbsp;&nbsp;Known Bugs and Limitations</H2>
+<UL CLASS="itemize"><LI CLASS="li-itemize">In the new versions of <TT>glibc</TT> there is a function
+ <TT>__builtin_va_arg</TT> that takes a type as its second argument. CIL
+ handles that through a slight trick. As it parses the function it changes a
+ call like:
+<PRE CLASS="verbatim">
+  mytype x = __builtin_va_arg(marker, mytype)
+</PRE>into 
+<PRE CLASS="verbatim">
+ mytype x;
+ __builtin_va_arg(marker, sizeof(mytype), &amp;x);
+</PRE>
+ The latter form is used internally in CIL. However, the CIL pretty printer
+ will try to emit the original code. <BR>
+<BR>
+Similarly, <TT>__builtin_types_compatible_p(t1, t2)</TT>, which takes
+ types as arguments, is represented internally as
+ <TT>__builtin_types_compatible_p(sizeof t1, sizeof t2)</TT>, but the
+ sizeofs are removed when printing.<BR>
+<BR>
+<LI CLASS="li-itemize">The implementation of <TT>bitsSizeOf</TT> does not take into account the
+packing pragmas. However it was tested to be accurate on cygwin/gcc-2.95.3,
+Linux/gcc-2.95.3 and on Windows/MSVC.<BR>
+<BR>
+<LI CLASS="li-itemize">We do not support tri-graph sequences (ISO 5.2.1.1).<BR>
+<BR>
+<LI CLASS="li-itemize">GCC has a strange feature called &#8220;extern inline&#8221;. Such a function can
+be defined twice: first with the &#8220;extern inline&#8221; specifier and the second
+time without it. If optimizations are turned off then the &#8220;extern inline&#8221;
+definition is considered a prototype (its body is ignored). If optimizations
+are turned on then the extern inline function is inlined at all of its
+occurrences from the point of its definition all the way to the point where the
+(optional) second definition appears. No body is generated for an extern
+inline function. A body is generated for the real definition and that one is
+used in the rest of the file. <BR>
+<BR>
+CIL will rename your extern inline function (and its uses) with the suffix
+ <TT>__extinline</TT>. This means that if you have two such definition, that do
+ different things and the optimizations are not on, then the CIL version might
+ compute a different answer !<BR>
+<BR>
+Also, if you have multiple extern inline declarations then CIL will ignore
+but the first one. This is not so bad because GCC itself would not like it. <BR>
+<BR>
+<LI CLASS="li-itemize">There are still a number of bugs in handling some obscure features of
+GCC. For example, when you use variable-length arrays, CIL turns them into
+calls to <TT>alloca</TT>. This means that they are deallocated when the function
+returns and not when the local scope ends. <BR>
+<BR>
+Variable-length arrays are not supported as fields of a struct or union.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL cannot parse arbitrary <TT>#pragma</TT> directives. Their
+ syntax must follow gcc's attribute syntax to be understood. If you
+ need a pragma that does not follow gcc syntax, add that pragma's name
+ to <TT>no_parse_pragma</TT> in <TT>src/frontc/clexer.mll</TT> to indicate that
+ CIL should treat that pragma as a monolithic string rather than try
+ to parse its arguments.<BR>
+<BR>
+CIL cannot parse a line containing an empty <TT>#pragma</TT>.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL only parses <TT>#pragma</TT> directives at the "top level", this is,
+ outside of any enum, structure, union, or function definitions.<BR>
+<BR>
+If your compiler uses pragmas in places other than the top-level,
+ you may have to preprocess the sources in a special way (sed, perl,
+ etc.) to remove pragmas from these locations.<BR>
+<BR>
+<LI CLASS="li-itemize">CIL cannot parse the following code (fixing this problem would require
+extensive hacking of the LALR grammar):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int bar(int ()); // This prototype cannot be parsed
+int bar(int x()); // If you add a name to the function, it works
+int bar(int (*)()); // This also works (and it is more appropriate)
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">CIL also cannot parse certain K&amp;R old-style prototypes with missing
+return type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+g(); // This cannot be parsed
+int g(); // This is Ok
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">CIL does not understand some obscure combinations of type specifiers
+(&#8220;signed&#8221; and &#8220;unsigned&#8221; applied to typedefs that themselves contain a
+sign specification; you could argue that this should not be allowed anyway):
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+typedef signed char __s8;
+__s8 unsigned uchartest; // This is unsigned char for gcc
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-itemize">The statement <TT>x = 3 + x ++</TT> will perform the increment of <TT>x</TT>
+ before the assignment, while <TT>gcc</TT> delays the increment after the
+ assignment. It turned out that this behavior is much easier to implement
+ than gcc's one, and either way is correct (since the behavior is unspecified
+ in this case). Similarly, if you write <TT>x = x ++;</TT> then CIL will perform
+ the increment before the assignment, whereas GCC and MSVC will perform it
+ after the assignment. 
+</UL>
+<HR>
+<A HREF="cil011.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="merger.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil015.html b/cil/doc/cil015.html
new file mode 100644
index 000000000..a3dff7d73
--- /dev/null
+++ b/cil/doc/cil015.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Debugging support
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="patcher.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil016.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc41">15</A>&nbsp;&nbsp;Debugging support</H2><A NAME="sec-debugger"></A>
+Most of the time we debug our code using the Errormsg module along with the
+pretty printer. But if you want to use the Ocaml debugger here is an easy way
+to do it. Say that you want to debug the invocation of cilly that arises out
+of the following command:
+<PRE CLASS="verbatim">
+cilly -c hello.c 
+</PRE>
+ You must follow the installation <A HREF="../ccured/setup.html">instructions</A>
+to install the Elist support files for ocaml and to extend your .emacs
+appropriately. Then from within Emacs you do
+<PRE CLASS="verbatim">
+ALT-X my-camldebug
+</PRE>
+ This will ask you for the command to use for running the Ocaml debugger
+(initially the default will be &#8220;ocamldebug&#8221; or the last command you
+introduced). You use the following command:
+<PRE CLASS="verbatim">
+cilly --ocamldebug -c hello.c 
+</PRE>
+ This will run <TT>cilly</TT> as usual and invoke the Ocaml debugger when the cilly
+engine starts. The advantage of this way of invoking the debugger is that the
+directory search paths are set automatically and the right set or arguments is
+passed to the debugger. <BR>
+<BR>
+<HR>
+<A HREF="patcher.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil016.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil016.html b/cil/doc/cil016.html
new file mode 100644
index 000000000..3191a9d57
--- /dev/null
+++ b/cil/doc/cil016.html
@@ -0,0 +1,342 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Who Says C is Simple?
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil015.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil017.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc42">16</A>&nbsp;&nbsp;Who Says C is Simple?</H2><A NAME="sec-simplec"></A>
+When I (George) started to write CIL I thought it was going to take two weeks.
+Exactly a year has passed since then and I am still fixing bugs in it. This
+gross underestimate was due to the fact that I thought parsing and making
+sense of C is simple. You probably think the same. What I did not expect was
+how many dark corners this language has, especially if you want to parse
+real-world programs such as those written for GCC or if you are more ambitious
+and you want to parse the Linux or Windows NT sources (both of these were
+written without any respect for the standard and with the expectation that
+compilers will be changed to accommodate the program). <BR>
+<BR>
+The following examples were actually encountered either in real programs or
+are taken from the ISO C99 standard or from the GCC's testcases. My first
+reaction when I saw these was: <EM>Is this C?</EM>. The second one was : <EM>What the hell does it mean?</EM>. <BR>
+<BR>
+If you are contemplating doing program analysis for C on abstract-syntax
+trees then your analysis ought to be able to handle these things. Or, you can
+use CIL and let CIL translate them into clean C code. <BR>
+<BR>
+<A NAME="toc24"></A>
+<H3 CLASS="subsection"><A NAME="htoc43">16.1</A>&nbsp;&nbsp;Standard C</H3>
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Why does the following code return 0 for most values of <TT>x</TT>? (This
+should be easy.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x;
+  return x == (1 &amp;&amp; x);
+</FONT></PRE>
+See the <A HREF="examples/ex30.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Why does the following code return 0 and not -1? (Answer: because
+<TT>sizeof</TT> is unsigned, thus the result of the subtraction is unsigned, thus
+the shift is logical.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ((1 - sizeof(int)) &gt;&gt; 32);
+</FONT></PRE>
+See the <A HREF="examples/ex31.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Scoping rules can be tricky. This function returns 5.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int x = 5;
+int f() {
+  int x = 3;
+  {
+    extern int x;
+    return x;
+  }
+}
+</FONT></PRE>
+See the <A HREF="examples/ex32.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Functions and function pointers are implicitly converted to each other. 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int (*pf)(void);
+int f(void) {
+
+   pf = &amp;f; // This looks ok
+   pf = ***f; // Dereference a function?
+   pf(); // Invoke a function pointer?     
+   (****pf)();  // Looks strange but Ok
+   (***************f)(); // Also Ok             
+}
+</FONT></PRE>
+See the <A HREF="examples/ex33.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Initializer with designators are one of the hardest parts about ISO C.
+Neither MSVC or GCC implement them fully. GCC comes close though. What is the
+final value of <TT>i.nested.y</TT> and <TT>i.nested.z</TT>? (Answer: 2 and respectively
+6). 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct { 
+   int x; 
+   struct { 
+       int y, z; 
+   } nested;
+} i = { .nested.y = 5, 6, .x = 1, 2 };               
+</FONT></PRE>
+See the <A HREF="examples/ex34.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">This is from c-torture. This function returns 1.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+typedef struct
+{
+  char *key;
+  char *value;
+} T1;
+
+typedef struct
+{
+  long type;
+  char *value;
+} T3;
+
+T1 a[] =
+{
+  {
+    "",
+    ((char *)&amp;((T3) {1, (char *) 1}))
+  }
+};
+int main() {
+   T3 *pt3 = (T3*)a[0].value;
+   return pt3-&gt;value;
+}
+</FONT></PRE>
+See the <A HREF="examples/ex35.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Another one with constructed literals. This one is legal according to
+the GCC documentation but somehow GCC chokes on (it works in CIL though). This
+code returns 2.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ((int []){1,2,3,4})[1];
+</FONT></PRE>
+See the <A HREF="examples/ex36.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">In the example below there is one copy of &#8220;bar&#8221; and two copies of
+ &#8220;pbar&#8221; (static prototypes at block scope have file scope, while for all
+ other types they have block scope). 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo() {
+     static bar();
+     static (*pbar)() = bar;
+
+  }
+
+  static bar() { 
+    return 1;
+  }
+
+  static (*pbar)() = 0;
+</FONT></PRE>
+See the <A HREF="examples/ex37.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Two years after heavy use of CIL, by us and others, I discovered a bug
+ in the parser. The return value of the following function depends on what
+ precedence you give to casts and unary minus:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  unsigned long foo() {
+    return (unsigned long) - 1 / 8;
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex38.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+The correct interpretation is <TT>((unsigned long) - 1) / 8</TT>, which is a
+ relatively large number, as opposed to <TT>(unsigned long) (- 1 / 8)</TT>, which
+ is 0. </OL>
+<A NAME="toc25"></A>
+<H3 CLASS="subsection"><A NAME="htoc44">16.2</A>&nbsp;&nbsp;GCC ugliness</H3><A NAME="sec-ugly-gcc"></A>
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">GCC has generalized lvalues. You can take the address of a lot of
+strange things:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int x, y, z;
+  return &amp;(x ? y : z) - &amp; (x++, x);
+</FONT></PRE>
+See the <A HREF="examples/ex39.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC lets you omit the second component of a conditional expression.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  extern int f();
+  return f() ? : -1; // Returns the result of f unless it is 0
+</FONT></PRE>
+See the <A HREF="examples/ex40.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">Computed jumps can be tricky. CIL compiles them away in a fairly clean
+way but you are on your own if you try to jump into another function this way.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+static void *jtab[2]; // A jump table
+static int doit(int x){
+ 
+  static int jtab_init = 0;
+  if(!jtab_init) { // Initialize the jump table
+    jtab[0] = &amp;&amp;lbl1;
+    jtab[1] = &amp;&amp;lbl2;
+    jtab_init = 1;
+  }
+  goto *jtab[x]; // Jump through the table
+lbl1:
+  return 0;
+lbl2:
+  return 1;
+}
+ 
+int main(void){
+  if (doit(0) != 0) exit(1);
+  if (doit(1) != 1) exit(1);
+  exit(0);
+}
+</FONT></PRE>
+See the <A HREF="examples/ex41.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">A cute little example that we made up. What is the returned value?
+(Answer: 1); 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return ({goto L; 0;}) &amp;&amp; ({L: 5;});
+</FONT></PRE>
+See the <A HREF="examples/ex42.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate"><TT>extern inline</TT> is a strange feature of GNU C. Can you guess what the
+following code computes?
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+extern inline foo(void) { return 1; }
+int firstuse(void) { return foo(); }
+
+// A second, incompatible definition of foo
+int foo(void) { return 2; }
+
+int main() {
+    return foo() + firstuse();
+}
+</FONT></PRE>
+See the <A HREF="examples/ex43.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+The answer depends on whether the optimizations are turned on. If they are
+then the answer is 3 (the first definition is inlined at all occurrences until
+the second definition). If the optimizations are off, then the first
+definition is ignore (treated like a prototype) and the answer is 4. <BR>
+<BR>
+CIL will misbehave on this example, if the optimizations are turned off (it
+ always returns 3).<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC allows you to cast an object of a type T into a union as long as the
+union has a field of that type:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+union u { 
+   int i; 
+   struct s { 
+      int i1, i2;
+   } s;
+};
+
+union u x = (union u)6;
+
+int main() {
+  struct s y = {1, 2};
+  union u  z = (union u)y;
+}
+</FONT></PRE>
+See the <A HREF="examples/ex44.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">GCC allows you to use the <TT>__mode__</TT> attribute to specify the size
+of the integer instead of the standard <TT>char</TT>, <TT>short</TT> and so on:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+int __attribute__ ((__mode__ (  __QI__ ))) i8;
+int __attribute__ ((__mode__ (  __HI__ ))) i16;
+int __attribute__ ((__mode__ (  __SI__ ))) i32;
+int __attribute__ ((__mode__ (  __DI__ ))) i64;
+</FONT></PRE>
+See the <A HREF="examples/ex45.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<LI CLASS="li-enumerate">The &#8220;alias&#8221; attribute on a function declaration tells the
+ linker to treat this declaration as another name for the specified
+ function. CIL will replace the declaration with a trampoline
+ function pointing to the specified target.
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+    static int bar(int x, char y) {
+      return x + y;
+    }
+
+    //foo is considered another name for bar.
+    int foo(int x, char y) __attribute__((alias("bar")));
+</FONT></PRE>
+See the <A HREF="examples/ex46.txt">CIL output</A> for this
+code fragment</OL>
+<A NAME="toc26"></A>
+<H3 CLASS="subsection"><A NAME="htoc45">16.3</A>&nbsp;&nbsp;Microsoft VC ugliness</H3>
+This compiler has few extensions, so there is not much to say here.
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Why does the following code return 0 and not -1? (Answer: because of a
+bug in Microsoft Visual C. It thinks that the shift is unsigned just because
+the second operator is unsigned. CIL reproduces this bug when in MSVC mode.)
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+ return -3 &gt;&gt; (8 * sizeof(int));
+</FONT></PRE><BR>
+<BR>
+<LI CLASS="li-enumerate">Unnamed fields in a structure seem really strange at first. It seems
+that Microsoft Visual C introduced this extension, then GCC picked it up (but
+in the process implemented it wrongly: in GCC the field <TT>y</TT> overlaps with
+<TT>x</TT>!).
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct {
+  int x;
+  struct {
+     int y, z;
+     struct {
+       int u, v;
+     };
+ };
+} a;
+return a.x + a.y + a.z + a.u + a.v;
+</FONT></PRE>
+See the <A HREF="examples/ex47.txt">CIL output</A> for this
+code fragment</OL>
+<HR>
+<A HREF="cil015.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil017.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil017.html b/cil/doc/cil017.html
new file mode 100644
index 000000000..a9e04eb2e
--- /dev/null
+++ b/cil/doc/cil017.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Authors
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil016.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil018.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc46">17</A>&nbsp;&nbsp;Authors</H2>
+The CIL parser was developed starting from Hugues Casse's <TT>frontc</TT>
+front-end for C although all the files from the <TT>frontc</TT> distribution have
+been changed very extensively. The intermediate language and the elaboration
+stage are all written from scratch. The main author is
+<A HREF="mailto:necula@cs.berkeley.edu">George Necula</A>, with significant
+contributions from <A HREF="mailto:smcpeak@cs.berkeley.edu">Scott McPeak</A>,
+<A HREF="mailto:weimer@cs.berkeley.edu">Westley Weimer</A>,
+<A HREF="mailto:liblit@cs.wisc.edu">Ben Liblit</A>,
+<A HREF="javascript:loadTop('http://www.cs.berkeley.edu/~matth/')">Matt Harren</A>, 
+Raymond To and Aman Bhargava.<BR>
+<BR>
+This work is based upon work supported in part by the National Science
+Foundation under Grants No. 9875171, 0085949 and 0081588, and gifts from
+Microsoft Research. Any opinions, findings, and conclusions or recommendations
+expressed in this material are those of the author(s) and do not necessarily
+reflect the views of the National Science Foundation or the other sponsors.<BR>
+<BR>
+<HR>
+<A HREF="cil016.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil018.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil018.html b/cil/doc/cil018.html
new file mode 100644
index 000000000..dc039eaf1
--- /dev/null
+++ b/cil/doc/cil018.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+License
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil017.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil019.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc47">18</A>&nbsp;&nbsp;License</H2>
+Copyright (c) 2001-2005, 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+George C. Necula &lt;necula@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Scott McPeak &lt;smcpeak@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Wes Weimer &lt;weimer@cs.berkeley.edu&gt;
+<LI CLASS="li-itemize">Ben Liblit &lt;liblit@cs.wisc.edu&gt;
+</UL>
+All rights reserved.<BR>
+<BR>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:<BR>
+<BR>
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.<BR>
+<BR>
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.<BR>
+<BR>
+3. The names of the contributors may not be used to endorse or promote
+products derived from this software without specific prior written
+permission.<BR>
+<BR>
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.<BR>
+<BR>
+<HR>
+<A HREF="cil017.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil019.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cil019.html b/cil/doc/cil019.html
new file mode 100644
index 000000000..84e3f8b60
--- /dev/null
+++ b/cil/doc/cil019.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Bug reports
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil018.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="changes.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc48">19</A>&nbsp;&nbsp;Bug reports</H2>
+We are certain that there are still some remaining bugs in CIL. If you find
+one please file a bug report in our Source Forge space 
+<A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
+<BR>
+You can find there the latest announcements, a source distribution,
+bug report submission instructions and a mailing list: cil-users[at
+sign]lists.sourceforge.net. Please use this list to ask questions about CIL,
+as it will ensure your message is viewed by a broad audience. <BR>
+<BR>
+<HR>
+<A HREF="cil018.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="changes.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cilly.html b/cil/doc/cilly.html
new file mode 100644
index 000000000..1a2875815
--- /dev/null
+++ b/cil/doc/cilly.html
@@ -0,0 +1,187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+How to Use CIL
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil004.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil006.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc5">5</A>&nbsp;&nbsp;How to Use CIL</H2><A NAME="sec-cil"></A><BR>
+<BR>
+There are two predominant ways to use CIL to write a program analysis or
+transformation. The first is to phrase your analysis as a module that is
+called by our existing driver. The second is to use CIL as a stand-alone
+library. We highly recommend that you use <TT>cilly</TT>, our driver. <BR>
+<BR>
+<A NAME="toc1"></A>
+<H3 CLASS="subsection"><A NAME="htoc6">5.1</A>&nbsp;&nbsp;Using <TT>cilly</TT>, the CIL driver</H3>
+The most common way to use CIL is to write an Ocaml module containing your
+analysis and transformation, which you then link into our boilerplate
+driver application called <TT>cilly</TT>. <TT>cilly</TT> is a Perl script that
+processes and mimics <TT>GCC</TT> and <TT>MSVC</TT> command-line arguments and then
+calls <TT>cilly.byte.exe</TT> or <TT>cilly.asm.exe</TT> (CIL's Ocaml executable). <BR>
+<BR>
+An example of such module is <TT>logwrites.ml</TT>, a transformation that is
+distributed with CIL and whose purpose is to instrument code to print the
+addresses of memory locations being written. (We plan to release a
+C-language interface to CIL so that you can write your analyses in C
+instead of Ocaml.) See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A> for a survey of other example
+modules. <BR>
+<BR>
+Assuming that you have written <TT>/home/necula/logwrites.ml</TT>, 
+here is how you use it: 
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Modify <TT>logwrites.ml</TT> so that it includes a CIL &#8220;feature
+ descriptor&#8221; like this: 
+<PRE CLASS="verbatim">
+let feature : featureDescr = 
+  { fd_name = "logwrites";              
+    fd_enabled = ref false;
+    fd_description = "generation of code to log memory writes";
+    fd_extraopt = [];
+    fd_doit = 
+    (function (f: file) -&gt; 
+      let lwVisitor = new logWriteVisitor in
+      visitCilFileSameGlobals lwVisitor f)
+  } 
+</PRE>The <TT>fd_name</TT> field names the feature and its associated
+ command-line arguments. The <TT>fd_enabled</TT> field is a <TT>bool ref</TT>.
+ &#8220;<TT>fd_doit</TT>&#8221; will be invoked if <TT>!fd_enabled</TT> is true after
+ argument parsing, so initialize the ref cell to true if you want
+ this feature to be enabled by default.<BR>
+<BR>
+When the user passes the <TT>--dologwrites</TT>
+ command-line option to <TT>cilly</TT>, the variable associated with the
+ <TT>fd_enabled</TT> flag is set and the <TT>fd_doit</TT> function is called
+ on the <TT>Cil.file</TT> that represents the merger (see Section&nbsp;<A HREF="merger.html#sec-merger">13</A>) of
+ all C files listed as arguments. <BR>
+<BR>
+<LI CLASS="li-enumerate">Invoke <TT>configure</TT> with the arguments
+<PRE CLASS="verbatim">
+./configure EXTRASRCDIRS=/home/necula EXTRAFEATURES=logwrites
+</PRE>
+ This step works if each feature is packaged into its own ML file, and the
+name of the entry point in the file is <TT>feature</TT>.<BR>
+<BR>
+An alternative way to specify the new features is to change the build files
+yourself, as explained below. You'll need to use this method if a single
+feature is split across multiple files.
+<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
+ Put <TT>logwrites.ml</TT> in the <TT>src</TT> or <TT>src/ext</TT> directory. This
+ will make sure that <TT>make</TT> can find it. If you want to put it in some
+ other directory, modify <TT>Makefile.in</TT> and add to <TT>SOURCEDIRS</TT> your
+ directory. Alternately, you can create a symlink from <TT>src</TT> or
+ <TT>src/ext</TT> to your file.<BR>
+<BR>
+<LI CLASS="li-enumerate">Modify the <TT>Makefile.in</TT> and add your module to the 
+ <TT>CILLY_MODULES</TT> or
+ <TT>CILLY_LIBRARY_MODULES</TT> variables. The order of the modules matters. Add
+ your modules somewhere after <TT>cil</TT> and before <TT>main</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">If you have any helper files for your module, add those to
+ the makefile in the same way. e.g.:
+<PRE CLASS="verbatim">
+CILLY_MODULES = $(CILLY_LIBRARY_MODULES) \
+                myutilities1 myutilities2 logwrites \
+                main
+</PRE>
+ Again, order is important: <TT>myutilities2.ml</TT> will be able to refer
+ to Myutilities1 but not Logwrites. If you have any ocamllex or ocamlyacc
+ files, add them to both <TT>CILLY_MODULES</TT> and either <TT>MLLS</TT> or
+ <TT>MLYS</TT>.<BR>
+<BR>
+<LI CLASS="li-enumerate">Modify <TT>main.ml</TT> so that your new feature descriptor appears in
+ the global list of CIL features. 
+<PRE CLASS="verbatim">
+let features : C.featureDescr list = 
+  [ Logcalls.feature;
+    Oneret.feature;    
+    Heapify.feature1;  
+    Heapify.feature2;
+    makeCFGFeature; 
+    Partial.feature;
+    Simplemem.feature;
+    Logwrites.feature;  (* add this line to include the logwrites feature! *)
+  ] 
+  @ Feature_config.features 
+</PRE>
+ Features are processed in the order they appear on this list. Put
+ your feature last on the list if you plan to run any of CIL's
+ built-in features (such as makeCFGfeature) before your own.</OL><BR>
+Standard code in <TT>cilly</TT> takes care of adding command-line arguments,
+ printing the description, and calling your function automatically. 
+ Note: do not worry about introducing new bugs into CIL by adding a single
+ line to the feature list. <BR>
+<BR>
+<LI CLASS="li-enumerate">Now you can invoke the <TT>cilly</TT> application on a preprocessed file, or
+ instead use the <TT>cilly</TT> driver which provides a convenient compiler-like
+ interface to <TT>cilly</TT>. See Section&nbsp;<A HREF="cil007.html#sec-driver">7</A> for details using <TT>cilly</TT>.
+ Remember to enable your analysis by passing the right argument (e.g.,
+ <TT>--dologwrites</TT>). </OL>
+<A NAME="toc2"></A>
+<H3 CLASS="subsection"><A NAME="htoc7">5.2</A>&nbsp;&nbsp;Using CIL as a library</H3>
+CIL can also be built as a library that is called from your stand-alone
+application. Add <TT>cil/src</TT>, <TT>cil/src/frontc</TT>, <TT>cil/obj/x86_LINUX</TT>
+(or <TT>cil/obj/x86_WIN32</TT>) to your Ocaml project <TT>-I</TT> include paths.
+Building CIL will also build the library <TT>cil/obj/*/cil.cma</TT> (or
+<TT>cil/obj/*/cil.cmxa</TT>). You can then link your application against that
+library. <BR>
+<BR>
+You can call the <TT>Frontc.parse: string -&gt; unit -&gt; Cil.file</TT> function with
+the name of a file containing the output of the C preprocessor.
+The <TT>Mergecil.merge: Cil.file list -&gt; string -&gt; Cil.file</TT> function merges
+multiple files. You can then invoke your analysis function on the resulting
+<TT>Cil.file</TT> data structure. You might want to call
+<TT>Rmtmps.removeUnusedTemps</TT> first to clean up the prototypes and variables
+that are not used. Then you can call the function <TT>Cil.dumpFile:
+cilPrinter -&gt; out_channel -&gt; Cil.file -&gt; unit</TT> to print the file to a
+given output channel. A good <TT>cilPrinter</TT> to use is
+<TT>defaultCilPrinter</TT>. <BR>
+<BR>
+Check out <TT>src/main.ml</TT> and <TT>bin/cilly</TT> for other good ideas
+about high-level file processing. Again, we highly recommend that you just
+our <TT>cilly</TT> driver so that you can avoid spending time re-inventing the
+wheel to provide drop-in support for standard <TT>makefile</TT>s. <BR>
+<BR>
+Here is a concrete example of compiling and linking your project against
+CIL. Imagine that your program analysis or transformation is contained in
+the single file <TT>main.ml</TT>. 
+<PRE CLASS="verbatim">
+$ ocamlopt -c -I $(CIL)/obj/x86_LINUX/ main.ml
+$ ocamlopt -ccopt -L$(CIL)/obj/x86_LINUX/ -o main unix.cmxa str.cmxa \ 
+        $(CIL)/obj/x86_LINUX/cil.cmxa main.cmx
+</PRE>
+The first line compiles your analysis, the second line links it against CIL
+(as a library) and the Ocaml Unix library. For more information about
+compiling and linking Ocaml programs, see the Ocaml home page
+at <A HREF="javascript:loadTop('http://caml.inria.fr/ocaml/')">http://caml.inria.fr/ocaml/</A>. <BR>
+<BR>
+In the next section we give an overview of the API that you can use
+to write your analysis and transformation. <BR>
+<BR>
+<HR>
+<A HREF="cil004.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil006.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/cilpp.haux b/cil/doc/cilpp.haux
new file mode 100644
index 000000000..1b9fa16b7
--- /dev/null
+++ b/cil/doc/cilpp.haux
@@ -0,0 +1,64 @@
+\@addtocsec{htoc}{1}{0}{\@print{1}\quad{}Introduction}
+\@addtocsec{htoc}{2}{0}{\@print{2}\quad{}Installation}
+\@addtocsec{htoc}{3}{0}{\@print{3}\quad{}Distribution Contents}
+\@addtocsec{htoc}{4}{0}{\@print{4}\quad{}Compiling C to CIL}
+\newlabel{sec-cabs2cil}{{4}{X}}
+\@addtocsec{htoc}{5}{0}{\@print{5}\quad{}How to Use CIL}
+\newlabel{sec-cil}{{5}{X}}
+\@addtocsec{htoc}{6}{1}{\@print{5.1}\quad{}Using \t{cilly}, the CIL driver}
+\@addtocsec{htoc}{7}{1}{\@print{5.2}\quad{}Using CIL as a library}
+\@addtocsec{htoc}{8}{0}{\@print{6}\quad{}CIL API Documentation}
+\newlabel{sec-api}{{6}{X}}
+\@addtocsec{htoc}{9}{1}{\@print{6.1}\quad{}Using the visitor}
+\newlabel{sec-visitor}{{6.1}{X}}
+\@addtocsec{htoc}{10}{1}{\@print{6.2}\quad{}Interpreted Constructors and Deconstructors}
+\@addtocsec{htoc}{11}{2}{\@print{6.2.1}\quad{}Performance considerations for interpreted constructors}
+\@addtocsec{htoc}{12}{1}{\@print{6.3}\quad{}Printing and Debugging support}
+\@addtocsec{htoc}{13}{1}{\@print{6.4}\quad{}Attributes}
+\newlabel{sec-attrib}{{6.4}{X}}
+\@addtocsec{htoc}{14}{0}{\@print{7}\quad{}The CIL Driver}
+\newlabel{sec-driver}{{7}{X}}
+\@addtocsec{htoc}{15}{1}{\@print{7.1}\quad{}\t{cilly} Options}
+\@addtocsec{htoc}{16}{1}{\@print{7.2}\quad{}\t{cilly.asm} Options}
+\newlabel{sec-cilly-asm-options}{{7.2}{X}}
+\@addtocsec{htoc}{17}{0}{\@print{8}\quad{}Library of CIL Modules}
+\newlabel{sec-Extension}{{8}{X}}
+\@addtocsec{htoc}{18}{1}{\@print{8.1}\quad{}Control-Flow Graphs}
+\newlabel{sec-cfg}{{8.1}{X}}
+\@addtocsec{htoc}{19}{2}{\@print{8.1.1}\quad{}The CFG module (new in CIL 1.3.5)}
+\@addtocsec{htoc}{20}{2}{\@print{8.1.2}\quad{}Simplified control flow}
+\@addtocsec{htoc}{21}{1}{\@print{8.2}\quad{}Data flow analysis framework}
+\@addtocsec{htoc}{22}{1}{\@print{8.3}\quad{}Dominators}
+\@addtocsec{htoc}{23}{1}{\@print{8.4}\quad{}Points-to Analysis}
+\@addtocsec{htoc}{24}{1}{\@print{8.5}\quad{}StackGuard}
+\@addtocsec{htoc}{25}{1}{\@print{8.6}\quad{}Heapify}
+\@addtocsec{htoc}{26}{1}{\@print{8.7}\quad{}One Return}
+\@addtocsec{htoc}{27}{1}{\@print{8.8}\quad{}Partial Evaluation and Constant Folding}
+\@addtocsec{htoc}{28}{1}{\@print{8.9}\quad{}Reaching Definitions}
+\@addtocsec{htoc}{29}{1}{\@print{8.10}\quad{}Available Expressions}
+\@addtocsec{htoc}{30}{1}{\@print{8.11}\quad{}Liveness Analysis}
+\@addtocsec{htoc}{31}{1}{\@print{8.12}\quad{}Dead Code Elimination}
+\@addtocsec{htoc}{32}{1}{\@print{8.13}\quad{}Simple Memory Operations}
+\@addtocsec{htoc}{33}{1}{\@print{8.14}\quad{}Simple Three-Address Code}
+\@addtocsec{htoc}{34}{1}{\@print{8.15}\quad{}Converting C to C++}
+\@addtocsec{htoc}{35}{0}{\@print{9}\quad{}Controlling CIL}
+\@addtocsec{htoc}{36}{0}{\@print{10}\quad{}GCC Extensions}
+\@addtocsec{htoc}{37}{0}{\@print{11}\quad{}CIL Limitations}
+\@addtocsec{htoc}{38}{0}{\@print{12}\quad{}Known Bugs and Limitations}
+\@addtocsec{htoc}{39}{0}{\@print{13}\quad{}Using the merger}
+\newlabel{sec-merger}{{13}{X}}
+\@addtocsec{htoc}{40}{0}{\@print{14}\quad{}Using the patcher}
+\newlabel{sec-patcher}{{14}{X}}
+\@addtocsec{htoc}{41}{0}{\@print{15}\quad{}Debugging support}
+\newlabel{sec-debugger}{{15}{X}}
+\@addtocsec{htoc}{42}{0}{\@print{16}\quad{}Who Says C is Simple?}
+\newlabel{sec-simplec}{{16}{X}}
+\@addtocsec{htoc}{43}{1}{\@print{16.1}\quad{}Standard C}
+\@addtocsec{htoc}{44}{1}{\@print{16.2}\quad{}GCC ugliness}
+\newlabel{sec-ugly-gcc}{{16.2}{X}}
+\@addtocsec{htoc}{45}{1}{\@print{16.3}\quad{}Microsoft VC ugliness}
+\@addtocsec{htoc}{46}{0}{\@print{17}\quad{}Authors}
+\@addtocsec{htoc}{47}{0}{\@print{18}\quad{}License}
+\@addtocsec{htoc}{48}{0}{\@print{19}\quad{}Bug reports}
+\@addtocsec{htoc}{49}{0}{\@print{20}\quad{}Changes}
+\newlabel{sec-changes}{{20}{X}}
diff --git a/cil/doc/cilpp.htoc b/cil/doc/cilpp.htoc
new file mode 100644
index 000000000..d5bc0e5e5
--- /dev/null
+++ b/cil/doc/cilpp.htoc
@@ -0,0 +1,65 @@
+\begin{tocenv}
+\tocitem \@locref{htoc1}{\begin{@norefs}\@print{1}\quad{}Introduction\end{@norefs}}
+\tocitem \@locref{htoc2}{\begin{@norefs}\@print{2}\quad{}Installation\end{@norefs}}
+\tocitem \@locref{htoc3}{\begin{@norefs}\@print{3}\quad{}Distribution Contents\end{@norefs}}
+\tocitem \@locref{htoc4}{\begin{@norefs}\@print{4}\quad{}Compiling C to CIL\end{@norefs}}
+\tocitem \@locref{htoc5}{\begin{@norefs}\@print{5}\quad{}How to Use CIL\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc6}{\begin{@norefs}\@print{5.1}\quad{}Using \t{cilly}, the CIL driver\end{@norefs}}
+\tocitem \@locref{htoc7}{\begin{@norefs}\@print{5.2}\quad{}Using CIL as a library\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc8}{\begin{@norefs}\@print{6}\quad{}CIL API Documentation\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc9}{\begin{@norefs}\@print{6.1}\quad{}Using the visitor\end{@norefs}}
+\tocitem \@locref{htoc10}{\begin{@norefs}\@print{6.2}\quad{}Interpreted Constructors and Deconstructors\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc11}{\begin{@norefs}\@print{6.2.1}\quad{}Performance considerations for interpreted constructors\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc12}{\begin{@norefs}\@print{6.3}\quad{}Printing and Debugging support\end{@norefs}}
+\tocitem \@locref{htoc13}{\begin{@norefs}\@print{6.4}\quad{}Attributes\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc14}{\begin{@norefs}\@print{7}\quad{}The CIL Driver\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc15}{\begin{@norefs}\@print{7.1}\quad{}\t{cilly} Options\end{@norefs}}
+\tocitem \@locref{htoc16}{\begin{@norefs}\@print{7.2}\quad{}\t{cilly.asm} Options\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc17}{\begin{@norefs}\@print{8}\quad{}Library of CIL Modules\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc18}{\begin{@norefs}\@print{8.1}\quad{}Control-Flow Graphs\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc19}{\begin{@norefs}\@print{8.1.1}\quad{}The CFG module (new in CIL 1.3.5)\end{@norefs}}
+\tocitem \@locref{htoc20}{\begin{@norefs}\@print{8.1.2}\quad{}Simplified control flow\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc21}{\begin{@norefs}\@print{8.2}\quad{}Data flow analysis framework\end{@norefs}}
+\tocitem \@locref{htoc22}{\begin{@norefs}\@print{8.3}\quad{}Dominators\end{@norefs}}
+\tocitem \@locref{htoc23}{\begin{@norefs}\@print{8.4}\quad{}Points-to Analysis\end{@norefs}}
+\tocitem \@locref{htoc24}{\begin{@norefs}\@print{8.5}\quad{}StackGuard\end{@norefs}}
+\tocitem \@locref{htoc25}{\begin{@norefs}\@print{8.6}\quad{}Heapify\end{@norefs}}
+\tocitem \@locref{htoc26}{\begin{@norefs}\@print{8.7}\quad{}One Return\end{@norefs}}
+\tocitem \@locref{htoc27}{\begin{@norefs}\@print{8.8}\quad{}Partial Evaluation and Constant Folding\end{@norefs}}
+\tocitem \@locref{htoc28}{\begin{@norefs}\@print{8.9}\quad{}Reaching Definitions\end{@norefs}}
+\tocitem \@locref{htoc29}{\begin{@norefs}\@print{8.10}\quad{}Available Expressions\end{@norefs}}
+\tocitem \@locref{htoc30}{\begin{@norefs}\@print{8.11}\quad{}Liveness Analysis\end{@norefs}}
+\tocitem \@locref{htoc31}{\begin{@norefs}\@print{8.12}\quad{}Dead Code Elimination\end{@norefs}}
+\tocitem \@locref{htoc32}{\begin{@norefs}\@print{8.13}\quad{}Simple Memory Operations\end{@norefs}}
+\tocitem \@locref{htoc33}{\begin{@norefs}\@print{8.14}\quad{}Simple Three-Address Code\end{@norefs}}
+\tocitem \@locref{htoc34}{\begin{@norefs}\@print{8.15}\quad{}Converting C to C++\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc35}{\begin{@norefs}\@print{9}\quad{}Controlling CIL\end{@norefs}}
+\tocitem \@locref{htoc36}{\begin{@norefs}\@print{10}\quad{}GCC Extensions\end{@norefs}}
+\tocitem \@locref{htoc37}{\begin{@norefs}\@print{11}\quad{}CIL Limitations\end{@norefs}}
+\tocitem \@locref{htoc38}{\begin{@norefs}\@print{12}\quad{}Known Bugs and Limitations\end{@norefs}}
+\tocitem \@locref{htoc39}{\begin{@norefs}\@print{13}\quad{}Using the merger\end{@norefs}}
+\tocitem \@locref{htoc40}{\begin{@norefs}\@print{14}\quad{}Using the patcher\end{@norefs}}
+\tocitem \@locref{htoc41}{\begin{@norefs}\@print{15}\quad{}Debugging support\end{@norefs}}
+\tocitem \@locref{htoc42}{\begin{@norefs}\@print{16}\quad{}Who Says C is Simple?\end{@norefs}}
+\begin{tocenv}
+\tocitem \@locref{htoc43}{\begin{@norefs}\@print{16.1}\quad{}Standard C\end{@norefs}}
+\tocitem \@locref{htoc44}{\begin{@norefs}\@print{16.2}\quad{}GCC ugliness\end{@norefs}}
+\tocitem \@locref{htoc45}{\begin{@norefs}\@print{16.3}\quad{}Microsoft VC ugliness\end{@norefs}}
+\end{tocenv}
+\tocitem \@locref{htoc46}{\begin{@norefs}\@print{17}\quad{}Authors\end{@norefs}}
+\tocitem \@locref{htoc47}{\begin{@norefs}\@print{18}\quad{}License\end{@norefs}}
+\tocitem \@locref{htoc48}{\begin{@norefs}\@print{19}\quad{}Bug reports\end{@norefs}}
+\tocitem \@locref{htoc49}{\begin{@norefs}\@print{20}\quad{}Changes\end{@norefs}}
+\end{tocenv}
diff --git a/cil/doc/ciltoc.html b/cil/doc/ciltoc.html
new file mode 100644
index 000000000..7fe4c80e5
--- /dev/null
+++ b/cil/doc/ciltoc.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+
+<HEAD>
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+</HEAD>
+
+<BODY >
+<!--HEVEA command line is: /usr/bin/hevea -exec xxdate.exe ../../cilpp -->
+<!--HACHA command line is: /usr/bin/hacha -o ciltoc.html cil.html -->
+
+
+
+<TABLE CLASS="title">
+<TR><TD></TD>
+</TR></TABLE><BR>
+<UL>
+<LI><A HREF="cil001.html">Introduction</A>
+<LI><A HREF="cil002.html">Installation</A>
+<LI><A HREF="cil003.html">Distribution Contents</A>
+<LI><A HREF="cil004.html">Compiling C to CIL</A>
+<LI><A HREF="cilly.html">How to Use CIL</A>
+<UL>
+<LI><A HREF="cilly.html#toc1">Using <TT>cilly</TT>, the CIL driver</A>
+<LI><A HREF="cilly.html#toc2">Using CIL as a library</A>
+</UL>
+<LI><A HREF="cil006.html">CIL API Documentation</A>
+<UL>
+<LI><A HREF="cil006.html#toc3">Using the visitor</A>
+<LI><A HREF="cil006.html#toc4">Interpreted Constructors and Deconstructors</A>
+<LI><A HREF="cil006.html#toc5">Printing and Debugging support</A>
+<LI><A HREF="cil006.html#toc6">Attributes</A>
+</UL>
+<LI><A HREF="cil007.html">The CIL Driver</A>
+<UL>
+<LI><A HREF="cil007.html#toc7"><TT>cilly</TT> Options</A>
+<LI><A HREF="cil007.html#toc8"><TT>cilly.asm</TT> Options</A>
+</UL>
+<LI><A HREF="ext.html">Library of CIL Modules</A>
+<UL>
+<LI><A HREF="ext.html#toc9">Control-Flow Graphs</A>
+<LI><A HREF="ext.html#toc10">Data flow analysis framework</A>
+<LI><A HREF="ext.html#toc11">Dominators</A>
+<LI><A HREF="ext.html#toc12">Points-to Analysis</A>
+<LI><A HREF="ext.html#toc13">StackGuard</A>
+<LI><A HREF="ext.html#toc14">Heapify</A>
+<LI><A HREF="ext.html#toc15">One Return</A>
+<LI><A HREF="ext.html#toc16">Partial Evaluation and Constant Folding</A>
+<LI><A HREF="ext.html#toc17">Reaching Definitions</A>
+<LI><A HREF="ext.html#toc18">Available Expressions</A>
+<LI><A HREF="ext.html#toc19">Liveness Analysis</A>
+<LI><A HREF="ext.html#toc20">Dead Code Elimination</A>
+<LI><A HREF="ext.html#toc21">Simple Memory Operations</A>
+<LI><A HREF="ext.html#toc22">Simple Three-Address Code</A>
+<LI><A HREF="ext.html#toc23">Converting C to C++</A>
+</UL>
+<LI><A HREF="cil009.html">Controlling CIL</A>
+<LI><A HREF="cil010.html">GCC Extensions</A>
+<LI><A HREF="cil011.html">CIL Limitations</A>
+<LI><A HREF="cil012.html">Known Bugs and Limitations</A>
+<LI><A HREF="merger.html">Using the merger</A>
+<LI><A HREF="patcher.html">Using the patcher</A>
+<LI><A HREF="cil015.html">Debugging support</A>
+<LI><A HREF="cil016.html">Who Says C is Simple?</A>
+<UL>
+<LI><A HREF="cil016.html#toc24">Standard C</A>
+<LI><A HREF="cil016.html#toc25">GCC ugliness</A>
+<LI><A HREF="cil016.html#toc26">Microsoft VC ugliness</A>
+</UL>
+<LI><A HREF="cil017.html">Authors</A>
+<LI><A HREF="cil018.html">License</A>
+<LI><A HREF="cil019.html">Bug reports</A>
+<LI><A HREF="changes.html">Changes</A>
+</UL>
+<!--FOOTER-->
+<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
+</EM><A HREF="http://pauillac.inria.fr/~maranget/hevea/index.html"><EM>H<FONT SIZE=2><sup>E</sup></FONT>V<FONT SIZE=2><sup>E</sup></FONT>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
+</HTML>
diff --git a/cil/doc/contents_motif.gif b/cil/doc/contents_motif.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5d3d016702478a74ae10ef900888bdd3c379aa3b
GIT binary patch
literal 316
zcmZ?wbhEHb6krfw_{abP1q~Da{|7M?|0yXbc;*)57nP)@D5MqT=PE=5_$p-PCZ?xa
zDU{?V>s1uwGARCJVPs%nX3zm?0h!{!^!$#Qv4ElRF^Oazg%$xP4gr?K20Vui7@8Cq
z96<~aYG7bFXduDE)_gF*K!Sm#!2w8tc?<#^EKH0F0@&nWDh*(OL4iR)0LC#eU{Fv%
q765UP1Rz|v0LZ;S{U8800mw%-4`?77pMe2nUBZC|MrJMs25SIR**_xy

literal 0
HcmV?d00001

diff --git a/cil/doc/examples/ex1.txt b/cil/doc/examples/ex1.txt
new file mode 100644
index 000000000..2fe6c2105
--- /dev/null
+++ b/cil/doc/examples/ex1.txt
@@ -0,0 +1,16 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex1.c"
+long x  ;
+#line 3 "cilcode.tmp/ex1.c"
+static long long y  ;
+#line 6 "cilcode.tmp/ex1.c"
+int main(void) 
+{ 
+
+  {
+#line 6
+  return ((int )((long long )x + y));
+}
+}
diff --git a/cil/doc/examples/ex10.txt b/cil/doc/examples/ex10.txt
new file mode 100644
index 000000000..7213b4c37
--- /dev/null
+++ b/cil/doc/examples/ex10.txt
@@ -0,0 +1,10 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex10.c"
+char foo[13]  = 
+#line 1
+  {      (char )'f',      (char )'o',      (char )'o',      (char )' ', 
+        (char )'p',      (char )'l',      (char )'u',      (char )'s', 
+        (char )' ',      (char )'b',      (char )'a',      (char )'r', 
+        (char )'\000'};
diff --git a/cil/doc/examples/ex11.txt b/cil/doc/examples/ex11.txt
new file mode 100644
index 000000000..683df519d
--- /dev/null
+++ b/cil/doc/examples/ex11.txt
@@ -0,0 +1,5 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex11.c"
+char *foo  =    (char *)"foo  plus  bar ";
diff --git a/cil/doc/examples/ex12.txt b/cil/doc/examples/ex12.txt
new file mode 100644
index 000000000..d04d83d82
--- /dev/null
+++ b/cil/doc/examples/ex12.txt
@@ -0,0 +1,32 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 2 "cilcode.tmp/ex12.c"
+struct foo {
+   int f1 ;
+   int f2 ;
+};
+#line 1 "cilcode.tmp/ex12.c"
+int main(void) 
+{ int x ;
+  struct foo a[3] ;
+
+  {
+#line 1
+  x = 5;
+#line 2
+  a[0].f1 = 1;
+#line 2
+  a[0].f2 = 2;
+#line 2
+  a[1].f1 = 3;
+#line 2
+  a[1].f2 = 4;
+#line 2
+  a[2].f1 = 5;
+#line 2
+  a[2].f2 = 0;
+#line 3
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex13.txt b/cil/doc/examples/ex13.txt
new file mode 100644
index 000000000..6486ad6ee
--- /dev/null
+++ b/cil/doc/examples/ex13.txt
@@ -0,0 +1,21 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex13.c"
+int x  =    5;
+#line 2 "cilcode.tmp/ex13.c"
+int main(void) 
+{ int x___0 ;
+  int x___1 ;
+
+  {
+#line 3
+  x___0 = 6;
+#line 5
+  x___1 = 7;
+#line 6
+  return (x___1);
+#line 8
+  return (x___0);
+}
+}
diff --git a/cil/doc/examples/ex14.txt b/cil/doc/examples/ex14.txt
new file mode 100644
index 000000000..72fc719ef
--- /dev/null
+++ b/cil/doc/examples/ex14.txt
@@ -0,0 +1,22 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex14.c"
+int x  =    5;
+#line 5
+int main(void) ;
+#line 5 "cilcode.tmp/ex14.c"
+static int x___1  =    7;
+#line 2 "cilcode.tmp/ex14.c"
+int main(void) 
+{ int x___0 ;
+
+  {
+#line 3
+  x___0 = 6;
+#line 6
+  return (x___1);
+#line 8
+  return (x___0);
+}
+}
diff --git a/cil/doc/examples/ex15.txt b/cil/doc/examples/ex15.txt
new file mode 100644
index 000000000..4f64ae9b6
--- /dev/null
+++ b/cil/doc/examples/ex15.txt
@@ -0,0 +1,14 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex15.c"
+int foo(void) 
+{ int x ;
+
+  {
+#line 2
+  x = 5;
+#line 3
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex16.txt b/cil/doc/examples/ex16.txt
new file mode 100644
index 000000000..82290c287
--- /dev/null
+++ b/cil/doc/examples/ex16.txt
@@ -0,0 +1,22 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex16.c"
+extern int f(int  ) ;
+#line 1 "cilcode.tmp/ex16.c"
+int main(void) 
+{ int x ;
+  int tmp ;
+  int tmp___0 ;
+
+  {
+#line 2
+  tmp = x;
+#line 2
+  x ++;
+#line 2
+  tmp___0 = f(x);
+#line 2
+  return (tmp + tmp___0);
+}
+}
diff --git a/cil/doc/examples/ex17.txt b/cil/doc/examples/ex17.txt
new file mode 100644
index 000000000..20bbaa7ad
--- /dev/null
+++ b/cil/doc/examples/ex17.txt
@@ -0,0 +1,81 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex17.c"
+int main(void) 
+{ int x ;
+  int y ;
+  int tmp ;
+  int z ;
+  int tmp___0 ;
+
+  {
+#line 2
+  if (x) {
+#line 2
+    tmp = 2;
+  } else {
+#line 2
+    tmp = 4;
+  }
+#line 2
+  y = tmp;
+#line 3
+  if (x) {
+#line 3
+    tmp___0 = 1;
+  } else {
+#line 3
+    if (y) {
+#line 3
+      tmp___0 = 1;
+    } else {
+#line 3
+      tmp___0 = 0;
+    }
+  }
+#line 3
+  z = tmp___0;
+#line 5
+  if (x) {
+#line 5
+    if (y) {
+#line 5
+      return (0);
+    } else {
+#line 5
+      return (1);
+    }
+  } else {
+#line 5
+    return (1);
+  }
+#line 8
+  if (x) {
+#line 8
+    if (y) {
+      goto _L;
+    } else {
+      goto _L___0;
+    }
+  } else {
+    _L___0: /* CIL Label */ 
+#line 8
+    if (z) {
+      _L: /* CIL Label */ 
+#line 8
+      x ++;
+#line 8
+      y ++;
+#line 8
+      z ++;
+#line 8
+      x ++;
+#line 8
+      y ++;
+#line 8
+      return (z);
+    }
+  }
+}
+}
diff --git a/cil/doc/examples/ex18.txt b/cil/doc/examples/ex18.txt
new file mode 100644
index 000000000..bcdb7ef29
--- /dev/null
+++ b/cil/doc/examples/ex18.txt
@@ -0,0 +1,20 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex18.c"
+extern int f() ;
+#line 1 "cilcode.tmp/ex18.c"
+int main(void) 
+{ int tmp___0 ;
+
+  {
+#line 2
+  tmp___0 = f();
+  if (! tmp___0) {
+#line 2
+    tmp___0 = 4;
+  }
+#line 2
+  return (tmp___0);
+}
+}
diff --git a/cil/doc/examples/ex19.txt b/cil/doc/examples/ex19.txt
new file mode 100644
index 000000000..3b82868fe
--- /dev/null
+++ b/cil/doc/examples/ex19.txt
@@ -0,0 +1,42 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex19.c"
+int main(void) 
+{ int x ;
+  int i ;
+
+  {
+#line 2
+  i = 0;
+#line 2
+  while (i < 5) {
+#line 3
+    if (i == 5) {
+      goto __Cont;
+    }
+#line 4
+    if (i == 4) {
+#line 4
+      break;
+    }
+#line 5
+    i += 2;
+    __Cont: /* CIL Label */ 
+#line 2
+    i ++;
+  }
+#line 7
+  while (x < 5) {
+#line 8
+    if (x == 3) {
+#line 8
+      continue;
+    }
+#line 9
+    x ++;
+  }
+#line 11
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex2.txt b/cil/doc/examples/ex2.txt
new file mode 100644
index 000000000..20313828c
--- /dev/null
+++ b/cil/doc/examples/ex2.txt
@@ -0,0 +1,9 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex2.c"
+struct __anonstruct_s_1 {
+   int x ;
+};
+#line 1 "cilcode.tmp/ex2.c"
+struct __anonstruct_s_1 s  ;
diff --git a/cil/doc/examples/ex20.txt b/cil/doc/examples/ex20.txt
new file mode 100644
index 000000000..7a51db3b6
--- /dev/null
+++ b/cil/doc/examples/ex20.txt
@@ -0,0 +1,26 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex20.c"
+int main(void) 
+{ int x ;
+  int y ;
+  int z ;
+
+  {
+#line 1
+  x = 5;
+#line 1
+  y = x;
+#line 2
+  x ++;
+  L: 
+#line 2
+  y -= x;
+#line 2
+  z = y;
+  goto L;
+#line 3
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex21.txt b/cil/doc/examples/ex21.txt
new file mode 100644
index 000000000..3f331e425
--- /dev/null
+++ b/cil/doc/examples/ex21.txt
@@ -0,0 +1,25 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex21.c"
+int main(void) 
+{ int x ;
+  int y ;
+  int z ;
+  int *tmp ;
+
+  {
+#line 2
+  if (x) {
+#line 2
+    tmp = & y;
+  } else {
+#line 2
+    tmp = & z;
+  }
+#line 2
+  x ++;
+#line 2
+  return (tmp - & x);
+}
+}
diff --git a/cil/doc/examples/ex22.txt b/cil/doc/examples/ex22.txt
new file mode 100644
index 000000000..2224e7c7d
--- /dev/null
+++ b/cil/doc/examples/ex22.txt
@@ -0,0 +1,16 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 327 "/usr/include/stdio.h"
+extern int printf(char const   * __restrict  __format  , ...) ;
+#line 7 "cilcode.tmp/ex22.c"
+int main(void) 
+{ 
+
+  {
+#line 9
+  printf((char const   * __restrict  )"Hello world\n");
+#line 10
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex23.txt b/cil/doc/examples/ex23.txt
new file mode 100644
index 000000000..d48a13583
--- /dev/null
+++ b/cil/doc/examples/ex23.txt
@@ -0,0 +1,56 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex23.c"
+int foo(int predicate ) 
+{ int x ;
+
+  {
+#line 2
+  x = 0;
+#line 4
+  if (predicate == 0) {
+    goto switch_0_0;
+  } else {
+#line 5
+    if (predicate == 1) {
+      goto switch_0_1;
+    } else {
+#line 6
+      if (predicate == 2) {
+        goto switch_0_2;
+      } else {
+#line 7
+        if (predicate == 3) {
+          goto switch_0_3;
+        } else {
+          {
+          goto switch_0_default;
+#line 3
+          if (0) {
+            switch_0_0: /* CIL Label */ 
+#line 4
+            return (111);
+            switch_0_1: /* CIL Label */ 
+#line 5
+            x ++;
+            switch_0_2: /* CIL Label */ 
+#line 6
+            return (x + 3);
+            switch_0_3: /* CIL Label */ 
+            goto switch_0_break;
+            switch_0_default: /* CIL Label */ ;
+#line 8
+            return (222);
+          } else {
+            switch_0_break: /* CIL Label */ ;
+          }
+          }
+        }
+      }
+    }
+  }
+#line 10
+  return (333);
+}
+}
diff --git a/cil/doc/examples/ex24.txt b/cil/doc/examples/ex24.txt
new file mode 100644
index 000000000..587ce674d
--- /dev/null
+++ b/cil/doc/examples/ex24.txt
@@ -0,0 +1,59 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+extern void * stackguard_get_ra();
+extern void stackguard_set_ra(void *new_ra);
+/* You must provide an implementation for functions that get and set the
+ * return address. Such code is unfortunately architecture specific.
+ */
+struct stackguard_stack {
+  void * data;
+  struct stackguard_stack * next;
+} * stackguard_stack;
+
+void stackguard_push(void *ra) {
+  void * old = stackguard_stack;
+  stackguard_stack = (struct stackguard_stack *)
+    malloc(sizeof(stackguard_stack));
+  stackguard_stack->data = ra;
+  stackguard_stack->next = old;
+}
+
+void * stackguard_pop() {
+  void * ret = stackguard_stack->data;
+  void * next = stackguard_stack->next;
+  free(stackguard_stack);
+  stackguard_stack->next = next;
+  return ret;
+}
+#line 3 "cilcode.tmp/ex24.c"
+extern int ( /* missing proto */  scanf)() ;
+#line 1 "cilcode.tmp/ex24.c"
+int dangerous(void) 
+{ char array[10] ;
+  void *return_address ;
+
+  {
+  return_address = (void *)stackguard_get_ra();
+  stackguard_push(return_address);
+#line 3
+  scanf("%s", array);
+  {
+  return_address = (void *)stackguard_pop();
+  stackguard_set_ra(return_address);
+#line 4
+  return (0);
+  }
+}
+}
+#line 6 "cilcode.tmp/ex24.c"
+int main(void) 
+{ int tmp ;
+
+  {
+#line 7
+  tmp = dangerous();
+#line 7
+  return (tmp);
+}
+}
diff --git a/cil/doc/examples/ex25.txt b/cil/doc/examples/ex25.txt
new file mode 100644
index 000000000..88f6902e4
--- /dev/null
+++ b/cil/doc/examples/ex25.txt
@@ -0,0 +1,40 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 3 "cilcode.tmp/ex25.c"
+extern int ( /* missing proto */  scanf)() ;
+#line 1 "cilcode.tmp/ex25.c"
+struct dangerous_heapify {
+   char array[10] ;
+};
+#line 1 "cilcode.tmp/ex25.c"
+int dangerous(void) 
+{ struct dangerous_heapify *dangerous_heapify ;
+  int __cil_tmp3 ;
+
+  {
+#line 1
+  dangerous_heapify = (struct dangerous_heapify *)malloc(sizeof(struct dangerous_heapify ));
+#line 3
+  scanf("%s", dangerous_heapify->array);
+  {
+#line 4
+  __cil_tmp3 = 0;
+#line 4
+  free(dangerous_heapify);
+#line 4
+  return (__cil_tmp3);
+  }
+}
+}
+#line 6 "cilcode.tmp/ex25.c"
+int main(void) 
+{ int tmp ;
+
+  {
+#line 7
+  tmp = dangerous();
+#line 7
+  return (tmp);
+}
+}
diff --git a/cil/doc/examples/ex26.txt b/cil/doc/examples/ex26.txt
new file mode 100644
index 000000000..8f5b17188
--- /dev/null
+++ b/cil/doc/examples/ex26.txt
@@ -0,0 +1,29 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex26.c"
+int foo(int predicate ) 
+{ int __retres ;
+
+  {
+#line 2
+  if (predicate <= 0) {
+#line 3
+    __retres = 1;
+    goto return_label;
+  } else {
+#line 5
+    if (predicate > 5) {
+#line 6
+      __retres = 2;
+      goto return_label;
+    }
+#line 7
+    __retres = 3;
+    goto return_label;
+  }
+  return_label: /* CIL Label */ 
+#line 1
+  return (__retres);
+}
+}
diff --git a/cil/doc/examples/ex27.txt b/cil/doc/examples/ex27.txt
new file mode 100644
index 000000000..60591132a
--- /dev/null
+++ b/cil/doc/examples/ex27.txt
@@ -0,0 +1,51 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex27.c"
+int foo(int x , int y ) 
+{ int unknown ;
+
+  {
+#line 3
+  if (unknown) {
+#line 4
+    return (9);
+  }
+#line 5
+  return (x + 3);
+}
+}
+#line 8 "cilcode.tmp/ex27.c"
+int main(void) 
+{ int a ;
+  int b ;
+  int c ;
+  int tmp ;
+  int tmp___0 ;
+
+  {
+  {
+#line 10
+  tmp = foo(5, 7);
+#line 10
+  tmp___0 = foo(6, 7);
+#line 10
+  a = tmp + tmp___0;
+#line 11
+  b = 4;
+#line 12
+  c = 16;
+  }
+  {
+  {
+#line 16
+  return (20);
+  }
+#line 13
+  if (0) {
+#line 14
+    return (b - c);
+  }
+  }
+}
+}
diff --git a/cil/doc/examples/ex28.txt b/cil/doc/examples/ex28.txt
new file mode 100644
index 000000000..098b144a2
--- /dev/null
+++ b/cil/doc/examples/ex28.txt
@@ -0,0 +1,24 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex28.c"
+int main(void) 
+{ int ***three ;
+  int **two ;
+  int **mem_3 ;
+  int *mem_4 ;
+  int *mem_5 ;
+
+  {
+#line 4
+  mem_3 = (*three);
+#line 4
+  mem_4 = (*mem_3);
+#line 4
+  mem_5 = (*two);
+#line 4
+  (*mem_4) = (*mem_5);
+#line 5
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex29.txt b/cil/doc/examples/ex29.txt
new file mode 100644
index 000000000..7df8f681d
--- /dev/null
+++ b/cil/doc/examples/ex29.txt
@@ -0,0 +1,53 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 2 "cilcode.tmp/ex29.c"
+struct mystruct {
+   int a ;
+   int b ;
+};
+#line 1 "cilcode.tmp/ex29.c"
+int main(void) 
+{ struct mystruct m ;
+  int local ;
+  int arr[3] ;
+  int *ptr ;
+  unsigned int __cil_tmp5 ;
+  unsigned int __cil_tmp6 ;
+  int __cil_tmp7 ;
+  unsigned int __cil_tmp8 ;
+  int *__cil_tmp9 ;
+  int __cil_tmp10 ;
+  unsigned int __cil_tmp11 ;
+  unsigned int __cil_tmp12 ;
+  unsigned int __cil_tmp13 ;
+  int m_b14 ;
+  int m_a15 ;
+
+  {
+#line 10
+  ptr = & local;
+#line 11
+  __cil_tmp5 = 2 * 4U;
+#line 11
+  __cil_tmp6 = (unsigned int )(arr) + __cil_tmp5;
+#line 11
+  __cil_tmp7 = (*((int *)__cil_tmp6));
+#line 11
+  __cil_tmp8 = (unsigned int )__cil_tmp7;
+#line 11
+  __cil_tmp9 = & local;
+#line 11
+  __cil_tmp10 = (*__cil_tmp9);
+#line 11
+  __cil_tmp11 = (unsigned int )__cil_tmp10;
+#line 11
+  __cil_tmp12 = __cil_tmp11 + 8U;
+#line 11
+  __cil_tmp13 = __cil_tmp12 + __cil_tmp8;
+#line 11
+  m_a15 = (int )__cil_tmp13;
+#line 12
+  return (m_a15);
+}
+}
diff --git a/cil/doc/examples/ex3.txt b/cil/doc/examples/ex3.txt
new file mode 100644
index 000000000..2ca8ac953
--- /dev/null
+++ b/cil/doc/examples/ex3.txt
@@ -0,0 +1,20 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex3.c"
+union baz {
+   int x1 ;
+   double x2 ;
+};
+#line 1 "cilcode.tmp/ex3.c"
+struct bar {
+   union baz u1 ;
+   int y ;
+};
+#line 1 "cilcode.tmp/ex3.c"
+struct foo {
+   struct bar s1 ;
+   int z ;
+};
+#line 1 "cilcode.tmp/ex3.c"
+struct foo f  ;
diff --git a/cil/doc/examples/ex30.txt b/cil/doc/examples/ex30.txt
new file mode 100644
index 000000000..729cfb066
--- /dev/null
+++ b/cil/doc/examples/ex30.txt
@@ -0,0 +1,12 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex30.c"
+int main(void) 
+{ int x ;
+
+  {
+#line 2
+  return (x == (x != 0));
+}
+}
diff --git a/cil/doc/examples/ex31.txt b/cil/doc/examples/ex31.txt
new file mode 100644
index 000000000..ab7d4716f
--- /dev/null
+++ b/cil/doc/examples/ex31.txt
@@ -0,0 +1,12 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex31.c"
+int main(void) 
+{ 
+
+  {
+#line 1
+  return ((int )((1U - sizeof(int )) >> 32));
+}
+}
diff --git a/cil/doc/examples/ex32.txt b/cil/doc/examples/ex32.txt
new file mode 100644
index 000000000..f2b6b5b1e
--- /dev/null
+++ b/cil/doc/examples/ex32.txt
@@ -0,0 +1,16 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex32.c"
+int x  =    5;
+#line 2 "cilcode.tmp/ex32.c"
+int f(void) 
+{ int x___0 ;
+
+  {
+#line 3
+  x___0 = 3;
+#line 6
+  return (x);
+}
+}
diff --git a/cil/doc/examples/ex33.txt b/cil/doc/examples/ex33.txt
new file mode 100644
index 000000000..f73178f97
--- /dev/null
+++ b/cil/doc/examples/ex33.txt
@@ -0,0 +1,24 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex33.c"
+int (*pf)(void)  ;
+#line 2 "cilcode.tmp/ex33.c"
+int f(void) 
+{ 
+
+  {
+#line 4
+  pf = & f;
+#line 5
+  pf = & f;
+#line 6
+  ((*pf))();
+#line 7
+  ((*pf))();
+#line 8
+  f();
+#line 9
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex34.txt b/cil/doc/examples/ex34.txt
new file mode 100644
index 000000000..494ca916d
--- /dev/null
+++ b/cil/doc/examples/ex34.txt
@@ -0,0 +1,15 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex34.c"
+struct __anonstruct_nested_2 {
+   int y ;
+   int z ;
+};
+#line 1 "cilcode.tmp/ex34.c"
+struct __anonstruct_i_1 {
+   int x ;
+   struct __anonstruct_nested_2 nested ;
+};
+#line 1 "cilcode.tmp/ex34.c"
+struct __anonstruct_i_1 i  =    {1, {2, 6}};
diff --git a/cil/doc/examples/ex35.txt b/cil/doc/examples/ex35.txt
new file mode 100644
index 000000000..1af7447c7
--- /dev/null
+++ b/cil/doc/examples/ex35.txt
@@ -0,0 +1,32 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex35.c"
+struct __anonstruct_T1_1 {
+   char *key ;
+   char *value ;
+};
+#line 1 "cilcode.tmp/ex35.c"
+typedef struct __anonstruct_T1_1 T1;
+#line 7 "cilcode.tmp/ex35.c"
+struct __anonstruct_T3_2 {
+   long type ;
+   char *value ;
+};
+#line 7 "cilcode.tmp/ex35.c"
+typedef struct __anonstruct_T3_2 T3;
+#line 13 "cilcode.tmp/ex35.c"
+struct __anonstruct_T3_2 __constr_expr_0  =    {1L, (char *)1};
+#line 13 "cilcode.tmp/ex35.c"
+T1 a[1]  = {      {(char *)"", (char *)(& __constr_expr_0)}};
+#line 20 "cilcode.tmp/ex35.c"
+int main(void) 
+{ T3 *pt3 ;
+
+  {
+#line 21
+  pt3 = (T3 *)a[0].value;
+#line 22
+  return ((int )pt3->value);
+}
+}
diff --git a/cil/doc/examples/ex36.txt b/cil/doc/examples/ex36.txt
new file mode 100644
index 000000000..adbcdaaa8
--- /dev/null
+++ b/cil/doc/examples/ex36.txt
@@ -0,0 +1,20 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex36.c"
+int main(void) 
+{ int __constr_expr_0[4] ;
+
+  {
+#line 1
+  __constr_expr_0[0] = 1;
+#line 1
+  __constr_expr_0[1] = 2;
+#line 1
+  __constr_expr_0[2] = 3;
+#line 1
+  __constr_expr_0[3] = 4;
+#line 1
+  return (__constr_expr_0[1]);
+}
+}
diff --git a/cil/doc/examples/ex37.txt b/cil/doc/examples/ex37.txt
new file mode 100644
index 000000000..00d6ca44d
--- /dev/null
+++ b/cil/doc/examples/ex37.txt
@@ -0,0 +1,14 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 3 "cilcode.tmp/ex37.c"
+int foo(void) ;
+#line 1 "cilcode.tmp/ex37.c"
+int foo(void) 
+{ 
+
+  {
+#line 5
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex38.txt b/cil/doc/examples/ex38.txt
new file mode 100644
index 000000000..706e13d92
--- /dev/null
+++ b/cil/doc/examples/ex38.txt
@@ -0,0 +1,12 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex38.c"
+unsigned long foo(void) 
+{ 
+
+  {
+#line 2
+  return (536870911UL);
+}
+}
diff --git a/cil/doc/examples/ex39.txt b/cil/doc/examples/ex39.txt
new file mode 100644
index 000000000..2c8c25f93
--- /dev/null
+++ b/cil/doc/examples/ex39.txt
@@ -0,0 +1,25 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex39.c"
+int main(void) 
+{ int x ;
+  int y ;
+  int z ;
+  int *tmp ;
+
+  {
+#line 2
+  if (x) {
+#line 2
+    tmp = & y;
+  } else {
+#line 2
+    tmp = & z;
+  }
+#line 2
+  x ++;
+#line 2
+  return (tmp - & x);
+}
+}
diff --git a/cil/doc/examples/ex4.txt b/cil/doc/examples/ex4.txt
new file mode 100644
index 000000000..00a22d31a
--- /dev/null
+++ b/cil/doc/examples/ex4.txt
@@ -0,0 +1,16 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 2 "cilcode.tmp/ex4.c"
+struct foo {
+   int x ;
+};
+#line 1 "cilcode.tmp/ex4.c"
+int main(void) 
+{ struct foo foo ;
+
+  {
+#line 8
+  return (foo.x);
+}
+}
diff --git a/cil/doc/examples/ex40.txt b/cil/doc/examples/ex40.txt
new file mode 100644
index 000000000..c41496b3d
--- /dev/null
+++ b/cil/doc/examples/ex40.txt
@@ -0,0 +1,20 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex40.c"
+extern int f() ;
+#line 1 "cilcode.tmp/ex40.c"
+int main(void) 
+{ int tmp___0 ;
+
+  {
+#line 2
+  tmp___0 = f();
+  if (! tmp___0) {
+#line 2
+    tmp___0 = -1;
+  }
+#line 2
+  return (tmp___0);
+}
+}
diff --git a/cil/doc/examples/ex41.txt b/cil/doc/examples/ex41.txt
new file mode 100644
index 000000000..f1196f39f
--- /dev/null
+++ b/cil/doc/examples/ex41.txt
@@ -0,0 +1,69 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex41.c"
+static void *jtab[2]  ;
+#line 4
+static int doit(int x ) ;
+#line 4 "cilcode.tmp/ex41.c"
+static int jtab_init  =    0;
+#line 2 "cilcode.tmp/ex41.c"
+static int doit(int x ) 
+{ unsigned int __compgoto ;
+
+  {
+#line 5
+  if (! jtab_init) {
+#line 6
+    jtab[0] = (void *)0;
+#line 7
+    jtab[1] = (void *)1;
+#line 8
+    jtab_init = 1;
+  }
+#line 10
+  __compgoto = (unsigned int )jtab[x];
+#line 10
+  switch (__compgoto) {
+  case 1: 
+  goto lbl2;
+  case 0: 
+  goto lbl1;
+  default: 
+#line 10
+  (*((int *)0)) = 0;
+  }
+  lbl1: 
+#line 12
+  return (0);
+  lbl2: 
+#line 14
+  return (1);
+}
+}
+#line 18
+extern int ( /* missing proto */  exit)() ;
+#line 17 "cilcode.tmp/ex41.c"
+int main(void) 
+{ int tmp ;
+  int tmp___0 ;
+
+  {
+#line 18
+  tmp = doit(0);
+#line 18
+  if (tmp != 0) {
+#line 18
+    exit(1);
+  }
+#line 19
+  tmp___0 = doit(1);
+#line 19
+  if (tmp___0 != 1) {
+#line 19
+    exit(1);
+  }
+#line 20
+  exit(0);
+}
+}
diff --git a/cil/doc/examples/ex42.txt b/cil/doc/examples/ex42.txt
new file mode 100644
index 000000000..b0f40b88a
--- /dev/null
+++ b/cil/doc/examples/ex42.txt
@@ -0,0 +1,22 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex42.c"
+int main(void) 
+{ int tmp ;
+
+  {
+  goto L;
+#line 1
+  if (0) {
+    L: 
+#line 1
+    tmp = 1;
+  } else {
+#line 1
+    tmp = 0;
+  }
+#line 1
+  return (tmp);
+}
+}
diff --git a/cil/doc/examples/ex43.txt b/cil/doc/examples/ex43.txt
new file mode 100644
index 000000000..4104f7975
--- /dev/null
+++ b/cil/doc/examples/ex43.txt
@@ -0,0 +1,46 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex43.c"
+__inline static int foo__extinline(void) 
+{ 
+
+  {
+#line 1
+  return (1);
+}
+}
+#line 2 "cilcode.tmp/ex43.c"
+int firstuse(void) 
+{ int tmp ;
+
+  {
+#line 2
+  tmp = foo__extinline();
+#line 2
+  return (tmp);
+}
+}
+#line 5 "cilcode.tmp/ex43.c"
+int foo(void) 
+{ 
+
+  {
+#line 5
+  return (2);
+}
+}
+#line 7 "cilcode.tmp/ex43.c"
+int main(void) 
+{ int tmp ;
+  int tmp___0 ;
+
+  {
+#line 8
+  tmp = foo();
+#line 8
+  tmp___0 = firstuse();
+#line 8
+  return (tmp + tmp___0);
+}
+}
diff --git a/cil/doc/examples/ex44.txt b/cil/doc/examples/ex44.txt
new file mode 100644
index 000000000..06f83ba3e
--- /dev/null
+++ b/cil/doc/examples/ex44.txt
@@ -0,0 +1,31 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex44.c"
+struct s {
+   int i1 ;
+   int i2 ;
+};
+#line 1 "cilcode.tmp/ex44.c"
+union u {
+   int i ;
+   struct s s ;
+};
+#line 8 "cilcode.tmp/ex44.c"
+union u x  =    {6};
+#line 10 "cilcode.tmp/ex44.c"
+int main(void) 
+{ struct s y ;
+  union u z ;
+
+  {
+#line 11
+  y.i1 = 1;
+#line 11
+  y.i2 = 2;
+#line 12
+  z.s = y;
+#line 13
+  return (0);
+}
+}
diff --git a/cil/doc/examples/ex45.txt b/cil/doc/examples/ex45.txt
new file mode 100644
index 000000000..aaafca3a2
--- /dev/null
+++ b/cil/doc/examples/ex45.txt
@@ -0,0 +1,11 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex45.c"
+char i8  ;
+#line 2 "cilcode.tmp/ex45.c"
+short i16  ;
+#line 3 "cilcode.tmp/ex45.c"
+int i32  ;
+#line 4 "cilcode.tmp/ex45.c"
+long long i64  ;
diff --git a/cil/doc/examples/ex46.txt b/cil/doc/examples/ex46.txt
new file mode 100644
index 000000000..1f87ec2f7
--- /dev/null
+++ b/cil/doc/examples/ex46.txt
@@ -0,0 +1,23 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex46.c"
+static int bar(int x , char y ) 
+{ 
+
+  {
+#line 2
+  return (x + (int )y);
+}
+}
+#line 6 "cilcode.tmp/ex46.c"
+int foo(int x , char y ) 
+{ int tmp ;
+
+  {
+#line 6
+  tmp = bar(x, y);
+#line 6
+  return (tmp);
+}
+}
diff --git a/cil/doc/examples/ex47.txt b/cil/doc/examples/ex47.txt
new file mode 100644
index 000000000..cc5c3067b
--- /dev/null
+++ b/cil/doc/examples/ex47.txt
@@ -0,0 +1,28 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex47.c"
+struct __anonstruct____missing_field_name_3 {
+   int u ;
+   int v ;
+};
+#line 1 "cilcode.tmp/ex47.c"
+struct __anonstruct____missing_field_name_2 {
+   int y ;
+   int z ;
+   struct __anonstruct____missing_field_name_3 __annonCompField1 ;
+};
+#line 1 "cilcode.tmp/ex47.c"
+struct __anonstruct_a_1 {
+   int x ;
+   struct __anonstruct____missing_field_name_2 __annonCompField2 ;
+};
+#line 1 "cilcode.tmp/ex47.c"
+int main(void) 
+{ struct __anonstruct_a_1 a ;
+
+  {
+#line 10
+  return ((((a.x + a.__annonCompField2.y) + a.__annonCompField2.z) + a.__annonCompField2.__annonCompField1.u) + a.__annonCompField2.__annonCompField1.v);
+}
+}
diff --git a/cil/doc/examples/ex5.txt b/cil/doc/examples/ex5.txt
new file mode 100644
index 000000000..d750bb59a
--- /dev/null
+++ b/cil/doc/examples/ex5.txt
@@ -0,0 +1,27 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex5.c"
+int f(double x ) ;
+#line 3
+int g(double x ) ;
+#line 2 "cilcode.tmp/ex5.c"
+int f(double x ) 
+{ int tmp ;
+
+  {
+#line 3
+  tmp = g(x);
+#line 3
+  return (tmp);
+}
+}
+#line 5 "cilcode.tmp/ex5.c"
+int g(double x ) 
+{ 
+
+  {
+#line 6
+  return ((int )x);
+}
+}
diff --git a/cil/doc/examples/ex6.txt b/cil/doc/examples/ex6.txt
new file mode 100644
index 000000000..c33eb9e31
--- /dev/null
+++ b/cil/doc/examples/ex6.txt
@@ -0,0 +1,7 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex6.c"
+int a1[3]  = {      1,      2,      3};
+#line 2 "cilcode.tmp/ex6.c"
+int a2[8]  ;
diff --git a/cil/doc/examples/ex7.txt b/cil/doc/examples/ex7.txt
new file mode 100644
index 000000000..55434c709
--- /dev/null
+++ b/cil/doc/examples/ex7.txt
@@ -0,0 +1,22 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 2 "cilcode.tmp/ex7.c"
+enum __anonenum_x_1 {
+    FIVE = 5,
+    SIX = 6,
+    SEVEN = 7,
+    FOUR = 4,
+    EIGHT = 8
+} ;
+#line 1 "cilcode.tmp/ex7.c"
+int main(void) 
+{ enum __anonenum_x_1 x ;
+
+  {
+#line 2
+  x = 5;
+#line 8
+  return ((int )x);
+}
+}
diff --git a/cil/doc/examples/ex8.txt b/cil/doc/examples/ex8.txt
new file mode 100644
index 000000000..323a41e99
--- /dev/null
+++ b/cil/doc/examples/ex8.txt
@@ -0,0 +1,13 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 2 "cilcode.tmp/ex8.c"
+struct foo {
+   int x ;
+   int y ;
+};
+#line 1 "cilcode.tmp/ex8.c"
+int a1[5]  = {      1,      2,      3,      0, 
+        0};
+#line 2 "cilcode.tmp/ex8.c"
+struct foo s1  =    {4, 0};
diff --git a/cil/doc/examples/ex9.txt b/cil/doc/examples/ex9.txt
new file mode 100644
index 000000000..22e976cac
--- /dev/null
+++ b/cil/doc/examples/ex9.txt
@@ -0,0 +1,16 @@
+/* Generated by CIL v. 1.3.5 */
+/* print_CIL_Input is true */
+
+#line 1 "cilcode.tmp/ex9.c"
+struct inner {
+   int z ;
+};
+#line 1 "cilcode.tmp/ex9.c"
+struct foo {
+   int x ;
+   int y ;
+   int a[5] ;
+   struct inner inner ;
+};
+#line 1 "cilcode.tmp/ex9.c"
+struct foo s  =    {0, 8, {0, 5, 5, 4, 0}, {3}};
diff --git a/cil/doc/ext.html b/cil/doc/ext.html
new file mode 100644
index 000000000..532e22588
--- /dev/null
+++ b/cil/doc/ext.html
@@ -0,0 +1,506 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Library of CIL Modules
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil007.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil009.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc17">8</A>&nbsp;&nbsp;Library of CIL Modules</H2> <A NAME="sec-Extension"></A><BR>
+<BR>
+We are developing a suite of modules that use CIL for program analyses and
+transformations that we have found useful. You can use these modules directly
+on your code, or generally as inspiration for writing similar modules. A
+particularly big and complex application written on top of CIL is CCured
+(<A HREF="../ccured/index.html"><TT>../ccured/index.html</TT></A>).<BR>
+<BR>
+<A NAME="toc9"></A>
+<H3 CLASS="subsection"><A NAME="htoc18">8.1</A>&nbsp;&nbsp;Control-Flow Graphs</H3> <A NAME="sec-cfg"></A>
+The <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> datatype includes fields for intraprocedural
+control-flow information: the predecessor and successor statements of
+the current statement. This information is not computed by default.
+If you want to use the control-flow graph, or any of the extensions in
+this section that require it, you have to explicitly ask CIL to
+compute the CFG.<BR>
+<BR>
+
+<H4 CLASS="subsubsection"><A NAME="htoc19">8.1.1</A>&nbsp;&nbsp;The CFG module (new in CIL 1.3.5)</H4>
+The best way to compute the CFG is with the CFG module. Just invoke
+<A HREF="api/Cfg.html#VALcomputeFileCFG">Cfg.computeFileCFG</A> on your file. The <A HREF="api/Cfg.html">Cfg</A> API
+describes the rest of actions you can take with this module, including
+computing the CFG for one function at a time, or printing the CFG in
+<TT>dot</TT> form.<BR>
+<BR>
+
+<H4 CLASS="subsubsection"><A NAME="htoc20">8.1.2</A>&nbsp;&nbsp;Simplified control flow</H4>
+CIL can reduce high-level C control-flow constructs like <TT>switch</TT> and
+<TT>continue</TT> to lower-level <TT>goto</TT>s. This completely eliminates some
+possible classes of statements from the program and may make the result
+easier to analyze (e.g., it simplifies data-flow analysis).<BR>
+<BR>
+You can invoke this transformation on the command line with
+<TT>--domakeCFG</TT> or programatically with <A HREF="api/Cil.html#VALprepareCFG">Cil.prepareCFG</A>.
+After calling Cil.prepareCFG, you can use <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>
+to compute the CFG information and find the successor and predecessor
+of each statement.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --domakeCFG</TT>
+transforms the following code (note the fall-through in case 1): 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo (int predicate) {
+    int x = 0;
+    switch (predicate) {
+      case 0: return 111;
+      case 1: x = x + 1;
+      case 2: return (x+3);
+      case 3: break;
+      default: return 222;
+    }
+    return 333;
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex23.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc10"></A>
+<H3 CLASS="subsection"><A NAME="htoc21">8.2</A>&nbsp;&nbsp;Data flow analysis framework</H3>
+The <A HREF="api/Dataflow.html">Dataflow</A> module (click for the ocamldoc) contains a
+parameterized framework for forward and backward data flow
+analyses. You provide the transfer functions and this module does the
+analysis. You must compute control-flow information (Section&nbsp;<A HREF="#sec-cfg">8.1</A>)
+before invoking the Dataflow module.<BR>
+<BR>
+<A NAME="toc11"></A>
+<H3 CLASS="subsection"><A NAME="htoc22">8.3</A>&nbsp;&nbsp;Dominators</H3> 
+The module <A HREF="api/Dominators.html">Dominators</A> contains the computation of immediate
+ dominators. It uses the <A HREF="api/Dataflow.html">Dataflow</A> module. <BR>
+<BR>
+<A NAME="toc12"></A>
+<H3 CLASS="subsection"><A NAME="htoc23">8.4</A>&nbsp;&nbsp;Points-to Analysis</H3>
+The module <TT>ptranal.ml</TT> contains two interprocedural points-to
+analyses for CIL: <TT>Olf</TT> and <TT>Golf</TT>. <TT>Olf</TT> is the default.
+(Switching from <TT>olf.ml</TT> to <TT>golf.ml</TT> requires a change in
+<TT>Ptranal</TT> and a recompiling <TT>cilly</TT>.)<BR>
+<BR>
+The analyses have the following characteristics:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+Not based on C types (inferred pointer relationships are sound
+ despite most kinds of C casts)
+<LI CLASS="li-itemize">One level of subtyping 
+<LI CLASS="li-itemize">One level of context sensitivity (Golf only)
+<LI CLASS="li-itemize">Monomorphic type structures
+<LI CLASS="li-itemize">Field insensitive (fields of structs are conflated)
+<LI CLASS="li-itemize">Demand-driven (points-to queries are solved on demand)
+<LI CLASS="li-itemize">Handle function pointers
+</UL>
+The analysis itself is factored into two components: <TT>Ptranal</TT>,
+which walks over the CIL file and generates constraints, and <TT>Olf</TT>
+or <TT>Golf</TT>, which solve the constraints. The analysis is invoked
+with the function <TT>Ptranal.analyze_file: Cil.file -&gt;
+ unit</TT>. This function builds the points-to graph for the CIL file
+and stores it internally. There is currently no facility for clearing
+internal state, so <TT>Ptranal.analyze_file</TT> should only be called
+once.<BR>
+<BR>
+The constructed points-to graph supports several kinds of queries,
+including alias queries (may two expressions be aliased?) and
+points-to queries (to what set of locations may an expression point?).<BR>
+<BR>
+The main interface with the alias analysis is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.may_alias: Cil.exp -&gt; Cil.exp -&gt; bool</TT>. If
+ <TT>true</TT>, the two expressions may have the same value.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_lval: Cil.lval -&gt; (Cil.varinfo
+ list)</TT>. Returns the list of variables to which the given
+ left-hand value may point.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_exp: Cil.exp -&gt; (Cil.varinfo list)</TT>.
+ Returns the list of variables to which the given expression may
+ point.
+<LI CLASS="li-itemize"><TT>Ptranal.resolve_funptr: Cil.exp -&gt; (Cil.fundec
+ list)</TT>. Returns the list of functions to which the given
+ expression may point.
+</UL>
+The precision of the analysis can be customized by changing the values
+of several flags:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.no_sub: bool ref</TT>.
+ If <TT>true</TT>, subtyping is disabled. Associated commandline option:
+ <B>--ptr_unify</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.analyze_mono: bool ref</TT>.
+ (Golf only) If <TT>true</TT>, context sensitivity is disabled and the
+ analysis is effectively monomorphic. Commandline option:
+ <B>--ptr_mono</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.smart_aliases: bool ref</TT>.
+ (Golf only) If <TT>true</TT>, &#8220;smart&#8221; disambiguation of aliases is
+ enabled. Otherwise, aliases are computed by intersecting points-to
+ sets. This is an experimental feature.
+<LI CLASS="li-itemize"><TT>Ptranal.model_strings: bool ref</TT>.
+ Make the alias analysis model string constants by treating them as
+ pointers to chars. Commandline option: <B>--ptr_model_strings</B>
+<LI CLASS="li-itemize"><TT>Ptranal.conservative_undefineds: bool ref</TT>.
+ Make the most pessimistic assumptions about globals if an undefined
+ function is present. Such a function can write to every global
+ variable. Commandline option: <B>--ptr_conservative</B>
+</UL>
+In practice, the best precision/efficiency tradeoff is achieved by
+setting <TT>Ptranal.no_sub</TT> to <TT>false</TT>, <TT>Ptranal.analyze_mono</TT> to
+<TT>true</TT>, and <TT>Ptranal.smart_aliases</TT> to <TT>false</TT>. These are the
+default values of the flags.<BR>
+<BR>
+There are also a few flags that can be used to inspect or serialize
+the results of the analysis.
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>Ptranal.debug_may_aliases</TT>.
+ Print the may-alias relationship of each pair of expressions in the
+ program. Commandline option: <B>--ptr_may_aliases</B>.
+<LI CLASS="li-itemize"><TT>Ptranal.print_constraints: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print each constraint as it is
+ generated.
+<LI CLASS="li-itemize"><TT>Ptranal.print_types: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print the inferred type of each
+ variable in the program.<BR>
+<BR>
+If <TT>Ptranal.analyze_mono</TT> and <TT>Ptranal.no_sub</TT> are both
+ <TT>true</TT>, this output is sufficient to reconstruct the points-to
+ graph. One nice feature is that there is a pretty printer for
+ recursive types, so the print routine does not loop.
+<LI CLASS="li-itemize"><TT>Ptranal.compute_results: bool ref</TT>.
+ If <TT>true</TT>, the analysis will print out the points-to set of each
+ variable in the program. This will essentially serialize the
+ points-to graph.
+</UL>
+<A NAME="toc13"></A>
+<H3 CLASS="subsection"><A NAME="htoc24">8.5</A>&nbsp;&nbsp;StackGuard</H3>
+The module <TT>heapify.ml</TT> contains a transformation similar to the one
+described in &#8220;StackGuard: Automatic Adaptive Detection and Prevention of
+Buffer-Overflow Attacks&#8221;, <EM>Proceedings of the 7th USENIX Security
+Conference</EM>. In essence it modifies the program to maintain a separate
+stack for return addresses. Even if a buffer overrun attack occurs the
+actual correct return address will be taken from the special stack. <BR>
+<BR>
+Although it does work, this CIL module is provided mainly as an example of
+how to perform a simple source-to-source program analysis and
+transformation. As an optimization only functions that contain a dangerous
+local array make use of the special return address stack. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dostackGuard</TT>
+transforms the following dangerous code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int dangerous() {
+    char array[10];
+    scanf("%s",array); // possible buffer overrun!
+  }
+
+  int main () {
+    return dangerous();
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex24.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc14"></A>
+<H3 CLASS="subsection"><A NAME="htoc25">8.6</A>&nbsp;&nbsp;Heapify</H3>
+The module <TT>heapify.ml</TT> also contains a transformation that moves all
+dangerous local arrays to the heap. This also prevents a number of buffer
+overruns. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --doheapify</TT>
+transforms the following dangerous code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int dangerous() {
+    char array[10];
+    scanf("%s",array); // possible buffer overrun!
+  }
+
+  int main () {
+    return dangerous();
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex25.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc15"></A>
+<H3 CLASS="subsection"><A NAME="htoc26">8.7</A>&nbsp;&nbsp;One Return</H3>
+The module <TT>oneret.ml</TT> contains a transformation the ensures that all
+function bodies have at most one return statement. This simplifies a number
+of analyses by providing a canonical exit-point. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dooneRet</TT>
+transforms the following code: 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo (int predicate) {
+    if (predicate &lt;= 0) {
+      return 1;
+    } else {
+      if (predicate &gt; 5)
+        return 2;
+      return 3;
+    }
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex26.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc16"></A>
+<H3 CLASS="subsection"><A NAME="htoc27">8.8</A>&nbsp;&nbsp;Partial Evaluation and Constant Folding</H3> 
+The <TT>partial.ml</TT> module provides a simple interprocedural partial
+evaluation and constant folding data-flow analysis and transformation. This
+transformation requires the <TT>--domakeCFG</TT> option. <BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --domakeCFG --dopartial</TT>
+transforms the following code (note the eliminated <TT>if</TT> branch and the
+partial optimization of <TT>foo</TT>): 
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int foo(int x, int y) {
+    int unknown;
+    if (unknown)
+      return y+2;     
+    return x+3;      
+  }
+
+  int main () {
+    int a,b,c;
+    a = foo(5,7) + foo(6,7);
+    b = 4;
+    c = b * b;      
+    if (b &gt; c)     
+      return b-c;
+    else
+      return b+c; 
+  }
+</FONT></PRE>
+See the <A HREF="examples/ex27.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc17"></A>
+<H3 CLASS="subsection"><A NAME="htoc28">8.9</A>&nbsp;&nbsp;Reaching Definitions</H3>
+The <TT>reachingdefs.ml</TT> module uses the dataflow framework and CFG
+information to calculate the definitions that reach each
+statement. After computing the CFG (Section&nbsp;<A HREF="#sec-cfg">8.1</A>) and calling
+<TT>computeRDs</TT> on a 
+function declaration, <TT>ReachingDef.stmtStartData</TT> will contain a
+mapping from statement IDs to data about which definitions reach each
+statement. In particular, it is a mapping from statement IDs to a
+triple the first two members of which are used internally. The third
+member is a mapping from variable IDs to Sets of integer options. If
+the set contains <TT>Some(i)</TT>, then the definition of that variable
+with ID <TT>i</TT> reaches that statement. If the set contains <TT>None</TT>,
+then there is a path to that statement on which there is no definition
+of that variable. Also, if the variable ID is unmapped at a
+statement, then no definition of that variable reaches that statement.<BR>
+<BR>
+To summarize, reachingdefs.ml has the following interface:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeRDs</TT> &ndash; Computes reaching definitions. Requires that
+CFG information has already been computed for each statement.
+<LI CLASS="li-itemize"><TT>ReachingDef.stmtStartData</TT> &ndash; contains reaching
+definition data after <TT>computeRDs</TT> is called.
+<LI CLASS="li-itemize"><TT>ReachingDef.defIdStmtHash</TT> &ndash; Contains a mapping
+from definition IDs to the ID of the statement in which
+the definition occurs.
+<LI CLASS="li-itemize"><TT>getRDs</TT> &ndash; Takes a statement ID and returns
+reaching definition data for that statement.
+<LI CLASS="li-itemize"><TT>instrRDs</TT> &ndash; Takes a list of instructions and the
+definitions that reach the first instruction, and for
+each instruction calculates the definitions that reach
+either into or out of that instruction.
+<LI CLASS="li-itemize"><TT>rdVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
+can be extended such that the current reaching definition
+data is available when expressions are visited through
+the <TT>get_cur_iosh</TT> method of the class.
+</UL>
+<A NAME="toc18"></A>
+<H3 CLASS="subsection"><A NAME="htoc29">8.10</A>&nbsp;&nbsp;Available Expressions</H3>
+The <TT>availexps.ml</TT> module uses the dataflow framework and CFG
+information to calculate something similar to a traditional available
+expressions analysis. After <TT>computeAEs</TT> is called following a CFG
+calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>AvailableExps.stmtStartData</TT> will
+contain a mapping
+from statement IDs to data about what expressions are available at
+that statement. The data for each statement is a mapping for each
+variable ID to the whole expression available at that point(in the
+traditional sense) which the variable was last defined to be. So,
+this differs from a traditional available expressions analysis in that
+only whole expressions from a variable definition are considered rather
+than all expressions.<BR>
+<BR>
+The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeAEs</TT> &ndash; Computes available expressions. Requires
+that CFG information has already been comptued for each statement.
+<LI CLASS="li-itemize"><TT>AvailableExps.stmtStartData</TT> &ndash; Contains available
+expressions data for each statement after <TT>computeAEs</TT> has been
+called.
+<LI CLASS="li-itemize"><TT>getAEs</TT> &ndash; Takes a statement ID and returns
+available expression data for that statement.
+<LI CLASS="li-itemize"><TT>instrAEs</TT> &ndash; Takes a list of instructions and
+the availalbe expressions at the first instruction, and
+for each instruction calculates the expressions available
+on entering or exiting each instruction.
+<LI CLASS="li-itemize"><TT>aeVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
+can be extended such that the current available expressions
+data is available when expressions are visited through the
+<TT>get_cur_eh</TT> method of the class.
+</UL>
+<A NAME="toc19"></A>
+<H3 CLASS="subsection"><A NAME="htoc30">8.11</A>&nbsp;&nbsp;Liveness Analysis</H3>
+The <TT>liveness.ml</TT> module uses the dataflow framework and
+CFG information to calculate which variables are live at
+each program point. After <TT>computeLiveness</TT> is called
+following a CFG calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>LiveFlow.stmtStartData</TT> will
+contain a mapping for each statement ID to a set of <TT>varinfo</TT>s
+for varialbes live at that program point.<BR>
+<BR>
+The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>computeLiveness</TT> &ndash; Computes live variables. Requires
+that CFG information has already been computed for each statement.
+<LI CLASS="li-itemize"><TT>LiveFlow.stmtStartData</TT> &ndash; Contains live variable data
+for each statement after <TT>computeLiveness</TT> has been called.
+</UL>
+Also included in this module is a command line interface that
+will cause liveness data to be printed to standard out for
+a particular function or label.
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>&ndash;doliveness</TT> &ndash; Instructs cilly to comptue liveness
+information and to print on standard out the variables live
+at the points specified by <TT>&ndash;live_func</TT> and <TT>live_label</TT>.
+If both are ommitted, then nothing is printed.
+<LI CLASS="li-itemize"><TT>&ndash;live_func</TT> &ndash; The name of the function whose
+liveness data is of interest. If <TT>&ndash;live_label</TT> is ommitted,
+then data for each statement is printed.
+<LI CLASS="li-itemize"><TT>&ndash;live_label</TT> &ndash; The name of the label at which
+the liveness data will be printed.
+</UL>
+<A NAME="toc20"></A>
+<H3 CLASS="subsection"><A NAME="htoc31">8.12</A>&nbsp;&nbsp;Dead Code Elimination</H3>
+The module <TT>deadcodeelim.ml</TT> uses the reaching definitions
+analysis to eliminate assignment instructions whose results
+are not used. The interface is as follows:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>elim_dead_code</TT> &ndash; Performs dead code elimination
+on a function. Requires that CFG information has already
+been computed (Section&nbsp;<A HREF="#sec-cfg">8.1</A>).
+<LI CLASS="li-itemize"><TT>dce</TT> &ndash; Performs dead code elimination on an
+entire file. Requires that CFG information has already
+been computed.
+</UL>
+<A NAME="toc21"></A>
+<H3 CLASS="subsection"><A NAME="htoc32">8.13</A>&nbsp;&nbsp;Simple Memory Operations</H3> 
+The <TT>simplemem.ml</TT> module allows CIL lvalues that contain memory
+accesses to be even futher simplified via the introduction of
+well-typed temporaries. After this transformation all lvalues involve
+at most one memory reference.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dosimpleMem</TT> 
+transforms the following code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int main () {
+    int ***three;
+    int **two;
+    ***three = **two; 
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex28.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc22"></A>
+<H3 CLASS="subsection"><A NAME="htoc33">8.14</A>&nbsp;&nbsp;Simple Three-Address Code</H3> 
+The <TT>simplify.ml</TT> module further reduces the complexity of program
+expressions and gives you a form of three-address code. After this
+transformation all expressions will adhere to the following grammar: 
+<PRE CLASS="verbatim">
+ basic::=
+    Const _ 
+    Addrof(Var v, NoOffset)
+    StartOf(Var v, NoOffset)
+    Lval(Var v, off), where v is a variable whose address is not taken
+                      and off contains only "basic"
+
+ exp::=
+    basic
+    Lval(Mem basic, NoOffset)
+    BinOp(bop, basic, basic)
+    UnOp(uop, basic)
+    CastE(t, basic)
+   
+ lval ::= 
+    Mem basic, NoOffset
+    Var v, off, where v is a variable whose address is not taken and off
+                contains only "basic"
+</PRE>In addition, all <TT>sizeof</TT> and <TT>alignof</TT> forms are turned into
+constants. Accesses to arrays and variables whose address is taken are
+turned into "Mem" accesses. All field and index computations are turned
+into address arithmetic.<BR>
+<BR>
+For a concrete example, you can see how <TT>cilly --dosimplify</TT> 
+transforms the following code:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+  int main() {
+    struct mystruct {
+      int a;
+      int b;
+    } m;
+    int local;
+    int arr[3];
+    int *ptr;
+
+    ptr = &amp;local;
+    m.a = local + sizeof(m) + arr[2];
+    return m.a; 
+  } 
+</FONT></PRE>
+See the <A HREF="examples/ex29.txt">CIL output</A> for this
+code fragment<BR>
+<BR>
+<A NAME="toc23"></A>
+<H3 CLASS="subsection"><A NAME="htoc34">8.15</A>&nbsp;&nbsp;Converting C to C++</H3>
+The module canonicalize.ml performs several transformations to correct
+differences between C and C++, so that the output is (hopefully) valid
+C++ code. This may be incomplete &mdash; certain fixes which are necessary
+for some programs are not yet implemented.<BR>
+<BR>
+Using the <TT>--doCanonicalize</TT> option with CIL will perform the
+following changes to your program:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Any variables that use C++ keywords as identifiers are renamed.
+<LI CLASS="li-enumerate">C allows global variables to have multiple declarations and
+ multiple (equivalent) definitions. This transformation removes
+ all but one declaration and all but one definition.
+<LI CLASS="li-enumerate"><TT>__inline</TT> is #defined to <TT>inline</TT>, and <TT>__restrict</TT> 
+ is #defined to nothing.
+<LI CLASS="li-enumerate">C allows function pointers with no specified arguments to be used on
+ any argument list. To make C++ accept this code, we insert a cast
+ from the function pointer to a type that matches the arguments. Of
+ course, this does nothing to guarantee that the pointer actually has
+ that type.
+<LI CLASS="li-enumerate">Makes casts from int to enum types explicit. (CIL changes enum
+ constants to int constants, but doesn't use a cast.)
+</OL>
+<HR>
+<A HREF="cil007.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil009.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/header.html b/cil/doc/header.html
new file mode 100644
index 000000000..cfedee900
--- /dev/null
+++ b/cil/doc/header.html
@@ -0,0 +1,18 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>CIL Documentation (v. 1.3.5)</title>
+<base target="contents">
+</head>
+
+<body>
+
+<h1 align="center">CIL - Infrastructure for C Program Analysis and Transformation (v. 1.3.5)</h1>
+
+</body>
+
+</html>
diff --git a/cil/doc/index.html b/cil/doc/index.html
new file mode 100644
index 000000000..77ec1606a
--- /dev/null
+++ b/cil/doc/index.html
@@ -0,0 +1,26 @@
+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<base target="main">
+<title>CIL Documentation (v. 1.3.5)</title>
+</head>
+
+<frameset rows="64,*">
+  <frame name="banner" scrolling="auto" noresize target="contents" 
+         src="header.html">
+  <frameset cols="267,*">
+    <frame name="contents" target="main" src="ciltoc.html" scrolling="auto">
+    <frame name="main" src="cil001.html" scrolling="auto">
+  </frameset>
+  <noframes>
+  <body>
+
+  <p>This page uses frames, but your browser doesn't support them.</p>
+
+  </body>
+  </noframes>
+</frameset>
+
+</html>
\ No newline at end of file
diff --git a/cil/doc/merger.html b/cil/doc/merger.html
new file mode 100644
index 000000000..636dd2a85
--- /dev/null
+++ b/cil/doc/merger.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Using the merger
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="cil012.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="patcher.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc39">13</A>&nbsp;&nbsp;Using the merger</H2><A NAME="sec-merger"></A><BR>
+<BR>
+There are many program analyses that are more effective when
+done on the whole program.<BR>
+<BR>
+The merger is a tool that combines all of the C source files in a project
+into a single C file. There are two tasks that a merger must perform:
+<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
+Detect what are all the sources that make a project and with what
+compiler arguments they are compiled.<BR>
+<BR>
+<LI CLASS="li-enumerate">Merge all of the source files into a single file. 
+</OL>
+For the first task the merger impersonates a compiler and a linker (both a
+GCC and a Microsoft Visual C mode are supported) and it expects to be invoked
+(from a build script or a Makefile) on all sources of the project. When
+invoked to compile a source the merger just preprocesses the source and saves
+the result using the name of the requested object file. By preprocessing at
+this time the merger is able to take into account variations in the command
+line arguments that affect preprocessing of different source files.<BR>
+<BR>
+When the merger is invoked to link a number of object files it collects the
+preprocessed sources that were stored with the names of the object files, and
+invokes the merger proper. Note that arguments that affect the compilation or
+linking must be the same for all source files.<BR>
+<BR>
+For the second task, the merger essentially concatenates the preprocessed
+sources with care to rename conflicting file-local declarations (we call this
+process alpha-conversion of a file). The merger also attempts to remove
+duplicate global declarations and definitions. Specifically the following
+actions are taken: 
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+File-scope names (<TT>static</TT> globals, names of types defined with
+<TT>typedef</TT>, and structure/union/enumeration tags) are given new names if they
+conflict with declarations from previously processed sources. The new name is
+formed by appending the suffix <TT>___n</TT>, where <TT>n</TT> is a unique integer
+identifier. Then the new names are applied to their occurrences in the file. <BR>
+<BR>
+<LI CLASS="li-itemize">Non-static declarations and definitions of globals are never renamed.
+But we try to remove duplicate ones. Equality of globals is detected by
+comparing the printed form of the global (ignoring the line number directives)
+after the body has been alpha-converted. This process is intended to remove
+those declarations (e.g. function prototypes) that originate from the same
+include file. Similarly, we try to eliminate duplicate definitions of
+<TT>inline</TT> functions, since these occasionally appear in include files.<BR>
+<BR>
+<LI CLASS="li-itemize">The types of all global declarations with the same name from all files
+are compared for type isomorphism. During this process, the merger detects all
+those isomorphisms between structures and type definitions that are <B>required</B> for the merged program to be legal. Such structure tags and
+typenames are coalesced and given the same name. <BR>
+<BR>
+<LI CLASS="li-itemize">Besides the structure tags and type names that are required to be
+isomorphic, the merger also tries to coalesce definitions of structures and
+types with the same name from different file. However, in this case the merger
+will not give an error if such definitions are not isomorphic; it will just
+use different names for them. <BR>
+<BR>
+<LI CLASS="li-itemize">In rare situations, it can happen that a file-local global in
+encountered first and it is not renamed, only to discover later when
+processing another file that there is an external symbol with the same name.
+In this case, a second pass is made over the merged file to rename the
+file-local symbol. 
+</UL>
+Here is an example of using the merger:<BR>
+<BR>
+The contents of <TT>file1.c</TT> is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct foo; // Forward declaration
+extern struct foo *global;
+</FONT></PRE>
+The contents of <TT>file2.c</TT> is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+struct bar {
+ int x;
+ struct bar *next;
+};
+extern struct bar *global;
+struct foo {
+ int y;
+};
+extern struct foo another;
+void main() {
+}
+</FONT></PRE>
+There are several ways in which one might create an executable from these
+files:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<PRE CLASS="verbatim">
+gcc file1.c file2.c -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ld file1.o file2.o -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ar r libfile2.a file2.o
+gcc file1.o libfile2.a -o a.out
+</PRE><BR>
+<BR>
+<LI CLASS="li-itemize"><PRE CLASS="verbatim">
+gcc -c file1.c -o file1.o
+gcc -c file2.c -o file2.o
+ar r libfile2.a file2.o
+gcc file1.o -lfile2 -o a.out
+</PRE></UL>
+In each of the cases above you must replace all occurrences of <TT>gcc</TT> and
+<TT>ld</TT> with <TT>cilly --merge</TT>, and all occurrences of <TT>ar</TT> with <TT>cilly
+--merge --mode=AR</TT>. It is very important that the <TT>--merge</TT> flag be used
+throughout the build process. If you want to see the merged source file you
+must also pass the <TT>--keepmerged</TT> flag to the linking phase. <BR>
+<BR>
+The result of merging file1.c and file2.c is:
+<PRE CLASS="verbatim"><FONT COLOR=blue>
+// from file1.c
+struct foo; // Forward declaration
+extern struct foo *global;
+
+// from file2.c
+struct foo {
+ int x;
+ struct foo *next;
+};
+struct foo___1 {
+ int y;
+};
+extern struct foo___1 another;
+</FONT></PRE>
+<HR>
+<A HREF="cil012.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="patcher.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/next_motif.gif b/cil/doc/next_motif.gif
new file mode 100644
index 0000000000000000000000000000000000000000..3f84bacfb26ea6a4141ad407ff4fb77954171fea
GIT binary patch
literal 317
zcmZ?wbhEHb6krfw_{abP1q~Da{|AwZ|CALJJaY^3i%L>c6w-?Fa}^>2d=)Zt6Vp?z
z6!KClO7toUav2nVvM@3*Ff-_YG=q$BV0wPX%oqrcNic)NoH!IY7zB6@8}Kj-us9lk
z7$CL+2ZMnG4_ouW1Z2ulL4bpWfr*g;NHKx6GcYhUIw%M*FhEp-DFfU<KmbJ!<R%~h
tih(Er0R{yi0E>ZHARYuTK(sM{cnnYuPzb0WB7s6C9B5!<=3-#51_0IeJqZ8+

literal 0
HcmV?d00001

diff --git a/cil/doc/patcher.html b/cil/doc/patcher.html
new file mode 100644
index 000000000..2c727e233
--- /dev/null
+++ b/cil/doc/patcher.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+            "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+
+
+
+<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
+<META name="GENERATOR" content="hevea 1.08">
+
+<base target="main">
+<script language="JavaScript">
+<!-- Begin
+function loadTop(url) {
+  parent.location.href= url;
+}
+// -->
+</script>
+<LINK rel="stylesheet" type="text/css" href="cil.css">
+<TITLE>
+Using the patcher
+</TITLE>
+</HEAD>
+<BODY >
+<A HREF="merger.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil015.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+<HR>
+
+<H2 CLASS="section"><A NAME="htoc40">14</A>&nbsp;&nbsp;Using the patcher</H2><A NAME="sec-patcher"></A><BR>
+<BR>
+Occasionally we have needed to modify slightly the standard include files.
+So, we developed a simple mechanism that allows us to create modified copies
+of the include files and use them instead of the standard ones. For this
+purpose we specify a patch file and we run a program caller Patcher which
+makes modified copies of include files and applies the patch.<BR>
+<BR>
+The patcher is invoked as follows: 
+<PRE CLASS="verbatim">
+bin/patcher [options]
+
+Options:
+  --help       Prints this help message
+  --verbose    Prints a lot of information about what is being done
+  --mode=xxx   What tool to emulate: 
+                GNUCC     - GNU CC
+                MSVC      - MS VC cl compiler
+
+  --dest=xxx   The destination directory. Will make one if it does not exist
+  --patch=xxx  Patch file (can be specified multiple times)
+  --ppargs=xxx An argument to be passed to the preprocessor (can be specified
+               multiple times)
+
+  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
+  --sfile=xxx  A system-include file to be patched (treated as \#include &lt;xxx&gt;)
+ 
+  --clean       Remove all files in the destination directory
+  --dumpversion Print the version name used for the current compiler
+
+ All of the other arguments are passed to the preprocessor. You should pass
+ enough arguments (e.g., include directories) so that the patcher can find the
+ right include files to be patched.
+</PRE>
+ Based on the given <TT>mode</TT> and the current version of the compiler (which
+the patcher can print when given the <TT>dumpversion</TT> argument) the patcher
+will create a subdirectory of the <TT>dest</TT> directory (say <TT>/usr/home/necula/cil/include</TT>), such as:
+<PRE CLASS="verbatim">
+/usr/home/necula/cil/include/gcc_2.95.3-5
+</PRE>
+ In that file the patcher will copy the modified versions of the include files
+specified with the <TT>ufile</TT> and <TT>sfile</TT> options. Each of these options can
+be specified multiple times. <BR>
+<BR>
+The patch file (specified with the <TT>patch</TT> option) has a format inspired by
+the Unix <TT>patch</TT> tool. The file has the following grammar:
+<PRE CLASS="verbatim">
+&lt;&lt;&lt; flags
+patterns
+===
+replacement
+&gt;&gt;&gt;
+</PRE>
+ The flags are a comma separated, case-sensitive, sequence of keywords or
+keyword = value. The following flags are supported:
+<UL CLASS="itemize"><LI CLASS="li-itemize">
+<TT>file=foo.h</TT> - will only apply the patch on files whose name is
+ <TT>foo.h</TT>. 
+<LI CLASS="li-itemize"><TT>optional</TT> - this means that it is Ok if the current patch does not
+match any of the processed files. 
+<LI CLASS="li-itemize"><TT>group=foo</TT> - will add this patch to the named group. If this is not
+specified then a unique group is created to contain just the current patch.
+When all files specified in the command line have been patched, an error
+message is generated for all groups for whom no member patch was used. We use
+this mechanism to receive notice when the patch triggers are out-dated with
+respect to the new include files. 
+<LI CLASS="li-itemize"><TT>system=sysname</TT> - will only consider this pattern on a given
+operating system. The &#8220;sysname&#8221; is reported by the &#8220;$Ô&#8221; variable in
+Perl, except that Windows is always considered to have sysname
+&#8220;cygwin.&#8221; For Linux use &#8220;linux&#8221; (capitalization matters).
+<LI CLASS="li-itemize"><TT>ateof</TT> - In this case the patterns are ignored and the replacement
+text is placed at the end of the patched file. Use the <TT>file</TT> flag if you
+want to restrict the files in which this replacement is performed. 
+<LI CLASS="li-itemize"><TT>atsof</TT> - The patterns are ignored and the replacement text is placed
+at the start of the patched file. Uf the <TT>file</TT> flag to restrict the
+application of this patch to a certain file. 
+<LI CLASS="li-itemize"><TT>disabled</TT> - Use this flag if you want to disable the pattern.
+</UL>
+The patterns can consist of several groups of lines separated by the <TT>|||</TT>
+marker. Each of these group of lines is a multi-line pattern that if found in
+the file will be replaced with the text given at the end of the block. <BR>
+<BR>
+The matching is space-insensitive.<BR>
+<BR>
+All of the markers <TT>&lt;&lt;&lt;</TT>, <TT>|||</TT>, <TT>===</TT> and <TT>&gt;&gt;&gt;</TT> must appear at the
+beginning of a line but they can be followed by arbitrary text (which is
+ignored).<BR>
+<BR>
+The replacement text can contain the special keyword <TT>@__pattern__@</TT>,
+which is substituted with the pattern that matched. <BR>
+<BR>
+<HR>
+<A HREF="merger.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
+<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
+<A HREF="cil015.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
+</BODY>
+</HTML>
diff --git a/cil/doc/previous_motif.gif b/cil/doc/previous_motif.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8c8a3e6430050e67e2e71dbd1f99fb9caf6176bf
GIT binary patch
literal 317
zcmZ?wbhEHb6krfw_{abP1q~Da{|AwZ|CALJJaY^3i%L>c6w-?Fa}^>2d=)Zt6Vp?z
z6bgz`%k(M=av2nVvM@3*Ff-_YG=q$BV0wPX%oqrcNhmWYv<NtXBp7%O8}K*^upBS|
zF@T6cf#ZOI1P@#D!31Q=Q9*!%fq{t;NU<<AGctf_p!q=109DDDV1Ne*2p}W{fB>iw
rA^>J9009F?7$^Z^BLGMh0|ST;RSz`=t{-8nfkDE721aHs1_o;Y3u!(;

literal 0
HcmV?d00001

diff --git a/cil/install-sh b/cil/install-sh
new file mode 100644
index 000000000..e9de23842
--- /dev/null
+++ b/cil/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd="$cpprog"
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd="$stripprog"
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "install:	no input file specified"
+	exit 1
+else
+	true
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+	
+	if [ -d $dst ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=mkdir
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f $src -o -d $src ]
+	then
+		true
+	else
+		echo "install:  $src does not exist"
+		exit 1
+	fi
+	
+	if [ x"$dst" = x ]
+	then
+		echo "install:	no destination specified"
+		exit 1
+	else
+		true
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d $dst ]
+	then
+		dst="$dst"/`basename $src`
+	else
+		true
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='	
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp="${pathcomp}${1}"
+	shift
+
+	if [ ! -d "${pathcomp}" ] ;
+        then
+		$mkdirprog "${pathcomp}"
+	else
+		true
+	fi
+
+	pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd $dst &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		dstfile=`basename $dst $transformbasename | 
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		true
+	fi
+
+# Make a temp file name in the proper directory.
+
+	dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd $src $dsttmp &&
+
+	trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+	$doit $rmcmd -f $dstdir/$dstfile &&
+	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/cil/lib/Cilly.pm b/cil/lib/Cilly.pm
new file mode 100644
index 000000000..fa7aa53b7
--- /dev/null
+++ b/cil/lib/Cilly.pm
@@ -0,0 +1,2137 @@
+#
+#
+# Copyright (c) 2001-2002, 
+#  George C. Necula    <necula@cs.berkeley.edu>
+#  Scott McPeak        <smcpeak@cs.berkeley.edu>
+#  Wes Weimer          <weimer@cs.berkeley.edu>
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. The names of the contributors may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+
+
+# This module implements a compiler stub that parses the command line
+# arguments of gcc and Microsoft Visual C (along with some arguments for the
+# script itself) and gives hooks into preprocessing, compilation and linking.
+
+
+$::cilbin = 'bin';
+
+package Cilly;
+@ISA = ();
+
+use strict;
+use File::Basename;
+use File::Copy;
+use File::Spec;
+use Data::Dumper;
+use Carp;
+use Text::ParseWords;
+
+use KeptFile;
+use OutputFile;
+use TempFile;
+
+$Cilly::savedSourceExt = "_saved.c";
+
+# Pass to new a list of command arguments
+sub new {
+    my ($proto, @args) = @_;
+
+    my $class = ref($proto) || $proto;
+
+    my $ref =
+    { CFILES => [],    # C input files
+      SFILES => [],    # Assembly language files
+      OFILES => [],    # Other input files
+      IFILES => [],    # Already preprocessed files
+      EARLY_PPARGS => [], # Preprocessor args, first (pre-CIL) pass only
+      PPARGS => [],    # Preprocessor args
+      CCARGS => [],    # Compiler args
+      LINKARGS => [],  # Linker args
+      NATIVECAML => 1, # this causes the native code boxer to be used
+      RELEASELIB => 0, # if true, use the release runtime library (if any)
+      # IDASHI => 1,     # if true, pass "-I-" to gcc's preprocessor
+      IDASHDOT => 1,   # if true, pass "-I." to gcc's preprocessor
+      VERBOSE => 0,    # when true, print extra detail
+      TRACE_COMMANDS => 1, # when true, echo commands being run
+      SEPARATE => ! $::default_is_merge,
+      LIBDIR => [],
+      OPERATION => 'TOEXE', # This is the default for all compilers
+    };
+    my $self = bless $ref, $class;
+
+    if(! @args) {
+        print "No arguments passed\n";
+        $self->printHelp();
+        exit 0;
+    }
+    # Look for the --mode argument first. If not found it is GCC
+    my $mode = $::default_mode;
+    {
+        my @args1 = ();
+        foreach my $arg (@args) {
+            if($arg =~ m|--mode=(.+)$|) {
+                $mode = $1;
+            } else {
+                push @args1, $arg;
+            }
+        }
+        @args = @args1; # These are the argument after we extracted the --mode
+
+    }
+    if(defined $self->{MODENAME} && $self->{MODENAME} ne $mode) {
+        die "Cannot re-specify the compiler";
+    }
+    {
+        my $compiler;
+        if($mode eq "MSVC") {
+            unshift @Cilly::ISA, qw(MSVC);
+            $compiler = MSVC->new($self);
+        } elsif($mode eq "GNUCC") {
+            unshift @Cilly::ISA, qw(GNUCC);
+            $compiler = GNUCC->new($self);
+        } elsif($mode eq "MSLINK") {
+            unshift @Cilly::ISA, qw(MSLINK);
+            $compiler = MSLINK->new($self);
+        } elsif($mode eq "MSLIB") {
+            unshift @Cilly::ISA, qw(MSLIB);
+            $compiler = MSLIB->new($self);
+        } elsif($mode eq "AR") {
+            unshift @Cilly::ISA, qw(AR);
+            $compiler = AR->new($self);
+        } else {
+            die "Don't know about compiler $mode\n";
+        }
+        # Now grab the fields from the compiler and put them inside self
+        my $key;
+        foreach $key (keys %{$compiler}) {
+            $self->{$key} = $compiler->{$key};
+        }
+
+        # For MSVC we have to use --save-temps because otherwise the 
+        # temporary files get deleted somehow before CL gets at them !
+        if($mode ne "GNUCC" && $mode ne "AR") {
+            $self->{SAVE_TEMPS} = '.';
+        }
+    }
+
+    # Scan and process the arguments
+    $self->setDefaultArguments;
+    collectArgumentList($self, @args);
+
+    # sm: if an environment variable is set, then do not merge; this
+    # is intended for use in ./configure scripts, where merging delays
+    # the reporting of errors that the script is expecting
+    if (defined($ENV{"CILLY_NOMERGE"})) {
+      $self->{SEPARATE} = 1;
+      if($self->{VERBOSE}) { print STDERR "Merging disabled by CILLY_NOMERGE\n"; }
+    }
+
+#    print Dumper($self);
+
+    return $self;
+}
+
+# Hook to let subclasses set/override default arguments
+sub setDefaultArguments {
+}
+
+# work through an array of arguments, processing each one
+sub collectArgumentList {
+    my ($self, @args) = @_;
+
+    # Scan and process the arguments
+    while($#args >= 0) {
+        my $arg = $self->fetchNextArg(\@args);
+        
+        if(! defined($arg)) {
+            last;
+        }
+        if($arg eq "") { next; } 
+
+        #print("arg: $arg\n");
+#
+#        my $arg = shift @args; # Grab the next one
+        if(! $self->collectOneArgument($arg, \@args)) {
+            print "Warning: Unknown argument $arg\n";
+            push @{$self->{CCARGS}}, $arg;
+        }
+    }
+}
+
+# Grab the next argument
+sub fetchNextArg {
+    my ($self, $pargs) = @_;
+    return shift @{$pargs};
+}
+
+# Collecting arguments. Take a look at one argument. If we understand it then
+# we return 1. Otherwise we return 0. Might pop some more arguments from pargs.
+sub collectOneArgument {
+    my($self, $arg, $pargs) = @_;
+    my $res;
+    # Maybe it is a compiler option or a source file
+    if($self->compilerArgument($self->{OPTIONS}, $arg, $pargs)) { return 1; }
+
+    if($arg eq "--help" || $arg eq "-help") {
+        $self->printVersion(); 
+        $self->printHelp(); 
+        exit 1;
+    }
+    if($arg eq "--version" || $arg eq "-version") {
+        $self->printVersion(); exit 0;
+    }
+    if($arg eq "--verbose") {
+        $self->{VERBOSE} = 1; return 1;
+    }
+    if($arg eq "--flatten_linker_scripts") {
+        $self->{FLATTEN_LINKER_SCRIPTS} = 1; return 1;
+    }
+    if($arg eq '--nomerge') {
+        $self->{SEPARATE} = 1;
+        return 1;
+    }
+    if($arg eq '--merge') {
+        $self->{SEPARATE} = 0;
+        return 1;
+    }
+    if($arg =~ "--ccargs=(.+)\$") {
+        push @{$self->{CCARGS}}, $1;
+        return 1;
+    }
+    if($arg eq '--trueobj') {
+        $self->{TRUEOBJ} = 1;
+        return 1;
+    }
+    # zf: force curing when linking to a lib
+    if ($arg eq '--truelib') {
+	$self->{TRUELIB} = 1;
+	return 1;
+    }
+    if($arg eq '--keepmerged') {
+        $self->{KEEPMERGED} = 1;
+        return 1;
+    }
+    if($arg eq '--stdoutpp') {
+        $self->{STDOUTPP} = 1;
+        return 1;
+    }
+    if($arg =~ m|--save-temps=(.+)$|) {
+        if(! -d $1) {
+            die "Cannot find directory $1";
+        }
+        $self->{SAVE_TEMPS} = $1;
+        return 1;
+    }
+    if($arg eq '--save-temps') {
+        $self->{SAVE_TEMPS} = '.';
+        return 1;
+    }
+    if($arg =~ m|--leavealone=(.+)$|)  {
+        push @{$self->{LEAVEALONE}}, $1; 
+        return 1;
+    }
+    if($arg =~ m|--includedir=(.+)$|)  {
+        push @{$self->{INCLUDEDIR}}, $1; return 1;
+    }
+    if($arg =~ m|--stages|) {
+        $self->{SHOWSTAGES} = 1;
+        push @{$self->{CILARGS}}, $arg;
+        return 1;
+    }
+    if($arg eq "--bytecode") {
+        $self->{NATIVECAML} = 0; return 1;
+    }
+#     if($arg eq "--no-idashi") {
+#         $self->{IDASHI} = 0; return 1;
+#     }
+    if($arg eq "--no-idashdot") {
+        $self->{IDASHDOT} = 0; return 1;
+    }
+
+    # sm: response file
+    if($arg =~ m|-@(.+)$| ||
+        (($self->{MODENAME} eq "MSVC" ||
+          $self->{MODENAME} eq "MSLINK" ||
+          $self->{MODENAME} eq "MSLIB") && $arg =~ m|@(.+)$|)) {
+        my $fname = $1;         # name of response file
+        &classifyArgDebug("processing response file: $fname\n");
+
+        # read the lines into an array
+        if (!open(RF, "<$fname")) {
+            die("cannot open response file $fname: $!\n");
+        }
+        my @respArgs = ();
+        while(<RF>) {
+            # Drop spaces and empty lines
+            my ($middle) = ($_ =~ m|\s*(\S.*\S)\s*|);
+            if($middle ne "") {
+                # Sometimes we have multiple arguments in one line :-()
+                if($middle =~ m|\s| &&
+                   $middle !~ m|[\"]|) { 
+                      # Contains spaces and no quotes
+                    my @middles = split(/\s+/, $middle);
+                    push @respArgs, @middles;
+                } else {
+                    push @respArgs, $middle;
+                }
+#                print "Arg:$middle\n";
+            }
+        }
+        close(RF) or die;
+
+
+        # Scan and process the arguments
+        collectArgumentList($self, @respArgs);
+
+        #print("done with response file: $fname\n");
+        return 1;      # argument undestood
+    }
+    if($arg eq "-@" || ($self->{MODENAME} eq "MSVC" && $arg eq "@")) {
+        # sm: I didn't implement the case where it takes the next argument
+        # because I wasn't sure how to grab add'l args (none of the
+        # cases above do..)
+        die("For ccured/cilly, please don't separate the -@ from the\n",
+            "response file name.  e.g., use -@", "respfile.\n");
+    }
+
+    # Intercept the --out argument
+    if($arg =~ m|^--out=(\S+)$|) {
+        $self->{CILLY_OUT} = $1;
+        push @{$self->{CILARGS}}, "--out", $1;
+        return 1;
+    }
+    # All other arguments starting with -- are passed to CIL
+    if($arg =~ m|^--|) {
+        # Split the ==
+        if($arg =~ m|^(--\S+)=(.+)$|) {
+            push @{$self->{CILARGS}}, $1, $2; return 1;
+        } else {
+            push @{$self->{CILARGS}}, $arg; return 1;
+        }
+    }
+    return 0;
+}
+
+
+sub printVersion {
+    system ($CilCompiler::compiler, '--version'); 
+}
+
+sub printHelp {
+    my($self) = @_;
+    $self->usage();
+    print <<EOF;
+
+Options:
+  --mode=xxx   What tool to emulate:
+                GNUCC   - GNU gcc
+                AR      - GNU ar
+                MSVC    - MS VC cl compiler
+                MSLINK  - MS VC link linker
+                MSLIB   - MS VC lib linker
+               This option must be the first one! If it is not found there
+               then GNUCC mode is assumed.
+  --help (or -help) Prints this help message.
+  --verbose    Prints a lot of information about what is being done.
+  --save-temps Keep temporary files in the current directory.
+  --save-temps=xxx Keep temporary files in the given directory.
+  
+  --nomerge    Apply CIL separately to each source file as they are compiled. 
+               By default CIL is applied to the whole program during linking.
+  --merge      Apply CIL to the merged program.
+  --keepmerged  Save the merged file. Only useful if --nomerge is not given.
+  --trueobj          Do not write preprocessed sources in .obj/.o files but
+                     create some other files (e.g. foo.o_saved.c).
+  --truelib          When linking to a library (with -r or -i), output real
+                     object files instead of preprocessed sources. This only
+		     works for GCC right now.
+  --leavealone=xxx   Leave alone files whose base name is xxx. This means
+                     they are not merged and not processed with CIL.
+  --includedir=xxx   Adds a new include directory to replace existing ones
+  --bytecode         Invoke the bytecode (as opposed to native code) system
+
+EOF
+#   --no-idashi        Do not use '-I-' with the gcc preprocessor.
+    $self->helpMessage();
+}
+
+# For printing the first line of the help message
+sub usage {
+    my ($self) = @_;
+    print "<No usage is defined>";
+}
+
+# The rest of the help message
+sub helpMessage {
+    my ($self) = @_;
+    print <<EOF;
+Send bugs to necula\@cs.berkeley.edu.
+EOF
+}
+
+
+#
+# Normalize a file name to always use slashes
+#
+sub normalizeFileName {
+    my($f) = @_;
+    $f =~ s|\\|/|g;
+    return $f;
+}
+
+#
+# The basic routines: for ech source file preprocess, compile, then link
+# everything
+#
+#
+
+
+# LINKING into a library (with COMPILATION and PREPROCESSING)
+sub straight_linktolib {
+    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
+    my @sources = ref($psrcs) ? @{$psrcs} : ($psrcs);
+    my @dest = $dest eq "" ? () : ($self->{OUTLIB} . $dest);
+    # Pass the linkargs last because some libraries must be passed after
+    # the sources
+    my @cmd = (@{$self->{LDLIB}}, @dest, @{$ppargs}, @{$ccargs}, @sources, @{$ldargs});
+    return $self->runShell(@cmd);
+}
+
+# Customize the linking into libraries
+sub linktolib {
+    my($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
+    if($self->{VERBOSE}) { print STDERR "Linking into library $dest\n"; }
+
+    # Now collect the files to be merged
+    my ($tomerge, $trueobjs, $ccargs) = 
+        $self->separateTrueObjects($psrcs, $ccargs);
+
+    if($self->{SEPARATE} || @{$tomerge} == 0) {
+        # Not merging. Regular linking.
+
+        return $self->straight_linktolib($psrcs, $dest, 
+                                         $ppargs, $ccargs, $ldargs);
+    }
+    # We are merging. Merge all the files into a single one
+    
+    if(@{$trueobjs} > 0) {
+        # We have some true objects. Save them into an additional file
+        my $trueobjs_file = "$dest" . "_trueobjs";
+        if($self->{VERBOSE}) {
+            print STDERR
+                "Saving additional true object files in $trueobjs_file\n";
+        }
+        open(TRUEOBJS, ">$trueobjs_file") || die "Cannot write $trueobjs_file";
+        foreach my $true (@{$trueobjs}) {
+            my $abs = File::Spec->rel2abs($true);
+            print TRUEOBJS "$abs\n";
+        }
+        close(TRUEOBJS);
+    }
+    if(@{$tomerge} == 1) { # Just copy the file over
+        (!system('cp', '-f', ${$tomerge}[0], $dest))
+            || die "Cannot copy ${$tomerge}[0] to $dest\n";
+        return ;
+    }
+    #
+    # We must do real merging
+    #
+    # Prepare the name of the CIL output file based on dest
+    my ($base, $dir, $ext) = fileparse($dest, "(\\.[^.]+)");
+    
+    # Now prepare the command line for invoking cilly
+    my ($aftercil, @cmd) = $self->MergeCommand ($psrcs, $dir, $base);
+    die unless $cmd[0];
+
+    if($self->{MODENAME} eq "MSVC") {
+        push @cmd, "--MSVC";
+    }
+    if($self->{VERBOSE}) {
+        push @cmd, "--verbose";
+    }
+    if(defined $self->{CILARGS}) {
+        push @cmd, @{$self->{CILARGS}};
+    }
+    # Eliminate duplicates
+    
+    # Add the arguments
+    if(@{$tomerge} > 20) {
+        my $extraFile = "___extra_files";
+        open(TOMERGE, ">$extraFile") || die $!;
+        #FRANJO added the following on February 15th, 2005
+        #REASON: extrafiles was TempFIle=HASH(0x12345678) 
+        # instead of actual filename
+        my @normalized = @{$tomerge} ;
+        $_ = (ref $_ ? $_->filename : $_) foreach @normalized;
+        foreach my $fl (@normalized) {
+            print TOMERGE "$fl\n";
+        }
+        close(TOMERGE);
+        push @cmd, '--extrafiles', $extraFile;
+    } else {
+        push @cmd, @{$tomerge};
+    }
+    push @cmd, "--mergedout", $dest;
+    # Now run cilly
+    return $self->runShell(@cmd);
+}
+
+############
+############ PREPROCESSING
+############
+#
+# All flavors of preprocessing return the destination file
+#
+
+# THIS IS THE ENTRY POINT FOR COMPILING SOURCE FILES
+sub preprocess_compile {
+    my ($self, $src, $dest, $early_ppargs, $ppargs, $ccargs) = @_;
+    &mydebug("preprocess_compile(src=$src, dest=$dest)\n");
+    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
+
+    my ($base, $dir, $ext) = fileparse($src, "\\.[^.]+");
+    if($ext eq ".c" || $ext eq ".cpp" || $ext eq ".cc") {
+        if($self->leaveAlone($src)) {
+            print "Leaving alone $src\n";
+            # We leave this alone. So just compile as usual
+            return $self->straight_compile($src, $dest, $early_ppargs, $ppargs, $ccargs);
+        }
+        my $out    = $self->preprocessOutputFile($src);
+        $out = $self->preprocess($src, $out, 
+                                 [@{$early_ppargs}, @{$ppargs},
+                                  "$self->{DEFARG}CIL=1"]);
+        return $self->compile($out, $dest, $ppargs, $ccargs);
+    }
+    if($ext eq ".i") {
+        return $self->compile($src, $dest, $ppargs, $ccargs);
+    }
+    if($ext eq ".$::cilbin") {
+        return $self->compile($src, $dest, $ppargs, $ccargs);
+    }
+}
+
+# THIS IS THE ENTRY POINT FOR JUST PREPROCESSING A FILE
+sub preprocess {
+    my($self, $src, $dest, $ppargs) = @_;
+    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
+    return $self->preprocess_before_cil($src, $dest, $ppargs);
+}
+
+# Find the name of the preprocessed file before CIL processing
+sub preprocessOutputFile {
+    my($self, $src) = @_;
+    return $self->outputFile($src, 'i');
+}
+
+# Find the name of the preprocessed file after CIL processing
+sub preprocessAfterOutputFile {
+    my($self, $src) = @_;
+    return $self->outputFile($src, 'cil.i');
+}
+
+# When we use CIL we have two separate preprocessing stages. First is the
+# preprocessing before the CIL sees the code and the is the preprocessing
+# after CIL sees the code
+ 
+sub preprocess_before_cil {
+    my ($self, $src, $dest, $ppargs) = @_;
+    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
+    my @args = @{$ppargs};
+
+    # See if we must force some includes
+    if(defined $self->{INCLUDEDIR} && !defined($ENV{"CILLY_NOCURE"})) {
+        # And force the other includes. Put them at the begining
+        if(($self->{MODENAME} eq 'GNUCC') &&
+           # sm: m88k doesn't work if I pass -I.
+           $self->{IDASHDOT}) {
+            unshift @args, "-I.";
+        }
+        if(! defined($self->{VERSION})) {
+            $self->setVersion();
+        }
+        unshift @args,
+            map { my $dir = $_;
+                  $self->{INCARG} . $dir . "/" . $self->{VERSION} }
+            @{$self->{INCLUDEDIR}};
+        #matth: include the main include dir as well as the compiler-specific directory
+        unshift @args,
+            map { my $dir = $_;
+                  $self->{INCARG} . $dir }
+            @{$self->{INCLUDEDIR}};
+        if($self->{MODENAME} eq 'GNUCC') {
+            # sm: this is incompatible with wu-ftpd, but is apparently needed
+            # for apache.. more investigation is needed
+            # update: now when I try it, apache works without -I- also.. but
+            # I'll make this into a switchable flag anyway
+            # matth: this breaks other tests.  Let's try without.
+#             if ($self->{IDASHI}) {
+#                 unshift @args, "-I-";
+#             }
+        }
+    }
+
+    return $self->straight_preprocess($src, $dest, \@args);
+}
+
+# Preprocessing after CIL
+sub preprocess_after_cil {
+    my ($self, $src, $dest, $ppargs) = @_;
+    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
+    return $self->straight_preprocess($src, $dest, $ppargs);
+}
+
+#
+# This is intended to be the true invocation of the underlying preprocessor
+# You should not override this method
+sub straight_preprocess {
+    my ($self, $src, $dest, $ppargs) = @_;
+    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
+    if($self->{VERBOSE}) {
+	my $srcname = ref $src ? $src->filename : $src;
+	print STDERR "Preprocessing $srcname\n";
+    }
+    if($self->{MODENAME} eq "MSVC" ||
+       $self->{MODENAME} eq "MSLINK" ||
+       $self->{MODENAME} eq "MSLIB") {
+        $self->MSVC::msvc_preprocess($src, $dest, $ppargs);
+    } else {
+#        print Dumper($self);
+        my @cmd = (@{$self->{CPP}}, @{$ppargs},
+		   $src, $self->makeOutArguments($self->{OUTCPP}, $dest));
+        $self->runShell(@cmd);
+        
+    }
+    return $dest;
+}
+
+
+#
+#
+#
+# COMPILATION
+#
+#
+
+sub compile {
+    my($self, $src, $dest, $ppargs, $ccargs) = @_;
+    &mydebug("Cilly.compile(src=$src, dest=$dest->{filename})\n");
+    Carp::confess "bad dest: $dest->{filename}" 
+        unless $dest->isa('OutputFile');
+    
+    if($self->{SEPARATE}) {
+        # Now invoke CIL and compile afterwards
+        return $self->applyCilAndCompile([$src], $dest, $ppargs, $ccargs); 
+    }
+    # We are merging
+    # If we are merging then we just save the preprocessed source
+    my ($mtime, $res, $outfile);
+    if(! $self->{TRUEOBJ}) {
+        $outfile = $dest->{filename}; $mtime = 0; $res   = $dest;
+    } else {
+        # Do the real compilation
+        $res = $self->straight_compile($src, $dest, $ppargs, $ccargs);
+        # Now stat the result 
+        my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+            $atime,$mtime_1,$ctime,$blksize,$blocks) = stat($dest->{filename});
+        if(! defined($mtime_1)) {
+            die "Cannot stat the result of compilation $dest->{filename}";
+        }
+        $mtime = $mtime_1;
+        $outfile = $dest->{filename} . $Cilly::savedSourceExt;
+    }
+    my $srcname = ref $src ? $src->filename : $src; 
+    if($self->{VERBOSE}) { 
+        print STDERR "Saving source $srcname into $outfile\n";
+    }
+    open(OUT, ">$outfile") || die "Cannot create $outfile";
+    my $toprintsrc = $srcname; 
+    $toprintsrc =~ s|\\|/|g;
+    print OUT "#pragma merger($mtime,\"$toprintsrc\",\"" . 
+              join(',', @{$ccargs}), "\")\n";
+    open(IN, '<', $srcname) || die "Cannot read $srcname";
+    while(<IN>) {
+        print OUT $_;
+    }
+    close(OUT);
+    close(IN);
+    return $res;
+} 
+
+sub makeOutArguments { 
+    my ($self, $which, $dest) = @_;
+    $dest = $dest->{filename} if ref $dest;
+    if($self->{MODENAME} eq "MSVC" || 
+       $self->{MODENAME} eq "MSLINK" ||
+       $self->{MODENAME} eq "MSLIB") { 
+        # A single argument
+        return ("$which$dest");
+    } else {
+        return ($which, $dest);
+    }
+}
+# This is the actual invocation of the underlying compiler. You should not
+# override this 
+sub straight_compile {
+    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
+    if($self->{VERBOSE}) { 
+        print STDERR 'Compiling ', ref $src ? $src->filename : $src, ' into ', 
+        $dest->filename, "\n"; 
+    }
+    my @dest = 
+        $dest eq "" ? () : $self->makeOutArguments($self->{OUTOBJ}, $dest);
+    my @forcec = @{$self->{FORCECSOURCE}};
+    my @cmd = (@{$self->{CC}}, @{$ppargs}, @{$ccargs},
+	       @dest, @forcec, $src);
+    return $self->runShell(@cmd);
+}
+
+# This is compilation after CIL
+sub compile_cil {
+    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
+    return $self->straight_compile($src, $dest, $ppargs, $ccargs);
+}
+
+
+
+# THIS IS THE ENTRY POINT FOR JUST ASSEMBLING FILES
+sub assemble {
+    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
+    if($self->{VERBOSE}) { print STDERR "Assembling $src\n"; }
+    my @dest = 
+        $dest eq "" ? () : $self->makeOutArguments($self->{OUTOBJ}, $dest);
+    my @cmd = (@{$self->{CC}}, @{$ppargs}, @{$ccargs},
+	       @dest, $src);
+    return $self->runShell(@cmd);
+}
+
+
+
+#
+# This is intended to be the true invocation of the underlying linker
+# You should not override this method
+sub straight_link {
+    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
+    my @sources = ref($psrcs) ? @{$psrcs} : ($psrcs);
+    my @dest = 
+        $dest eq "" ? () : $self->makeOutArguments($self->{OUTEXE}, $dest);
+    # Pass the linkargs last because some libraries must be passed after
+    # the sources
+    my @cmd = (@{$self->{LD}}, @dest,
+	       @{$ppargs}, @{$ccargs}, @sources, @{$ldargs});
+    return $self->runShell(@cmd);
+}
+
+#
+# See if some libraries are actually lists of files
+sub expandLibraries {
+    my ($self) = @_;
+
+    my @tolink = @{$self->{OFILES}};
+
+    # Go through the sources and replace all libraries with the files that
+    # they contain
+    my @tolink1 = ();
+    while($#tolink >= 0) {
+        my $src = shift @tolink;
+#        print "Looking at $src\n";
+        # See if the source is a library. Then maybe we should get instead the 
+        # list of files
+        if($src =~ m|\.$self->{LIBEXT}$| && -f "$src.files") {
+            open(FILES, "<$src.files") || die "Cannot read $src.files";
+            while(<FILES>) {
+                # Put them back in the "tolink" to process them recursively
+                while($_ =~ m|[\r\n]$|) {
+                    chop;
+                }
+                unshift @tolink, $_;
+            }
+            close(FILES);
+            next;
+        }
+        # This is not for us
+        push @tolink1, $src;
+        next;
+    }
+    $self->{OFILES} = \@tolink1;
+}
+
+# Go over a list of object files and separate them into those that are
+# actually sources to be merged, and the true object files
+#
+sub separateTrueObjects {
+    my ($self, $psrcs, $ccargs) = @_;
+
+    my @sources = @{$psrcs};
+#    print "Sources are @sources\n";
+    my @tomerge = ();
+    my @othersources = ();
+
+    my @ccmerged = @{$ccargs};
+    foreach my $src (@sources) {
+        my ($combsrc, $combsrcname, $mtime);
+	my $srcname = ref $src ? $src->filename : $src;
+        if(! $self->{TRUEOBJ}) {
+            # We are using the object file itself to save the sources
+            $combsrcname = $srcname;
+            $combsrc = $src;
+            $mtime = 0;
+        } else {
+            $combsrcname = $srcname . $Cilly::savedSourceExt;
+            $combsrc = $combsrcname;
+            if(-f $combsrcname) { 
+                my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+                    $atime,$mtime_1,$ctime,$blksize,$blocks) = stat($srcname);
+                $mtime = $mtime_1;
+            } else {
+                $mtime = 0;
+            }
+        }
+        # Look inside and see if it is one of the files created by us
+        open(IN, "<$combsrcname") || die "Cannot read $combsrcname";
+        my $fstline = <IN>;
+        close(IN);
+        if($fstline =~ m|CIL|) {
+            goto ToMerge;
+        } 
+        if($fstline =~ m|^\#pragma merger\((\d+),\".*\",\"(.*)\"\)$|) {
+            my $mymtime = $1;
+            # Get the CC flags
+            my @thisccargs = split(/,/, $2);
+            foreach my $arg (@thisccargs) {
+                # print "Looking at $arg\n  ccmerged=@ccmerged\n";
+                if(! grep(/$arg/, @ccmerged)) {
+                    # print " adding it\n";
+                    push @ccmerged, $arg
+                }
+            }
+          ToMerge:
+            if($mymtime == $mtime) { # It is ours
+                # See if we have this already
+                if(! grep { $_ eq $srcname } @tomerge) { # It is ours
+                    push @tomerge, $combsrc; 
+                    # See if there is a a trueobjs file also
+                    my $trueobjs = $combsrcname . "_trueobjs";
+                    if(-f $trueobjs) {
+                        open(TRUEOBJS, "<$trueobjs") 
+                            || die "Cannot read $trueobjs";
+                        while(<TRUEOBJS>) {
+                            chop;
+                            push @othersources, $_;
+                        }
+                        close(TRUEOBJS);
+                    }
+                }
+                next;
+            }
+        }
+        push @othersources, $combsrc;
+    }
+    # If we are merging, turn off "warnings are errors" flag
+    if(grep(/$self->{WARNISERROR}/, @ccmerged)) {
+        @ccmerged = grep(!/$self->{WARNISERROR}/, @ccmerged);
+        print STDERR "Turning off warn-is-error flag $self->{WARNISERROR}\n";
+    }
+
+    return (\@tomerge, \@othersources, \@ccmerged);
+}
+
+
+# Customize the linking
+sub link {
+    my($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
+    my $destname = ref $dest ? $dest->filename : $dest;
+    if($self->{SEPARATE}) {
+        if (!defined($ENV{CILLY_DONT_LINK_AFTER_MERGE})) {
+          if($self->{VERBOSE}) { print STDERR "Linking into $destname\n"; }
+          # Not merging. Regular linking.
+          return $self->link_after_cil($psrcs, $dest, 
+                                       $ppargs, $ccargs, $ldargs);
+        }
+        else {
+          return 0;   # sm: is this value used??
+        }
+    }
+    my $mergedobj = new OutputFile($destname, 
+                                   "${destname}_comb.$self->{OBJEXT}");
+
+    # We must merge
+    if($self->{VERBOSE}) { 
+        print STDERR "Merging saved sources into $mergedobj->{filename} (in process of linking $destname)\n"; 
+    }
+    
+    # Now collect the files to be merged
+
+    my ($tomerge, $trueobjs, $ccargs) = 
+        $self->separateTrueObjects($psrcs, $ccargs);
+
+    if($self->{VERBOSE}) {
+        print STDERR "Will merge the following: ", 
+                         join(' ', @{$tomerge}), "\n";
+        print STDERR "Will just link the genuine object files: ", 
+                         join(' ', @{$trueobjs}), "\n";
+        print STDERR "After merge compile flags: @{$ccargs}\n";
+    }
+    # Check the modification times and see if we can just use the combined
+    # file instead of merging all over again
+    if(@{$tomerge} > 1 && $self->{KEEPMERGED}) {
+        my $canReuse = 1;
+        my $combFile = new OutputFile($destname,
+                                      "${destname}_comb.c");
+        my @tmp = stat($combFile); 
+        my $combFileMtime = $tmp[9] || 0;
+        foreach my $mrg (@{$tomerge}) {
+            my @tmp = stat($mrg); my $mtime = $tmp[9];
+            if($mtime >= $combFileMtime) { goto DoMerge; }
+        }
+        if($self->{VERBOSE}) {
+            print STDERR "Reusing merged file $combFile\n";
+        }
+        $self->applyCilAndCompile([$combFile], $mergedobj, $ppargs, $ccargs); 
+    } else { 
+      DoMerge:
+        $self->applyCilAndCompile($tomerge, $mergedobj, $ppargs, $ccargs);
+    }
+
+    # Put the merged OBJ at the beginning because maybe some of the trueobjs
+    # are libraries which like to be at the end
+    unshift @{$trueobjs}, $mergedobj;
+
+    # And finally link
+    # zf: hack for linking linux stuff
+    if ($self->{TRUELIB}) {
+	my @cmd = (@{$self->{LDLIB}}, ($dest),
+		   @{$ppargs}, @{$ccargs}, @{$trueobjs}, @{$ldargs});
+	return $self->runShell(@cmd);
+    }
+
+    # sm: hack: made this conditional for dsw
+    if (!defined($ENV{CILLY_DONT_LINK_AFTER_MERGE})) {
+      $self->link_after_cil($trueobjs, $dest, $ppargs, $ccargs, $ldargs);
+    }
+
+}
+
+sub applyCil {
+    my ($self, $ppsrc, $dest) = @_;
+    
+    # The input files
+    my @srcs = @{$ppsrc};
+
+    # Now prepare the command line for invoking cilly
+    my ($aftercil, @cmd) = $self->CillyCommand ($ppsrc, $dest);
+    Carp::confess "$self produced bad output file: $aftercil" 
+        unless $aftercil->isa('OutputFile');
+
+    if($self->{MODENAME} eq "MSVC" || 
+       $self->{MODENAME} eq "MSLINK" ||
+       $self->{MODENAME} eq "MSLIB") {
+        push @cmd, '--MSVC';
+    }
+    if($self->{VERBOSE}) {
+        push @cmd, '--verbose';
+    }
+    if(defined $self->{CILARGS}) {
+        push @cmd, @{$self->{CILARGS}};
+    }
+
+    # Add the arguments
+    if(@srcs > 20) {
+        my $extraFile = "___extra_files";
+        open(TOMERGE, ">$extraFile") || die $!;
+        foreach my $fl (@srcs) {
+            my $fname =  ref $fl ? $fl->filename : $fl;
+            print TOMERGE "$fname\n";
+        }
+        close(TOMERGE);
+        push @cmd, '--extrafiles', $extraFile;
+    } else {
+        push @cmd, @srcs;
+    }
+    if(@srcs > 1 && $self->{KEEPMERGED}) {
+	my ($base, $dir, undef) = fileparse($dest->filename, qr{\.[^.]+});
+        push @cmd, '--mergedout', "$dir$base" . '.c';
+    }
+    # Now run cilly
+    $self->runShell(@cmd);
+
+    # Tell the caller where we put the output
+    return $aftercil;
+}
+
+
+sub applyCilAndCompile {
+    my ($self, $ppsrc, $dest, $ppargs, $ccargs) = @_;
+    Carp::confess "$self produced bad destination file: $dest"
+	unless $dest->isa('OutputFile');
+
+    # The input files
+    my @srcs = @{$ppsrc};
+    &mydebug("Cilly.PM.applyCilAndCompile(srcs=[",join(',',@{$ppsrc}),"])\n");
+
+    # Now run cilly
+    my $aftercil = $self->applyCil($ppsrc, $dest);
+    Carp::confess "$self produced bad output file: $aftercil" 
+        unless $aftercil->isa('OutputFile');
+
+    # Now preprocess
+    my $aftercilpp = $self->preprocessAfterOutputFile($aftercil);
+    $self->preprocess_after_cil($aftercil, $aftercilpp, $ppargs);
+
+    if (!defined($ENV{CILLY_DONT_COMPILE_AFTER_MERGE})) {
+      # Now compile
+      return $self->compile_cil($aftercilpp, $dest, $ppargs, $ccargs);
+    }
+}
+
+# Linking after CIL
+sub link_after_cil {
+    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
+    if (!defined($ENV{CILLY_DONT_COMPILE_AFTER_MERGE})) {
+      return $self->straight_link($psrcs, $dest, $ppargs, $ccargs, $ldargs);
+    }
+}
+
+# See if we must merge this one
+sub leaveAlone {
+    my($self, $filename) = @_;
+    my ($base, $dir, $ext) = fileparse($filename, "(\\.[^.]+)");
+    if(grep { $_ eq $base } @{$self->{LEAVEALONE}}) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+
+# DO EVERYTHING
+sub doit {
+    my ($self) = @_;
+    my $file;
+    my $out;
+
+#    print Dumper($self);
+
+    # Maybe we must preprocess only
+    if($self->{OPERATION} eq "TOI" || $self->{OPERATION} eq 'SPECIAL') {
+        # Then we do not do anything
+	my @cmd = (@{$self->{CPP}},
+		   @{$self->{EARLY_PPARGS}},
+		   @{$self->{PPARGS}}, @{$self->{CCARGS}}, 
+		   @{$self->{CFILES}}, @{$self->{SFILES}});
+	push @cmd, @{$self->{OUTARG}} if defined $self->{OUTARG};
+
+        return $self->runShell(@cmd);
+    }
+    # We expand some libraries names. Maybe they just contain some 
+    # new object files
+    $self->expandLibraries();
+
+    # Try to guess whether to run in the separate mode. In that case 
+    # we can go ahead with the compilation, without having to save 
+    # files
+    if(! $self->{SEPARATE} && # Not already separate mode
+       $self->{OPERATION} eq "TOEXE" &&  # We are linking to an executable
+       @{$self->{CFILES}} + @{$self->{IFILES}} <= 1) { # At most one source
+        # If we have object files, we should keep merging if at least one 
+        # object file is a disguised source
+        my $turnOffMerging = 0;
+        if(@{$self->{OFILES}}) {
+            my ($tomerge, $trueobjs, $mergedccargs) = 
+                $self->separateTrueObjects($self->{OFILES}, $self->{CCARGS});
+            $self->{CCARGS} = $mergedccargs;
+            $turnOffMerging = (@{$tomerge} == 0);
+        } else {
+            $turnOffMerging = 1;
+        }
+        if($turnOffMerging) {
+            if($self->{VERBOSE}) {
+                print STDERR
+                    "Turn off merging because the program contains one file\n";
+            }
+            $self->{SEPARATE} = 1; 
+        }
+    }
+
+    # Turn everything into OBJ files
+    my @tolink = ();
+
+    foreach $file (@{$self->{IFILES}}, @{$self->{CFILES}}) {
+        $out = $self->compileOutputFile($file);
+        $self->preprocess_compile($file, $out,
+				  $self->{EARLY_PPARGS},
+                                  $self->{PPARGS}, $self->{CCARGS});
+        push @tolink, $out;
+    }
+    # Now do the assembly language file
+    foreach $file (@{$self->{SFILES}}) {
+        $out = $self->assembleOutputFile($file);
+        $self->assemble($file, $out, $self->{PPARGS}, $self->{CCARGS});
+        push @tolink, $out;
+    }
+    # Now add the original object files. Put them last because libraries like
+    # to be last.
+    push @tolink, @{$self->{OFILES}};
+
+    # See if we must stop after compilation
+    if($self->{OPERATION} eq "TOOBJ") {
+        return;
+    }
+
+    # See if we must create a library only
+    if($self->{OPERATION} eq "TOLIB") {
+	if (!$self->{TRUELIB}) {
+	    # zf: Creating a library containing merged source
+	    $out = $self->linkOutputFile(@tolink);
+	    $self->linktolib(\@tolink,  $out, 
+			     $self->{PPARGS}, $self->{CCARGS}, 
+			     $self->{LINKARGS});
+	    return;
+	} else {
+	    # zf: Linking to a true library. Do real curing.
+	    # Only difference from TOEXE is that we use "partial linking" of the 
+	    # underlying linker
+	    if ($self->{VERBOSE}) {
+	        print STDERR "Linking to a true library!";
+	    }
+	    push @{$self->{CCARGS}}, "-r";
+	    $out = $self->linkOutputFile(@tolink);
+	    $self->link(\@tolink,  $out, 
+			$self->{PPARGS}, $self->{CCARGS}, $self->{LINKARGS});
+	    return;
+	}
+
+    }
+
+    # Now link all of the files into an executable
+    if($self->{OPERATION} eq "TOEXE") {
+        $out = $self->linkOutputFile(@tolink);
+        $self->link(\@tolink,  $out, 
+                    $self->{PPARGS}, $self->{CCARGS}, $self->{LINKARGS});
+        return;
+    }
+
+    die "I don't understand OPERATION:$self->{OPERATION}\n";
+}
+
+sub classifyArgDebug {
+    if(0) { print @_; }
+}
+
+sub mydebug {
+    if(0) { print @_; }
+}
+
+sub compilerArgument {
+    my($self, $options, $arg, $pargs) = @_;
+    &classifyArgDebug("Classifying arg: $arg\n");
+    my $idx = 0;
+    for($idx=0; $idx < $#$options; $idx += 2) {
+        my $key = ${$options}[$idx];
+        my $action = ${$options}[$idx + 1];
+        &classifyArgDebug("Try match with $key\n");
+        if($arg =~ m|^$key|) {
+          &classifyArgDebug(" match with $key\n");
+          my @fullarg = ($arg);
+          my $onemore;
+          if(defined $action->{'ONEMORE'}) {
+              &classifyArgDebug("  expecting one more\n");
+              # Maybe the next arg is attached
+              my $realarg;
+              ($realarg, $onemore) = ($arg =~ m|^($key)(.+)$|);
+              if(! defined $onemore) {
+                  # Grab the next argument
+                  $onemore = $self->fetchNextArg($pargs);
+                  $onemore = &quoteIfNecessary($onemore);
+                  push @fullarg, $onemore;
+              } else {
+                  $onemore = &quoteIfNecessary($onemore);
+              }
+              &classifyArgDebug(" onemore=$onemore\n");
+          }
+          # Now see what action we must perform
+          my $argument_done = 1;
+          if(defined $action->{'RUN'}) {
+              &{$action->{'RUN'}}($self, @fullarg, $onemore, $pargs);
+              $argument_done = 1;
+          }
+          # Quote special SHELL caracters 
+          @fullarg = map { $_ =~ s%([<>;&|])%'$1'%g; $_ } @fullarg;
+          # print "fullarg = ", @fullarg, "\n";
+          if(defined $action->{'TYPE'}) {
+              &classifyArgDebug("  type=$action->{TYPE}\n");
+              if($action->{TYPE} eq 'EARLY_PREPROC') {
+                  push @{$self->{EARLY_PPARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "PREPROC") {
+                  push @{$self->{PPARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq 'SPECIAL') {
+                  push @{$self->{PPARGS}}, @fullarg;
+		  $self->{OPERATION} = 'SPECIAL';
+		  return 1;
+              }
+              elsif($action->{TYPE} eq "CC") {
+                  push @{$self->{CCARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "LINKCC") {
+                  push @{$self->{CCARGS}}, @fullarg; 
+                  push @{$self->{LINKARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "ALLARGS") {
+                  push @{$self->{PPARGS}}, @fullarg;
+                  push @{$self->{CCARGS}}, @fullarg; 
+                  push @{$self->{LINKARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "LINK") {
+                  push @{$self->{LINKARGS}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "CSOURCE") {
+		  OutputFile->protect(@fullarg);
+                  $fullarg[0] = &normalizeFileName($fullarg[0]);
+                  push @{$self->{CFILES}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "ASMSOURCE") {
+		  OutputFile->protect(@fullarg);
+                  $fullarg[0] = &normalizeFileName($fullarg[0]);
+                  push @{$self->{SFILES}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "OSOURCE") {
+		  OutputFile->protect(@fullarg);
+                  $fullarg[0] = &normalizeFileName($fullarg[0]);
+                  push @{$self->{OFILES}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq "ISOURCE") {
+		  OutputFile->protect(@fullarg);
+                  $fullarg[0] = &normalizeFileName($fullarg[0]);
+                  push @{$self->{IFILES}}, @fullarg; return 1;
+              }
+              elsif($action->{TYPE} eq 'OUT') {
+                  if(defined($self->{OUTARG})) {
+                      print "Warning: output file is multiply defined: @{$self->{OUTARG}} and @fullarg\n";
+                  }
+                  $fullarg[0] = &normalizeFileName($fullarg[0]);
+                  $self->{OUTARG} = [@fullarg]; return 1;
+              }
+              print "  Do not understand TYPE\n"; return 1;
+          }
+          if($argument_done) { return 1; }
+          print "Don't know what to do with option $arg\n"; 
+          return 0;
+      }
+   }
+   return 0;
+}
+
+
+sub runShell {
+    my ($self, @cmd) = @_;
+
+    my $msvcFriends = 
+        ($self->{MODENAME} eq "MSVC" || 
+         $self->{MODENAME} eq "MSLINK" || 
+         $self->{MODENAME} eq "MSLIB");
+
+    foreach (@cmd) {
+	$_ = $_->filename if ref;
+        # If we are in MSVC mode then we might have to convert the files
+        # from cygwin names to the actual Windows names
+        if($msvcFriends && $^O eq "cygwin") {
+            my $arg = $_;
+            if ($arg =~ m|^/| && -f $arg) { 
+                my $mname = `cygpath -m $arg`;
+                chop $mname;
+                if($mname ne "") { $_ = $mname; }
+            }
+        }
+    }
+
+    # sm: I want this printed to stderr instead of stdout
+    # because the rest of 'make' output goes there and this
+    # way I can capture to a coherent file
+    # sm: removed conditional on verbose since there's already
+    # so much noise in the output, and this is the *one* piece
+    # of information I *always* end up digging around for..
+    if($self->{TRACE_COMMANDS}) { print STDERR "@cmd\n"; }
+
+    # weimer: let's have a sanity check
+    my $code = system { $cmd[0] } @cmd;
+    if ($code != 0) {
+        # sm: now that we always print, don't echo the command again,
+        # since that makes the output more confusing
+	#die "Possible error with @cmd!\n";
+	$code >>= 8;    # extract exit code portion
+
+        exit $code;
+    } 
+    return $code;
+}
+
+sub quoteIfNecessary {
+    my($arg) = @_;
+    # If it contains spaces or "" then it must be quoted
+    if($arg =~ m|\s| || $arg =~ m|\"|) {
+        return "\'$arg\'";
+    } else {
+        return $arg;
+    }
+}
+
+
+sub cilOutputFile {
+    Carp::croak 'bad argument count' unless @_ == 3;
+    my ($self, $basis, $suffix) = @_;
+
+    if (defined $self->{SAVE_TEMPS}) {
+	return new KeptFile($basis, $suffix, $self->{SAVE_TEMPS});
+    } else {
+	return $self->outputFile($basis, $suffix);
+    }
+}
+
+
+sub outputFile {
+    Carp::confess 'bad argument count' unless @_ == 3;
+    my ($self, $basis, $suffix) = @_;
+
+    if (defined $self->{SAVE_TEMPS}) {
+	return new KeptFile($basis, $suffix,  $self->{SAVE_TEMPS});
+    } else {
+	return new TempFile($basis, $suffix);
+    }
+}
+
+
+###########################################################################
+####
+#### MS CL specific code
+####
+package MSVC;
+
+use strict;
+use File::Basename;
+use Data::Dumper;
+
+# For MSVC we remember which was the first source, because we use that to 
+# determine the name of the output file
+sub setFirstSource {
+    my ($self, $src) = @_;
+    
+    if(! defined ($self->{FIRST_SOURCE})) { 
+        $self->{FIRST_SOURCE} = $src;
+    }
+}
+
+sub new {
+    my ($proto, $stub) = @_;
+    my $class = ref($proto) || $proto;
+    # Create $self
+
+    my $self = 
+    { NAME => 'Microsoft cl compiler',
+      MODENAME => 'MSVC',
+      CC => ['cl', '/nologo', '/D_MSVC', '/c'],
+      CPP => ['cl', '/nologo', '/D_MSVC', '/P'],
+      LD => ['cl', '/nologo', '/D_MSVC'],
+      DEFARG  => "/D",
+      INCARG  => "/I",
+      DEBUGARG => ['/Zi', '/MLd', '/DEBUG'],
+      OPTIMARG => ['/Ox', '/G6'],
+      OBJEXT => "obj",
+      LIBEXT => "lib",   # Library extension (without the .)
+      EXEEXT => ".exe",  # Executable extension (with the .)
+      OUTOBJ => "/Fo",
+      OUTEXE => "/Fe",
+      WARNISERROR => "/WX",
+      FORCECSOURCE => ['/Tc'],
+      LINEPATTERN => "^#line\\s+(\\d+)\\s+\"(.+)\"",
+
+      OPTIONS => 
+# Describe the compiler options as a list of patterns and associated actions. 
+# The patterns are matched in order against the _begining_ of the argument.
+#
+# If the action contains ONEMORE => 1 then the argument is expected to be
+# parameterized by a following word. The word can be attached immediately to
+# the end of the argument or in a separate word. 
+#
+# If the action contains TYPE => "..." then the argument is put into
+# one of several lists, as follows: "PREPROC" in ppargs; "CC" in
+# ccargs; "LINK" in linkargs; "LINKCC" both in ccargs and linkargs;
+# "ALLARGS" in ppargs, ccargs, and linkargs; "CSOURCE" in cfiles;
+# "ASMSOURCE" in sfiles; "OSOURCE" in ofiles; "ISOURCE" in ifiles;
+# "OUT" in outarg.  "SPECIAL" flags indicate that the compiler should
+# be run directly so that it can perform some special action other
+# than generating code (e.g. printing out version or configuration
+# information).
+#
+# If the TYPE is not defined but the RUN => sub { ... } is defined then the
+# given subroutine is invoked with the self, the argument and the (possibly
+# empty) additional word and a pointer to the list of remaining arguments
+#
+          ["^[^/\\-@].*\\.($::cilbin|c|cpp|cc)\$" => 
+           { TYPE => 'CSOURCE',
+             RUN => sub { &MSVC::setFirstSource(@_); } },
+           "[^/].*\\.(asm)\$" => { TYPE => 'ASMSOURCE' },
+           "[^/].*\\.i\$" => { TYPE => 'ISOURCE' },
+           "[^/\\-@]" => { TYPE => "OSOURCE" },
+           "[/\\-]O" => { TYPE => "CC" },
+           "[/\\-][DI]" => { TYPE => "PREPROC"},
+           "[/\\-]EH" => { TYPE => "CC" },
+           "[/\\-]G"  => { TYPE => "CC" },
+           "[/\\-]F[aA]"  => { TYPE => 'CC' },
+           "[/\\-]Fo"     => { TYPE => 'OUT' },
+           "/Fe"   => { TYPE => 'OUT',
+                        RUN => sub { $stub->{OPERATION} = "TOEXE" }},
+           "[/\\-]F[dprR]" => { TYPE => "CC" },
+           "[/\\-]FI" => { TYPE => "PREPROC" },
+           "[/\\-][CXu]" => { TYPE => "PREPROC" },
+           "[/\\-]U" => { ONEMORE => 1, TYPE => "PREPROC" },
+           "[/\\-](E|EP|P)" => { RUN => sub { push @{$stub->{PPARGS}}, $_[1]; 
+                                         $stub->{OPERATION} = "PREPROC"; }},
+           "[/\\-]c" => { RUN => sub { $stub->{OPERATION} = "TOOBJ"; }},
+           "[/\\-](Q|Z|J|nologo|w|W|Zm)" => { TYPE => "CC" },
+           "[/\\-]Y(u|c|d|l|X)" => { TYPE => "CC" },
+           "[/\\-]T(C|P)" => { TYPE => "PREPROC" },
+           "[/\\-]Tc(.+)\$" => 
+                { RUN => sub { 
+                    my $arg = $_[1];
+                    my ($fname) = ($arg =~ m|[/\\-]Tc(.+)$|);
+                    $fname = &normalizeFileName($fname);
+                    push @{$stub->{CFILES}}, $fname;
+                }},
+           "[/\\-]v(d|m)" => { TYPE => "CC" },
+           "[/\\-]F" => { TYPE => "CC" },
+           "[/\\-]M"   => { TYPE => 'LINKCC' },
+           "/link" => { RUN => sub { push @{$stub->{LINKARGS}}, "/link", 
+                                          @{$_[3]};
+                                     @{$_[3]} = (); } },
+           "-cbstring" => { TYPE => "CC" },
+           "/"  => { RUN => 
+                         sub { print "Unimplemented MSVC argument $_[1]\n";}},
+           ],
+      };
+    bless $self, $class;
+    return $self;
+}
+
+
+sub msvc_preprocess {
+    my($self, $src, $dest, $ppargs) = @_;
+    my $res;
+    my $srcname = ref $src ? $src->filename : $src;
+    my ($sbase, $sdir, $sext) = 
+        fileparse($srcname, 
+                  "(\\.c)|(\\.cc)|(\\.cpp)|(\\.i)");
+    # If this is a .cpp file we still hope it is C. Pass the /Tc argument to 
+    # cl to force this file to be interpreted as a C one
+    my @cmd = @{$ppargs};
+
+    if($sext eq ".cpp") {
+        push @cmd, "/Tc";
+    }
+    # MSVC cannot be told where to put the output. But we know that it
+    # puts it in the current directory
+    my $msvcout = "./$sbase.i";
+    if($self->{STDOUTPP}) {
+        @cmd = ('cmd', '/c', 'cl', '/nologo', '/E', ">$msvcout", '/D_MSVC', 
+                @cmd);
+        
+    } else { 
+        @cmd = ('cl', '/nologo', '/P', '/D_MSVC', @cmd);
+    }
+    $res = $self->runShell(@cmd, $srcname);
+    # Check file equivalence by making sure that all elements of the stat
+    # structure are the same, except for the access time.
+    my @st1 = stat $msvcout; $st1[8] = 0;
+    my @st2 = stat $dest->{filename}; $st2[8] = 0;
+    # print Dumper(\@st1, \@st2);
+    if($msvcout ne $dest->{filename}) {
+        while($#st1 >= 0) {
+            if(shift @st1 != shift @st2) {
+#                print "$msvcout is NOT the same as $afterpp\n";
+                if($self->{VERBOSE}) {
+                    print STDERR "Copying $msvcout to $dest->{filename} (MSVC_preprocess)\n";
+                }
+                unlink $dest;
+                File::Copy::copy($msvcout, $dest->filename);
+                unlink $msvcout;
+                return $res;
+            }
+        }
+    }
+    return $res;
+}
+
+sub forceIncludeArg { 
+    my($self, $what) = @_;
+    return "/FI$what";
+}
+
+
+    # MSVC does not understand the extension .i, so we tell it it is a C file
+sub fixupCsources {
+    my (@csources) = @_;
+    my @mod_csources = ();
+    my $src;
+    foreach $src (@csources) {
+        my ($sbase, $sdir, $sext) = fileparse($src, 
+                                              "\\.[^.]+");
+        if($sext eq ".i") {
+            push @mod_csources, "/Tc";
+        }
+        push @mod_csources, $src;
+    }
+    return @mod_csources;
+}
+
+
+# Emit a line # directive
+sub lineDirective {
+    my ($self, $fileName, $lineno) = @_;
+    return "#line $lineno \"$fileName\"\n";
+}
+
+# The name of the output file
+sub compileOutputFile {
+    my($self, $src) = @_;
+
+    die "compileOutputFile: not a C source file: $src\n"
+	unless $src =~ /\.($::cilbin|c|cc|cpp|i|asm)$/;
+
+    Carp::carp ("compileOutputFile: $self->{OPERATION}, $src", 
+                   Dumper($self->{OUTARG})) if 0;
+    if ($self->{OPERATION} eq 'TOOBJ') {
+	if(defined $self->{OUTARG} 
+           && "@{$self->{OUTARG}}" =~ m|[/\\-]Fo(.+)|) {
+            my $dest  = $1;
+            # Perhaps $dest is a directory
+            if(-d $dest) {
+                return new KeptFile($src, $self->{OBJEXT}, $dest);
+            } else {
+                return new OutputFile($src, $1);
+            }
+	} else {
+	    return new KeptFile($src, $self->{OBJEXT}, '.');
+	}
+    } else {
+#        die "compileOutputfile: operation is not TOOBJ";
+	return $self->outputFile($src, $self->{OBJEXT});
+    }
+}
+
+sub assembleOutputFile {
+    my($self, $src) = @_;
+    return $self->compileOutputFile($src);
+}
+
+sub linkOutputFile {
+    my($self, $src) = @_;
+    $src = $src->filename if ref $src;
+    if(defined $self->{OUTARG} && "@{$self->{OUTARG}}" =~ m|/Fe(.+)|) {
+        return $1;
+    }
+    # Use the name of the first source file, in the current directory
+    my ($base, $dir, $ext) = fileparse ($src, "\\.[^.]+");
+    return "./$base.exe";
+}
+
+sub setVersion {
+    my($self) = @_;
+    my $cversion = "";
+    open(VER, "cl 2>&1|") || die "Cannot start Microsoft CL\n";
+    while(<VER>) {
+        if($_ =~ m|Compiler Version (\S+) |) {
+            $cversion = "cl_$1";
+            close(VER);
+            $self->{VERSION} = $cversion;
+            return;
+        }
+    }
+    die "Cannot find Microsoft CL version\n";
+}
+
+########################################################################
+##
+##  MS LINK specific code
+##
+###
+package MSLINK;
+
+use strict;
+
+use File::Basename;
+use Data::Dumper;
+
+sub new {
+    my ($proto, $stub) = @_;
+    my $class = ref($proto) || $proto;
+
+    # Create a MSVC compiler object
+    my $msvc = MSVC->new($stub);
+
+    # Create $self
+
+    my $self = 
+    { NAME => 'Microsoft linker',
+      MODENAME => 'MSLINK',
+      CC => $msvc->{CC},
+      CPP => $msvc->{CPP},
+      LD => ['link'],
+      DEFARG  => $msvc->{DEFARG},
+      INCARG  => $msvc->{INCARG},
+      DEBUGARG => ['/DEBUG'],
+      OPTIMARG => [],
+      LDLIB => ['lib'],
+      OBJEXT => "obj",
+      LIBEXT => "lib",   # Library extension (without the .)
+      EXEEXT => ".exe",  # Executable extension (with the .)
+      OUTOBJ => $msvc->{OUTOBJ},
+      OUTEXE => "-out:", # Keep this form because build.exe looks for it
+      WARNISERROR => "/WX",
+      LINEPATTERN => "", 
+      FORCECSOURCE => $msvc->{FORCECSOURCE},
+
+      MSVC => $msvc,
+
+      OPTIONS => 
+          ["[^/\\-@]" => { TYPE => 'OSOURCE' },
+           "[/\\-](OUT|out):" => { TYPE => 'OUT' },
+           "^((/)|(\\-[^\\-]))"  => { TYPE => 'LINK' },
+           ],
+      };
+    bless $self, $class;
+    return $self;
+}
+
+
+sub forceIncludeArg {  # Same as for CL
+    my($self, $what) = @_;
+    return "/FI$what";
+}
+
+
+
+sub linkOutputFile {
+    my($self, $src) = @_;
+#    print Dumper($self);
+    Carp::confess "Cannot compute the linker output file" 
+        if ! defined $self->{OUTARG};
+
+    if("@{$self->{OUTARG}}" =~ m|.+:(.+)|) {
+        return $1;
+    }
+    die "I do not know what is the link output file\n";
+}
+
+sub setVersion {
+    my($self) = @_;
+    my $cversion = "";
+    open(VER, "link 2>&1|") || die "Cannot start Microsoft LINK\n";
+    while(<VER>) {
+        if($_ =~ m|Linker Version (\S+)|) {
+            $cversion = "link_$1";
+            close(VER);
+            $self->{VERSION} = $cversion;
+            return;
+        }
+    }
+    die "Cannot find Microsoft LINK version\n";
+}
+
+########################################################################
+##
+##  MS LIB specific code
+##
+###
+package MSLIB;
+
+our @ISA = qw(MSLINK);
+
+use strict;
+
+use File::Basename;
+use Data::Dumper;
+
+sub new {
+    my ($proto, $stub) = @_;
+    my $class = ref($proto) || $proto;
+
+    # Create a MSVC linker object
+    my $self = MSLINK->new($stub);
+
+    $self->{NAME} = 'Microsoft librarian';
+    $self->{MODENAME} = 'MSLIB';
+    $self->{OPERATION} = "TOLIB";
+    $self->{LDLIB} = ['lib'];
+    bless $self, $class;
+    return $self;
+}
+
+sub setVersion {
+    my($self) = @_;
+    my $cversion = "";
+    open(VER, "lib 2>&1|") || die "Cannot start Microsoft LIB\n";
+    while(<VER>) {
+        if($_ =~ m|Library Manager Version (\S+)|) {
+            $cversion = "lib_$1";
+            close(VER);
+            $self->{VERSION} = $cversion;
+            return;
+        }
+    }
+    die "Cannot find Microsoft LINK version\n";
+}
+
+########################################################################
+##
+##  GNU ar specific code
+##
+###
+package AR;
+
+use strict;
+
+use File::Basename;
+use Data::Dumper;
+
+sub new {
+    my ($proto, $stub) = @_;
+    my $class = ref($proto) || $proto;
+    # Create $self
+
+    my $self = 
+    { NAME => 'Archiver',
+      MODENAME => 'ar',
+      CC => ['no_compiler_in_ar_mode'],
+      CPP => ['no_compiler_in_ar_mode'],
+      LDLIB => ['ar', 'crv'],
+      DEFARG  => "??DEFARG",
+      INCARG  => '??INCARG',
+      DEBUGARG => ['??DEBUGARG'],
+      OPTIMARG => [],
+      OBJEXT => "o",
+      LIBEXT => "a",   # Library extension (without the .)
+      EXEEXT => "",  # Executable extension (with the .)
+      OUTOBJ => "??OUTOBJ",
+      OUTLIB => "",  # But better be first
+      LINEPATTERN => "", 
+
+      OPTIONS => 
+          ["^[^-]" => { RUN => \&arArguments } ]
+
+      };
+    bless $self, $class;
+    return $self;
+}
+
+# We handle arguments in a special way for AR
+sub arArguments {
+    my ($self, $arg, $onemore, $pargs) = @_;
+    # If the first argument starts with -- pass it on
+    if($arg =~ m|^--|) {
+        return 0;
+    }
+    # We got here for the first non -- argument. 
+    # Will handle all arguments at once
+    if($self->{VERBOSE}) {
+        print "AR called with $arg @{$pargs}\n";
+    }
+
+    #The r flag is required:
+    if($arg !~ m|r| || $#{$pargs} < 0) {
+	die "Error: CCured's AR mode implements only the r and cr operations.";
+    }
+    if($arg =~ /[^crvus]/) {
+	die "Error: CCured's AR mode supports only the c, r, u, s, and v flags.";
+    }
+    if($arg =~ /v/) {
+	$self->{VERBOSE} = 1;
+    }
+
+    if($arg =~ /c/)
+    {
+	# Command is "cr":
+        # Get the name of the library
+	my $out = shift @{$pargs};
+        $self->{OUTARG} = [$out];
+        unlink $out;
+    }
+    else
+    {
+	# if the command is "r" alone, we should add to the current library, 
+        # not replace it, unless the library does not exist
+        
+        # Get the name of the library
+	my $out = shift @{$pargs};
+        $self->{OUTARG} = [$out];
+        
+        #The library is both an input and an output.
+        #To avoid problems with reading and writing the same file, move the
+        #current version of the library out of the way first.
+        if(-f $out) {
+
+            my $temp_name = $out . "_old.a";
+            if($self->{VERBOSE}) {
+        	print "Copying $out to $temp_name so we can add "
+                    . "to it.\n";
+            }
+            if(-f $temp_name) {
+                unlink $temp_name;
+            }
+            rename $out, $temp_name;
+
+            #now use $temp_name as the input.  $self->{OUTARG} will,
+            # as usual, be the output.
+            push @{$self->{OFILES}}, $temp_name;
+        } else {
+            warn "Library $out not found; creating.";
+        }
+
+    }
+        
+    # The rest of the arguments must be object files
+    push @{$self->{OFILES}}, @{$pargs};
+    $self->{OPERATION} = 'TOLIB';
+    @{$pargs} = ();
+#    print Dumper($self);
+    return 1;
+}
+
+sub linkOutputFile {
+    my($self, $src) = @_;
+    if(defined $self->{OUTARG}) {
+        return "@{$self->{OUTARG}}";
+    }
+    die "I do not know what is the link output file\n";
+}
+
+sub setVersion {
+    # sm: bin/cilly wants this for all "compilers"
+}
+
+
+#########################################################################
+##
+## GNUCC specific code
+##
+package GNUCC;
+
+use strict;
+
+use File::Basename;
+
+# The variable $::cc is inherited from the main script!!
+
+sub new {
+    my ($proto, $stub) = @_;
+    my $class = ref($proto) || $proto;
+    # Create $self
+
+    my @native_cc = Text::ParseWords::shellwords($ENV{CILLY_NATIVE_CC} || $::cc);
+
+    my $self = 
+    { NAME => 'GNU CC',
+      MODENAME => 'GNUCC',  # do not change this since it is used in code
+      # sm: added -O since it's needed for inlines to be merged instead of causing link errors
+      # sm: removed -O to ease debugging; will address "inline extern" elsewhere
+      CC => [@native_cc, '-D_GNUCC', '-c'],
+      LD => [@native_cc, '-D_GNUCC'],
+      LDLIB => ['ld', '-r', '-o'],
+      CPP =>  [@native_cc, '-D_GNUCC', '-E'],
+      DEFARG  => "-D",
+      INCARG => "-I",
+      DEBUGARG => ['-g', '-ggdb'],
+      OPTIMARG => ['-O4'],
+      CPROFILEARG => '-pg',
+      LPROFILEARG => '-pg',
+      OBJEXT => "o",
+      LIBEXT => "a",
+      EXEEXT => "",
+      OUTOBJ => '-o',
+      OUTEXE => '-o',
+      OUTCPP => '-o',
+      WARNISERROR => "-Werror",
+      FORCECSOURCE => [],
+      LINEPATTERN => "^#\\s+(\\d+)\\s+\"(.+)\"",
+      
+      OPTIONS => 
+          [ "[^-].*\\.($::cilbin|c|cpp|cc)\$" => { TYPE => 'CSOURCE' },
+            "[^-].*\\.(s|S)\$" => { TYPE => 'ASMSOURCE' },
+            "[^-].*\\.i\$" => { TYPE => 'ISOURCE' },
+            # .o files can be linker scripts
+            "[^-]" => { RUN => sub { &GNUCC::parseLinkerScript(@_); }},
+            "-E"   => { RUN => sub { $stub->{OPERATION} = "TOI"; }},
+	    "-pipe\$" => { TYPE => 'ALLARGS' },
+            "-[DIU]" => { ONEMORE => 1, TYPE => "PREPROC" },
+            "-isystem" => { ONEMORE => 1, TYPE => "PREPROC" },
+            '-undef$' => { TYPE => 'PREPROC' },
+            '-w$' => { TYPE => 'PREPROC' },
+	    '-M$' => { TYPE => 'SPECIAL' },
+	    '-MM$' => { TYPE => 'SPECIAL' },
+	    '-MF$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
+	    '-C$' =>  { TYPE => 'EARLY_PREPROC'}, # zra
+	    '-MG$' => { TYPE => 'EARLY_PREPROC' },
+	    '-MP$' => { TYPE => 'EARLY_PREPROC' },
+	    '-MT$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
+	    '-MQ$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
+	    '-MD$' => { TYPE => 'EARLY_PREPROC' },
+	    '-MMD$' => { TYPE => 'EARLY_PREPROC' }, 
+            "-include" => { ONEMORE => 1, TYPE => "PREPROC" },  # sm
+            "-iwithprefix" => { ONEMORE => 1, TYPE => "PREPROC" },
+	    '-Wp,' => { TYPE => 'PREPROC' },
+            "-ansi" => { TYPE => 'ALLARGS' },
+            "-c" => { RUN => sub { $stub->{OPERATION} = "TOOBJ"; }},
+            "-x" => { ONEMORE => 1, TYPE => "CC" },
+	    "-v" => { TYPE => 'ALLARGS',
+		      RUN => sub { $stub->{TRACE_COMMANDS} = 1; } },
+            "^-e\$" => { ONEMORE => 1, TYPE => 'LINK' },
+            "^-T\$" => { ONEMORE => 1, TYPE => 'LINK' },
+             # GCC defines some more macros if the optimization is On so pass
+             # the -O to the preprocessor and the compiler
+            '-O' => { TYPE => 'ALLARGS' },
+            "-S" => { RUN => sub { $stub->{OPERATION} = "TOOBJ";
+                                   push @{$stub->{CCARGS}}, $_[1]; }},
+            "-o" => { ONEMORE => 1, TYPE => 'OUT' },
+            "-p\$" => { TYPE => 'LINKCC' },
+            "-pg" => { TYPE => 'LINKCC' },
+            "-a" => { TYPE => 'LINKCC' },
+            "-pedantic\$" => { TYPE => 'ALLARGS' },
+            "-Wall" => { TYPE => 'CC', 
+			 RUN => sub { push @{$stub->{CILARGS}},"--warnall";}},
+            "-W[-a-z]*\$" => { TYPE => 'CC' },
+            '-g' => { TYPE => 'ALLARGS' },
+	    "-save-temps" => { TYPE => 'ALLARGS',
+			       RUN => sub { if(! defined $stub->{SAVE_TEMPS}) {
+                                                $stub->{SAVE_TEMPS} = '.'; } }},
+	    '--?print-' => { TYPE => 'SPECIAL' },
+	    '-dump' => { TYPE => 'SPECIAL' },
+            "-l" => 
+            { RUN => sub { 
+                my ($libname) = ($_[1] =~ m|-l(.+)$|);
+                # See if we can find this library in the LIBDIR
+                my @libdirs = @{$stub->{LIBDIR}};
+                if($#libdirs == -1) {
+                    push @libdirs, '.';
+                }
+                foreach my $d (@libdirs) {
+                    if(-f "$d/lib$libname.a") {
+                        # Pretend that we had a straight argument
+                        push @{$stub->{OFILES}}, "$d/lib$libname.a";
+                        return;
+                    }
+                }
+                # We get here when we cannot find the library in the LIBDIR
+                push @{$stub->{LINKARGS}}, $_[1];
+            }},
+            "-L" => 
+            { RUN => sub { 
+                # Remember these directories in LIBDIR
+                my ($dir) = ($_[1] =~ m|-L(.+)$|);
+                push @{$stub->{LIBDIR}}, $dir;
+                push @{$stub->{LINKARGS}}, $_[1];
+            }},
+            "-f" => { TYPE => 'LINKCC' },
+            "-r\$" => { RUN => sub { $stub->{OPERATION} = "TOLIB"; }},
+            "-i\$" => { RUN => sub { $stub->{OPERATION} = "TOLIB"; }},
+            "-m" => { TYPE => 'LINKCC', ONEMORE => 1 },
+            "-s\$" => { TYPE => 'LINKCC' },
+            "-Xlinker" => { ONEMORE => 1, TYPE => 'LINK' },
+            "-nostdlib" => { TYPE => 'LINK' },
+            "-nostdinc" => { TYPE => 'PREPROC' },
+	    '-rdynamic$' => { TYPE => 'LINK' },
+	    "-static" => { TYPE => 'LINK' },
+	    "-shared" => { TYPE => 'LINK' },
+	    "-static-libgcc" => { TYPE => 'LINK' },
+	    "-shared-libgcc" => { TYPE => 'LINK' },
+	    '-Wl,--(no-)?whole-archive$' => { TYPE => 'OSOURCE' },
+	    '-Wl,' => { TYPE => 'LINK' },
+            "-traditional" => { TYPE => 'PREPROC' },
+            '-std=' => { TYPE => 'ALLARGS' },
+            "--start-group" => { RUN => sub { } },
+            "--end-group" => { RUN => sub { }},
+	    "-pthread\$" => { TYPE => 'ALLARGS' },
+            ],
+                                  
+      };
+    bless $self, $class;
+    return $self;
+}
+# '
+
+my $linker_script_debug = 0;
+sub parseLinkerScript {
+    my($self, $filename, $onemore, $pargs) = @_;
+    
+    if(! defined($self->{FLATTEN_LINKER_SCRIPTS}) ||
+       $filename !~ /\.o$/) {
+      NotAScript:
+        warn "$filename is not a linker script\n" if $linker_script_debug;
+        push @{$self->{OFILES}}, $filename; 
+        return 1;
+    }
+    warn "parsing OBJECT FILE:$filename ****************\n" if
+        $linker_script_debug;
+    open OBJFILE, $filename or die $!;
+    my $line = <OBJFILE>;
+    if ($line !~ /^INPUT/) {
+        close OBJFILE or die $!;
+        goto NotAScript;
+    }
+    warn "\tYES an INPUT file.\n" if $linker_script_debug;
+    my @lines = <OBJFILE>; # Read it all and close it
+    unshift @lines, $line;
+    close OBJFILE or die $!;
+    # Process recursively each line from the file
+    my @tokens = ();
+    my $incomment = 0; # Whether we are in a comment
+    foreach my $line (@lines) {
+        chomp $line;
+        if($incomment) {
+            # See where the comment ends
+            my $endcomment = index($line, "*/");
+            if($endcomment < 0) { # No end on this line
+                next; # next line
+            } else {
+                $line = substr($line, $endcomment + 2); 
+                $incomment = 0;
+            }
+        }
+        # Drop the comments that are on a single line
+        $line =~ s|/\*.*\*/| |g;
+        # Here if outside comment. See if a comment starts
+        my $startcomment = index($line, "/*");
+        if($startcomment >= 0) {
+            $incomment = 1;
+            $line = substr($line, 0, $startcomment);
+        }
+        # Split the line into tokens. Sicne we use parentheses in the pattern
+        # the separators will be tokens as well
+        push @tokens, split(/([(),\s])/, $line);
+    }
+    print "Found tokens:", join(':', @tokens), "\n" 
+        if $linker_script_debug;
+    # Now parse the file
+    my $state = 0;
+    foreach my $token (@tokens) {
+        if($token eq "" || $token =~ /\s+/) { next; } # Skip spaces
+        if($state == 0) {
+            if($token eq "INPUT") { $state = 1; next; } 
+            else { die "Error in script: expecting INPUT"; }
+        }
+        if($state == 1) { 
+            if($token eq "(") { $state = 2; next; } 
+            else { die "Error in script: expecting ( after INPUT"; }
+        } 
+        if($state == 2) { 
+            if($token eq ")") { $state = 0; next; }
+            if($token eq ",") { next; } # Comma could be a separator
+            # Now we better see a filename
+            if(! -f $token) {
+               warn "Linker script mentions inexistent file:$token.Ignoring\n";
+               next;
+            }
+            # Process it recursively because it could be a script itself
+            warn "LISTED FILE:$token.\n" if $linker_script_debug;
+            $self->parseLinkerScript($token, $onemore, $pargs);
+            next;
+        } 
+        die "Invalid linker script parser state\n";
+        
+    }
+}
+
+sub forceIncludeArg { 
+    my($self, $what) = @_;
+    return ('-include', $what);
+}
+
+
+# Emit a line # directive
+sub lineDirective {
+    my ($self, $fileName, $lineno) = @_;
+    return "# $lineno \"$fileName\"\n";
+}
+
+# The name of the output file
+sub compileOutputFile {
+    my($self, $src) = @_;
+
+    die "objectOutputFile: not a C source file: $src\n"
+	unless $src =~ /\.($::cilbin|c|cc|cpp|i|s|S)$/;
+    
+    if ($self->{OPERATION} eq 'TOOBJ') {
+	if (defined $self->{OUTARG} 
+            && "@{$self->{OUTARG}}" =~ m|^-o\s*(\S.+)$|) {
+	    return new OutputFile($src, $1);
+	} else {
+	    return new KeptFile($src, $self->{OBJEXT}, '.');
+	}
+    } else {
+	return $self->outputFile($src, $self->{OBJEXT});
+    }
+}
+
+sub assembleOutputFile {
+    my($self, $src) = @_;
+    return $self->compileOutputFile($src);
+}
+
+sub linkOutputFile {
+    my($self, $src) = @_;
+    if(defined $self->{OUTARG} && "@{$self->{OUTARG}}" =~ m|-o\s*(\S.+)|) {
+        return $1;
+    }
+    return "a.out";
+}
+
+sub setVersion {
+    my($self) = @_;
+    my $cversion = "";
+    open(VER, "@{$self->{CC}} -dumpversion " 
+         . join(' ', @{$self->{PPARGS}}) ." |") 
+        || die "Cannot start GNUCC";
+    while(<VER>) {
+        if($_ =~ m|^(\d+\S+)| || $_ =~ m|^(egcs-\d+\S+)|) {
+            $cversion = "gcc_$1";
+            close(VER) || die "Cannot start GNUCC\n";
+            $self->{VERSION} = $cversion;
+            return;
+        }
+    }
+    die "Cannot find GNUCC version\n";
+}
+
+1;
+
+
+__END__
+
+
+
diff --git a/cil/lib/KeptFile.pm b/cil/lib/KeptFile.pm
new file mode 100644
index 000000000..904b5145c
--- /dev/null
+++ b/cil/lib/KeptFile.pm
@@ -0,0 +1,88 @@
+package KeptFile;
+use OutputFile;
+@ISA = (OutputFile);
+
+use strict;
+use Carp;
+use File::Basename;
+use File::Spec;
+
+
+########################################################################
+
+
+sub new {
+    croak 'bad argument count' unless @_ == 4;
+    my ($proto, $basis, $suffix, $dir) = @_;
+    my $class = ref($proto) || $proto;
+
+    $basis = $basis->basis if ref $basis;
+    my ($basename, undef, $basefix) = fileparse($basis, qr{\.[^.]+});
+    my $filename = File::Spec->catfile($dir, "$basename.$suffix");
+
+    my $self = $class->SUPER::new($basis, $filename);
+    return $self;
+}
+
+
+########################################################################
+
+
+1;
+
+__END__
+
+
+=head1 Name
+
+KeptFile - persistent compiler output files
+
+=head1 Synopsis
+
+    use KeptFile;
+
+    my $cppOut = new KeptFile ('code.c', 'i', '/output/directory');
+    system 'cpp', 'code.c', '-o', $cppOut->filename;
+
+=head2 Description
+
+C<KeptFile> represents an intermediate output file generated by some
+stage of a C<Cilly>-based compiler that should be retained after
+compilation.  It is a concrete subclass of L<OutputFile|OutputFile>.
+Use C<KeptFile> when the user has asked for intermediate files to be
+retained, such as via gcc's C<-save-temps> flag.
+
+=head2 Public Methods
+
+=over
+
+=item new
+
+C<new KeptFile ($basis, $suffix, $dir)> constructs a new C<KeptFile>
+instance.  The new file name is constructed using the base file name
+of C<$basis> with its suffix replaced by C<$suffix> and its path given
+by C<$dir>.  For example,
+
+    new KeptFile ('/foo/code.c', 'i', '/bar')
+
+yields a C<KeptFile> with file name F</bar/code.i>.
+
+C<$basis> may be either absolute or relative; only the trailing file
+name is used.  C<$basis> can also be an C<OutputFile> instance, in
+which case C<< $basis->basis >> is used as the actual basis.  See
+L<OutputFile/"basis"> for more information on basis flattening.
+
+C<$suffix> should not include a leading dot; this will be added
+automatically.
+
+C<$dir> may be either absolute or relative.  It is common to use F<.>
+as the directory, which puts the C<KeptFile> in the current working
+directory.
+
+=back
+
+=head1 See Also
+
+L<OutputFile>, L<TempFile>.
+
+=cut
diff --git a/cil/lib/OutputFile.pm b/cil/lib/OutputFile.pm
new file mode 100644
index 000000000..8f02ba23e
--- /dev/null
+++ b/cil/lib/OutputFile.pm
@@ -0,0 +1,213 @@
+package OutputFile;
+@ISA = ();
+
+use strict;
+use Carp;
+use File::Basename;
+use File::Spec;
+
+
+########################################################################
+
+
+my $debug = 0;
+
+
+sub new {
+    croak 'bad argument count' unless @_ == 3;
+    my ($proto, $basis, $filename) = @_;
+    my $class = ref($proto) || $proto;
+
+    $basis = $basis->basis if ref $basis;
+    my $ref = { filename => $filename,
+		basis => $basis };
+    my $self = bless $ref, $class;
+
+    $self->checkRef($filename);
+    $self->checkRef($basis);
+    $self->checkProtected();
+    $self->checkTemporary();
+
+    Carp::cluck "OutputFile: filename == $filename, basis == $basis" if $debug;
+    return $self;
+}
+
+
+sub filename {
+    my ($self) = @_;
+    return $self->{filename};
+}
+
+
+sub basis {
+    my ($self) = @_;
+    return $self->{basis};
+}
+
+
+########################################################################
+
+
+sub checkRef {
+    my ($self, $filename) = @_;
+    confess "ref found where string expected: $filename" if ref $filename;
+    confess "stringified ref found where string expected: $filename" if $filename =~ /\w+=HASH\(0x[0-9a-f]+\)/;
+}
+
+
+sub checkTemporary {
+    my ($self) = @_;
+    my ($basename, $path) = fileparse $self->filename;
+    return if $path eq File::Spec->tmpdir . '/';
+    confess "found temporary file in wrong directory: ", $self->filename
+	if $basename =~ /^cil-[a-zA-Z0-9]{8}\./;
+}
+
+
+########################################################################
+
+
+my @protected = ();
+
+
+sub checkProtected {
+    my ($self) = @_;
+    my $abs = File::Spec->rel2abs($self->filename);
+
+    foreach (@protected) {
+	confess "caught attempt to overwrite protected file: ", $self->filename
+	    if $_ eq $abs;
+    }
+}
+
+
+sub protect {
+    my ($self, @precious) = @_;
+    push @protected, File::Spec->rel2abs($_)
+	foreach @precious;
+}
+
+
+########################################################################
+
+
+1;
+
+__END__
+
+
+=head1 Name
+
+OutputFile - base class for intermediate compiler output files
+
+=head1 Description
+
+C<OutputFile> represents an intermediate output file generated by some
+stage of a C<Cilly>-based compiler.  This is an abstract base class
+and should never be instantiated directly.  It provides common
+behaviors used by concrete subclasses L<KeptFile|KeptFile> and
+L<TempFile|TempFile>.
+
+=head2 Public Methods
+
+=over
+
+=item filename
+
+An C<OutputFile> instance is a smart wrapper around a file name.  C<<
+$out->filename >> returns the name of the file represented by
+C<OutputFile> instance C<$out>.  When building a command line, this is
+the string to use for the file.  For example:
+
+    my $out = ... ;		# some OutputFile subclass
+    my @argv = ('gcc', '-E', '-o', $out->filename, 'input.c');
+    system @argv;
+
+C<Cilly> often creates command vectors with a mix of strings and
+C<OutputFile> objects.  This is fine, but before using a mixed vector
+as a command line, you must replace all C<OutputFile> objects with
+their corresponding file names:
+
+    my @mixed = (...);		# mix of strings and objects
+    my @normalized = @mixed;
+    $_ = (ref $_ ? $_->filename : $_) foreach @normalized;
+    system @normalized;
+
+Common utility methods like C<Cilly::runShell> already do exactly this
+normalization, but you may need to do it yourself if you are running
+external commands on your own.
+
+=item protect
+
+C<OutputFile> contains safety interlocks that help it avoid stomping
+on user input files.  C<< OutputFile->protect($precious) >> marks
+C<$precious> as a protected input file which should not be
+overwritten.  If any C<OutputFile> tries to claim this same file name,
+an error will be raised.  In theory, this never happens.  In practice,
+scripts can have bugs, and it's better to be safe than sorry.
+
+C<Cilly> uses this method to register input files that it discovers
+during command line processing.  If you add special command line
+processing of your own, or if you identify input files through other
+means, we highly recommend using this method as well.  Otherwise,
+there is some risk that a buggy client script could mistakenly create
+an output file that destroys the user's source code.
+
+Note that C<protect> is a class method: call it on the C<OutputFile>
+module, rather than on a specific instance.
+
+=back
+
+=head2 Internal Methods
+
+The following methods are used within C<OutputFile> or by
+C<OutputFile> subclasses.  They are not intended for use by outside
+scripts.
+
+=over
+
+=item basis
+
+In addition to L<its own file name|/"filename">, each C<OutputFile>
+instance records a second file name: its I<basis>.  The basis file
+name is initialized and used differently by different subclasses, but
+typically represents the input file from which this output file is
+derived.  C<< $out->basis >> returns the basis file name for instance
+C<$out>.
+
+When instantiating an C<OutputFile>, the caller can provide either a
+file name string as the basis or another C<OutputFile> instance.
+However, basis file names are not chained: if C<< $a->basis >> is
+F<foo.c>, and C<$b> is constructed with C<$a> as its basis, C<<
+$b->basis >> will return F<foo.c>, not C<$a> or C<< $a->filename >>.
+This flattening is done at construction time.
+
+See L<KeptFile/"new"> and L<TempFile/"new"> for more details on how
+basis file names are used.
+
+=item checkRef
+
+C<< OutputFile->checkRef($filename) >> raises an error if C<$filename>
+is an object reference, or looks like the string representation of an
+object reference.  Used to sanity check arguments to various methods.
+
+=item checkTemporary
+
+C<< $out->checkTemporary >> raises an error if C<< $out->filename >>
+looks like a temporary file name but is not in the system temporary
+directory.  Used to sanity check arguments in various methods.
+
+=item checkProtected
+
+C<< $out->checkProtected >> raises an error if C<< $out->filename >>
+is listed as a protected file.  This check, performed at construction
+time, implements a safety interlock to prevent overwriting of user
+input files.  Protected files are registered using L<"protect">.
+
+=back
+
+=head1 See Also
+
+L<KeptFile>, L<TempFile>.
+
+=cut
diff --git a/cil/lib/TempFile.pm b/cil/lib/TempFile.pm
new file mode 100644
index 000000000..608713cfb
--- /dev/null
+++ b/cil/lib/TempFile.pm
@@ -0,0 +1,90 @@
+package TempFile;
+use OutputFile;
+@ISA = (OutputFile);
+
+use strict;
+use Carp;
+use File::Temp qw(tempfile);
+
+
+########################################################################
+
+
+sub new {
+    croak 'bad argument count' unless @_ == 3;
+    my ($proto, $basis, $suffix) = @_;
+    my $class = ref($proto) || $proto;
+
+    my (undef, $filename) = tempfile('cil-XXXXXXXX',
+				     DIR => File::Spec->tmpdir,
+				     SUFFIX => ".$suffix",
+				     UNLINK => 1);
+
+    my $self = $class->SUPER::new($basis, $filename);
+    return $self;
+}
+
+
+########################################################################
+
+
+1;
+
+__END__
+
+
+=head1 Name
+
+TempFile - transitory compiler output files
+
+=head1 Synopsis
+
+    use TempFile;
+
+    my $cppOut = new TempFile ('code.c', 'i');
+    system 'cpp', 'code.c', '-o', $cppOut->filename;
+
+=head2 Description
+
+C<TempFile> represents an intermediate output file generated by some
+stage of a C<Cilly>-based compiler that should be removed after
+compilation.  It is a concrete subclass of L<OutputFile|OutputFile>.
+Use C<TempFile> when the user has asked not for intermediate files to
+be retained.
+
+All C<TempFile> files are removed when the script terminates.  This
+cleanup happens for both normal exits as well as fatal errors.
+However, the standard L<Perl exec function|perlfun/exec> does not
+perform cleanups, and therefore should be avoided in scripts that use
+C<TempFile>.
+
+=head2 Public Methods
+
+=over
+
+=item new
+
+C<new TempFile ($basis, $suffix)> constructs a new C<TempFile>
+instance.  The new file name is constructed in some system-specific
+temporary directory with a randomly generated file name that ends with
+C<$suffix>.  For example,
+
+    new TempFile ('/foo/code.c', 'i')
+
+might yield a C<TempFile> with file name F</var/tmp/cil-x9GyA93R.i>.
+
+C<$basis> gives the basis file name for this instance.  The file name
+is not used directly, but is retained in case this instance is later
+passed as the basis for some other C<OutputFile>.  See
+L<OutputFile/"basis"> for more information on basis flattening.
+
+C<$suffix> should not include a leading dot; this will be added
+automatically.
+
+=back
+
+=head1 See Also
+
+L<OutputFile>, L<TempFile>.
+
+=cut
diff --git a/cil/ocamlutil/Makefile.ocaml b/cil/ocamlutil/Makefile.ocaml
new file mode 100644
index 000000000..1d0673fad
--- /dev/null
+++ b/cil/ocamlutil/Makefile.ocaml
@@ -0,0 +1,395 @@
+# -*- Mode: makefile -*-
+# Copyright (c) 2001-2002, 
+#  George C. Necula    <necula@cs.berkeley.edu>
+#  Scott McPeak        <smcpeak@cs.berkeley.edu>
+#  Wes Weimer          <weimer@cs.berkeley.edu>
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. The names of the contributors may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  # Generic Makefile for Ocaml projects
+  # Written by necula@cs.berkeley.edu
+  # 
+  # Features: 
+  #   - keeps byproducts of building in a separate directory
+  #   - handles dependencies automatically
+  #   - user specifies just what modules go into a project and 
+  #     everything else is done automatically
+  #   - you can use one Makefile for several Ocaml projects
+  #   
+  # You must include this file in your Makefile. Before the include point 
+  # you must defined the following variables (which are glob al for all Ocaml 
+  # projects specified in one Makefile):
+  # 
+  # CAMLDIR    - the directory where to get the ocaml executables from. 
+  #              Must be empty (defaul) or end with a /
+  # OBJDIR     - the directory where to put all object files. This directory 
+  #              must exist (default obj)
+  # DEPENDDIR  - the directory where to put dependency files. This directory 
+  #              must exist.  (default obj/.depend)
+  # NATIVECAML - if set then will use the native compiler
+  # UNSAFE     - if set then will turn off safety checks (only with NATIVECAML)
+  # PROFILE    - if set then it will compile and link with "gprof" profiling
+  #              support (NATIVECAML mode only)
+  # ASSEMBLY   - if set then it will keep assembly files
+  # STATIC     - if set then it will compile and link statically
+  #              (NATIVECAML mode only)
+  # PREPROC    - the preprocessor command
+
+  # MODULES    - a list of all modules for all projects defined in the 
+  #              Makefile. Give only the basenames (no directory, 
+  #              no extension).  This is used to create the dependencies.
+  # SOURCEDIRS - a list of all directories containing sources for all 
+  #              projects defined in a Makefile. This is used to set vpath.
+  # MLLS       - a list of all .mll (ocamllex input) files for all 
+  #              projects defined in the Makefile. 
+  # MLYS       - a list of all .mly (ocamlyacc input) files for all 
+  #              projects defined in the Makefile. 
+  # ECHO       - if specifically set to nothing then it will print 
+  #              all of the commands issued. Set this in the command line
+  #              if you want to see what is going on.
+  #
+  # COMPILEFLAGS      - if defined, then it is passed as argument to ocamlc
+  #                     and ocamlopt
+  # LINKFLAGS         - if defined, then it is passed as argument to 
+  #                     ocamlc and ocamlopt, when linking (at start of 
+  #                     command line)
+  #
+  # CAML_CFLAGS   - flags used only for the compilation of C files.
+  #                 e.g. '-ccopt <gcc flag>'
+  #
+  #
+  # After you set all of the above you must do the following for EACH separate 
+  # executable that you want to build.
+  #
+  # Define the following:
+  # PROJECT_EXECUTABLE - the name of the executable you want to build. To take 
+  #                      advantage of the naming scheme that separates the 
+  #                      bytecode version and the native version, use the 
+  #                      $(EXE) variable which is defined to either .byte.exe 
+  #                      or .asm.exe. I typically put the executable in 
+  #                      $(OBJDIR) as well.
+  # PROJECT_MODULES    - the base names of the modules that make this 
+  #                      executable in the order in which they must be
+  #                      passed to the linker. Make sure that all of
+  #                      the names mentioned here are also mentioned in 
+  #                      MODULES.
+  # PROJECT_CMODULES   - same as modules but for the C modules. These
+  #                      do not need to be mentioned in MODULES. There must be
+  #                      no name clashes with MODULES
+  # PROJECT_LIBS       - the base names of the libraries that you 
+  #                      want to link in the executable.
+  #
+  #
+  # Then include Makefile.ocaml.build to generate a customized
+  # rule for making your executable.
+  #
+  # Example:
+  # 
+  # OBJDIR     = obj
+  # DEPENDDIR  = obj/.depend
+  # SOURCEDIRS = src src/special
+  # MLLS       = mylex 
+  # MLYS       = myparse
+  #
+  # MODULES    = mod11 mod12 mod21 modcommon
+  #
+  #  # Rules for project 1
+  # PROJECT_EXECUTABLE = $(OBJDIR)/proj1$(EXE)
+  # PROJECT_MODULES    = mod11 mod12 modcommon
+  # PROJECT_CMODULES   =  
+  # PROJEC_LIBS        = unix
+  # include Makefile.ocaml.build
+  #
+  #
+  #  # Rules for project 2 
+  # PROJECT_EXECUTABLE = $(OBJDIR)/proj2$(EXE)
+  # PROJECT_MODULES    = mod21 modcommon
+  # PROJECT_CMODULES   =  
+  # PROJEC_LIBS        = unix str
+  # include Makefile.ocaml.build
+
+
+CAMLLEX = ocamllex
+CAMLYACC= ocamlyacc -v
+CAMLDEP = ocamldep
+
+COMPILEFLAGS += -I $(OBJDIR)
+
+# sm: two styles for echoing compilation progress:
+#   style 1, by George:
+#     - print English descriptions of what's happening
+#     - set ECHO to "" to see *everything*
+#   style 2, by Scott:
+#     - do not print English descriptions
+#     - print every shell command that is executed which has a side effect,
+#       so that they could be pasted into a shell to reproduce manually
+#     - omit some of the details of dependency generation
+#
+# to be able to choose which style, several variables are used:
+#   @$(NARRATIVE)  - put this before English descriptions for style 1
+#   @$(COMMAND)    - put this before shell commands which are to be
+#                    printed for style 2; the command is *not* executed
+#   $(AT)          - put this before shell commands which are to be executed,
+#                    and also printed in style 2
+#   $(ECHO)        - use in place of '@' for things not printed in either style
+ifdef ECHOSTYLE_SCOTT
+  # 'true' silently consumes its arguments, whereas 'echo' prints them
+  NARRATIVE   := true           
+  COMMAND     := echo
+  AT          := 
+  ECHO        := @
+else
+  NARRATIVE   := echo
+  COMMAND     := true
+  # change these next two definitions to <empty> to echo everything,
+  # or leave as @ to suppress echoing
+  AT          := @
+  ECHO        := @
+endif
+
+ifdef PREPROC
+  COMPILEFLAGS += -pp "$(PREPROC)$"
+  DEPFLAGS += -pp "$(PREPROC)"
+endif
+
+COMPILEMSG=
+LINKMSG=
+
+ifdef WIN32
+OBJ             = obj
+else
+OBJ             = o
+endif
+EXE		= $(EXEEXT).exe
+
+
+export EXE
+
+ifdef NATIVECAML
+ ifdef PROFILE
+   COMPILEFLAGS   += -p
+   LINKFLAGS      += -p
+   COMPILEMSG     += (profile)
+   LINKMSG        += (profile)
+ endif
+ ifdef ASSEMBLY
+   COMPILEFLAGS   += -S
+ endif
+ ifdef STATIC
+   COMPILEFLAGS   += -ccopt -static
+   LINKFLAGS      += -ccopt -static
+ endif
+ #foo := $(shell echo "I am in NATIVECAML mode" >&2; echo whatever)
+ ifdef WIN32
+   COMPILEFLAGS    += -ccopt /Ox
+ else
+   COMPILEFLAGS    += -ccopt -O3
+ endif
+ CAMLC          = $(CAMLDIR)ocamlopt  $(COMPILEFLAGS)
+ CAMLLINK       = $(CAMLDIR)ocamlopt  $(LINKFLAGS)
+ CMO            = cmx
+ CMC            = opt.$(OBJ)  # compiled (and optimized) C
+ CMXA           = cmxa
+ EXEEXT         = .asm
+ MOVEAFTERCAMLC = cmi cmx $(OBJ)
+ COMPILETOWHAT  = native code
+ # sm: by adding -native in native mode, we prevent spurious
+ # dependencies on .cmo files which were causing lots of
+ # extra recompilation
+ CAMLDEP        = $(CAMLDIR)ocamldep -native
+else 
+ CMO            = cmo
+ CMXA           = cma
+ CMC            = $(OBJ)
+ EXEEXT         = .byte
+ MOVEAFTERCAMLC = cmi cmo
+ COMPILETOWHAT  = bytecode
+ ifdef WIN32
+   COMPILEFLAGS += -ccopt /Zi -ccopt /Od
+   LINKFLAGS    += -ccopt /Zi -ccopt /Od
+ else
+   COMPILEFLAGS += -g -ccopt -g
+   LINKFLAGS    += -g -ccopt -g
+ endif
+ CAMLC          = $(CAMLDIR)ocamlc -g $(COMPILEFLAGS)
+ CAMLLINK       = $(CAMLDIR)ocamlc -custom  $(LINKFLAGS)
+endif
+
+
+ifdef UNSAFE 
+ CAMLC          := $(CAMLC) -unsafe -noassert
+endif
+
+
+
+
+    # Allow searching for .ml and .mli
+vpath %.mll $(SOURCEDIRS)
+vpath %.mly $(SOURCEDIRS)
+vpath %.ml  $(SOURCEDIRS) $(OBJDIR)
+vpath %.mli $(SOURCEDIRS) $(OBJDIR)
+vpath %.c   $(SOURCEDIRS)
+
+
+#  Secondaries are intermediates that we don't want make to delete
+#  By giving the right names to secondary files we tell make where to make
+#  them if they are not already made. VERY USEFUL!!
+.SECONDARY : $(MLLS:%.mll=$(OBJDIR)/%.ml) $(MLYS:%.mly=$(OBJDIR)/%.ml) \
+             $(MLYS:%.mly=$(OBJDIR)/%.mli)
+
+             # Run the lexer generator
+             # Move the result to the OBJDIR directory
+             # If there is a .mli file in the same directory with .mll then
+             # copy it to OBJDIR (where the .ml) file will live.
+$(OBJDIR)/%.ml: %.mll
+	$(CAMLLEX) $<
+	$(AT)mv -f $(basename $<).ml $(OBJDIR)/
+	$(ECHO)if test -f $(basename $<).mli ;then \
+	  $(COMMAND) cp -f $(basename $<).mli $(OBJDIR)/; \
+	  cp -f $(basename $<).mli $(OBJDIR)/ \
+        ;fi
+
+             # Run the parser generator
+             # Move the result to the $(OBJDIR) directory.
+$(OBJDIR)/%.ml $(OBJDIR)/%.mli: %.mly
+	$(CAMLYACC) $(CAMLYACCFLAGS) $<
+	$(AT)mv -f $(basename $<).ml $(basename $<).mli $(OBJDIR)/
+
+         # Compile an MLI file. After compilation move the result to OBJDIR
+$(OBJDIR)/%.cmi: %.mli
+	@$(NARRATIVE) Compiling interface $<
+	$(AT)$(CAMLC) $(COMPILEFLAGS) -c $<
+	$(ECHO)if test $(OBJDIR) != $(<D) ;then \
+                   $(COMMAND) mv -f $(basename $<).cmi $(OBJDIR)/; \
+                   mv -f $(basename $<).cmi $(OBJDIR)/ \
+        ;fi
+
+         # Compile an ML file. After compilation we 
+         # copy to $(OBJDIR) the .cmi and the result of compilation.
+$(OBJDIR)/%.$(CMO): %.ml
+	@$(NARRATIVE) "Compiling           $< to $(COMPILETOWHAT) $(COMPILEMSG)"
+#	$(ECHO)#if test $(OBJDIR) != $(<D) -a -f $(OBJDIR)/$(basename $(<F)).cmi ;then \
+#           $(COMMAND) mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
+#           mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
+#        fi
+	@$(COMMAND) $(CAMLC) $(COMPILEFLAGS) -c $<
+	$(ECHO)$(CAMLC) $(COMPILEFLAGS) -c $< ; res=$$?; \
+	   if test $(OBJDIR) != $(<D) ;then \
+              for ext in $(MOVEAFTERCAMLC); do \
+                if test -f $(basename $<).$$ext ;then \
+                  $(COMMAND) mv -f $(basename $<).$$ext $(OBJDIR)/; \
+                  mv -f $(basename $<).$$ext $(OBJDIR)/; \
+                fi; \
+              done; \
+           fi; exit $$res
+
+             # Compile C files
+             # They appear to be left in the current directory as .o files
+$(OBJDIR)/%.$(CMC): %.c
+	@$(NARRATIVE) "Compiling C file $< $(COMPILEMSG)"
+	$(AT)$(CAMLC) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
+	$(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
+
+              # Special rule for profile.c
+CAMLC_NOPROF=$(subst -p,,$(CAMLC))
+$(OBJDIR)/profile.$(CMC): profile.c
+	@$(NARRATIVE) "Compiling C file $<"
+	$(AT)$(CAMLC_NOPROF) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
+	$(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
+
+
+#	Phonies should be "remade" even if someone mistakenly creates them
+.PHONY: cleancaml
+cleancaml:
+	-rm -f $(OBJDIR)/*.cmi
+	-rm -f $(OBJDIR)/*.cmo
+	-rm -f $(OBJDIR)/*.cmx
+	-rm -f $(OBJDIR)/*.cma
+	-rm -f $(OBJDIR)/*.cmxa
+	-rm -f $(OBJDIR)/*.exe
+	-rm -f $(OBJDIR)/*.obj
+	-rm -f $(OBJDIR)/*.o
+	-rm -f $(OBJDIR)/*.obj
+	-rm -f $(OBJDIR)/*.o
+	-rm -f $(OBJDIR)/*.lib
+	-rm -f $(OBJDIR)/*.a
+	-rm -f $(OBJDIR)/*.mli
+	-rm -f $(OBJDIR)/*.ml
+	-rm -f $(DEPENDDIR)/*.d $(DEPENDDIR)/*.di
+	-rm -f $(MLLS:%.mll=$(OBJDIR)/%.ml) \
+               $(MLLS:%.mll=$(OBJDIR)/%.mli) \
+               $(MLYS:%.mly=$(OBJDIR)/%.ml) \
+               $(MLYS:%.mly=$(OBJDIR)/%.mli)
+
+
+# Automatic dependency generation (see GNU info for details)
+#
+# Each .ml file has a .d (dependency file) which is automatically
+# generated and included by the rules below.  The perl script replaces
+# directory paths with $(OBJDIR)/
+#
+# Dependencies for .mli files reside in corresponding .di files.
+#
+
+# Replace the directories in the dependency rules with $(OBJDIR)/, since 
+# we'll move .cmo/.cmx files there.
+# 1. Strip any text followed by / or \.  The / case even strips slashes that
+#    are preceded by whitespace, to account for unix absolute paths.
+#    The \ case does not strip slashes that come immediately after whitespace,
+#    to preserve the trailing \ at the end of Makefile rules.
+# 2. Replace these directory names by '$(OBJDIR)/'
+FIXDEPEND:=perl -e 'while(<>) { s%[^/\\ :]*/% %g; s%[^/\\ :]+\\% %g; s%([-a-zA-Z0-9+-.:/\/_]+)%\$$(OBJDIR)/$$1%g; print $$_;}'
+# FIXDEPEND:=cat
+
+DEPINCLUDES= -I $(OBJDIR) $(SOURCEDIRS:%=-I %)
+$(DEPENDDIR)/%.d: %.ml
+	@$(NARRATIVE) Generating dependency information for $<
+	@$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
+	$(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
+
+$(DEPENDDIR)/%.di: %.mli
+	@$(NARRATIVE) Generating dependency information for $<
+	@$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
+	$(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
+
+# sm: it turns out there's a variable which lists all the goals
+# specified on the command line; I'll use this to set CLEANING
+# (which is not set anywhere else, currently)
+ifeq ($(MAKECMDGOALS),clean)
+  #$(warning "Skipping dependency rules because we're cleaning")
+  CLEANING := 1
+endif
+
+ifndef CLEANING
+-include $(MODULES:%=$(DEPENDDIR)/%.d)
+-include $(MODULES:%=$(DEPENDDIR)/%.di)
+endif
+
+listmodules: 
+	@echo $(MODULES)
diff --git a/cil/ocamlutil/Makefile.ocaml.build b/cil/ocamlutil/Makefile.ocaml.build
new file mode 100644
index 000000000..5271e4617
--- /dev/null
+++ b/cil/ocamlutil/Makefile.ocaml.build
@@ -0,0 +1,50 @@
+# -*- Mode: makefile -*-
+# Copyright (c) 2001-2002, 
+#  George C. Necula    <necula@cs.berkeley.edu>
+#  Scott McPeak        <smcpeak@cs.berkeley.edu>
+#  Wes Weimer          <weimer@cs.berkeley.edu>
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. The names of the contributors may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  # Auxiliary Makefile for building Ocaml project. See the documentation in
+  # the associated Makefile.ocaml for how to use this file.
+  # Written by necula@cs.berkeley.edu
+  # 
+$(PROJECT_EXECUTABLE) : $(PROJECT_MODULES:%=$(OBJDIR)/%.$(CMO)) \
+                        $(PROJECT_CMODULES:%=$(OBJDIR)/%.$(CMC))
+	@$(NARRATIVE) "Linking $(COMPILETOWHAT) $@ $(LINKMSG)"
+	$(AT)$(CAMLLINK) -verbose -o $@ \
+                    $(PROJECT_LIBS:%=%.$(CMXA)) \
+                    $(PROJECT_LIBS:%=-cclib -l%) \
+                    $^
+
+
+
+
+
diff --git a/cil/ocamlutil/alpha.ml b/cil/ocamlutil/alpha.ml
new file mode 100755
index 000000000..6a1ea0172
--- /dev/null
+++ b/cil/ocamlutil/alpha.ml
@@ -0,0 +1,156 @@
+module H = Hashtbl
+module E = Errormsg
+open Pretty
+
+let debugAlpha (prefix: string) = false
+(*** Alpha conversion ***)
+let alphaSeparator = "___"
+let alphaSeparatorLen = String.length alphaSeparator
+
+(** For each prefix we remember the next integer suffix to use and the list 
+ * of suffixes, each with some data assciated with the newAlphaName that 
+ * created the suffix. *)
+type 'a alphaTableData = int * (string * 'a) list
+
+type 'a undoAlphaElement = 
+    AlphaChangedSuffix of 'a alphaTableData ref * 'a alphaTableData (* The 
+                                             * reference that was changed and 
+                                             * the old suffix *)
+  | AlphaAddedSuffix of string          (* We added this new entry to the 
+                                         * table *)
+
+(* Create a new name based on a given name. The new name is formed from a 
+ * prefix (obtained from the given name by stripping a suffix consisting of 
+ * the alphaSeparator followed by only digits), followed by alphaSeparator 
+ * and then by a positive integer suffix. The first argument is a table 
+ * mapping name prefixes to the largest suffix used so far for that 
+ * prefix. The largest suffix is one when only the version without suffix has 
+ * been used. *)
+let rec newAlphaName ~(alphaTable: (string, 'a alphaTableData ref) H.t)
+                     ~(undolist: 'a undoAlphaElement list ref option)
+                     ~(lookupname: string) 
+                     ~(data: 'a) : string * 'a = 
+  alphaWorker ~alphaTable:alphaTable ~undolist:undolist 
+              ~lookupname:lookupname ~data:data true
+  
+
+(** Just register the name so that we will not use in the future *)
+and registerAlphaName ~(alphaTable: (string, 'a alphaTableData ref) H.t)
+                      ~(undolist: 'a undoAlphaElement list ref option)
+                      ~(lookupname: string) 
+                      ~(data: 'a) : unit = 
+  ignore (alphaWorker ~alphaTable:alphaTable ~undolist:undolist 
+                      ~lookupname:lookupname ~data:data false)
+
+
+and alphaWorker      ~(alphaTable: (string, 'a alphaTableData ref) H.t)
+                     ~(undolist: 'a undoAlphaElement list ref option)
+                     ~(lookupname: string) ~(data:'a)
+                     (make_new: bool) : string * 'a = 
+  let prefix, suffix, (numsuffix: int) = splitNameForAlpha ~lookupname in
+  if debugAlpha prefix then
+    ignore (E.log "Alpha worker: prefix=%s suffix=%s (%d) create=%b. " 
+              prefix suffix numsuffix make_new);
+  let newname, (olddata: 'a) = 
+    try
+      let rc = H.find alphaTable prefix in
+      let max, suffixes = !rc in 
+      (* We have seen this prefix *)
+      if debugAlpha prefix then
+        ignore (E.log " Old max %d. Old suffixes: @[%a@]" max
+                  (docList 
+                     (fun (s, l) -> dprintf "%s" (* d_loc l *) s)) suffixes);
+      (* Save the undo info *)
+      (match undolist with 
+        Some l -> l := AlphaChangedSuffix (rc, !rc) :: !l
+      | _ -> ());
+
+      let newmax, newsuffix, (olddata: 'a), newsuffixes = 
+        if numsuffix > max then begin 
+          (* Clearly we have not seen it *)
+          numsuffix, suffix, data,
+          (suffix, data) :: suffixes 
+        end else begin 
+          match List.filter (fun (n, _) -> n = suffix) suffixes with 
+            [] -> (* Not found *)
+              max, suffix, data, (suffix, data) :: suffixes
+          | [(_, l) ] -> 
+              (* We have seen this exact suffix before *)
+              if make_new then 
+                let newsuffix = alphaSeparator ^ (string_of_int (max + 1)) in
+                max + 1, newsuffix, l, (newsuffix, data) :: suffixes
+              else
+                max, suffix, data, suffixes
+          |  _ -> E.s (E.bug "Cil.alphaWorker")
+        end
+      in
+      rc := (newmax, newsuffixes);
+      prefix ^ newsuffix, olddata
+    with Not_found -> begin (* First variable with this prefix *)
+      (match undolist with 
+        Some l -> l := AlphaAddedSuffix prefix :: !l
+      | _ -> ());
+      H.add alphaTable prefix (ref (numsuffix, [ (suffix, data) ]));
+      if debugAlpha prefix then ignore (E.log " First seen. ");
+      lookupname, data  (* Return the original name *)
+    end
+  in
+  if debugAlpha prefix then
+    ignore (E.log " Res=: %s \n" newname (* d_loc oldloc *));
+  newname, olddata
+
+(* Strip the suffix. Return the prefix, the suffix (including the separator 
+ * and the numeric value, possibly empty), and the 
+ * numeric value of the suffix (possibly -1 if missing) *) 
+and splitNameForAlpha ~(lookupname: string) : (string * string * int) = 
+  let len = String.length lookupname in
+  (* Search backward for the numeric suffix. Return the first digit of the 
+   * suffix. Returns len if no numeric suffix *)
+  let rec skipSuffix (i: int) = 
+    if i = -1 then -1 else 
+    let c = Char.code (String.get lookupname i) - Char.code '0' in
+    if c >= 0 && c <= 9 then 
+      skipSuffix (i - 1)
+    else (i + 1)
+  in
+  let startSuffix = skipSuffix (len - 1) in
+
+  if startSuffix >= len (* No digits at all at the end *) ||
+     startSuffix <= alphaSeparatorLen     (* Not enough room for a prefix and 
+                                           * the separator before suffix *) ||
+     (* Suffix starts with a 0 and has more characters after that *) 
+     (startSuffix < len - 1 && String.get lookupname startSuffix = '0')  ||
+     alphaSeparator <> String.sub lookupname 
+                                 (startSuffix - alphaSeparatorLen)  
+                                 alphaSeparatorLen 
+  then
+    (lookupname, "", -1)  (* No valid suffix in the name *)
+  else
+    (String.sub lookupname 0 (startSuffix - alphaSeparatorLen), 
+     String.sub lookupname (startSuffix - alphaSeparatorLen) 
+                           (len - startSuffix + alphaSeparatorLen),
+     int_of_string (String.sub lookupname startSuffix (len - startSuffix)))
+    
+
+let getAlphaPrefix ~(lookupname:string) : string = 
+  let p, _, _ = splitNameForAlpha ~lookupname:lookupname in
+  p
+      
+(* Undoes the changes as specified by the undolist *)
+let undoAlphaChanges ~(alphaTable: (string, 'a alphaTableData ref) H.t) 
+                     ~(undolist: 'a undoAlphaElement list) = 
+  List.iter
+    (function 
+        AlphaChangedSuffix (where, old) -> 
+          where := old
+      | AlphaAddedSuffix name -> 
+          if debugAlpha name then 
+            ignore (E.log "Removing %s from alpha table\n" name);
+          H.remove alphaTable name)
+    undolist
+
+let docAlphaTable () (alphaTable: (string, 'a alphaTableData ref) H.t) = 
+  let acc : (string * (int * (string * 'a) list)) list ref = ref [] in
+  H.iter (fun k d -> acc := (k, !d) :: !acc) alphaTable;
+  docList ~sep:line (fun (k, (d, _)) -> dprintf "  %s -> %d" k d) () !acc
+
diff --git a/cil/ocamlutil/alpha.mli b/cil/ocamlutil/alpha.mli
new file mode 100755
index 000000000..e1e430dca
--- /dev/null
+++ b/cil/ocamlutil/alpha.mli
@@ -0,0 +1,50 @@
+(** {b ALPHA conversion} *)
+
+(** This is the type of the elements that are recorded by the alpha 
+ * conversion functions in order to be able to undo changes to the tables 
+ * they modify. Useful for implementing 
+ * scoping *)
+type 'a undoAlphaElement
+
+(** This is the type of the elements of the alpha renaming table. These 
+ * elements can carry some data associated with each occurrence of the name. *)
+type 'a alphaTableData
+
+
+(** Create a new name based on a given name. The new name is formed from a 
+ * prefix (obtained from the given name by stripping a suffix consisting of _ 
+ * followed by only digits), followed by a special separator and then by a 
+ * positive integer suffix. The first argument is a table mapping name 
+ * prefixes to some data that specifies what suffixes have been used and how 
+ * to create the new one. This function updates the table with the new 
+ * largest suffix generated. The "undolist" argument, when present, will be 
+ * used by the function to record information that can be used by 
+ * {!Alpha.undoAlphaChanges} to undo those changes. Note that the undo 
+ * information will be in reverse order in which the action occurred. Returns 
+ * the new name and, if different from the lookupname, the location of the 
+ * previous occurrence. This function knows about the location implicitly 
+ * from the {!Cil.currentLoc}. *)
+val newAlphaName: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t ->
+                  undolist: 'a undoAlphaElement list ref option ->
+                  lookupname:string -> data:'a -> string * 'a
+
+
+(** Register a name with an alpha conversion table to ensure that when later 
+  * we call newAlphaName we do not end up generating this one *)
+val registerAlphaName: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t -> 
+                       undolist: 'a undoAlphaElement list ref option ->
+                       lookupname:string -> data:'a -> unit
+
+(** Split the name in preparation for newAlphaName. The prefix returned is 
+    used to index into the hashtable. The next result value is a separator 
+    (either empty or the separator chosen to separate the original name from 
+     the index)  *)
+val docAlphaTable: unit -> 
+                  (string, 'a alphaTableData ref) Hashtbl.t -> Pretty.doc
+
+
+val getAlphaPrefix: lookupname:string -> string
+
+(** Undo the changes to a table *)
+val undoAlphaChanges: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t -> 
+                      undolist:'a undoAlphaElement list -> unit
diff --git a/cil/ocamlutil/clist.ml b/cil/ocamlutil/clist.ml
new file mode 100644
index 000000000..80f0fd641
--- /dev/null
+++ b/cil/ocamlutil/clist.ml
@@ -0,0 +1,183 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+open Pretty
+
+
+(* We often need to concatenate sequences and using lists for this purpose is 
+ * expensive. So we define a kind of "concatenable lists" that are easier to 
+ * concatenate *)
+type 'a clist = 
+  | CList of 'a list             (* This is the only representation for empty 
+                                  * *)
+  | CConsL of 'a * 'a clist
+  | CConsR of 'a clist * 'a 
+  | CSeq  of 'a clist * 'a clist (* We concatenate only two of them at this 
+                                  * time. Neither is CEmpty. To be sure 
+                                  * always use append to make these  *)
+
+let rec listifyOnto (tail: 'a list) = function
+    CList l -> l @ tail
+  | CConsL (x, l) -> x :: listifyOnto tail l
+  | CConsR (l, x) -> listifyOnto (x :: tail) l
+  | CSeq (l1, l2) -> listifyOnto (listifyOnto tail l2) l1
+        
+let toList l = listifyOnto [] l
+let fromList l = CList l
+    
+    
+let single x = CList [x]
+let empty = CList []
+    
+let checkBeforeAppend  (l1: 'a clist) (l2: 'a clist) : bool =
+  l1 != l2 || l1 = (CList [])
+
+let append l1 l2 =
+  if l1 = CList [] then l2 else
+  if l2 = CList [] then l1 else
+  begin
+    if l1 == l2 then 
+      raise (Failure "You should not use Clist.append to double a list");
+    CSeq (l1, l2)
+  end
+
+let rec length (acc: int) = function
+    CList l -> acc + (List.length l)
+  | CConsL (x, l) -> length (acc + 1) l
+  | CConsR (l, _) -> length (acc + 1) l
+  | CSeq (l1, l2) -> length (length acc l1) l2
+let length l = length 0 l  (* The external version *)
+    
+let map (f: 'a -> 'b) (l: 'a clist) : 'b clist = 
+  let rec loop = function
+      CList l -> CList (List.map f l)
+    | CConsL (x, l) -> let x' = f x in CConsL (x', loop l)
+    | CConsR (l, x) -> let l' = loop l in CConsR (l', f x)
+    | CSeq (l1, l2) -> let l1' = loop l1 in CSeq (l1', loop l2)
+  in
+  loop l
+    
+  
+let fold_left (f: 'acc -> 'a -> 'acc) (start: 'acc) (l: 'a clist) = 
+  let rec loop (start: 'acc) = function
+      CList l -> List.fold_left f start l
+    | CConsL (x, l) -> loop (f start x) l
+    | CConsR (l, x) -> let res = loop start l in f res x
+    | CSeq (l1, l2) -> 
+        let res1 = loop start l1 in
+        loop res1 l2
+  in
+  loop start l
+    
+let iter (f: 'a -> unit) (l: 'a clist) : unit = 
+  let rec loop = function
+      CList l -> List.iter f l
+    | CConsL (x, l) -> f x; loop l
+    | CConsR (l, x) -> loop l; f x
+    | CSeq (l1, l2) -> loop l1; loop l2
+  in
+  loop l
+    
+        
+let rec rev (revelem: 'a -> 'a) = function
+    CList l -> 
+      let rec revonto (tail: 'a list) = function
+          [] -> tail
+        | x :: rest -> revonto (revelem x :: tail) rest
+      in
+      CList (revonto [] l)
+
+  | CConsL (x, l) -> CConsR (rev revelem l, x)
+  | CConsR (l, x) -> CConsL (x, rev revelem l)
+  | CSeq (l1, l2) -> CSeq (rev revelem l2, rev revelem l1)
+
+
+let docCList (sep: doc) (doone: 'a -> doc) () (dl: 'a clist) = 
+  fold_left 
+    (fun (acc: doc) (elem: 'a) -> 
+      let elemd = doone elem in
+      if acc == nil then elemd else acc ++ sep ++ elemd)
+    nil
+    dl
+
+    
+(* let debugCheck (lst: 'a clist) : unit =*)
+(*   (* use a hashtable to store values encountered *)*)
+(*   let tbl : 'a bool H.t = (H.create 13) in*)
+
+(*   letrec recurse (node: 'a clist) =*)
+(*     (* have we seen*)*)
+
+(*     match node with*)
+(*     | CList*)
+
+
+(* --------------- testing ----------------- *)
+type boxedInt =
+  | BI of int
+  | SomethingElse
+
+let d_boxedInt () b =
+  match b with
+  | BI(i) -> (dprintf "%d" i)
+  | SomethingElse -> (text "somethingElse")
+
+
+(* sm: some simple tests of CLists 
+let testCList () : unit =
+begin
+  (trace "sm" (dprintf "in testCList\n"));
+
+  let clist1 = (fromList [BI(1); BI(2); BI(3)]) in
+  (trace "sm" (dprintf "length of clist1 is %d\n"
+                       (length clist1) ));
+
+  let flattened = (toList clist1) in
+  (trace "sm" (dprintf "flattened: %a\n"
+                       (docList ~sep:(chr ',' ++ break) (d_boxedInt ()))
+                       flattened));
+
+
+end
+1) in
+  (trace "sm" (dprintf "flattened: %a\n"
+                       (docList ~sep:(chr ',' ++ break) (d_boxedInt ()))
+                       flattened));
+
+
+end
+*)
diff --git a/cil/ocamlutil/clist.mli b/cil/ocamlutil/clist.mli
new file mode 100644
index 000000000..c0378a608
--- /dev/null
+++ b/cil/ocamlutil/clist.mli
@@ -0,0 +1,97 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** Utilities for managing "concatenable lists" (clists). We often need to
+    concatenate sequences, and using lists for this purpose is expensive. This
+    module provides routines to manage such lists more efficiently. In this
+    model, we never do cons or append explicitly. Instead we maintain
+    the elements of the list in a special data structure. Routines are provided
+    to convert to/from ordinary lists, and carry out common list operations.*)
+
+(** The clist datatype. A clist can be an ordinary list, or a clist preceded 
+    or followed by an element, or two clists implicitly appended together*)
+type 'a clist = 
+  | CList of 'a list             (** The only representation for the empty 
+                                     list. Try to use sparingly.  *)
+  | CConsL of 'a * 'a clist      (** Do not use this a lot because scanning 
+                                   * it is not tail recursive *)
+  | CConsR of 'a clist * 'a 
+  | CSeq of 'a clist * 'a clist (** We concatenate only two of them at this
+                                    time. Neither is the empty clist. To be
+                                    sure always use append to make these *)
+
+
+(** Convert a clist to an ordinary list *)
+val toList: 'a clist -> 'a list
+
+(** Convert an ordinary list to a clist *)  
+val fromList: 'a list -> 'a clist 
+
+(** Create a clist containing one element *)
+val single: 'a -> 'a clist        
+
+(** The empty clist *)
+val empty: 'a clist               
+
+
+(** Append two clists *)
+val append: 'a clist -> 'a clist -> 'a clist 
+                 
+(** A useful check to assert before an append. It checks that the two lists 
+ * are not identically the same (Except if they are both empty) *)
+val checkBeforeAppend: 'a clist -> 'a clist -> bool
+
+(** Find the length of a clist *)
+val length: 'a clist -> int   
+
+(** Map a function over a clist. Returns another clist *)
+val map: ('a -> 'b) -> 'a clist -> 'b clist 
+
+
+(** A version of fold_left that works on clists *)
+val fold_left: ('acc -> 'a -> 'acc) -> 'acc -> 'a clist -> 'acc
+
+(** A version of iter that works on clists *)
+val iter: ('a -> unit) -> 'a clist -> unit
+
+(** Reverse a clist. The first function reverses an element.  *)
+val rev: ('a -> 'a) -> 'a clist -> 'a clist
+
+(** A document for printing a clist (similar to [docList]) *)
+val docCList: 
+    Pretty.doc -> ('a -> Pretty.doc) -> unit -> 'a clist -> Pretty.doc
+ 
diff --git a/cil/ocamlutil/errormsg.ml b/cil/ocamlutil/errormsg.ml
new file mode 100644
index 000000000..07e935d43
--- /dev/null
+++ b/cil/ocamlutil/errormsg.ml
@@ -0,0 +1,337 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+open Pretty
+
+
+
+let debugFlag  = ref false              (* If set then print debugging info *)
+let verboseFlag = ref false
+
+(**** Error reporting ****)  
+exception Error
+let s (d : 'a) = raise Error
+
+let hadErrors = ref false
+
+let errorContext = ref []
+let pushContext f = errorContext := f :: (!errorContext)
+let popContext () = 
+  match !errorContext with 
+    _ :: t -> errorContext := t
+  | [] -> s (eprintf "Bug: cannot pop error context")
+
+
+let withContext ctx f x = 
+  pushContext ctx;
+  try
+    let res = f x in
+    popContext ();
+    res
+  with e -> begin
+    popContext ();
+    raise e
+  end
+  
+                                        (* Make sure that showContext calls 
+                                         * each f with its appropriate 
+                                         * errorContext as it was when it was 
+                                         * pushed *)
+let showContext () = 
+  let rec loop = function
+      [] -> ()
+    | f :: rest -> (errorContext := rest; (* Just in case f raises an error *)
+                    ignore (eprintf "  Context : %t@!" f);
+                    loop rest)
+  in
+  let old = !errorContext in
+  try 
+    loop old;
+    errorContext := old
+  with e -> begin
+    errorContext := old;
+    raise e
+  end
+
+let contextMessage (name: string) (d: doc) = 
+  ignore (eprintf "@!%s: %a@!" name insert d);
+  showContext ()
+
+let warnFlag = ref false
+
+let logChannel : out_channel ref = ref stderr
+
+
+let bug (fmt : ('a,unit,doc,unit) format4) : 'a = 
+  let f d =  
+    hadErrors := true; contextMessage "Bug" d; 
+    flush !logChannel
+  in
+  Pretty.gprintf f fmt
+
+let error (fmt : ('a,unit,doc,unit) format4) : 'a = 
+  let f d = hadErrors := true; contextMessage "Error" d; 
+    flush !logChannel
+  in
+  Pretty.gprintf f fmt
+
+let unimp (fmt : ('a,unit,doc,unit) format4) : 'a = 
+  let f d = hadErrors := true; contextMessage "Unimplemented" d; 
+    flush !logChannel
+  in
+  Pretty.gprintf f fmt
+
+let warn (fmt : ('a,unit,doc,unit) format4) : 'a = 
+  let f d = contextMessage "Warning" d; flush !logChannel in
+  Pretty.gprintf f fmt
+
+let warnOpt (fmt : ('a,unit,doc,unit) format4) : 'a = 
+    let f d = 
+      if !warnFlag then contextMessage "Warning" d; 
+      flush !logChannel in
+    Pretty.gprintf f fmt
+
+
+let log (fmt : ('a,unit,doc,unit) format4) : 'a = 
+  let f d = fprint !logChannel 80 d; flush !logChannel in
+  Pretty.gprintf f fmt
+
+let logg (fmt : ('a,unit,doc,unit) format4) : 'a =
+  let f d = fprint !logChannel 10000000 d; flush !logChannel in
+  Pretty.gprintf f fmt
+
+let null (fmt : ('a,unit,doc,unit) format4) : 'a =
+  let f d = () in
+  Pretty.gprintf f fmt
+
+
+let theLexbuf = ref (Lexing.from_string "")
+
+let fail format = Pretty.gprintf (fun x -> Pretty.fprint stderr 80 x; 
+                                           raise (Failure "")) format
+
+
+
+(***** Handling parsing errors ********)
+type parseinfo =
+    { mutable  linenum: int      ; (* Current line *)
+      mutable  linestart: int    ; (* The position in the buffer where the 
+                                    * current line starts *)
+      mutable fileName : string   ; (* Current file *)
+      mutable hfile   : string   ; (* High-level file *)
+      mutable hline   : int;       (* High-level line *)
+      lexbuf          : Lexing.lexbuf;
+      inchan          : in_channel option; (* None, if from a string *)
+      mutable   num_errors : int;  (* Errors so far *)
+    }
+      
+let dummyinfo = 
+    { linenum   = 1;
+      linestart = 0;
+      fileName  = "" ;
+      lexbuf    = Lexing.from_string "";
+      inchan    = None;
+      hfile     = "";
+      hline     = 0;
+      num_errors = 0;
+    }
+
+let current = ref dummyinfo
+
+let setHLine (l: int) : unit =
+    !current.hline <- l
+let setHFile (f: string) : unit =
+    !current.hfile <- f
+    
+let rem_quotes str = String.sub str 1 ((String.length str) - 2)
+
+(* Change \ into / in file names. To avoid complications with escapes *)
+let cleanFileName str = 
+  let str1 = 
+    if str <> "" && String.get str 0 = '"' (* '"' ( *) 
+    then rem_quotes str else str in
+  let l = String.length str1 in
+  let rec loop (copyto: int) (i: int) = 
+    if i >= l then 
+      String.sub str1 0 copyto
+     else 
+       let c = String.get str1 i in
+       if c <> '\\' then begin
+          String.set str1 copyto c; loop (copyto + 1) (i + 1)
+       end else begin
+          String.set str1 copyto '/';
+          if i < l - 2 && String.get str1 (i + 1) = '\\' then
+              loop (copyto + 1) (i + 2)
+          else 
+              loop (copyto + 1) (i + 1)
+       end
+  in
+  loop 0 0
+
+let readingFromStdin = ref false
+
+let startParsing ?(useBasename=true) (fname: string) = 
+  (* We only support one open file at a time *)
+  if !current != dummyinfo then begin
+     s (error "Errormsg.startParsing supports only one open file: You want to open %s and %s is still open\n" fname !current.fileName); 
+  end; 
+  let inchan = 
+    try if fname = "-" then begin 
+           readingFromStdin := true;
+           stdin 
+        end else begin
+           readingFromStdin := false;
+           open_in fname 
+        end
+    with e -> s (error "Cannot find input file %s (exception %s" 
+                    fname (Printexc.to_string e)) in
+  let lexbuf = Lexing.from_channel inchan in
+  let i = 
+    { linenum = 1; linestart = 0; 
+      fileName = 
+        cleanFileName (if useBasename then Filename.basename fname else fname);
+      lexbuf = lexbuf; inchan = Some inchan;
+      hfile = ""; hline = 0;
+      num_errors = 0 } in
+
+  current := i;
+  lexbuf
+
+let startParsingFromString ?(file="<string>") ?(line=1) (str: string) = 
+  let lexbuf = Lexing.from_string str in
+  let i = 
+    { linenum = line; linestart = line - 1;
+      fileName = file;
+      hfile = ""; hline = 0;
+      lexbuf = lexbuf; 
+      inchan = None;
+      num_errors = 0 }
+  in
+  current := i;
+  lexbuf
+
+let finishParsing () = 
+  let i = !current in
+  (match i.inchan with Some c -> close_in c | _ -> ());
+  current := dummyinfo
+
+
+(* Call this function to announce a new line *)
+let newline () = 
+  let i = !current in
+  i.linenum <- 1 + i.linenum;
+  i.linestart <- Lexing.lexeme_start i.lexbuf
+
+let newHline () = 
+  let i = !current in
+  i.hline <- 1 + i.hline
+
+let setCurrentLine (i: int) = 
+  !current.linenum <- i
+
+let setCurrentFile (n: string) = 
+  !current.fileName <- cleanFileName n
+
+
+let max_errors = 20  (* Stop after 20 errors *)
+
+let parse_error (msg: string) : 'a =
+  (* Sometimes the Ocaml parser raises errors in symbol_start and symbol_end *)
+  let token_start, token_end = 
+    try Parsing.symbol_start (), Parsing.symbol_end ()
+    with e -> begin 
+      ignore (warn "Parsing raised %s\n" (Printexc.to_string e));
+      0, 0
+    end
+  in
+  let i = !current in
+  let adjStart = 
+    if token_start < i.linestart then 0 else token_start - i.linestart in
+  let adjEnd = 
+    if token_end < i.linestart then 0 else token_end - i.linestart in
+  output_string 
+    stderr
+    (i.fileName ^ "[" ^ (string_of_int i.linenum) ^ ":" 
+                        ^ (string_of_int adjStart) ^ "-" 
+                        ^ (string_of_int adjEnd) 
+                  ^ "]"
+     ^ " : " ^ msg);
+  output_string stderr "\n";
+  flush stderr ;
+  i.num_errors <- i.num_errors + 1;
+  if i.num_errors > max_errors then begin
+    output_string stderr "Too many errors. Aborting.\n" ;
+    exit 1 
+  end;
+  hadErrors := true;
+  raise Parsing.Parse_error
+
+
+
+
+(* More parsing support functions: line, file, char count *)
+let getPosition () : int * string * int = 
+  let i = !current in 
+  i.linenum, i.fileName, Lexing.lexeme_start i.lexbuf
+
+
+let getHPosition () = 
+  !current.hline, !current.hfile
+
+(** Type for source-file locations *)
+type location = 
+    { file: string; (** The file name *)
+      line: int;    (** The line number *)
+      hfile: string; (** The high-level file name, or "" if not present *)
+      hline: int;    (** The high-level line number, or 0 if not present *)
+    } 
+
+let d_loc () l = 
+  text (l.file ^ ":" ^ string_of_int l.line)
+    
+let d_hloc () (l: location) = 
+  dprintf "%s:%d%a" l.file l.line
+    insert (if l.hline > 0 then dprintf " (%s:%d)" l.hfile l.hline else nil)
+
+let locUnknown = { file = ""; hfile = ""; line = -1; hline = -1 }
+
+let getLocation () = 
+  let hl, hf = getHPosition () in
+  let l, f, c = getPosition () in
+  { hfile = hf; hline = hl;
+    file = f; line = l } 
+
diff --git a/cil/ocamlutil/errormsg.mli b/cil/ocamlutil/errormsg.mli
new file mode 100644
index 000000000..8d9c69799
--- /dev/null
+++ b/cil/ocamlutil/errormsg.mli
@@ -0,0 +1,164 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(** Utility functions for error-reporting *)
+
+(** A channel for printing log messages *)
+val logChannel : out_channel ref
+
+(** If set then print debugging info *)
+val debugFlag  : bool ref               
+
+val verboseFlag : bool ref
+
+
+(** Set to true if you want to see all warnings. *)
+val warnFlag: bool ref
+
+(** Error reporting functions raise this exception *)
+exception Error
+
+
+   (* Error reporting. All of these functions take same arguments as a 
+    * Pretty.eprintf. They set the hadErrors flag, but do not raise an 
+    * exception. Their return type is unit.
+    *)
+
+(** Prints an error message of the form [Error: ...]. 
+    Use in conjunction with s, for example: [E.s (E.error ... )]. *)
+val error:         ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Similar to [error] except that its output has the form [Bug: ...] *)
+val bug:           ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Similar to [error] except that its output has the form [Unimplemented: ...] *)
+val unimp:         ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Stop the execution by raising an Error. *)
+val s:             'a -> 'b
+
+(** This is set whenever one of the above error functions are called. It must
+    be cleared manually *)
+val hadErrors: bool ref  
+
+(** Like {!Errormsg.error} but does not raise the {!Errormsg.Error} 
+ * exception. Return type is unit. *)
+val warn:    ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Like {!Errormsg.warn} but optional. Printed only if the 
+ * {!Errormsg.warnFlag} is set *)
+val warnOpt: ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Print something to [logChannel] *)
+val log:           ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** same as {!Errormsg.log} but do not wrap lines *)
+val logg:          ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+   (* All of the error and warning reporting functions can also print a 
+    * context. To register a context printing function use "pushContext". To 
+    * remove the last registered one use "popContext". If one of the error 
+    * reporting functions is called it will invoke all currently registered 
+    * context reporting functions in the reverse order they were registered. *)
+
+(** Do not actually print (i.e. print to /dev/null) *)
+val null : ('a,unit,Pretty.doc,unit) format4 -> 'a
+
+(** Registers a context printing function *)
+val pushContext  : (unit -> Pretty.doc) -> unit
+
+(** Removes the last registered context printing function *)
+val popContext   : unit -> unit
+
+(** Show the context stack to stderr *)
+val showContext : unit -> unit
+
+(** To ensure that the context is registered and removed properly, use the 
+    function below *)
+val withContext  : (unit -> Pretty.doc) -> ('a -> 'b) -> 'a -> 'b
+
+
+
+val newline: unit -> unit  (* Call this function to announce a new line *)
+val newHline: unit -> unit 
+
+val getPosition: unit -> int * string * int (* Line number, file name, 
+                                               current byte count in file *)
+val getHPosition: unit -> int * string (** high-level position *)
+
+val setHLine: int -> unit
+val setHFile: string -> unit
+
+val setCurrentLine: int -> unit
+val setCurrentFile: string -> unit
+
+(** Type for source-file locations *)
+type location = 
+    { file: string; (** The file name *)
+      line: int;    (** The line number *)
+      hfile: string; (** The high-level file name, or "" if not present *)
+      hline: int;    (** The high-level line number, or 0 if not present *)
+    } 
+
+val d_loc: unit -> location -> Pretty.doc
+val d_hloc: unit -> location -> Pretty.doc
+    
+val getLocation: unit -> location
+
+val parse_error: string -> (* A message *) 
+                 'a
+
+(** An unknown location for use when you need one but you don't have one *)
+val locUnknown: location
+
+
+(** Records whether the stdin is open for reading the goal **)
+val readingFromStdin: bool ref
+
+
+(* Call this function to start parsing. useBasename is by default "true", 
+ * meaning that the error information maintains only the basename. If the 
+ * file name is - then it reads from stdin. *)
+val startParsing:  ?useBasename:bool -> string -> 
+  Lexing.lexbuf 
+
+val startParsingFromString: ?file:string -> ?line:int -> string
+                            -> Lexing.lexbuf
+
+val finishParsing: unit -> unit (* Call this function to finish parsing and 
+                                 * close the input channel *)
+
+
diff --git a/cil/ocamlutil/growArray.ml b/cil/ocamlutil/growArray.ml
new file mode 100644
index 000000000..ccadc7627
--- /dev/null
+++ b/cil/ocamlutil/growArray.ml
@@ -0,0 +1,191 @@
+(** Growable Arrays *)
+
+type 'a fill =
+    Elem of 'a
+  | Susp of (int -> 'a)
+
+type 'a t = {
+            gaFill: 'a fill;
+            (** Stuff to use to fill in the array as it grows *)
+
+    mutable gaMaxInitIndex: int;
+            (** Maximum index that was written to. -1 if no writes have 
+             * been made.  *)
+
+    mutable gaData: 'a array;
+  } 
+
+let growTheArray (ga: 'a t) (len: int) 
+                 (toidx: int) (why: string) : unit = 
+  if toidx >= len then begin
+    (* Grow the array by 50% *)
+    let newlen = toidx + 1 + len  / 2 in
+(*
+    ignore (E.log "growing an array to idx=%d (%s)\n" toidx why);
+*)
+    let data' = begin match ga.gaFill with
+      Elem x ->
+	let data'' = Array.create newlen x in
+	Array.blit ga.gaData 0 data'' 0 len;
+	data''
+    | Susp f -> Array.init newlen
+	  (fun i -> if i < len then ga.gaData.(i) else f i)
+    end
+    in
+    ga.gaData <- data'
+  end
+
+let max_init_index (ga: 'a t) : int =
+  ga.gaMaxInitIndex
+
+let num_alloc_index (ga: 'a t) : int = 
+  Array.length ga.gaData
+
+let reset_max_init_index (ga: 'a t) : unit =
+  ga.gaMaxInitIndex <- -1
+
+let getg (ga: 'a t) (r: int) : 'a = 
+  let len = Array.length ga.gaData in
+  if r >= len then 
+    growTheArray ga len r "getg";
+
+  ga.gaData.(r)
+
+let setg (ga: 'a t) (r: int) (what: 'a) : unit = 
+  let len = Array.length ga.gaData in
+  if r >= len then 
+    growTheArray ga len r "setg";
+  if r > max_init_index ga then ga.gaMaxInitIndex <- r;
+  ga.gaData.(r) <- what
+
+let get (ga: 'a t) (r: int) : 'a = Array.get ga.gaData r
+
+let set (ga: 'a t) (r: int) (what: 'a) : unit = 
+  if r > max_init_index ga then ga.gaMaxInitIndex <- r;
+  Array.set ga.gaData r what
+
+let make (initsz: int) (fill: 'a fill) : 'a t = 
+  { gaFill = fill;
+    gaMaxInitIndex = -1;
+    gaData = begin match fill with
+      Elem x -> Array.create initsz x
+    | Susp f -> Array.init initsz f
+    end; }
+
+let clear (ga: 'a t) : unit =
+  (* This assumes the user hasn't used the raw "set" on any value past
+     max_init_index.  Maybe we shouldn't trust max_init_index here?? *) 
+  if ga.gaMaxInitIndex >= 0 then begin
+    begin match ga.gaFill with 
+        Elem x -> Array.fill ga.gaData 0 (ga.gaMaxInitIndex+1) x
+      | Susp f -> 
+          for i = 0 to ga.gaMaxInitIndex do 
+            Array.set ga.gaData i (f i)
+          done
+    end;
+    ga.gaMaxInitIndex <- -1
+  end
+
+let copy (ga: 'a t) : 'a t = 
+  { ga with gaData = Array.copy ga.gaData } 
+
+let deep_copy (ga: 'a t) (copy: 'a -> 'a): 'a t = 
+  { ga with gaData = Array.map copy ga.gaData } 
+
+(* An accumulating for loop. Used internally. *)
+let fold_for ~(init: 'a) ~(lo: int) ~(hi: int) (f: int -> 'a -> 'a) =
+  let rec forloop i acc =
+    if i > hi then acc
+    else forloop (i+1) (f i acc)
+  in
+  forloop lo init
+
+(** Iterate over the initialized elements of the array *)
+let iter (f: 'a -> unit) (ga: 'a t) = 
+  for i = 0 to max_init_index ga do 
+    f ga.gaData.(i)
+  done
+
+(** Iterate over the initialized elements of the array *)
+let iteri  (f: int -> 'a -> unit) (ga: 'a t) = 
+  for i = 0 to max_init_index ga do 
+    f i ga.gaData.(i)
+  done
+
+(** Iterate over the elements of 2 arrays *)
+let iter2  (f: int -> 'a -> 'b -> unit) (ga1: 'a t) (ga2: 'b t) = 
+  let len1 = max_init_index ga1 in
+  let len2 = max_init_index ga2 in
+  if len1 > -1 || len2 > -1 then begin
+    let max = if len1 > len2 then begin
+                  ignore(getg ga2 len1); (*grow ga2 to match ga1*)
+                  len1
+              end else begin
+                  ignore(getg ga1 len2); (*grow ga1 to match ga2*)
+                  len2
+              end in
+    for i = 0 to max do 
+      f i ga1.gaData.(i) ga2.gaData.(i)
+    done
+  end
+
+(** Fold left over the initialized elements of the array *)
+let fold_left (f: 'acc -> 'a -> 'acc) (acc: 'acc) (ga: 'a t) : 'acc = 
+  let rec loop (acc: 'acc) (idx: int) : 'acc = 
+    if idx > max_init_index ga then 
+      acc
+    else
+      loop (f acc ga.gaData.(idx)) (idx + 1)
+  in
+  loop acc 0
+
+
+(** Fold left over the initialized elements of the array *)
+let fold_lefti (f: 'acc -> int -> 'a -> 'acc) (acc: 'acc) (ga: 'a t) : 'acc = 
+  let rec loop (acc: 'acc) (idx: int) : 'acc = 
+    if idx > max_init_index ga then 
+      acc
+    else
+      loop (f acc idx ga.gaData.(idx)) (idx + 1)
+  in
+  loop acc 0
+
+(** Fold right over the initialized elements of the array *)
+let fold_right (f: 'a -> 'acc -> 'acc) (ga: 'a t) (acc: 'acc) : 'acc = 
+  let rec loop (acc: 'acc) (idx: int) : 'acc = 
+    if idx < 0 then 
+      acc
+    else
+      loop (f ga.gaData.(idx) acc) (idx - 1)
+  in
+  loop acc (max_init_index ga)
+
+(** Document generator *)
+let d_growarray (sep: Pretty.doc)
+                (doit:int -> 'a -> Pretty.doc)
+                ()
+                (elements: 'a t) =
+  Pretty.docArray ~sep:sep doit () elements.gaData
+
+let restoreGA ?deepCopy (ga: 'a t) : (unit -> unit) = 
+  let old = 
+    (match deepCopy with 
+         None -> copy ga
+       | Some f -> deep_copy ga f)
+  in
+  (fun () ->
+     if ga.gaFill != old.gaFill then
+       Errormsg.s 
+         (Errormsg.bug "restoreGA to an array with a different fill.");
+     ga.gaMaxInitIndex <- old.gaMaxInitIndex;
+     for i = 0 to max_init_index ga do 
+       set ga i (getg old i)
+     done)
+
+let find (ga: 'a t) (fn: 'a -> bool) : int option = 
+  let rec loop (i:int) : int option = 
+    if i > ga.gaMaxInitIndex then None
+    else if fn (get ga i) then Some i
+    else loop (i + 1)
+  in
+  loop 0
diff --git a/cil/ocamlutil/growArray.mli b/cil/ocamlutil/growArray.mli
new file mode 100644
index 000000000..4cb5f48f5
--- /dev/null
+++ b/cil/ocamlutil/growArray.mli
@@ -0,0 +1,131 @@
+(***********************************************************************)
+(* Growable Arrays                                                     *)
+(*                                                                     *)
+(* This a wrapper around the standard OCaml array, but will grow       *)
+(* automatically on get or set outside the current size of the         *)
+(* array.                                                              *)
+(*                                                                     *)
+(* The interface is the same as the standard OCaml array where         *)
+(* applicable (and implemented).                                       *)
+(***********************************************************************)
+
+(* $Id: growArray.mli,v 1.8 2005-01-06 15:37:36 necula Exp $ *)
+
+(** Array operations. *)
+
+(** The type of growable arrays *)
+type 'a t
+
+(** The default value to a new element of the growable array *)
+type 'a fill =
+    Elem of 'a
+    (* A default value *)
+  | Susp of (int -> 'a)
+    (* A function given an index to generate a default value *)
+
+val make : int -> 'a fill -> 'a t
+(** [GrowArray.make n x] returns a fresh growable array of size
+   at least [n] with default value specified by [x].
+
+   Raise [Invalid_argument] if [n < 0] or [n > Sys.max_array_length]. *)
+
+val num_alloc_index: 'a t -> int
+(** [GrowArray.num_alloc_index a] returns the number of allocated entries in 
+ * the array **)
+
+val max_init_index : 'a t -> int
+(** [GrowArray.max_init_index a] returns the maximum index to
+    which has been written.
+
+    Returns -1 if no writes have been made. *)
+
+val reset_max_init_index : 'a t -> unit
+(** [GrowArray.reset_init a] resets the max_init_index. You should probably
+   use [GrowArray.clear a] instead if you also want to delete the contents. *)
+
+val getg : 'a t -> int -> 'a
+(** [GrowArray.getg a n] returns the element number [n] of array [a].
+   The first element has number 0.
+   The last element has number [GrowArray.length a - 1].
+
+   If [n] is outside the range 0 to [(GrowArray.max_init_index a)],
+   then the array grows to at least [n] and yields the default value. *)
+
+val setg : 'a t -> int -> 'a -> unit
+(** [GrowArray.setg a n x] modifies array [a] in place, replacing
+   element number [n] with [x].
+
+   If [n] is outside the range 0 to [(GrowArray.max_init_index a)],
+   then the array grows to at least [n] and yields the default value. *)
+
+val get : 'a t -> int -> 'a
+(** [GrowArray.get a n] returns the element number [n] of grow array [a].
+
+   Raise [Invalid_argument "Array.get"]  if [n] is outside the range
+   of the underlying array. *)
+
+val set : 'a t -> int -> 'a -> unit
+(** [GrowArray.set a n x] modifies grow array [a] in place, replacing
+   element number [n] with [x].
+
+   Raise [Invalid_argument "Array.set"] if [n] is outside the range
+   of the underlying array. *)
+        
+val clear: 'a t -> unit 
+(** [GrowArray.clear a] clears the contents of the array and sets 
+   max_init_index to -1.  Suspension thunks will be rerun to regenerate the 
+   initial values of the array. *)
+
+val copy : 'a t -> 'a t
+(** [GrowArray.copy a] returns a copy of [a], that is, a fresh array
+   containing the same elements as [a]. *)
+
+val deep_copy : 'a t -> ('a -> 'a) -> 'a t
+(** [GrowArray.copy a f] returns a deep copy of [a] using f to
+    copy elements of [a]. *)
+
+val iter : ('a -> unit) -> 'a t -> unit
+(** [GrowArray.iter f a] applies function [f] in turn to all
+   the elements of [a].  It is equivalent to
+   [f a.(0); f a.(1); ...; f a.(GrowArray.length a - 1); ()]. *)
+
+val iteri : (int -> 'a -> unit) -> 'a t -> unit
+(** Same as {!GrowArray.iter}, but the
+   function is applied to the index of the element as first argument,
+   and the element itself as second argument. *)
+
+val iter2 : (int -> 'a -> 'b -> unit) -> 'a t -> 'b t -> unit
+(** Same as {!GrowArray.iteri}, but the function is applied to two arrays.
+  [iter2 f a b]  is equivalent to
+  [f 0 a.(0) b.(0); f 1 a.(1) b.(1); ...;  f n a.(n) b.(n); ()]
+  where n is the larger of (max_init_index a) or (max_init_index b).
+  The shorter array will grow to match the longer.*)
+
+val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a
+(** [GrowArray.fold_left f x a] computes
+   [f (... (f (f x a.(0)) a.(1)) ...) a.(n-1)],
+   where [n] is the length of the array [a]. *)
+
+val fold_lefti : ('a -> int -> 'b -> 'a) -> 'a -> 'b t -> 'a
+(** [GrowArray.fold_lefti f x a] computes
+   [f (... (f (f x 0 a.(0)) 1 a.(1)) ...) (n-1) a.(n-1)],
+   where [n] is the length of the array [a]. *)
+
+val fold_right : ('b -> 'a -> 'a) -> 'b t -> 'a -> 'a
+(** [GrowArray.fold_right f a x] computes
+   [f a.(0) (f a.(1) ( ... (f a.(n-1) x) ...))],
+   where [n] is the length of the array [a]. *)
+
+val d_growarray : Pretty.doc -> (int -> 'a -> Pretty.doc) -> unit -> 'a t
+                             -> Pretty.doc
+(** [GrowArray.d_growarray sep f () a] creates a {!Pretty.doc} for growable
+   array a using separator sep and element printer f. *)
+
+
+val restoreGA: ?deepCopy:('a -> 'a) -> 'a t -> unit -> unit
+(** Given a growable array, produce a thunk that later restores it to its
+    current value *)
+
+val find: 'a t -> ('a -> bool) -> int option
+(** Returns the index of the first element in the array that satisfies the
+    predicate, or None if there is no such element *)
diff --git a/cil/ocamlutil/inthash.ml b/cil/ocamlutil/inthash.ml
new file mode 100755
index 000000000..b1ad0c07c
--- /dev/null
+++ b/cil/ocamlutil/inthash.ml
@@ -0,0 +1,188 @@
+(** A hash table specialized on integer keys *)
+type 'a t =
+  { mutable size: int;                        (* number of elements *)
+    mutable data: 'a bucketlist array } (* the buckets *)
+
+and 'a bucketlist =
+    Empty
+  | Cons of int * 'a * 'a bucketlist
+
+let hash key = key land 0x3fffffff
+
+let create initial_size =
+  let s = min (max 1 initial_size) Sys.max_array_length in
+  { size = 0; data = Array.make s Empty }
+
+let clear h =
+  for i = 0 to Array.length h.data - 1 do
+    h.data.(i) <- Empty
+  done;
+  h.size <- 0
+
+let copy h =
+  { size = h.size;
+    data = Array.copy h.data }
+
+let copy_into src dest = 
+  dest.size <- src.size;
+  dest.data <- Array.copy src.data
+
+let length h = h.size
+
+let resize tbl =
+  let odata = tbl.data in
+  let osize = Array.length odata in
+  let nsize = min (2 * osize + 1) Sys.max_array_length in
+  if nsize <> osize then begin
+    let ndata = Array.create nsize Empty in
+    let rec insert_bucket = function
+        Empty -> ()
+      | Cons(key, data, rest) ->
+          insert_bucket rest; (* preserve original order of elements *)
+          let nidx = (hash key) mod nsize in
+          ndata.(nidx) <- Cons(key, data, ndata.(nidx)) in
+    for i = 0 to osize - 1 do
+      insert_bucket odata.(i)
+    done;
+    tbl.data <- ndata;
+  end
+
+let add h key info =
+  let i = (hash key) mod (Array.length h.data) in
+  let bucket = Cons(key, info, h.data.(i)) in
+  h.data.(i) <- bucket;
+  h.size <- succ h.size;
+  if h.size > Array.length h.data lsl 1 then resize h
+
+let remove h key =
+  let rec remove_bucket = function
+      Empty ->
+        Empty
+    | Cons(k, i, next) ->
+        if k = key
+        then begin h.size <- pred h.size; next end
+        else Cons(k, i, remove_bucket next) in
+  let i = (hash key) mod (Array.length h.data) in
+  h.data.(i) <- remove_bucket h.data.(i)
+
+let remove_all h key =
+  let rec remove_bucket = function
+      Empty ->
+        Empty
+    | Cons(k, i, next) ->
+        if k = key
+        then begin h.size <- pred h.size; 
+	  remove_bucket next end
+        else Cons(k, i, remove_bucket next) in
+  let i = (hash key) mod (Array.length h.data) in
+  h.data.(i) <- remove_bucket h.data.(i)
+
+let rec find_rec key = function
+    Empty ->
+      raise Not_found
+  | Cons(k, d, rest) ->
+      if key = k then d else find_rec key rest
+
+let find h key =
+  match h.data.((hash key) mod (Array.length h.data)) with
+    Empty -> raise Not_found
+  | Cons(k1, d1, rest1) ->
+      if key = k1 then d1 else
+      match rest1 with
+        Empty -> raise Not_found
+      | Cons(k2, d2, rest2) ->
+          if key = k2 then d2 else
+          match rest2 with
+            Empty -> raise Not_found
+          | Cons(k3, d3, rest3) ->
+              if key = k3 then d3 else find_rec key rest3
+
+let find_all h key =
+  let rec find_in_bucket = function
+    Empty ->
+      []
+  | Cons(k, d, rest) ->
+      if k = key then d :: find_in_bucket rest else find_in_bucket rest in
+  find_in_bucket h.data.((hash key) mod (Array.length h.data))
+
+let replace h key info =
+  let rec replace_bucket = function
+      Empty ->
+        raise Not_found
+    | Cons(k, i, next) ->
+        if k = key
+        then Cons(k, info, next)
+        else Cons(k, i, replace_bucket next) in
+  let i = (hash key) mod (Array.length h.data) in
+  let l = h.data.(i) in
+  try
+    h.data.(i) <- replace_bucket l
+  with Not_found ->
+    h.data.(i) <- Cons(key, info, l);
+    h.size <- succ h.size;
+    if h.size > Array.length h.data lsl 1 then resize h
+
+let mem h key =
+  let rec mem_in_bucket = function
+  | Empty ->
+      false
+  | Cons(k, d, rest) ->
+      k = key || mem_in_bucket rest in
+  mem_in_bucket h.data.((hash key) mod (Array.length h.data))
+
+let iter (f: int -> 'a -> unit) (h: 'a t) : unit =
+  let rec do_bucket = function
+      Empty ->
+        ()
+    | Cons(k, d, rest) ->
+        f k d; do_bucket rest in
+  let d = h.data in
+  for i = 0 to Array.length d - 1 do
+    do_bucket d.(i)
+  done
+
+let fold (f: int -> 'a -> 'b -> 'b) (h: 'a t) (init: 'b) =
+  let rec do_bucket b accu =
+    match b with
+      Empty ->
+        accu
+    | Cons(k, d, rest) ->
+        do_bucket rest (f k d accu) in
+  let d = h.data in
+  let accu = ref init in
+  for i = 0 to Array.length d - 1 do
+    accu := do_bucket d.(i) !accu
+  done;
+  !accu
+
+
+let memoize (h: 'a t) (key: int) (f: int -> 'a) : 'a = 
+  let i = (hash key) mod (Array.length h.data) in
+  let rec find_rec key = function
+      Empty -> addit ()
+    | Cons(k, d, rest) ->
+        if key = k then d else find_rec key rest
+  and find_in_bucket key = function
+      Empty -> addit ()
+    | Cons(k1, d1, rest1) ->
+        if key = k1 then d1 else
+        match rest1 with
+          Empty -> addit ()
+        | Cons(k2, d2, rest2) ->
+            if key = k2 then d2 else
+            match rest2 with
+              Empty -> addit () 
+            | Cons(k3, d3, rest3) ->
+                if key = k3 then d3 else find_rec key rest3
+  and addit () = 
+    let it = f key in
+    h.data.(i) <- Cons(key, it, h.data.(i));
+    h.size <- succ h.size;
+    if h.size > Array.length h.data lsl 1 then resize h;
+    it
+  in
+  find_in_bucket key h.data.(i)
+                  
+  
+let tolist (h: 'a t) : (int * 'a) list = 
+  fold (fun k d acc -> (k, d) :: acc) h []
diff --git a/cil/ocamlutil/inthash.mli b/cil/ocamlutil/inthash.mli
new file mode 100755
index 000000000..f62fcd2be
--- /dev/null
+++ b/cil/ocamlutil/inthash.mli
@@ -0,0 +1,27 @@
+type 'a t
+
+(* These functions behave the same as Hashtbl, but the key type is
+   always int.  (Specializing on int improves the performance) *)
+
+val create: int -> 'a t
+val clear: 'a t -> unit
+val length : 'a t -> int
+
+val copy: 'a t -> 'a t
+val copy_into: 'a t -> 'a t -> unit
+
+val add: 'a t -> int -> 'a -> unit
+val replace: 'a t -> int -> 'a -> unit
+val remove: 'a t -> int -> unit
+val remove_all: 'a t -> int -> unit
+
+val mem: 'a t -> int -> bool
+val find: 'a t -> int -> 'a
+val find_all: 'a t -> int -> 'a list
+
+val iter: (int -> 'a -> unit) -> 'a t -> unit
+val fold: (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
+
+val memoize: 'a t -> int -> (int -> 'a) -> 'a
+
+val tolist: 'a t -> (int * 'a) list
diff --git a/cil/ocamlutil/intmap.ml b/cil/ocamlutil/intmap.ml
new file mode 100755
index 000000000..00242bc13
--- /dev/null
+++ b/cil/ocamlutil/intmap.ml
@@ -0,0 +1,171 @@
+(***********************************************************************)
+(*                                                                     *)
+(*                           Objective Caml                            *)
+(*                                                                     *)
+(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
+(*                                                                     *)
+(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed    *)
+(*  under the terms of the GNU Library General Public License, with    *)
+(*  the special exception on linking described in file ../LICENSE.     *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* $Id: intmap.ml,v 1.2 2005-10-04 21:30:25 necula Exp $ *)
+
+(* specialized to integer keys by George Necula *)
+
+type 'a t =
+    Empty
+  | Node of 'a t * int * 'a * 'a t * int
+
+let height = function
+    Empty -> 0
+  | Node(_,_,_,_,h) -> h
+        
+let create l x d r =
+  let hl = height l and hr = height r in
+  Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1))
+
+let bal l x d r =
+  let hl = match l with Empty -> 0 | Node(_,_,_,_,h) -> h in
+  let hr = match r with Empty -> 0 | Node(_,_,_,_,h) -> h in
+  if hl > hr + 2 then begin
+    match l with
+      Empty -> invalid_arg "Map.bal"
+    | Node(ll, lv, ld, lr, _) ->
+        if height ll >= height lr then
+          create ll lv ld (create lr x d r)
+        else begin
+          match lr with
+            Empty -> invalid_arg "Map.bal"
+          | Node(lrl, lrv, lrd, lrr, _)->
+              create (create ll lv ld lrl) lrv lrd (create lrr x d r)
+        end
+  end else if hr > hl + 2 then begin
+    match r with
+      Empty -> invalid_arg "Map.bal"
+    | Node(rl, rv, rd, rr, _) ->
+        if height rr >= height rl then
+          create (create l x d rl) rv rd rr
+        else begin
+          match rl with
+            Empty -> invalid_arg "Map.bal"
+          | Node(rll, rlv, rld, rlr, _) ->
+              create (create l x d rll) rlv rld (create rlr rv rd rr)
+        end
+  end else
+    Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1))
+      
+let empty = Empty
+
+let is_empty = function Empty -> true | _ -> false
+    
+let rec add x data = function
+    Empty ->
+      Node(Empty, x, data, Empty, 1)
+  | Node(l, v, d, r, h) as t ->
+      if x = v then
+        Node(l, x, data, r, h)
+      else if x < v then
+        bal (add x data l) v d r
+      else
+        bal l v d (add x data r)
+          
+let rec find x = function
+    Empty ->
+      raise Not_found
+  | Node(l, v, d, r, _) ->
+      if x = v then d
+      else find x (if x < v then l else r)
+          
+let rec mem x = function
+    Empty ->
+      false
+  | Node(l, v, d, r, _) ->
+      x = v || mem x (if x < v then l else r)
+        
+let rec min_binding = function
+    Empty -> raise Not_found
+  | Node(Empty, x, d, r, _) -> (x, d)
+  | Node(l, x, d, r, _) -> min_binding l
+        
+let rec remove_min_binding = function
+    Empty -> invalid_arg "Map.remove_min_elt"
+  | Node(Empty, x, d, r, _) -> r
+  | Node(l, x, d, r, _) -> bal (remove_min_binding l) x d r
+
+let merge t1 t2 =
+  match (t1, t2) with
+    (Empty, t) -> t
+  | (t, Empty) -> t
+  | (_, _) ->
+      let (x, d) = min_binding t2 in
+      bal t1 x d (remove_min_binding t2)
+
+let rec remove x = function
+    Empty ->
+      Empty
+  | Node(l, v, d, r, h) as t ->
+      if x = v then
+        merge l r
+      else if x < v then
+        bal (remove x l) v d r
+      else
+        bal l v d (remove x r)
+
+let rec iter f = function
+    Empty -> ()
+  | Node(l, v, d, r, _) ->
+      iter f l; f v d; iter f r
+
+let rec map f = function
+    Empty               -> Empty
+  | Node(l, v, d, r, h) -> Node(map f l, v, f d, map f r, h)
+
+let rec mapi f = function
+    Empty               -> Empty
+  | Node(l, v, d, r, h) -> Node(mapi f l, v, f v d, mapi f r, h)
+
+let rec fold f m accu =
+  match m with
+    Empty -> accu
+  | Node(l, v, d, r, _) ->
+      fold f l (f v d (fold f r accu))
+
+type 'a enumeration = End | More of int * 'a * 'a t * 'a enumeration
+
+let rec cons_enum m e =
+  match m with
+    Empty -> e
+  | Node(l, v, d, r, _) -> cons_enum l (More(v, d, r, e))
+
+let compare cmp m1 m2 =
+  let rec compare_aux e1 e2 =
+    match (e1, e2) with
+      (End, End) -> 0
+    | (End, _)  -> -1
+    | (_, End) -> 1
+    | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) ->
+        if v1 <> v2 then if v1 < v2 then -1 else 1 else
+        let c = cmp d1 d2 in
+        if c <> 0 then c else
+        compare_aux (cons_enum r1 e1) (cons_enum r2 e2)
+in compare_aux (cons_enum m1 End) (cons_enum m2 End)
+
+let equal cmp m1 m2 =
+  let rec equal_aux e1 e2 =
+    match (e1, e2) with
+      (End, End) -> true
+    | (End, _)  -> false
+    | (_, End) -> false
+    | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) ->
+        v1 = v2 && cmp d1 d2 &&
+        equal_aux (cons_enum r1 e1) (cons_enum r2 e2)
+in equal_aux (cons_enum m1 End) (cons_enum m2 End)
+
+(** Some definitions for ML2Coq *)
+let _ = ignore "coq: 
+(* Some definitions for ML2Coq *)
+
+"
diff --git a/cil/ocamlutil/intmap.mli b/cil/ocamlutil/intmap.mli
new file mode 100755
index 000000000..eef89b559
--- /dev/null
+++ b/cil/ocamlutil/intmap.mli
@@ -0,0 +1,87 @@
+(***********************************************************************)
+(*                                                                     *)
+(*                           Objective Caml                            *)
+(*                                                                     *)
+(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
+(*                                                                     *)
+(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed    *)
+(*  under the terms of the GNU Library General Public License, with    *)
+(*  the special exception on linking described in file ../LICENSE.     *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* $Id: intmap.mli,v 1.1 2005-02-28 16:24:00 necula Exp $ *)
+
+(** Specialized to integer keys by George Necula *)
+
+(** Association tables over ordered types.
+
+   This module implements applicative association tables, also known as
+   finite maps or dictionaries, given a total ordering function
+   over the keys.
+   All operations over maps are purely applicative (no side-effects).
+   The implementation uses balanced binary trees, and therefore searching
+   and insertion take time logarithmic in the size of the map. 
+*)
+
+type (+'a) t
+      (** The type of maps from type [key] to type ['a]. *)
+
+val empty: 'a t
+    (** The empty map. *)
+
+val is_empty: 'a t -> bool
+    (** Test whether a map is empty or not. *)
+
+val add: int -> 'a -> 'a t -> 'a t
+    (** [add x y m] returns a map containing the same bindings as
+       [m], plus a binding of [x] to [y]. If [x] was already bound
+       in [m], its previous binding disappears. *)
+
+val find: int -> 'a t -> 'a
+    (** [find x m] returns the current binding of [x] in [m],
+       or raises [Not_found] if no such binding exists. *)
+
+val remove: int -> 'a t -> 'a t
+    (** [remove x m] returns a map containing the same bindings as
+       [m], except for [x] which is unbound in the returned map. *)
+
+val mem: int -> 'a t -> bool
+    (** [mem x m] returns [true] if [m] contains a binding for [x],
+       and [false] otherwise. *)
+
+val iter: (int -> 'a -> unit) -> 'a t -> unit
+    (** [iter f m] applies [f] to all bindings in map [m].
+       [f] receives the key as first argument, and the associated value
+       as second argument.  The bindings are passed to [f] in increasing
+       order with respect to the ordering over the type of the keys.
+       Only current bindings are presented to [f]:
+       bindings hidden by more recent bindings are not passed to [f]. *)
+
+val map: ('a -> 'b) -> 'a t -> 'b t
+    (** [map f m] returns a map with same domain as [m], where the
+       associated value [a] of all bindings of [m] has been
+       replaced by the result of the application of [f] to [a].
+       The bindings are passed to [f] in increasing order
+       with respect to the ordering over the type of the keys. *)
+
+val mapi: (int -> 'a -> 'b) -> 'a t -> 'b t
+    (** Same as {!Map.S.map}, but the function receives as arguments both the
+       key and the associated value for each binding of the map. *)
+
+val fold: (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
+    (** [fold f m a] computes [(f kN dN ... (f k1 d1 a)...)],
+       where [k1 ... kN] are the keys of all bindings in [m]
+       (in increasing order), and [d1 ... dN] are the associated data. *)
+
+val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int
+    (** Total ordering between maps.  The first argument is a total ordering
+        used to compare data associated with equal keys in the two maps. *)
+
+val equal: ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
+    (** [equal cmp m1 m2] tests whether the maps [m1] and [m2] are
+       equal, that is, contain equal keys and associate them with
+       equal data.  [cmp] is the equality predicate used to compare
+       the data associated with the keys. *)
+
diff --git a/cil/ocamlutil/perfcount.c.in b/cil/ocamlutil/perfcount.c.in
new file mode 100755
index 000000000..ae532f697
--- /dev/null
+++ b/cil/ocamlutil/perfcount.c.in
@@ -0,0 +1,184 @@
+// -*- Mode: c -*-
+//
+/*
+ * A module that allows the reading of performance counters on Pentium.
+ *
+ * This file contains both code that uses the performance counters to 
+ * compute the number of cycles per second (to be used during ./configure) 
+ * and also code to read the performance counters from Ocaml.
+ *
+ * Author: George Necula (necula@cs.berkeley.edu)
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(__GNUC__)
+  #define longlong long long
+  // RDTSC puts the result in EAX and EDX. We tell gcc to use those registers
+  // for "low" and "high"
+  #if defined(__i386__)
+    #define GETCOUNTER(low,high) \
+            __asm__ volatile ("rdtsc" : "=a" (low), "=d" (high));
+  #else
+    #define GETCOUNTER(low,high) \
+            printf ("Reading of performance counters is supported only on Intel x86\n"); \
+            exit(1);
+  #endif
+#else
+  // Microsoft Visual Studio
+  #define longlong __int64
+  #define inline   __inline
+  #define GETCOUNTER(low,high) __asm { \
+    __asm rdtsc \
+    __asm mov low, eax \
+    __asm mov high, edx };
+#endif
+
+/* Store here the first value read from the performance counter */
+unsigned static longlong first_value;
+
+
+/* This is the function that actually reads the performance counter. */
+inline unsigned longlong read_ppc(void) {
+  unsigned long pclow, pchigh;
+  unsigned longlong lowhigh;
+
+  GETCOUNTER(pclow, pchigh);
+  
+  // printf ("Read low=0x%08lx high=0x%08lx\n", low, high);
+
+  // Put the 64-bit value together
+  lowhigh = ((unsigned longlong)pclow) | ((unsigned longlong)pchigh << 32);
+
+  if(first_value == 0) {
+    first_value = lowhigh;
+  }
+  return lowhigh - first_value;
+}
+
+
+/* sm: I want a version that is as fast as possible, dropping
+ * bits that aren't very important to achieve it. *
+ *
+ * This version drops the low 20 bits and the high 14 bits so the
+ * result is 30 bits (always a positive Ocaml int); this yields
+ * megacycles, which for GHz machines will be something like
+ * milliseconds. */
+static unsigned long sample_ppc_20(void)
+{
+  unsigned long pclow, pchigh;
+
+  GETCOUNTER(pclow, pchigh);
+
+  return ((pclow >> 20) | (pchigh << 12)) & 0x3FFFFFFF;
+}
+
+/* This version drops the low 10 bits, yielding something like
+ * microseconds. */
+inline static unsigned long sample_ppc_10()
+{
+  unsigned long pclow, pchigh;
+
+  GETCOUNTER(pclow,pchigh);
+    
+  return ((pclow >> 10) | (pchigh << 22)) & 0x3FFFFFFF;
+}
+
+
+
+#ifndef CONFIGURATION_ONLY
+/*** This is the OCAML stub for the read_ppc ***/
+#include <caml/mlvalues.h>
+#include <caml/alloc.h>
+#include <caml/memory.h>
+
+#define CYCLES_PER_USEC @CYCLES_PER_USEC@
+value read_pentium_perfcount()
+{
+  double counter = (double)read_ppc() / (1000000.0 * CYCLES_PER_USEC);
+  return copy_double(counter);
+}
+
+/* The Ocaml system can use this function to figure out if there are
+ * performance counters available */
+value has_performance_counters() {
+  // HAS_PERFCOUNT is set by the configuration code at the end of
+  // this file, during ./configure
+#if @HAS_PERFCOUNT@ != 0
+  return Val_true;
+#else
+  return Val_false;
+#endif
+}
+
+/* sm: interface to above from Ocaml */
+value sample_pentium_perfcount_20()
+{
+  return Val_long(sample_ppc_20());
+}
+
+value sample_pentium_perfcount_10()
+{
+  return Val_long(sample_ppc_10());
+}
+
+#endif
+
+
+/* Now we have a function that tries to compute the number of cycles per 
+ * second (to be used during ./configure) */
+#ifdef CONFIGURATION_ONLY
+#include <sys/times.h>
+#include <unistd.h>
+#include <math.h>
+
+int main() {
+  struct tms t;
+  clock_t start, finish, diff;
+  unsigned longlong start_pc, finish_pc, diff_pc;
+  long clk_per_sec = sysconf(_SC_CLK_TCK);
+  double cycles_per_usec;
+  
+  if(clk_per_sec <= 0) {
+    printf("Cannot find clk_per_sec (got %ld)\n", clk_per_sec);
+    exit(1);
+  }
+  
+  times(&t); start = t.tms_utime;
+  start_pc = read_ppc();
+  // Do something for a while
+  {
+    int i;
+    double a = 5.678;
+    for(i=0;i<10000000;i++) {
+      a = (i & 1) ? (a * a) : (sqrt(a));
+    }
+  }
+  times(&t); finish = t.tms_utime;
+  finish_pc = read_ppc();
+  diff = finish - start;
+  diff_pc = finish_pc - start_pc;
+  if(diff == 0) {
+    printf("Cannot use Unix.times\n");
+    exit(1);
+  }
+  if(diff_pc == 0) {
+    printf("Invalid result from the peformance counters\n");
+    exit(1);
+  }
+  diff_pc /= 1000000; // We care about cycles per microsecond
+//  printf("diff = %ld, diff_pc = %ld, clk = %ld\n",
+//         (long)diff,
+//         (long)diff_pc, (long)clk_per_sec);
+
+  cycles_per_usec = (((double)diff_pc / (double)diff)
+                               * (double)clk_per_sec);
+
+  /* Whatever value we print here will be used as the CYCLES_PER_USEC
+   * below */
+  printf("%.3lf\n", cycles_per_usec);
+  exit(0);
+}
+#endif //defined CONFIGURATION_ONLY
+
diff --git a/cil/ocamlutil/pretty.ml b/cil/ocamlutil/pretty.ml
new file mode 100644
index 000000000..47d07ac40
--- /dev/null
+++ b/cil/ocamlutil/pretty.ml
@@ -0,0 +1,859 @@
+(* 
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(******************************************************************************)
+(* Pretty printer 
+   This module contains several fast, but sub-optimal heuristics to pretty-print 
+   structured text. 
+*)
+
+let debug =  false
+
+(* Choose an algorithm *)
+type algo = George | Aman | Gap
+let  algo = George
+let fastMode       = ref false
+
+
+(** Whether to print identation or not (for faster printing and smaller 
+  * output) *)
+let printIndent = ref true
+
+(******************************************************************************)	
+(* The doc type and constructors *)
+
+type doc = 
+    Nil
+  | Text     of string
+  | Concat   of doc * doc
+  | CText    of doc * string
+  | Break
+  | Line 
+  | LeftFlush
+  | Align
+  | Unalign  
+  | Mark
+  | Unmark
+
+(* Break a string at \n *)
+let rec breakString (acc: doc) (str: string) : doc = 
+  try
+    (* Printf.printf "breaking string %s\n" str; *)
+    let r = String.index str '\n' in
+    (* Printf.printf "r=%d\n" r; *)
+    let len = String.length str in
+    if r > 0 then begin
+      (* Printf.printf "Taking %s\n" (String.sub str 0 r); *)
+      let acc' = Concat(CText (acc, String.sub str 0 r), Line) in
+      if r = len - 1 then (* The last one *)
+        acc'
+      else begin
+        (* Printf.printf "Continuing with %s\n" (String.sub str (r + 1) (len - r - 1)); *)
+        breakString acc'
+          (String.sub str (r + 1) (len - r - 1))
+      end
+    end else (* The first is a newline *)
+      breakString (Concat(acc, Line))
+        (String.sub str (r + 1) (len - r - 1))
+  with Not_found -> 
+    if acc = Nil then Text str else CText (acc, str)
+
+let nil           = Nil
+let text s        = breakString nil s
+let num  i        = text (string_of_int i)
+let real f        = text (string_of_float f)
+let chr  c        = text (String.make 1 c) 
+let align         = Align
+let unalign       = Unalign
+let line          = Line
+let leftflush     = LeftFlush
+let break         = Break  
+let mark          = Mark
+let unmark        = Unmark
+
+let d_int32 (i: int32) = text (Int32.to_string i)
+let f_int32 () i = d_int32 i
+
+let d_int64 (i: int64) = text (Int64.to_string i)
+let f_int64 () i = d_int64 i
+
+
+(* Note that the ++ operator in Ocaml are left-associative. This means 
+ * that if you have a long list of ++ then the whole thing is very unbalanced 
+ * towards the left side. This is the worst possible case since scanning the 
+ * left side of a Concat is the non-tail recursive case. *)
+
+let (++) d1 d2 = Concat (d1, d2)
+let concat d1 d2 = Concat (d1, d2)
+
+(* Ben Liblit fix *)
+let indent n d = text (String.make n ' ') ++ (align ++ (d ++ unalign))
+
+let markup d = mark ++ d ++ unmark
+
+(* Format a sequence. The first argument is a separator *)
+let seq ~(sep:doc)  ~(doit:'a -> doc) ~(elements: 'a list) = 
+  let rec loop (acc: doc) = function
+      []     -> acc
+    | h :: t -> 
+        let fh = doit h in  (* Make sure this is done first *)
+        loop (acc ++ sep ++ fh) t
+  in
+  (match elements with
+    [] -> nil
+  | h :: t -> 
+      let fh = doit h in loop fh t)
+
+
+let docArray ?(sep=chr ',') (doit:int -> 'a -> doc) () (elements:'a array) = 
+  let len = Array.length elements in
+  if len = 0 then 
+    nil
+  else
+    let rec loop (acc: doc) i =
+      if i >= len then acc else
+      let fi = doit i elements.(i) in (* Make sure this is done first *)
+      loop (acc ++ sep ++ fi) (i + 1)
+    in
+    let f0 = doit 0 elements.(0) in
+    loop f0 1
+
+let docOpt delem () = function
+    None -> text "None"
+  | Some e -> text "Some(" ++ (delem e) ++ chr ')'
+
+
+
+let docList ?(sep=chr ',') (doit:'a -> doc) () (elements:'a list) = 
+  seq sep doit elements
+
+let insert () d = d
+
+
+let d_list (sep:string) (doit:unit -> 'a -> doc) () (elts:'a list) : doc =
+  (* thunk 'doit' to match docList's interface *)
+  let internalDoit (elt:'a) =
+    (doit () elt) in
+  (docList ~sep:(text sep) internalDoit () elts)
+
+(** Format maps *)
+module MakeMapPrinter =
+  functor (Map: sig 
+                  type key
+                  type 'a t
+                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
+                end) ->
+struct
+  let docMap ?(sep=chr ',')
+              (doit: Map.key -> 'a -> doc) () (maplets: 'a Map.t) : doc =
+    Map.fold
+      (fun k d acc ->
+	(if acc==nil then acc else acc ++ sep)
+	  ++ (doit k d))
+      maplets
+      nil
+
+  let dmaplet d0 d1 = d0 ++ (text " |-> ") ++ d1
+
+  let d_map ?(dmaplet=dmaplet) (sep:string) dkey dval =
+    let doit = fun k d -> dmaplet (dkey () k) (dval () d) in
+    docMap ~sep:(text sep) doit
+end
+
+(** Format sets *)
+module MakeSetPrinter =
+  functor (Set: sig 
+                  type elt
+                  type t
+                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
+                end) ->
+struct
+  let docSet ?(sep=chr ',') (doit: Set.elt -> doc) () (set: Set.t) : doc =
+    Set.fold
+      (fun elt acc ->
+	(if acc==nil then acc else acc ++ sep)
+	  ++ (doit elt))
+      set
+      nil
+
+  let d_set (sep:string) delt =
+    docSet ~sep:(text sep) (delt ())
+end
+
+
+(******************************************************************************)	
+(* Some debugging stuff *)
+
+let dbgprintf x = Printf.fprintf stderr x
+
+let rec dbgPrintDoc = function
+    Nil -> dbgprintf "(Nil)"
+  | Text s -> dbgprintf "(Text %s)" s
+  | Concat (d1,d2) -> dbgprintf ""; dbgPrintDoc  d1; dbgprintf " ++\n "; 
+      dbgPrintDoc  d2; dbgprintf ""
+  | CText (d,s) -> dbgPrintDoc  d; dbgprintf " ++ \"%s\"" s; 
+  | Break -> dbgprintf "(Break)" 
+  | Line -> dbgprintf "(Line)"
+  | LeftFlush -> dbgprintf "(LeftFlush)"
+  | Align -> dbgprintf "(Align)"
+  | Unalign -> dbgprintf "(Unalign)"
+  | Mark -> dbgprintf "(Mark)"
+  | Unmark -> dbgprintf "(Unmark)"
+
+(******************************************************************************)	
+(* The "george" algorithm *)
+
+(* When we construct documents, most of the time they are heavily unbalanced 
+ * towards the left. This is due to the left-associativity of ++ and also to 
+ * the fact that constructors such as docList construct from the let of a 
+ * sequence. We would prefer to shift the imbalance to the right to avoid 
+ * consuming a lot of stack when we traverse the document *)
+let rec flatten (acc: doc) = function
+  | Concat (d1, d2) -> flatten (flatten acc d2) d1
+  | CText (d, s) -> flatten (Concat(Text s, acc)) d
+  | Nil -> acc (* Get rid of Nil *)
+  | d -> Concat(d, acc)
+
+(* We keep a stack of active aligns. *)
+type align = 
+    { mutable gainBreak: int;  (* This is the gain that is associated with 
+                                 * taking the break associated with this 
+                                 * alignment mark. If this is 0, then there 
+                                 * is no break associated with the mark *)
+      mutable isTaken: bool ref; (* If breakGain is > 0 then this is a ref 
+                                  * cell that must be set to true when the 
+                                  * break is taken. These ref cells are also 
+                                  * int the "breaks" list  *)
+            deltaFromPrev: int ref; (* The column of this alignment mark - 
+                                     * the column of the previous mark. 
+                                     * Shared with the deltaToNext of the 
+                                     * previous active align  *)
+             deltaToNext: int ref  (* The column of the next alignment mark - 
+                                    * the columns of this one. Shared with 
+                                    * deltaFromPrev of the next active align *)
+    } 
+      
+(* We use references to avoid the need to pass data around all the time *)
+let aligns: align list ref =  (* The current stack of active alignment marks, 
+                               * with the top at the head. Never empty.  *)
+  ref [{ gainBreak = 0; isTaken = ref false; 
+         deltaFromPrev = ref 0; deltaToNext = ref 0; }]
+
+let topAlignAbsCol = ref 0 (* The absolute column of the top alignment *)
+
+let pushAlign (abscol: int) = 
+  let topalign = List.hd !aligns in
+  let res = 
+    { gainBreak = 0; isTaken = ref false; 
+      deltaFromPrev = topalign.deltaToNext; (* Share with the previous *)
+      deltaToNext = ref 0; (* Allocate a new ref *)} in
+  aligns := res :: !aligns;
+  res.deltaFromPrev := abscol - !topAlignAbsCol;
+  topAlignAbsCol := abscol
+
+let popAlign () = 
+  match !aligns with
+    top :: t when t != [] -> 
+      aligns := t; 
+      topAlignAbsCol := !topAlignAbsCol - !(top.deltaFromPrev)
+  | _ -> failwith "Unmatched unalign\n"
+
+(** We keep a list of active markup sections. For each one we keep the column 
+ * we are in *)
+let activeMarkups: int list ref = ref []
+
+
+(* Keep a list of ref cells for the breaks, in the same order that we see 
+ * them in the document *)
+let breaks: bool ref list ref = ref []
+
+(* The maximum column that we should use *)
+let maxCol = ref 0
+
+(* Sometimes we take all the optional breaks *)
+let breakAllMode = ref false
+
+(* We are taking a newline and moving left *)
+let newline () =
+  let topalign = List.hd !aligns in (* aligns is never empty *)
+  if debug then
+    dbgprintf "Taking a newline: reseting gain of %d\n" topalign.gainBreak;
+  topalign.gainBreak <- 0;        (* Erase the current break info *)
+  if !breakAllMode && !topAlignAbsCol < !maxCol then 
+    breakAllMode := false;
+  !topAlignAbsCol                          (* This is the new column *)
+
+
+
+(* Choose the align with the best gain. We outght to find a better way to 
+ * keep the aligns sorted, especially since they gain never changes (when the 
+ * align is the top align) *)
+let chooseBestGain () : align option =        
+  let bestGain = ref 0 in
+  let rec loop (breakingAlign: align option) = function
+      [] -> breakingAlign
+    | a :: resta -> 
+        if debug then dbgprintf "Looking at align with gain %d\n" a.gainBreak;
+        if a.gainBreak > !bestGain then begin
+          bestGain := a.gainBreak;
+          loop (Some a) resta
+        end else
+          loop breakingAlign resta
+  in
+  loop None !aligns
+
+
+(* Another one that chooses the break associated with the current align only *)
+let chooseLastGain () : align option = 
+  let topalign = List.hd !aligns in
+  if topalign.gainBreak > 0 then Some topalign else None
+
+(* We have just advanced to a new column. See if we must take a line break *)
+let movingRight (abscol: int) : int = 
+  (* Keep taking the best break until we get back to the left of maxCol or no 
+   * more are left *)
+  let rec tryAgain abscol = 
+    if abscol <= !maxCol then abscol else 
+    begin
+      if debug then
+        dbgprintf "Looking for a break to take in column %d\n" abscol;
+      (* Find the best gain there is out there *)
+      match if !fastMode then None else chooseBestGain () with 
+        None -> begin
+          (* No breaks are available. Take all breaks from now on *)
+          breakAllMode := true;
+          if debug then
+            dbgprintf "Can't find any breaks\n";
+          abscol
+        end 
+      | Some breakingAlign -> begin
+          let topalign = List.hd !aligns in
+          let theGain = breakingAlign.gainBreak in
+          assert (theGain > 0);
+          if debug then dbgprintf "Taking break at %d. gain=%d\n" abscol theGain;
+          breakingAlign.isTaken := true;
+          breakingAlign.gainBreak <- 0;
+          if breakingAlign != topalign then begin
+            breakingAlign.deltaToNext := 
+               !(breakingAlign.deltaToNext) - theGain;
+            topAlignAbsCol := !topAlignAbsCol - theGain
+          end;
+          tryAgain (abscol - theGain)
+      end
+    end
+  in
+  tryAgain abscol
+
+
+(* Keep track of nested align in gprintf. Each gprintf format string must 
+ * have properly nested align/unalign pairs. When the nesting depth surpasses 
+ * !printDepth then we print ... and we skip until the matching unalign *)
+let printDepth = ref 10000000 (* WRW: must see whole thing *)
+let alignDepth = ref 0
+
+let useAlignDepth = true
+
+(** Start an align. Return true if we ahve just passed the threshhold *)
+let enterAlign () = 
+  incr alignDepth;
+  useAlignDepth && !alignDepth = !printDepth + 1
+
+(** Exit an align *)
+let exitAlign () = 
+  decr alignDepth
+
+(** See if we are at a low-enough align level (and we should be printing 
+ * normally) *)
+let shallowAlign () = 
+  not useAlignDepth || !alignDepth <= !printDepth
+
+
+(* Pass the current absolute column and compute the new column *)
+let rec scan (abscol: int) (d: doc) : int = 
+  match d with 
+    Nil -> abscol
+  | Concat (d1, d2) -> scan (scan abscol d1) d2
+  | Text s when shallowAlign () -> 
+      let sl = String.length s in 
+      if debug then 
+        dbgprintf "Done string: %s from %d to %d\n" s abscol (abscol + sl);
+      movingRight (abscol + sl)
+  | CText (d, s) -> 
+      let abscol' = scan abscol d in
+      if shallowAlign () then begin
+        let sl = String.length s in 
+        if debug then 
+          dbgprintf "Done string: %s from %d to %d\n" s abscol' (abscol' + sl);
+        movingRight (abscol' + sl)
+      end else
+        abscol'
+
+  | Align -> 
+      pushAlign abscol; 
+      if enterAlign () then 
+        movingRight (abscol + 3) (* "..." *)
+      else
+        abscol
+
+  | Unalign -> exitAlign (); popAlign (); abscol 
+
+  | Line when shallowAlign () -> (* A forced line break *) 
+      if !activeMarkups != [] then 
+        failwith "Line breaks inside markup sections";
+      newline ()
+
+  | LeftFlush when shallowAlign ()  -> (* Keep cursor left-flushed *) 0
+
+  | Break when shallowAlign () -> (* An optional line break. Always a space 
+                                   * followed by an optional line break *)
+      if !activeMarkups != [] then 
+        failwith "Line breaks inside markup sections";
+      let takenref = ref false in
+      breaks := takenref :: !breaks;
+      let topalign = List.hd !aligns in (* aligns is never empty *)
+      if !breakAllMode then begin
+        takenref := true;
+        newline ()
+      end else begin
+        (* If there was a previous break there it stays not taken, forever. 
+         * So we overwrite it. *)
+        topalign.isTaken <- takenref;
+        topalign.gainBreak <- 1 + abscol - !topAlignAbsCol;
+        if debug then
+          dbgprintf "Registering a break at %d with gain %d\n" 
+            (1 + abscol) topalign.gainBreak;
+        movingRight (1 + abscol)
+      end
+
+  | Mark -> activeMarkups := abscol :: !activeMarkups;
+            abscol
+
+  | Unmark -> begin
+      match !activeMarkups with 
+        old :: rest -> activeMarkups := rest; 
+                       old
+      | [] -> failwith "Too many unmark"
+  end
+
+  | _ -> (* Align level is too deep *) abscol
+    
+
+(** Keep a running counter of the newlines we are taking. You can read and 
+  * reset this from user code, if you want *)
+let countNewLines = ref 0
+
+(* The actual function that takes a document and prints it *)
+let emitDoc 
+    (emitString: string -> int -> unit) (* emit a number of copies of a 
+                                         * string *)
+    (d: doc) = 
+  let aligns: int list ref = ref [0] in (* A stack of alignment columns *)
+
+  let wantIndent = ref false in
+  (* Use this function to take a newline *)
+  (* AB: modified it to flag wantIndent. The actual indentation is done only 
+     if leftflush is not encountered *)
+  let newline () =
+    match !aligns with
+      [] -> failwith "Ran out of aligns"
+    | x :: _ ->
+	emitString "\n" 1;
+        incr countNewLines;
+	wantIndent := true;
+	x
+  in
+  (* Print indentation if wantIndent was previously flagged ; reset this flag *)
+  let indentIfNeeded () =
+    if !printIndent && !wantIndent then ignore (
+      match !aligns with
+	[] -> failwith "Ran out of aligns"
+      | x :: _ -> 
+          if x > 0 then emitString " "  x;
+          x);
+    wantIndent := false	  
+  in
+  (* A continuation passing style loop *)
+  let rec loopCont (abscol: int) (d: doc) (cont: int -> unit) : unit 
+      (* the new column *) =
+    match d with
+      Nil -> cont abscol
+    | Concat (d1, d2) -> 
+        loopCont abscol d1 (fun abscol' -> loopCont abscol' d2 cont)
+
+    | Text s when shallowAlign () -> 
+        let sl = String.length s in
+	indentIfNeeded ();
+        emitString s 1;
+        cont (abscol + sl)
+
+    | CText (d, s) -> 
+        loopCont abscol d 
+          (fun abscol' -> 
+            if shallowAlign () then 
+              let sl = String.length s in
+	      indentIfNeeded ();
+              emitString s 1; 
+              cont (abscol' + sl)
+            else
+              cont abscol')
+
+    | Align -> 
+        aligns := abscol :: !aligns;
+        if enterAlign () then begin
+          indentIfNeeded ();
+          emitString "..." 1;
+          cont (abscol + 3)
+        end else
+          cont abscol
+
+    | Unalign -> begin
+        match !aligns with
+          [] -> failwith "Unmatched unalign"
+        | _ :: rest -> 
+            exitAlign ();
+            aligns := rest; cont abscol
+    end
+    | Line when shallowAlign ()  -> cont (newline ())
+    | LeftFlush when shallowAlign () -> wantIndent := false;  cont (0)
+    | Break when shallowAlign () -> begin
+        match !breaks with
+          [] -> failwith "Break without a takenref"
+        | istaken :: rest -> 
+            breaks := rest; (* Consume the break *)
+            if !istaken then cont (newline ())
+            else begin
+	      indentIfNeeded ();
+              emitString " " 1; 
+              cont (abscol + 1)
+            end
+    end
+
+    | Mark -> 
+        activeMarkups := abscol :: !activeMarkups;
+        cont abscol
+
+    | Unmark -> begin
+        match !activeMarkups with 
+          old :: rest -> activeMarkups := rest; 
+                         cont old
+        | [] -> failwith "Unmark without a mark"
+    end
+
+    | _ -> (* Align is too deep *)
+        cont abscol
+  in
+
+  loopCont 0 d (fun x -> ()) 
+
+
+(* Print a document on a channel *)
+let fprint (chn: out_channel) ~(width: int) doc =
+  (* Save some parameters, to allow for nested calls of these routines. *)
+  maxCol := width;
+  let old_breaks = !breaks in 
+  breaks := [];
+  let old_alignDepth = !alignDepth in 
+  alignDepth := 0;
+  let old_activeMarkups = !activeMarkups in 
+  activeMarkups := [];
+  ignore (scan 0 doc);
+  breaks := List.rev !breaks;
+  ignore (emitDoc 
+            (fun s nrcopies -> 
+              for i = 1 to nrcopies do
+                output_string chn s
+              done) doc);
+  activeMarkups := old_activeMarkups;
+  alignDepth := old_alignDepth;
+  breaks := old_breaks (* We must do this especially if we don't do emit 
+                        * (which consumes breaks) because otherwise we waste 
+                        * memory *)
+
+(* Print the document to a string *)
+let sprint ~(width : int)  doc : string = 
+  maxCol := width;
+  let old_breaks = !breaks in 
+  breaks := [];
+  let old_activeMarkups = !activeMarkups in 
+  activeMarkups := [];
+  let old_alignDepth = !alignDepth in 
+  alignDepth := 0;
+  ignore (scan 0 doc);
+  breaks := List.rev !breaks;
+  let buf = Buffer.create 1024 in
+  let rec add_n_strings str num =
+    if num <= 0 then ()
+    else begin Buffer.add_string buf str; add_n_strings str (num - 1) end
+  in
+  emitDoc add_n_strings doc;
+  breaks  := old_breaks;
+  activeMarkups := old_activeMarkups;
+  alignDepth := old_alignDepth;
+  Buffer.contents buf
+
+
+                                        (* The rest is based on printf.ml *)
+external format_int: string -> int -> string = "caml_format_int"
+external format_float: string -> float -> string = "caml_format_float"
+
+
+    
+let gprintf (finish : doc -> 'b)  
+            (format : ('a, unit, doc, 'b) format4) : 'a =
+  let format = (Obj.magic format : string) in
+
+  (* Record the starting align depth *)
+  let startAlignDepth = !alignDepth in
+  (* Special concatenation functions *)
+  let dconcat (acc: doc) (another: doc) = 
+    if !alignDepth > !printDepth then acc else acc ++ another in
+  let dctext1 (acc: doc) (str: string) = 
+    if !alignDepth > !printDepth then acc else 
+    CText(acc, str)
+  in
+  (* Special finish function *)
+  let dfinish (dc: doc) : 'b = 
+    if !alignDepth <> startAlignDepth then
+      prerr_string ("Unmatched align/unalign in " ^ format ^ "\n");
+    finish dc
+  in
+  let flen    = String.length format in
+                                        (* Reading a format character *)
+  let fget    = String.unsafe_get format in
+                                        (* Output a literal sequence of 
+                                         * characters, starting at i. The 
+                                         * character at i does not need to be 
+                                         * checked.  *) 
+  let rec literal acc i = 
+    let rec skipChars j = 
+      if j >= flen || 
+      (match fget j with 
+        '%' -> true 
+      | '@' -> true 
+      | '\n' -> true
+      | _ -> false) then
+        collect (dctext1 acc (String.sub format i (j-i))) j
+      else
+        skipChars (succ j)
+    in
+    skipChars (succ i)
+                                        (* the main collection function *)
+  and collect (acc: doc) (i: int) = 
+    if i >= flen then begin
+      Obj.magic (dfinish acc) 
+    end else begin
+      let c = fget i in
+      if c = '%' then begin
+        let j = skip_args (succ i) in
+        match fget j with
+          '%' -> literal acc j 
+        | 's' ->
+            Obj.magic(fun s ->
+              let str = 
+                if j <= i+1 then
+                  s
+                else
+                  let sl = String.length s in
+                  let p =
+                    try
+                      int_of_string (String.sub format (i+1) (j-i-1))
+                    with _ ->
+                      invalid_arg "fprintf: bad %s format" in
+                  if p > 0 && sl < p then
+                    (String.make (p - sl) ' ') ^ s
+                  else if p < 0 && sl < -p then
+                    s ^ (String.make (-p - sl) ' ')
+                  else
+                    s
+              in
+              collect (breakString acc str) (succ j))
+        | 'c' ->
+            Obj.magic(fun c ->
+              collect (dctext1 acc (String.make 1 c)) (succ j))
+        | 'd' | 'i' | 'o' | 'x' | 'X' | 'u' ->
+            Obj.magic(fun n ->
+              collect (dctext1 acc
+                         (format_int (String.sub format i 
+                                                  (j-i+1)) n))
+                (succ j))
+    (* L, l, and n are the Int64, Int32, and Nativeint modifiers to the integer
+       formats d,i,o,x,X,u.  For example, %Lo means print an Int64 in octal.*)
+	| 'L' ->
+	    if j != i + 1 then  (*Int64.format handles simple formats like %d.
+                     * Any special flags eaten by skip_args will confuse it. *)
+              invalid_arg ("dprintf: unimplemented format " 
+			   ^ (String.sub format i (j-i+1)));
+	    let j' = succ j in (* eat the d,i,x etc. *)
+	    let format_spec = "% " in
+	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+            Obj.magic(fun n ->
+              collect (dctext1 acc
+                         (Int64.format format_spec n))
+                (succ j'))
+	| 'l' ->
+	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
+					    ^ (String.sub format i (j-i+1)));
+	    let j' = succ j in (* eat the d,i,x etc. *)
+	    let format_spec = "% " in
+	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+            Obj.magic(fun n ->
+              collect (dctext1 acc
+                         (Int32.format format_spec n))
+                (succ j'))
+	| 'n' ->
+	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
+					    ^ (String.sub format i (j-i+1)));
+	    let j' = succ j in (* eat the d,i,x etc. *)
+	    let format_spec = "% " in
+	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+            Obj.magic(fun n ->
+              collect (dctext1 acc
+                         (Nativeint.format format_spec n))
+                (succ j'))
+        | 'f' | 'e' | 'E' | 'g' | 'G' ->
+            Obj.magic(fun f ->
+              collect (dctext1 acc
+                         (format_float (String.sub format i (j-i+1)) f))
+                (succ j))
+        | 'b' | 'B' ->
+            Obj.magic(fun b ->
+              collect (dctext1 acc (string_of_bool b)) (succ j))
+        | 'a' ->
+            Obj.magic(fun pprinter arg ->
+              collect (dconcat acc (pprinter () arg)) (succ j))
+        | 't' ->
+            Obj.magic(fun pprinter ->
+              collect (dconcat acc (pprinter ())) (succ j))
+        | c ->
+            invalid_arg ("dprintf: unknown format %s" ^ String.make 1 c)
+
+      end else if c = '@' then begin
+        if i + 1 < flen then begin
+          match fget (succ i) with
+
+                                        (* Now the special format characters *)
+            '[' ->                      (* align *)
+              let newacc = 
+                if !alignDepth > !printDepth then
+                  acc
+                else if !alignDepth = !printDepth then
+                  CText(acc, "...")
+                else
+                  acc ++ align
+              in
+              incr alignDepth;
+              collect newacc (i + 2)
+                
+          | ']' ->                        (* unalign *)
+              decr alignDepth;
+              let newacc = 
+                if !alignDepth >= !printDepth then
+                  acc
+                else
+                  acc ++ unalign
+              in
+              collect newacc (i + 2)
+          | '!' ->                        (* hard-line break *)
+              collect (dconcat acc line) (i + 2)
+          | '?' ->                        (* soft line break *)
+              collect (dconcat acc (break)) (i + 2)
+          | '<' -> 
+              collect (dconcat acc mark) (i +1)
+          | '>' -> 
+              collect (dconcat acc unmark) (i +1)
+	  | '^' ->                        (* left-flushed *)
+	      collect (dconcat acc (leftflush)) (i + 2)
+          | '@' -> 
+              collect (dctext1 acc "@") (i + 2)
+          | c ->
+              invalid_arg ("dprintf: unknown format @" ^ String.make 1 c)
+        end else
+          invalid_arg "dprintf: incomplete format @"
+      end else if c = '\n' then begin
+        collect (dconcat acc line) (i + 1)
+      end else
+        literal acc i
+    end
+
+  and skip_args j =
+    match String.unsafe_get format j with
+      '0' .. '9' | ' ' | '.' | '-' -> skip_args (succ j)
+    | c -> j
+
+  in
+  collect Nil 0
+
+let withPrintDepth dp thunk = 
+  let opd = !printDepth in
+  printDepth := dp;
+  thunk ();
+  printDepth := opd
+
+
+
+let flushOften = ref false
+
+let dprintf format     = gprintf (fun x -> x) format
+let fprintf chn format = 
+  let f d = fprint chn 80 d; d in
+	(* weimeric hack begins -- flush output to streams *)
+  let res = gprintf f format in
+	(* save the value we would have returned, flush the channel and then 
+         * return it -- this allows us to see debug input near infinite loops 
+         * *)
+  if !flushOften then flush chn;
+  res
+	(* weimeric hack ends *)
+
+let printf format = fprintf stdout format
+let eprintf format = fprintf stderr format
+
+
+
+(******************************************************************************)
+let getAlgoName = function
+    George -> "George"
+  | Aman   -> "Aman"
+  | Gap    -> "Gap"
+
+let getAboutString () : string =
+  "(Pretty: ALGO=" ^ (getAlgoName algo) ^ ")"
+
+
+(************************************************)
+let auto_printer (typ: string) = 
+  failwith ("Pretty.auto_printer \"" ^ typ ^ "\" only works with you use -pp \"camlp4o pa_prtype.cmo\" when you compile")
diff --git a/cil/ocamlutil/pretty.mli b/cil/ocamlutil/pretty.mli
new file mode 100644
index 000000000..5422432d1
--- /dev/null
+++ b/cil/ocamlutil/pretty.mli
@@ -0,0 +1,316 @@
+(*
+ *
+ * Copyright (c) 2001 by
+ *  George C. Necula	necula@cs.berkeley.edu
+ *  Scott McPeak        smcpeak@cs.berkeley.edu
+ *  Wes Weimer          weimer@cs.berkeley.edu
+ *   
+ * All rights reserved.  Permission to use, copy, modify and distribute
+ * this software for research purposes only is hereby granted, 
+ * provided that the following conditions are met: 
+ * 1. Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * 2. Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * 3. The name of the authors may not be used to endorse or promote products 
+ * derived from  this software without specific prior written permission. 
+ *
+ * DISCLAIMER:
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** Utility functions for pretty-printing. The major features provided by 
+    this module are 
+- An [fprintf]-style interface with support for user-defined printers
+- The printout is fit to a width by selecting some of the optional newlines
+- Constructs for alignment and indentation
+- Print ellipsis starting at a certain nesting depth
+- Constructs for printing lists and arrays
+
+ Pretty-printing occurs in two stages:
+- Construct a {!Pretty.doc} object that encodes all of the elements to be 
+  printed 
+  along with alignment specifiers and optional and mandatory newlines
+- Format the {!Pretty.doc} to a certain width and emit it as a string, to an 
+  output stream or pass it to a user-defined function
+
+ The formatting algorithm is not optimal but it does a pretty good job while 
+ still operating in linear time. The original version was based on a pretty 
+ printer by Philip Wadler which turned out to not scale to large jobs. 
+*)
+
+(** API *)
+
+(** The type of unformated documents. Elements of this type can be 
+ * constructed in two ways. Either with a number of constructor shown below, 
+ * or using the {!Pretty.dprintf} function with a [printf]-like interface. 
+ * The {!Pretty.dprintf} method is slightly slower so we do not use it for 
+ * large jobs such as the output routines for a compiler. But we use it for 
+ * small jobs such as logging and error messages. *)
+type doc
+
+
+
+(** Constructors for the doc type. *)
+
+
+
+
+(** Constructs an empty document *)
+val nil          : doc
+
+
+(** Concatenates two documents. This is an infix operator that associates to 
+    the left. *)
+val (++)         : doc -> doc -> doc 
+val concat       : doc -> doc -> doc
+
+(** A document that prints the given string *)
+val text         : string -> doc
+
+
+(** A document that prints an integer in decimal form *)
+val num          : int    -> doc
+
+
+(** A document that prints a real number *)
+val real         : float  -> doc
+
+(** A document that prints a character. This is just like {!Pretty.text}
+    with a one-character string. *)
+val chr          : char   -> doc
+
+
+(** A document that consists of a mandatory newline. This is just like [(text
+    "\n")]. The new line will be indented to the current indentation level,
+    unless you use {!Pretty.leftflush} right after this. *)
+val line         : doc
+
+(** Use after a {!Pretty.line} to prevent the indentation. Whatever follows 
+ * next will be flushed left. Indentation resumes on the next line. *)
+val leftflush    : doc
+
+
+(** A document that consists of either a space or a line break. Also called
+    an optional line break. Such a break will be
+    taken only if necessary to fit the document in a given width. If the break
+    is not taken a space is printed instead. *)
+val break: doc
+
+(** Mark the current column as the current indentation level. Does not print
+    anything. All taken line breaks will align to this column. The previous
+    alignment level is saved on a stack. *)
+val align: doc
+
+(** Reverts to the last saved indentation level. *)
+val unalign: doc
+
+
+(** Mark the beginning of a markup section. The width of a markup section is 
+ * considered 0 for the purpose of computing identation *)
+val mark: doc
+
+(** The end of a markup section *)
+val unmark: doc
+
+(************* Now some syntactic sugar *****************)
+(** Syntactic sugar *)
+
+(** Indents the document. Same as [((text "  ") ++ align ++ doc ++ unalign)],
+    with the specified number of spaces. *)
+val indent: int -> doc -> doc
+
+(** Prints a document as markup. The marked document cannot contain line 
+ * breaks or alignment constructs. *)
+val markup: doc -> doc
+
+(** Formats a sequence. [sep] is a separator, [doit] is a function that 
+ * converts an element to a document. *)
+val seq: sep:doc -> doit:('a ->doc) -> elements:'a list -> doc
+
+
+(** An alternative function for printing a list. The [unit] argument is there 
+ * to make this function more easily usable with the {!Pretty.dprintf} 
+ * interface. The first argument is a separator, by default a comma. *)
+val docList: ?sep:doc -> ('a -> doc) -> unit -> 'a list -> doc
+
+(** sm: Yet another list printer.  This one accepts the same kind of
+  * printing function that {!Pretty.dprintf} does, and itself works 
+  * in the dprintf context.  Also accepts
+  * a string as the separator since that's by far the most common.  *)
+val d_list: string -> (unit -> 'a -> doc) -> unit -> 'a list -> doc
+
+(** Formats an array. A separator and a function that prints an array
+    element. The default separator is a comma. *)
+val docArray: ?sep:doc -> (int -> 'a -> doc) -> unit -> 'a array -> doc
+
+(** Prints an ['a option] with [None] or [Some] *)
+val docOpt: ('a -> doc) -> unit -> 'a option -> doc
+
+
+(** Print an int32 *)
+val d_int32: int32 -> doc
+val f_int32: unit -> int32 -> doc
+
+val d_int64: int64 -> doc
+val f_int64: unit -> int64 -> doc
+
+(** Format maps. *)
+module MakeMapPrinter :
+  functor (Map: sig
+                  type key
+                  type 'a t
+                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
+                end) ->
+sig
+    (** Format a map, analogous to docList. *)
+    val docMap: ?sep:doc -> (Map.key -> 'a -> doc) -> unit -> 'a Map.t -> doc
+
+    (** Format a map, analogous to d_list. *)
+    val d_map: ?dmaplet:(doc -> doc -> doc)
+               -> string
+               -> (unit -> Map.key -> doc)
+               -> (unit -> 'a -> doc)
+               -> unit
+               -> 'a Map.t
+               -> doc
+  end
+
+(** Format sets. *)
+module MakeSetPrinter :
+  functor (Set: sig 
+                  type elt
+                  type t
+                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
+                end) ->
+sig
+    (** Format a set, analogous to docList. *)
+    val docSet: ?sep:doc -> (Set.elt -> doc) -> unit -> Set.t -> doc
+
+    (** Format a set, analogous to d_list. *)
+    val d_set: string
+               -> (unit -> Set.elt -> doc)
+               -> unit
+               -> Set.t
+               -> doc
+end
+
+(** A function that is useful with the [printf]-like interface *)
+val insert: unit -> doc -> doc
+
+val dprintf: ('a, unit, doc, doc) format4 -> 'a  
+(** This function provides an alternative method for constructing 
+    [doc] objects. The first argument for this function is a format string 
+    argument (of type [('a, unit, doc) format]; if you insist on 
+    understanding what that means see the module [Printf]). The format string 
+    is like that for the [printf] function in C, except that it understands a 
+    few more formatting controls, all starting with the @ character. 
+
+    See the gprintf function if you want to pipe the result of dprintf into 
+    some other functions.
+
+ The following special formatting characters are understood (these do not 
+ correspond to arguments of the function):
+-  @\[ Inserts an {!Pretty.align}. Every format string must have matching 
+        {!Pretty.align} and {!Pretty.unalign}. 
+-  @\] Inserts an {!Pretty.unalign}.
+-  @!  Inserts a {!Pretty.line}. Just like "\n"
+-  @?  Inserts a {!Pretty.break}.
+-  @<  Inserts a {!Pretty.mark}. 
+-  @>  Inserts a {!Pretty.unmark}.
+-  @^  Inserts a {!Pretty.leftflush}
+       Should be used immediately after @! or "\n".
+-  @@ : inserts a @ character
+
+ In addition to the usual [printf] % formatting characters the following two 
+ new characters are supported:
+- %t Corresponds to an argument of type [unit -> doc]. This argument is 
+     invoked to produce a document
+- %a Corresponds to {b two} arguments. The first of type [unit -> 'a -> doc] 
+     and the second of type ['a]. (The extra [unit] is do to the 
+     peculiarities of the built-in support for format strings in Ocaml. It 
+     turns out that it is not a major problem.) Here is an example of how 
+     you use this:
+
+{v dprintf "Name=%s, SSN=%7d, Children=\@\[%a\@\]\n"
+             pers.name pers.ssn (docList (chr ',' ++ break) text)
+             pers.children v}
+
+ The result of [dprintf] is a {!Pretty.doc}. You can format the document and 
+ emit it using the functions {!Pretty.fprint} and {!Pretty.sprint}.
+
+*)
+
+(** Like {!Pretty.dprintf} but more general. It also takes a function that is 
+ * invoked on the constructed document but before any formatting is done. The 
+ * type of the format argument means that 'a is the type of the parameters of 
+ * this function, unit is the type of the first argument to %a and %t 
+ * formats, doc is the type of the intermediate result, and 'b is the type of 
+ * the result of gprintf. *)
+val gprintf: (doc -> 'b) -> ('a, unit, doc, 'b) format4 -> 'a
+
+(** Format the document to the given width and emit it to the given channel *)
+val fprint: out_channel -> width:int -> doc -> unit
+
+(** Format the document to the given width and emit it as a string *)
+val sprint: width:int -> doc -> string
+
+(** Like {!Pretty.dprintf} followed by {!Pretty.fprint} *)
+val fprintf: out_channel -> ('a, unit, doc) format -> 'a  
+
+(** Like {!Pretty.fprintf} applied to [stdout] *)
+val printf: ('a, unit, doc) format -> 'a 
+
+(** Like {!Pretty.fprintf} applied to [stderr] *)
+val eprintf: ('a, unit, doc) format -> 'a 
+
+                                                                     
+(* sm: arg!  why can't I write this function?! *)
+(* * Like {!Pretty.dprintf} but yielding a string with no newlines *)
+(*val sprintf: (doc, unit, doc) format -> string*)
+
+(* sm: different tack.. *)
+(* doesn't work either.  well f it anyway *)
+(*val failwithf: ('a, unit, doc) format -> 'a*)
+
+
+(** Invokes a thunk, with printDepth temporarily set to the specified value *)
+val withPrintDepth : int -> (unit -> unit) -> unit
+
+(** The following variables can be used to control the operation of the printer *)
+
+(** Specifies the nesting depth of the [align]/[unalign] pairs at which 
+    everything is replaced with ellipsis *)
+val printDepth   : int ref
+
+val printIndent  : bool ref  (** If false then does not indent *)
+
+
+(** If set to [true] then optional breaks are taken only when the document 
+    has exceeded the given width. This means that the printout will looked 
+    more ragged but it will be faster *)
+val fastMode  : bool ref 
+
+val flushOften   : bool ref  (** If true the it flushes after every print *)
+
+
+(** Keep a running count of the taken newlines. You can read and write this 
+  * from the client code if you want *)
+val countNewLines : int ref
+
+
+(** A function that when used at top-level in a module will direct 
+ * the pa_prtype module generate automatically the printing functions for a 
+ * type *)
+val auto_printer: string -> 'b
diff --git a/cil/ocamlutil/stats.ml b/cil/ocamlutil/stats.ml
new file mode 100644
index 000000000..8bbb7d05d
--- /dev/null
+++ b/cil/ocamlutil/stats.ml
@@ -0,0 +1,146 @@
+(* The following functions are implemented in perfcount.c *) 
+
+(* Returns true is we have the performance counters *)
+external has_performance_counters: unit -> bool = "has_performance_counters"
+
+(* Returns number of seconds since the first read *)
+external read_pentium_perfcount : unit -> float = "read_pentium_perfcount"
+
+(* Returns current cycle counter, divided by 1^20, and truncated to 30 bits *)
+external sample_pentium_perfcount_20 : unit -> int = "sample_pentium_perfcount_20"
+
+(* Returns current cycle counter, divided by 1^10, and truncated to 30 bits *)
+external sample_pentium_perfcount_10 : unit -> int = "sample_pentium_perfcount_10"
+
+
+(* Whether to use the performance counters (on Pentium only) *)
+
+(* The performance counters are disabled by default. *)
+let do_use_performance_counters = ref false
+
+                                        (* A hierarchy of timings *)
+
+type t = { name : string;
+           mutable time : float; (* In seconds *)
+           mutable sub  : t list}
+
+                                        (* Create the top level *)
+let top = { name = "TOTAL";
+            time = 0.0;
+            sub  = []; }
+
+                                        (* The stack of current path through 
+                                         * the hierarchy. The first is the 
+                                         * leaf. *)
+let current : t list ref = ref [top]
+
+exception NoPerfCount
+let reset (perfcount: bool) = 
+  top.sub <- [];
+  if perfcount then begin
+    if not (has_performance_counters ()) then begin
+      raise NoPerfCount
+    end
+  end;
+  do_use_performance_counters := perfcount
+
+
+
+let print chn msg = 
+  (* Total up *)
+  top.time <- List.fold_left (fun sum f -> sum +. f.time) 0.0 top.sub;
+  let rec prTree ind node = 
+    if !do_use_performance_counters then 
+      (Printf.fprintf chn "%s%-20s          %8.5f s\n" 
+         (String.make ind ' ') node.name node.time)
+    else
+      (Printf.fprintf chn "%s%-20s          %6.3f s\n" 
+         (String.make ind ' ') node.name node.time);
+
+   List.iter (prTree (ind + 2)) (List.rev node.sub)
+  in
+  Printf.fprintf chn "%s" msg; 
+  List.iter (prTree 0) [ top ];
+  Printf.fprintf chn "Timing used %s\n"
+    (if !do_use_performance_counters then "Pentium performance counters"
+     else "Unix.time");
+  let gc = Gc.quick_stat () in 
+  let printM (w: float) : string = 
+    Printf.sprintf "%.2fMb" (w *. 4.0 /. 1000000.0)
+  in
+  Printf.fprintf chn 
+    "Memory statistics: total=%s, max=%s, minor=%s, major=%s, promoted=%s\n    minor collections=%d  major collections=%d compactions=%d\n"
+    (printM (gc.Gc.minor_words +. gc.Gc.major_words 
+               -. gc.Gc.promoted_words))
+    (printM (float_of_int gc.Gc.top_heap_words))
+    (printM gc.Gc.minor_words)
+    (printM gc.Gc.major_words)
+    (printM gc.Gc.promoted_words)
+    gc.Gc.minor_collections
+    gc.Gc.major_collections
+    gc.Gc.compactions;
+    
+  ()
+        
+  
+
+(* Get the current time, in seconds *)
+let get_current_time () : float = 
+  if !do_use_performance_counters then 
+    read_pentium_perfcount ()
+  else
+    (Unix.times ()).Unix.tms_utime
+
+let repeattime limit str f arg = 
+                                        (* Find the right stat *)
+  let stat : t = 
+    let curr = match !current with h :: _ -> h | _ -> assert false in
+    let rec loop = function
+        h :: _ when h.name = str -> h
+      | _ :: rest -> loop rest
+      | [] -> 
+          let nw = {name = str; time = 0.0; sub = []} in
+          curr.sub <- nw :: curr.sub;
+          nw
+    in
+    loop curr.sub
+  in
+  let oldcurrent = !current in
+  current := stat :: oldcurrent;
+  let start = get_current_time () in
+  let rec repeatf count = 
+    let res   = f arg in
+    let diff = get_current_time () -. start in
+    if diff < limit then
+      repeatf (count + 1)
+    else begin
+      stat.time <- stat.time +. (diff /. float(count));
+      current := oldcurrent;                (* Pop the current stat *)
+      res                                   (* Return the function result *)
+    end
+  in
+  repeatf 1
+
+
+let time str f arg = repeattime 0.0 str f arg
+    
+
+let lastTime = ref 0.0
+let timethis (f: 'a -> 'b) (arg: 'a) : 'b = 
+  let start = get_current_time () in
+  let res = f arg in 
+  lastTime := get_current_time () -. start; 
+  res
+  
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cil/ocamlutil/stats.mli b/cil/ocamlutil/stats.mli
new file mode 100644
index 000000000..9ed98e56a
--- /dev/null
+++ b/cil/ocamlutil/stats.mli
@@ -0,0 +1,72 @@
+(*
+ *
+ * Copyright (c) 2001 by
+ *  George C. Necula	necula@cs.berkeley.edu
+ *  Scott McPeak        smcpeak@cs.berkeley.edu
+ *  Wes Weimer          weimer@cs.berkeley.edu
+ *   
+ * All rights reserved.  Permission to use, copy, modify and distribute
+ * this software for research purposes only is hereby granted, 
+ * provided that the following conditions are met: 
+ * 1. Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * 2. Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * 3. The name of the authors may not be used to endorse or promote products 
+ * derived from  this software without specific prior written permission. 
+ *
+ * DISCLAIMER:
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** Utilities for maintaining timing statistics *)
+
+(** Resets all the timings. Invoke with "true" if you want to switch to using 
+ * the hardware performance counters from now on. You get an exception if 
+ * there are not performance counters available *)
+val reset: bool -> unit
+exception NoPerfCount
+
+(** Check if we have performance counters *)
+val has_performance_counters: unit -> bool
+                           
+(** Sample the current cycle count, in megacycles. *)
+val sample_pentium_perfcount_20: unit -> int
+
+(** Sample the current cycle count, in kilocycles. *)
+val sample_pentium_perfcount_10: unit -> int
+
+(** Time a function and associate the time with the given string. If some
+    timing information is already associated with that string, then accumulate
+    the times. If this function is invoked within another timed function then
+    you can have a hierarchy of timings *)
+val time : string -> ('a -> 'b) -> 'a -> 'b 
+
+(** repeattime is like time but runs the function several times until the total
+    running time is greater or equal to the first argument. The total time is
+    then divided by the number of times the function was run. *)
+val repeattime : float -> string -> ('a -> 'b) -> 'a -> 'b
+
+(** Print the current stats preceeded by a message *)
+val print : out_channel -> string -> unit
+
+
+
+(** Time a function and set lastTime to the time it took *)
+val lastTime: float ref
+val timethis: ('a -> 'b) -> 'a -> 'b
+
+
+
+
diff --git a/cil/ocamlutil/trace.ml b/cil/ocamlutil/trace.ml
new file mode 100644
index 000000000..b42928657
--- /dev/null
+++ b/cil/ocamlutil/trace.ml
@@ -0,0 +1,169 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Trace module implementation
+ * see trace.mli
+ *)
+
+open Pretty;;
+
+
+(* --------- traceSubsystems --------- *)
+(* this is the list of tags (usually subsystem names) for which
+ * trace output will appear *)
+let traceSubsystems : string list ref = ref [];;
+
+
+let traceAddSys (subsys : string) : unit =
+  (* (ignore (printf "traceAddSys %s\n" subsys)); *)
+  traceSubsystems := subsys :: !traceSubsystems
+;;
+
+
+let traceActive (subsys : string) : bool =
+  (* (List.mem elt list) returns true if something in list equals ('=') elt *)
+  (List.mem subsys !traceSubsystems)
+;;
+
+
+let rec parseString (str : string) (delim : char) : string list =
+begin
+  if (not (String.contains str delim)) then 
+    if ((String.length str) = 0) then
+      [] 
+    else
+      [str]
+
+  else
+    let d = ((String.index str delim) + 1) in
+    if (d = 1) then
+      (* leading delims are eaten *)
+      (parseString (String.sub str d ((String.length str) - d)) delim)
+    else
+      (String.sub str 0 (d-1)) ::
+        (parseString (String.sub str d ((String.length str) - d)) delim)
+end;;
+
+let traceAddMulti (systems : string) : unit =
+begin
+  let syslist = (parseString systems ',') in
+  (List.iter traceAddSys syslist)
+end;;
+
+
+
+(* --------- traceIndent --------- *)
+let traceIndentLevel : int ref = ref 0;;
+
+
+let traceIndent (sys : string) : unit =
+  if (traceActive sys) then
+    traceIndentLevel := !traceIndentLevel + 2
+;;
+
+let traceOutdent (sys : string) : unit =
+  if ((traceActive sys) &&
+      (!traceIndentLevel >= 2)) then
+    traceIndentLevel := !traceIndentLevel - 2
+;;
+
+
+(* --------- trace --------- *)
+(* return a tag to prepend to a trace output
+ * e.g. "  %%% mysys: "
+ *)
+let traceTag (sys : string) : Pretty.doc =
+  (* return string of 'i' spaces *)
+  let rec ind (i : int) : string =
+    if (i <= 0) then
+      ""
+    else
+      " " ^ (ind (i-1))
+
+  in
+  (text ((ind !traceIndentLevel) ^ "%%% " ^ sys ^ ": "))
+;;
+
+
+(* this is the trace function; its first argument is a string
+ * tag, and subsequent arguments are like printf formatting
+ * strings ("%a" and whatnot) *)
+let trace
+    (subsys : string)                   (* subsystem identifier for enabling tracing *)
+    (d : Pretty.doc)                    (* something made by 'dprintf' *)
+    : unit =                            (* no return value *)
+  (* (ignore (printf "trace %s\n" subsys)); *)
+
+  (* see if the subsystem's tracing is turned on *)
+  if (traceActive subsys) then
+    begin
+      (fprint stderr 80			(* print it *)
+         ((traceTag subsys) ++ d));	(* with prepended subsys tag *)
+      (* mb: flush after every message; useful if the program hangs in an
+	 infinite loop... *)
+      (flush stderr)
+    end
+  else
+    ()			                         (* eat it *)
+;;
+
+
+let tracei (sys : string) (d : Pretty.doc) : unit =
+  (* trace before indent *)
+  (trace sys d);
+  (traceIndent sys)
+;;
+
+let traceu (sys : string) (d : Pretty.doc) : unit =
+  (* trace after outdent *)
+  (* no -- I changed my mind -- I want trace *then* outdent *)
+  (trace sys d);
+  (traceOutdent sys)
+;;
+
+
+
+
+(* -------------------------- trash --------------------- *)
+(* TRASH START
+
+(* sm: more experimenting *)
+(trace "no" (dprintf "no %d\n" 5));
+(trace "yes" (dprintf "yes %d\n" 6));
+(trace "maybe" (dprintf "maybe %d\n" 7));
+
+TRASH END *)
diff --git a/cil/ocamlutil/trace.mli b/cil/ocamlutil/trace.mli
new file mode 100644
index 000000000..46ca6523b
--- /dev/null
+++ b/cil/ocamlutil/trace.mli
@@ -0,0 +1,106 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Trace module
+ * Scott McPeak, 5/4/00
+ *
+ * The idea is to pepper the source with debugging printfs,
+ * and be able to select which ones to actually display at
+ * runtime.
+ *
+ * It is built on top of the Pretty module for printing data
+ * structures.
+ *
+ * To a first approximation, this is needed to compensate for
+ * the lack of a debugger that does what I want...
+ *)
+
+
+(* this is the list of tags (usually subsystem names) for which
+ * trace output will appear *)
+val traceSubsystems : string list ref
+
+(* interface to add a new subsystem to trace (slightly more
+ * convenient than direclty changing 'tracingSubsystems') *)
+val traceAddSys : string -> unit
+
+(* query whether a particular subsystem is being traced *)
+val traceActive : string -> bool
+   
+(* add several systems, separated by commas *)
+val traceAddMulti : string -> unit
+
+
+(* current indentation level for tracing *)
+val traceIndentLevel : int ref
+
+(* bump up or down the indentation level, if the given subsys
+ * is being traced *)
+val traceIndent : string -> unit
+val traceOutdent : string -> unit
+
+
+(* this is the trace function; its first argument is a string
+ * tag, and second argument is a 'doc' (which is what 'dprintf'
+ * returns).
+ *
+ * so a sample usage might be
+ *   (trace "mysubsys" (dprintf "something neat happened %d times\n" counter))
+ *)
+val trace : string -> Pretty.doc -> unit
+
+
+(* special flavors that indent/outdent as well.  the indent version
+ * indents *after* printing, while the outdent version outdents
+ * *before* printing.  thus, a sequence like
+ *
+ *   (tracei "foo" (dprintf "beginning razzle-dazzle\n"))
+ *     ..razzle..
+ *     ..dazzle..
+ *   (traceu "foo" (dprintf "done with razzle-dazzle\n"))
+ *
+ * will do the right thing
+ *
+ * update -- I changed my mind!  I decided I prefer it like this
+ *   %%% sys: (myfunc args)
+ *     %%% ...inner stuff...
+ *     %%% sys: myfunc returning 56
+ *
+ * so now they both print before in/outdenting
+ *)
+val tracei : string -> Pretty.doc -> unit
+val traceu : string -> Pretty.doc -> unit
diff --git a/cil/ocamlutil/util.ml b/cil/ocamlutil/util.ml
new file mode 100755
index 000000000..e6c2c6791
--- /dev/null
+++ b/cil/ocamlutil/util.ml
@@ -0,0 +1,815 @@
+(** Utility functions for Coolaid *)
+module E = Errormsg
+module H = Hashtbl
+module IH = Inthash
+
+open Pretty
+
+exception GotSignal of int
+
+let withTimeout (secs: float) (* Seconds for timeout *)
+                (handler: int -> 'b) (* What to do if we have a timeout. The 
+                                        * argument passed is the signal number 
+                                        * received. *)
+                (f: 'a -> 'b) (* The function to run *)
+                (arg: 'a) (* And its argument *)
+   : 'b = 
+  let oldHandler = 
+    Sys.signal Sys.sigalrm 
+      (Sys.Signal_handle 
+         (fun i -> 
+           ignore (E.log "Got signal %d\n" i);
+           raise (GotSignal i)))
+  in
+  let reset_sigalrm () = 
+    ignore (Unix.setitimer Unix.ITIMER_REAL { Unix.it_value = 0.0;
+                                              Unix.it_interval = 0.0;});
+    Sys.set_signal Sys.sigalrm oldHandler;
+  in
+  ignore (Unix.setitimer Unix.ITIMER_REAL 
+            { Unix.it_value    = secs;
+              Unix.it_interval = 0.0;});
+  (* ignore (Unix.alarm 2); *)
+  try
+    let res = f arg in 
+    reset_sigalrm ();
+    res
+  with exc -> begin
+    reset_sigalrm ();
+    ignore (E.log "Got an exception\n");
+    match exc with 
+      GotSignal i -> 
+        handler i
+    | _ -> raise exc
+  end
+
+(** Print a hash table *)
+let docHash ?(sep=chr ',') (one: 'a -> 'b -> doc) () (h: ('a, 'b) H.t) = 
+  (H.fold 
+     (fun key data acc -> 
+       if acc == align then acc ++ one key data
+       else acc ++ sep ++ one key data)
+     h
+     align) ++ unalign
+    
+
+
+let hash_to_list (h: ('a, 'b) H.t) : ('a * 'b) list =
+  H.fold
+    (fun key data acc -> (key, data) :: acc)
+    h
+    []
+
+let keys (h: ('a, 'b) H.t) : 'a list =
+  H.fold
+    (fun key data acc -> key :: acc)
+    h
+    []
+
+let hash_copy_into (hfrom: ('a, 'b) H.t) (hto: ('a, 'b) H.t) : unit = 
+  H.clear hto;
+  H.iter (H.add hto) hfrom
+
+let anticompare a b = compare b a
+;;
+
+
+let rec list_drop (n : int) (xs : 'a list) : 'a list =
+  if n < 0 then invalid_arg "Util.list_drop";
+  if n = 0 then 
+    xs
+  else begin 
+    match xs with
+    | [] -> invalid_arg "Util.list_drop"
+    | y::ys -> list_drop (n-1) ys
+  end
+
+let list_droptail (n : int) (xs : 'a list) : 'a list =
+  if n < 0 then invalid_arg "Util.list_droptail";
+  let (ndrop,r) =
+    List.fold_right
+      (fun x (ndrop,acc) ->
+	if ndrop = 0 then (ndrop, x :: acc)
+	else (ndrop-1, acc))
+      xs
+      (n,[])
+  in
+  if ndrop > 0 then invalid_arg "Util.listdroptail"
+  else r
+
+let rec list_span (p : 'a -> bool) (xs : 'a list) : 'a list * 'a list = 
+  begin match xs with
+  | [] -> ([],[])
+  | x::xs' -> 
+      if p x then
+        let (ys,zs) = list_span p xs' in (x::ys,zs)
+      else ([],xs)
+  end
+;;
+
+let rec list_rev_append revxs ys =
+  begin match revxs with
+  | [] -> ys
+  | x::xs -> list_rev_append xs (x::ys)
+  end
+;;
+let list_insert_by (cmp : 'a -> 'a -> int) 
+    (x : 'a) (xs : 'a list) : 'a list =
+  let rec helper revhs ts =
+    begin match ts with
+    | [] -> List.rev (x::revhs)
+    | t::ts' -> 
+        if cmp x t >= 0 then helper (t::revhs) ts'
+        else list_rev_append (x::revhs) ts
+    end
+  in
+  helper [] xs
+;;
+
+let list_head_default (d : 'a) (xs : 'a list) : 'a =
+  begin match xs with
+  | [] -> d
+  | x::_ -> x
+  end
+;;
+
+let rec list_iter3 f xs ys zs =
+  begin match xs, ys, zs with
+  | [], [], [] -> ()
+  | x::xs, y::ys, z::zs -> f x y z; list_iter3 f xs ys zs
+  | _ -> invalid_arg "Util.list_iter3"
+  end
+;;
+  
+let rec get_some_option_list (xs : 'a option list) : 'a list =
+  begin match xs with
+  | [] -> []
+  | None::xs  -> get_some_option_list xs
+  | Some x::xs -> x :: get_some_option_list xs
+  end
+;;
+
+(* tail-recursive append: reverses xs twice *)
+let list_append (xs: 'a list) (ys: 'a list): 'a list =
+  match xs with (* optimize some common cases *)
+      [] -> ys
+    | [x] -> x::ys
+    | _ -> list_rev_append (List.rev xs) ys
+
+let list_iteri (f: int -> 'a -> unit) (l: 'a list) : unit = 
+  let rec loop (i: int) (l: 'a list) : unit = 
+    match l with 
+      [] -> ()
+    | h :: t -> f i h; loop (i + 1) t
+  in
+  loop 0 l
+
+let list_mapi (f: int -> 'a -> 'b) (l: 'a list) : 'b list = 
+  let rec loop (i: int) (l: 'a list) : 'b list = 
+    match l with 
+      [] -> []
+    | h :: t -> 
+	let headres = f i h in
+	headres :: loop (i + 1) t
+  in
+  loop 0 l
+
+let list_fold_lefti (f: 'acc -> int -> 'a -> 'acc) (start: 'acc) 
+                   (l: 'a list) : 'acc = 
+  let rec loop (i, acc) l = 
+    match l with
+      [] -> acc
+    | h :: t -> loop (i + 1, f acc i h) t
+  in
+  loop (0, start) l
+
+
+let list_init (len : int) (init_fun : int -> 'a) : 'a list =
+  let rec loop n acc =
+    if n < 0 then acc
+    else loop (n-1) ((init_fun n)::acc)
+  in
+  loop (len - 1) []
+;;
+
+
+let rec list_find_first (l: 'a list) (f: 'a -> 'b option) : 'b option = 
+  match l with 
+    [] -> None
+  | h :: t -> begin
+      match f h with 
+        None -> list_find_first t f
+      | r -> r
+  end
+  
+(** Generates the range of integers starting with a and ending with b *)
+let int_range_list (a: int) (b: int) = 
+  list_init (b - a + 1) (fun i -> a + i)
+
+
+(** Some handling of registers *)
+type 'a growArrayFill =
+    Elem of 'a
+  | Susp of (int -> 'a)
+
+type 'a growArray = {
+            gaFill: 'a growArrayFill;
+            (** Stuff to use to fill in the array as it grows *)
+
+    mutable gaMaxInitIndex: int;
+            (** Maximum index that was written to. -1 if no writes have 
+             * been made.  *)
+
+    mutable gaData: 'a array;
+  } 
+
+let growTheArray (ga: 'a growArray) (len: int) 
+                 (toidx: int) (why: string) : unit = 
+  if toidx >= len then begin
+    (* Grow the array by 50% *)
+    let newlen = toidx + 1 + len  / 2 in
+(*
+    ignore (E.log "growing an array to idx=%d (%s)\n" toidx why);
+*)
+    let data' = begin match ga.gaFill with
+      Elem x ->
+
+	let data'' = Array.create newlen x in
+	Array.blit ga.gaData 0 data'' 0 len;
+	data''
+    | Susp f -> Array.init newlen
+	  (fun i -> if i < len then ga.gaData.(i) else f i)
+    end
+    in
+    ga.gaData <- data'
+  end
+
+let getReg (ga: 'a growArray) (r: int) : 'a = 
+  let len = Array.length ga.gaData in
+  if r >= len then 
+    growTheArray ga len r "get";
+
+  ga.gaData.(r)
+
+let setReg (ga: 'a growArray) (r: int) (what: 'a) : unit = 
+  let len = Array.length ga.gaData in
+  if r >= len then 
+    growTheArray ga len r "set";
+  if r > ga.gaMaxInitIndex then ga.gaMaxInitIndex <- r;
+  ga.gaData.(r) <- what
+
+let newGrowArray (initsz: int) (fill: 'a growArrayFill) : 'a growArray = 
+  { gaFill = fill;
+    gaMaxInitIndex = -1;
+    gaData = begin match fill with
+      Elem x -> Array.create initsz x
+    | Susp f -> Array.init initsz f
+    end; }
+
+let copyGrowArray (ga: 'a growArray) : 'a growArray = 
+  { ga with gaData = Array.copy ga.gaData } 
+
+let deepCopyGrowArray (ga: 'a growArray) (copy: 'a -> 'a): 'a growArray = 
+  { ga with gaData = Array.map copy ga.gaData } 
+
+
+
+(** Iterate over the initialized elements of the array *)
+let growArray_iteri  (f: int -> 'a -> unit) (ga: 'a growArray) = 
+  for i = 0 to ga.gaMaxInitIndex do 
+    f i ga.gaData.(i)
+  done
+
+
+(** Fold left over the initialized elements of the array *)
+let growArray_foldl (f: 'acc -> 'a -> 'acc) 
+                    (acc: 'acc) (ga: 'a growArray) : 'acc = 
+  let rec loop (acc: 'acc) (idx: int) : 'acc = 
+    if idx > ga.gaMaxInitIndex then 
+      acc
+    else
+      loop (f acc ga.gaData.(idx)) (idx + 1)
+  in
+  loop acc 0
+
+
+
+
+let hasPrefix (prefix: string) (what: string) : bool = 
+  let pl = String.length prefix in
+  try String.sub what 0 pl = prefix 
+  with Invalid_argument _ -> false
+
+
+
+let restoreRef ?(deepCopy=(fun x -> x)) (r: 'a ref) : (unit -> unit) = 
+  let old = deepCopy !r in
+  (fun () -> r := old)
+
+let restoreHash ?deepCopy (h: ('a, 'b) H.t) : (unit -> unit) = 
+  let old = 
+    match deepCopy with 
+      None -> H.copy h 
+    | Some f -> 
+        let old = H.create (H.length h) in 
+        H.iter (fun k d -> H.add old k (f d)) h;
+        old
+  in
+  (fun () -> hash_copy_into old h)
+
+let restoreIntHash ?deepCopy (h: 'a IH.t) : (unit -> unit) = 
+  let old = 
+    match deepCopy with 
+      None -> IH.copy h 
+    | Some f -> 
+        let old = IH.create 13 in 
+        IH.iter (fun k d -> IH.add old k (f d)) h;
+        old
+  in
+  (fun () -> 
+    IH.clear old;
+    IH.iter (fun i k -> IH.add old i k) h)
+
+let restoreArray ?deepCopy (a: 'a array) : (unit -> unit) = 
+  let old = Array.copy a in
+  (match deepCopy with 
+    None -> ()
+  | Some f -> Array.iteri (fun i v -> old.(i) <- f v) old);
+  (fun () -> Array.blit old 0 a 0 (Array.length a))
+
+let runThunks (l: (unit -> unit) list) : (unit -> unit) = 
+  fun () -> List.iter (fun f -> f ()) l
+
+
+
+(* Memoize *)
+let memoize (h: ('a, 'b) Hashtbl.t) 
+            (arg: 'a) 
+            (f: 'a -> 'b) : 'b = 
+  try
+    Hashtbl.find h arg
+  with Not_found -> begin
+    let res = f arg in
+    Hashtbl.add h arg res;
+    res
+  end
+
+(* Just another name for memoize *)
+let findOrAdd h arg f = memoize h arg f
+
+(* A tryFinally function *)
+let tryFinally 
+    (main: 'a -> 'b) (* The function to run *)
+    (final: 'b option -> unit)  (* Something to run at the end *)
+    (arg: 'a) : 'b = 
+  try
+    let res: 'b = main arg in
+    final (Some res);
+    res
+  with e -> begin
+    final None;
+    raise e
+  end
+
+
+
+
+let valOf : 'a option -> 'a = function
+    None -> raise (Failure "Util.valOf")
+  | Some x -> x
+
+(**
+ * An accumulating for loop.
+ *
+ * Initialize the accumulator with init.  The current index and accumulator
+ * from the previous iteration is passed to f.
+ *)
+let fold_for ~(init: 'a) ~(lo: int) ~(hi: int) (f: int -> 'a -> 'a) =
+  let rec forloop i acc =
+    if i > hi then acc
+    else forloop (i+1) (f i acc)
+  in
+  forloop lo init
+
+(************************************************************************)
+
+module type STACK = sig
+  type 'a t
+  (** The type of stacks containing elements of type ['a]. *)
+
+  exception Empty
+  (** Raised when {!Stack.pop} or {!Stack.top} is applied to an empty stack. *)
+
+  val create : unit -> 'a t
+  (** Return a new stack, initially empty. *)
+
+  val push : 'a -> 'a t -> unit
+  (** [push x s] adds the element [x] at the top of stack [s]. *)
+
+  val pop : 'a t -> 'a
+  (** [pop s] removes and returns the topmost element in stack [s],
+     or raises [Empty] if the stack is empty. *)
+
+  val top : 'a t -> 'a
+  (** [top s] returns the topmost element in stack [s],
+     or raises [Empty] if the stack is empty. *)
+  
+  val clear : 'a t -> unit
+  (** Discard all elements from a stack. *)
+  
+  val copy : 'a t -> 'a t
+  (** Return a copy of the given stack. *)
+  
+  val is_empty : 'a t -> bool
+  (** Return [true] if the given stack is empty, [false] otherwise. *)
+  
+  val length : 'a t -> int
+  (** Return the number of elements in a stack. *)
+  
+  val iter : ('a -> unit) -> 'a t -> unit
+  (** [iter f s] applies [f] in turn to all elements of [s],
+     from the element at the top of the stack to the element at the
+     bottom of the stack. The stack itself is unchanged. *)
+end
+
+module Stack = struct
+
+  type 'a t = { mutable length : int;
+                stack : 'a Stack.t; }
+
+  exception Empty
+
+  let create () = { length = 0;
+                    stack = Stack.create(); }
+
+  let push x s =
+    s.length <- s.length + 1;
+    Stack.push x s.stack
+
+  let pop s =
+    s.length <- s.length - 1;
+    Stack.pop s.stack
+
+  let top s =
+    Stack.top s.stack
+
+  let clear s =
+    s.length <- 0;
+    Stack.clear s.stack
+
+  let copy s = { length = s.length;
+		 stack = Stack.copy s.stack; }
+    
+  let is_empty s =
+    Stack.is_empty s.stack
+
+  let length s = s.length
+
+  let iter f s =
+    Stack.iter f s.stack
+
+end
+
+(************************************************************************)
+
+let absoluteFilename (fname: string) = 
+  if Filename.is_relative fname then 
+    Filename.concat (Sys.getcwd ()) fname
+  else
+    fname
+
+
+(* mapNoCopy is like map but avoid copying the list if the function does not 
+ * change the elements. *)
+let rec mapNoCopy (f: 'a -> 'a) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let i' = f i in
+      let resti' = mapNoCopy f resti in
+      if i' != i || resti' != resti then i' :: resti' else li 
+
+let rec mapNoCopyList (f: 'a -> 'a list) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let il' = f i in
+      let resti' = mapNoCopyList f resti in
+      match il' with
+        [i'] when i' == i && resti' == resti -> li
+      | _ -> il' @ resti'
+
+
+(* Use a filter function that does not rewrite the list unless necessary *)
+let rec filterNoCopy (f: 'a -> bool) (l: 'a list) : 'a list = 
+  match l with 
+    [] -> []
+  | h :: rest when not (f h) -> filterNoCopy f rest 
+  | h :: rest -> 
+      let rest' = filterNoCopy f rest in
+      if rest == rest' then l else h :: rest'
+
+(** Join a list of strings *)
+let rec joinStrings (sep: string) (sl: string list) = 
+  match sl with 
+    [] -> ""
+  | [s1] -> s1
+  | s1 :: ((_ :: _) as rest) -> s1 ^ sep ^ joinStrings sep rest
+
+
+(************************************************************************
+
+ Configuration 
+
+ ************************************************************************)
+(** The configuration data can be of several types **)
+type configData = 
+    ConfInt of int
+  | ConfBool of bool
+  | ConfFloat of float
+  | ConfString of string
+  | ConfList of configData list
+
+
+(* Store here window configuration file *)
+let configurationData: (string, configData) H.t = H.create 13
+
+let clearConfiguration () = H.clear configurationData
+
+let setConfiguration (key: string) (c: configData) = 
+  H.replace configurationData key c
+
+let findConfiguration (key: string) : configData = 
+  H.find configurationData key 
+
+let findConfigurationInt (key: string) : int = 
+  match findConfiguration key with 
+    ConfInt i -> i
+  | _ -> 
+      ignore (E.warn "Configuration %s is not an integer" key);
+      raise Not_found
+
+let useConfigurationInt (key: string) (f: int -> unit) = 
+  try f (findConfigurationInt key)
+  with Not_found -> ()
+
+let findConfigurationString (key: string) : string = 
+  match findConfiguration key with 
+    ConfString s -> s
+  | _ -> 
+      ignore (E.warn "Configuration %s is not a string" key);
+      raise Not_found
+
+let useConfigurationString (key: string) (f: string -> unit) = 
+  try f (findConfigurationString key)
+  with Not_found -> ()
+
+
+let findConfigurationBool (key: string) : bool = 
+  match findConfiguration key with 
+    ConfBool b -> b
+  | _ -> 
+      ignore (E.warn "Configuration %s is not a boolean" key);
+      raise Not_found
+
+let useConfigurationBool (key: string) (f: bool -> unit) = 
+  try f (findConfigurationBool key)
+  with Not_found -> ()
+
+let findConfigurationList (key: string) : configData list  = 
+  match findConfiguration key with 
+    ConfList l -> l
+  | _ -> 
+      ignore (E.warn "Configuration %s is not a list" key);
+      raise Not_found
+
+let useConfigurationList (key: string) (f: configData list -> unit) = 
+  try f (findConfigurationList key)
+  with Not_found -> ()
+
+
+let saveConfiguration (fname: string) = 
+  (** Convert configuration data to a string, for saving externally *)
+  let configToString (c: configData) : string = 
+    let buff = Buffer.create 80 in
+    let rec loop (c: configData) : unit = 
+      match c with 
+        ConfInt i -> 
+          Buffer.add_char buff 'i';
+          Buffer.add_string buff (string_of_int i);
+          Buffer.add_char buff ';'
+            
+      | ConfBool b -> 
+          Buffer.add_char buff 'b';
+          Buffer.add_string buff (string_of_bool b);
+          Buffer.add_char buff ';'
+            
+      | ConfFloat f -> 
+          Buffer.add_char buff 'f';
+          Buffer.add_string buff (string_of_float f);
+          Buffer.add_char buff ';'
+            
+      | ConfString s -> 
+          if String.contains s '"' then 
+            E.s (E.unimp "Guilib: configuration string contains quotes");
+          Buffer.add_char buff '"';
+          Buffer.add_string buff s;
+          Buffer.add_char buff '"'; (* '"' *)
+          
+      | ConfList l -> 
+          Buffer.add_char buff '[';
+          List.iter loop l;
+          Buffer.add_char buff ']'
+    in
+    loop c;
+    Buffer.contents buff
+  in
+  try 
+    let oc = open_out fname in
+    ignore (E.log "Saving configuration to %s\n" (absoluteFilename fname));
+    H.iter (fun k c -> 
+      output_string oc (k ^ "\n");
+      output_string oc ((configToString c) ^ "\n"))
+      configurationData;
+    close_out oc
+  with _ -> 
+    ignore (E.warn "Cannot open configuration file %s\n" fname)
+
+
+(** Make some regular expressions early *)
+let intRegexp = Str.regexp "i\\([0-9]+\\);"
+let floatRegexp = Str.regexp "f\\([0-9]+\\.[0-9]+\\);"
+let boolRegexp = Str.regexp "b\\(\\(true\\)\\|\\(false\\)\\);"
+let stringRegexp = Str.regexp "\"\\([^\"]*\\)\""
+
+let loadConfiguration (fname: string) : unit = 
+  H.clear configurationData;
+
+  let stringToConfig (s: string) : configData = 
+    let idx = ref 0 in (** the current index *)
+    let l = String.length s in 
+    
+    let rec getOne () : configData = 
+      if !idx >= l then raise Not_found;
+      
+      if Str.string_match intRegexp s !idx then begin
+        idx := Str.match_end ();
+        ConfInt (int_of_string (Str.matched_group 1 s))
+      end else if Str.string_match floatRegexp s !idx then begin
+        idx := Str.match_end ();
+        ConfFloat (float_of_string (Str.matched_group 1 s))
+      end else if Str.string_match boolRegexp s !idx then begin
+        idx := Str.match_end ();
+        ConfBool (bool_of_string (Str.matched_group 1 s))
+      end else if  Str.string_match stringRegexp s !idx then begin
+        idx := Str.match_end ();
+        ConfString (Str.matched_group 1 s)
+      end else if String.get s !idx = '[' then begin
+        (* We are starting a list *)
+        incr idx;
+        let rec loop (acc: configData list) : configData list = 
+          if !idx >= l then begin
+            ignore (E.warn "Non-terminated list in configuration %s" s);
+            raise Not_found
+          end;
+          if String.get s !idx = ']' then begin
+            incr idx;
+            List.rev acc
+          end else
+            loop (getOne () :: acc)
+        in
+        ConfList (loop [])
+      end else begin
+        ignore (E.warn "Bad configuration element in a list: %s\n"
+                  (String.sub s !idx (l - !idx)));
+        raise Not_found
+      end
+    in
+    getOne ()
+  in
+  (try 
+    let ic = open_in fname in
+    ignore (E.log "Loading configuration from %s\n" (absoluteFilename fname));
+    (try 
+      while true do
+        let k = input_line ic in
+        let s = input_line ic in
+        try 
+          let c = stringToConfig s in 
+          setConfiguration k c
+        with Not_found -> ()
+      done
+    with End_of_file -> ());
+    close_in ic;
+  with _ -> () (* no file, ignore *));
+  
+  ()
+
+   
+ 
+(*********************************************************************)
+type symbol = int
+
+(**{ Registering symbol names} *)
+let registeredSymbolNames: (string, symbol) H.t = H.create 113
+let symbolNames: string IH.t = IH.create 113 
+let nextSymbolId = ref 0 
+
+(* When we register symbol ranges, we store a naming function for use later 
+ * when we print the symbol *)
+let symbolRangeNaming: (int * int * (int -> string)) list ref = ref []
+
+(* Reset the symbols. We want to allow the registration of symbols at the 
+ * top-level. This means that we cannot simply clear the hash tables. The 
+ * first time we call "reset" we actually remember the state. *)
+let resetThunk: (unit -> unit) option ref = ref None
+
+let snapshotSymbols () : unit -> unit = 
+  runThunks [ restoreIntHash symbolNames;
+              restoreRef nextSymbolId;
+              restoreHash registeredSymbolNames;
+              restoreRef symbolRangeNaming ]
+
+let resetSymbols () = 
+  match !resetThunk with 
+    None -> resetThunk := Some (snapshotSymbols ())
+  | Some t -> t ()
+  
+
+let dumpSymbols () = 
+  ignore (E.log "Current symbols\n");
+  IH.iter (fun i k -> ignore (E.log " %s -> %d\n" k i)) symbolNames;
+  ()
+
+let newSymbol (n: string) : symbol = 
+  assert(not (H.mem registeredSymbolNames n));
+  let id = !nextSymbolId in
+  incr nextSymbolId;
+  H.add registeredSymbolNames n id;
+  IH.add symbolNames id n;
+  id
+
+let registerSymbolName (n: string) : symbol = 
+  try H.find registeredSymbolNames n
+  with Not_found -> begin
+    newSymbol n
+  end
+
+(** Register a range of symbols. The mkname function will be invoked for 
+ * indices starting at 0 *)
+let registerSymbolRange (count: int) (mkname: int -> string) : symbol = 
+  if count < 0 then E.s (E.bug "registerSymbolRange: invalid counter");
+  let first = !nextSymbolId in
+  nextSymbolId := !nextSymbolId + count;
+  symbolRangeNaming := 
+    (first, !nextSymbolId - 1, mkname) :: !symbolRangeNaming;
+  first
+    
+let symbolName (id: symbol) : string = 
+  try IH.find symbolNames id
+  with Not_found -> 
+    (* Perhaps it is one of the lazily named symbols *)
+    try 
+      let (fst, _, mkname) = 
+        List.find 
+          (fun (fst,lst,_) -> fst <= id && id <= lst) 
+          !symbolRangeNaming in
+      let n = mkname (id - fst) in
+      IH.add symbolNames id n;
+      n
+    with Not_found ->
+      ignore (E.warn "Cannot find the name of symbol %d" id);
+      "symbol" ^ string_of_int id
+
+(************************************************************************)
+
+(** {1 Int32 Operators} *)
+
+module Int32Op = struct
+   exception IntegerTooLarge
+   let to_int (i: int32) = 
+     let i' = Int32.to_int i in (* Silently drop the 32nd bit *)
+     if i = Int32.of_int i' then i'
+     else raise IntegerTooLarge
+
+   let (<%) = (fun x y -> (Int32.compare x y) < 0)
+   let (<=%) = (fun x y -> (Int32.compare x y) <= 0)
+   let (>%) = (fun x y -> (Int32.compare x y) > 0)
+   let (>=%) = (fun x y -> (Int32.compare x y) >= 0)
+   let (<>%) = (fun x y -> (Int32.compare x y) <> 0)
+   
+   let (+%) = Int32.add
+   let (-%) = Int32.sub
+   let ( *% ) = Int32.mul
+   let (/%) = Int32.div
+   let (~-%) = Int32.neg
+
+   (* We cannot use the <<% because it trips camlp4 *)
+   let sll = fun i j -> Int32.shift_left i (to_int j)
+   let (>>%) = fun i j -> Int32.shift_right i (to_int j)
+   let (>>>%) = fun i j -> Int32.shift_right_logical i (to_int j)
+end
+
+
+(*********************************************************************)
+
+let equals x1 x2 : bool =
+  (compare x1 x2) = 0
diff --git a/cil/ocamlutil/util.mli b/cil/ocamlutil/util.mli
new file mode 100644
index 000000000..d701c65f4
--- /dev/null
+++ b/cil/ocamlutil/util.mli
@@ -0,0 +1,311 @@
+(** A bunch of generally useful functions *)
+
+exception GotSignal of int
+
+val withTimeout : float -> (* Seconds for timeout *)
+                (int -> 'b) -> (* What to do if we have a timeout. The 
+                                        * argument passed is the signal number 
+                                        * received. *)
+                ('a -> 'b) -> (* The function to run *)
+                'a -> (* And its argument *)
+   'b
+
+val docHash : ?sep:Pretty.doc -> ('a -> 'b -> Pretty.doc) -> unit -> 
+  (('a, 'b) Hashtbl.t) -> Pretty.doc 
+
+
+val hash_to_list: ('a, 'b) Hashtbl.t -> ('a * 'b) list
+
+val keys: ('a, 'b) Hashtbl.t -> 'a list
+
+
+(** Copy a hash table into another *)
+val hash_copy_into: ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t -> unit
+
+(** First, a few utility functions I wish were in the standard prelude *)
+
+val anticompare: 'a -> 'a -> int
+
+val list_drop : int -> 'a list -> 'a list
+val list_droptail : int -> 'a list -> 'a list
+val list_span: ('a -> bool) -> ('a list) -> 'a list * 'a list
+val list_insert_by: ('a -> 'a -> int) -> 'a -> 'a list -> 'a list
+val list_head_default: 'a -> 'a list -> 'a
+val list_iter3 : ('a -> 'b -> 'c -> unit) ->
+  'a list -> 'b list -> 'c list -> unit
+val get_some_option_list : 'a option list -> 'a list
+val list_append: ('a list) -> ('a list) -> ('a list) (* tail-recursive append*)
+
+(** Iterate over a list passing the index as you go *)
+val list_iteri: (int -> 'a -> unit) -> 'a list -> unit
+val list_mapi: (int -> 'a -> 'b) -> 'a list -> 'b list
+
+(** Like fold_left but pass the index into the list as well *)
+val list_fold_lefti: ('acc -> int -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc
+
+(** Generates the range of integers starting with a and ending with b *)
+val int_range_list : int -> int -> int list
+
+(* Create a list of length l *)
+val list_init : int -> (int -> 'a) -> 'a list
+
+(** Find the first element in a list that returns Some *)
+val list_find_first: 'a list -> ('a -> 'b option) -> 'b option 
+
+(** mapNoCopy is like map but avoid copying the list if the function does not 
+ * change the elements *)
+
+val mapNoCopy: ('a -> 'a) -> 'a list -> 'a list
+
+val mapNoCopyList: ('a -> 'a list) -> 'a list -> 'a list
+
+val filterNoCopy: ('a -> bool) -> 'a list -> 'a list
+
+
+(** Join a list of strings *)
+val joinStrings: string -> string list -> string
+
+
+(**** Now in growArray.mli
+
+(** Growable arrays *)
+type 'a growArrayFill =
+    Elem of 'a
+  | Susp of (int -> 'a)
+
+type 'a growArray = {
+            gaFill: 'a growArrayFill;
+            (** Stuff to use to fill in the array as it grows *)
+
+    mutable gaMaxInitIndex: int;
+            (** Maximum index that was written to. -1 if no writes have 
+             * been made.  *)
+
+    mutable gaData: 'a array;
+  } 
+
+val newGrowArray: int -> 'a growArrayFill -> 'a growArray
+(** [newGrowArray initsz fillhow] *)
+
+val getReg: 'a growArray -> int -> 'a
+val setReg: 'a growArray -> int -> 'a -> unit
+val copyGrowArray: 'a growArray -> 'a growArray
+val deepCopyGrowArray: 'a growArray -> ('a -> 'a) -> 'a growArray
+
+
+val growArray_iteri:  (int -> 'a -> unit) -> 'a growArray -> unit
+(** Iterate over the initialized elements of the array *)
+
+val growArray_foldl: ('acc -> 'a -> 'acc) -> 'acc ->'a growArray -> 'acc
+(** Fold left over the initialized elements of the array *)
+
+****)
+
+(** hasPrefix prefix str returns true with str starts with prefix *)
+val hasPrefix: string -> string -> bool
+
+
+(** Given a ref cell, produce a thunk that later restores it to its current value *)
+val restoreRef: ?deepCopy:('a -> 'a) -> 'a ref -> unit -> unit
+
+(** Given a hash table, produce a thunk that later restores it to its current value *)
+val restoreHash: ?deepCopy:('b -> 'b) -> ('a, 'b) Hashtbl.t -> unit -> unit
+
+(** Given an integer hash table, produce a thunk that later restores it to 
+ * its current value *)
+val restoreIntHash: ?deepCopy:('b -> 'b) -> 'b Inthash.t -> unit -> unit
+
+(** Given an array, produce a thunk that later restores it to its current value *)
+val restoreArray: ?deepCopy:('a -> 'a) -> 'a array -> unit -> unit
+
+
+(** Given a list of thunks, produce a thunk that runs them all *)
+val runThunks: (unit -> unit) list -> unit -> unit
+
+
+val memoize: ('a, 'b) Hashtbl.t ->
+            'a ->
+            ('a -> 'b) -> 'b
+
+(** Just another name for memoize *)
+val findOrAdd: ('a, 'b) Hashtbl.t ->
+            'a ->
+            ('a -> 'b) -> 'b
+
+val tryFinally: 
+    ('a -> 'b) -> (* The function to run *)
+    ('b option -> unit) -> (* Something to run at the end. The None case is 
+                          * used when an exception is thrown *)
+    'a -> 'b
+
+
+
+
+(** Get the value of an option.  Raises Failure if None *)
+val valOf : 'a option -> 'a
+
+(**
+ * An accumulating for loop.
+ *
+ * Initialize the accumulator with init.  The current index and accumulator
+ * from the previous iteration is passed to f.
+ *)
+val fold_for : init:'a -> lo:int -> hi:int -> (int -> 'a -> 'a) -> 'a
+
+(************************************************************************)
+
+module type STACK = sig
+  type 'a t
+  (** The type of stacks containing elements of type ['a]. *)
+
+  exception Empty
+  (** Raised when {!Util.Stack.pop} or {!Util.Stack.top} is applied to an 
+   * empty stack. *)
+
+  val create : unit -> 'a t
+
+
+  val push : 'a -> 'a t -> unit
+  (** [push x s] adds the element [x] at the top of stack [s]. *)
+
+  val pop : 'a t -> 'a
+  (** [pop s] removes and returns the topmost element in stack [s],
+     or raises [Empty] if the stack is empty. *)
+
+  val top : 'a t -> 'a
+  (** [top s] returns the topmost element in stack [s],
+     or raises [Empty] if the stack is empty. *)
+  
+  val clear : 'a t -> unit
+  (** Discard all elements from a stack. *)
+  
+  val copy : 'a t -> 'a t
+  (** Return a copy of the given stack. *)
+  
+  val is_empty : 'a t -> bool
+  (** Return [true] if the given stack is empty, [false] otherwise. *)
+  
+  val length : 'a t -> int
+  (** Return the number of elements in a stack. *)
+  
+  val iter : ('a -> unit) -> 'a t -> unit
+  (** [iter f s] applies [f] in turn to all elements of [s],
+     from the element at the top of the stack to the element at the
+     bottom of the stack. The stack itself is unchanged. *)
+end
+
+module Stack : STACK
+
+(************************************************************************
+   Configuration 
+************************************************************************)
+(** The configuration data can be of several types **)
+type configData = 
+    ConfInt of int
+  | ConfBool of bool
+  | ConfFloat of float
+  | ConfString of string
+  | ConfList of configData list
+
+
+(** Load the configuration from a file *)
+val loadConfiguration: string -> unit
+
+(** Save the configuration in a file. Overwrites the previous values *)
+val saveConfiguration: string -> unit
+
+
+(** Clear all configuration data *)
+val clearConfiguration: unit -> unit
+
+(** Set a configuration element, with a key. Overwrites the previous values *)
+val setConfiguration: string -> configData -> unit
+
+(** Find a configuration elements, given a key. Raises Not_found if it canont 
+ * find it *)
+val findConfiguration: string -> configData
+
+(** Like findConfiguration but extracts the integer *)
+val findConfigurationInt: string -> int
+
+(** Looks for an integer configuration element, and if it is found, it uses 
+ * the given function. Otherwise, does nothing *)
+val useConfigurationInt: string -> (int -> unit) -> unit
+
+
+val findConfigurationBool: string -> bool
+val useConfigurationBool: string -> (bool -> unit) -> unit
+
+val findConfigurationString: string -> string
+val useConfigurationString: string -> (string -> unit) -> unit
+
+val findConfigurationList: string -> configData list
+val useConfigurationList: string -> (configData list -> unit) -> unit
+
+
+(************************************************************************)
+
+(** Symbols are integers that are uniquely associated with names *)
+type symbol = int
+
+(** Get the name of a symbol *)
+val symbolName: symbol -> string
+
+(** Register a symbol name and get the symbol for it *)
+val registerSymbolName: string -> symbol
+
+(** Register a number of consecutive symbol ids. The naming function will be 
+ * invoked with indices from 0 to the counter - 1. Returns the id of the 
+ * first symbol created. The naming function is invoked lazily, only when the 
+ * name of the symbol is required. *)
+val registerSymbolRange: int -> (int -> string) -> symbol
+
+
+(** Make a fresh symbol. Give the name also, which ought to be distinct from 
+ * existing symbols. This is different from registerSymbolName in that it 
+ * always creates a new symbol. *)
+val newSymbol: string -> symbol
+
+(** Reset the state of the symbols to the program startup state *)
+val resetSymbols: unit -> unit
+
+(** Take a snapshot of the symbol state. Returns a thunk that restores the 
+ * state. *)
+val snapshotSymbols: unit -> unit -> unit
+
+
+(** Dump the list of registered symbols *)
+val dumpSymbols: unit -> unit
+
+(************************************************************************)
+
+(** {1 Int32 Operators} *)
+
+module Int32Op : sig
+   val (<%) : int32 -> int32 -> bool
+   val (<=%) : int32 -> int32 -> bool
+   val (>%) : int32 -> int32 -> bool
+   val (>=%) : int32 -> int32 -> bool
+   val (<>%) : int32 -> int32 -> bool
+   
+   val (+%) : int32 -> int32 -> int32
+   val (-%) : int32 -> int32 -> int32
+   val ( *% ) : int32 -> int32 -> int32
+   val (/%) : int32 -> int32 -> int32
+   val (~-%) : int32 -> int32
+
+   val sll : int32 -> int32 -> int32
+   val (>>%) : int32 -> int32 -> int32
+   val (>>>%) : int32 -> int32 -> int32
+
+   exception IntegerTooLarge
+   val to_int : int32 -> int
+end
+
+(************************************************************************)
+
+(** This has the semantics of (=) on OCaml 3.07 and earlier.  It can
+   handle cyclic values as long as a structure in the cycle has a unique
+   name or id in some field that occurs before any fields that have cyclic
+   pointers. *)
+val equals: 'a -> 'a -> bool
diff --git a/cil/src/check.ml b/cil/src/check.ml
new file mode 100644
index 000000000..4dc8850a3
--- /dev/null
+++ b/cil/src/check.ml
@@ -0,0 +1,1017 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(* 
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* A consistency checker for CIL *)
+open Cil
+module E = Errormsg
+module H = Hashtbl
+open Pretty
+
+
+(* A few parameters to customize the checking *)
+type checkFlags = 
+    NoCheckGlobalIds   (* Do not check that the global ids have the proper 
+                        * hash value *)
+
+let checkGlobalIds = ref true
+
+  (* Attributes must be sorted *)
+type ctxAttr = 
+    CALocal                             (* Attribute of a local variable *)
+  | CAGlobal                            (* Attribute of a global variable *)
+  | CAType                              (* Attribute of a type *)
+
+let valid = ref true
+
+let warn fmt =
+  valid := false;
+  Cil.warn fmt
+
+let warnContext fmt =
+  valid := false;
+  Cil.warnContext fmt
+
+let checkAttributes (attrs: attribute list) : unit = 
+  let rec loop lastname = function
+      [] -> ()
+    | Attr(an, _) :: resta -> 
+        if an < lastname then
+          ignore (warn "Attributes not sorted");
+        loop an resta
+  in
+  loop "" attrs
+
+
+  (* Keep track of defined types *)
+let typeDefs : (string, typ) H.t = H.create 117
+
+
+  (* Keep track of all variables names, enum tags and type names *)
+let varNamesEnv : (string, unit) H.t = H.create 117
+
+  (* We also keep a map of variables indexed by id, to ensure that only one 
+   * varinfo has a given id *)
+let varIdsEnv: (int, varinfo) H.t = H.create 117
+
+  (* And keep track of all varinfo's to check the uniqueness of the 
+   * identifiers *)
+let allVarIds: (int, varinfo) H.t = H.create 117
+
+ (* Also keep a list of environments. We place an empty string in the list to 
+  * mark the start of a local environment (i.e. a function) *)
+let varNamesList : (string * int) list ref = ref []
+let defineName s = 
+  if s = "" then
+    E.s (bug "Empty name\n"); 
+  if H.mem varNamesEnv s then
+    ignore (warn "Multiple definitions for %s\n" s);
+  H.add varNamesEnv s ()
+
+let defineVariable vi = 
+  defineName vi.vname;
+  varNamesList := (vi.vname, vi.vid) :: !varNamesList;
+  (* Check the id *)
+  if H.mem allVarIds vi.vid then
+    ignore (warn "Id %d is already defined (%s)\n" vi.vid vi.vname);
+  H.add allVarIds vi.vid vi;
+  (* And register it in the current scope also *)
+  H.add varIdsEnv vi.vid vi
+
+(* Check that a varinfo has already been registered *)
+let checkVariable vi = 
+  try
+    (* Check in the current scope only *)
+    if vi != H.find varIdsEnv vi.vid then
+      ignore (warnContext "varinfos for %s not shared\n" vi.vname);
+  with Not_found -> 
+    ignore (warn "Unknown id (%d) for %s\n" vi.vid vi.vname)
+
+
+let startEnv () = 
+  varNamesList := ("", -1) :: !varNamesList
+
+let endEnv () = 
+  let rec loop = function
+      [] -> E.s (bug "Cannot find start of env")
+    | ("", _) :: rest -> varNamesList := rest
+    | (s, id) :: rest -> begin
+        H.remove varNamesEnv s;
+        H.remove varIdsEnv id;
+        loop rest
+    end
+  in
+  loop !varNamesList
+    
+
+    
+(* The current function being checked *)
+let currentReturnType : typ ref = ref voidType
+
+(* A map of labels in the current function *)
+let labels: (string, unit) H.t = H.create 17
+
+(* A list of statements seen in the current function *)
+let statements: stmt list ref = ref []
+
+(* A list of the targets of Gotos *)
+let gotoTargets: (string * stmt) list ref = ref []
+
+(*** TYPES ***)
+(* Cetain types can only occur in some contexts, so keep a list of context *)
+type ctxType = 
+    CTStruct                            (* In a composite type *)
+  | CTUnion
+  | CTFArg                              (* In a function argument type *)
+  | CTFRes                              (* In a function result type *)
+  | CTArray                             (* In an array type *)
+  | CTPtr                               (* In a pointer type *)
+  | CTExp                               (* In an expression, as the type of 
+                                         * the result of binary operators, or 
+                                         * in a cast *)
+  | CTSizeof                            (* In a sizeof *)
+  | CTDecl                              (* In a typedef, or a declaration *)
+
+let d_context () = function
+    CTStruct -> text "CTStruct"
+  | CTUnion -> text "CTUnion"
+  | CTFArg -> text "CTFArg"
+  | CTFRes -> text "CTFRes"
+  | CTArray -> text "CTArray"
+  | CTPtr -> text "CTPtr"
+  | CTExp -> text "CTExp"
+  | CTSizeof -> text "CTSizeof"
+  | CTDecl -> text "CTDecl"
+
+
+(* Keep track of all tags that we use. For each tag remember also the info 
+ * structure and a flag whether it was actually defined or just used. A 
+ * forward declaration acts as a definition. *)
+type defuse = 
+    Defined (* We actually have seen a definition of this tag *)
+  | Forward (* We have seen a forward declaration for it. This is done using 
+             * a GType with an empty type name *)
+  | Used    (* Only uses *)
+let compUsed : (int, compinfo * defuse ref) H.t = H.create 117
+let enumUsed : (string, enuminfo * defuse ref) H.t = H.create 117
+let typUsed  : (string, typeinfo * defuse ref) H.t = H.create 117
+ 
+(* For composite types we also check that the names are unique *)
+let compNames : (string, unit) H.t = H.create 17
+    
+
+  (* Check a type *)
+let rec checkType (t: typ) (ctx: ctxType) = 
+  (* Check that it appears in the right context *)
+  let rec checkContext = function
+      TVoid _ -> ctx = CTPtr || ctx = CTFRes || ctx = CTDecl
+    | TNamed (ti, a) -> checkContext ti.ttype
+    | TArray _ -> 
+        (ctx = CTStruct || ctx = CTUnion 
+         || ctx = CTSizeof || ctx = CTDecl || ctx = CTArray || ctx = CTPtr)
+    | TComp _ -> ctx <> CTExp 
+    | _ -> true
+  in
+  if not (checkContext t) then 
+    ignore (warn "Type (%a) used in wrong context. Expected context: %a"
+              d_plaintype t d_context ctx);
+  match t with
+    (TVoid a | TBuiltin_va_list a) -> checkAttributes a
+  | TInt (ik, a) -> checkAttributes a
+  | TFloat (_, a) -> checkAttributes a
+  | TPtr (t, a) -> checkAttributes a;  checkType t CTPtr
+
+  | TNamed (ti, a) ->
+      checkAttributes a;
+      if ti.tname = "" then 
+        ignore (warnContext "Using a typeinfo for an empty-named type\n");
+      checkTypeInfo Used ti
+
+  | TComp (comp, a) ->
+      checkAttributes a;
+      (* Mark it as a forward. We'll check it later. If we try to check it 
+       * now we might encounter undefined types *)
+      checkCompInfo Used comp
+
+
+  | TEnum (enum, a) -> begin
+      checkAttributes a;
+      checkEnumInfo Used enum
+  end
+
+  | TArray(bt, len, a) -> 
+      checkAttributes a;
+      checkType bt CTArray;
+      (match len with
+        None -> ()
+      | Some l -> begin
+          let t = checkExp true l in
+          match t with 
+            TInt((IInt|IUInt), _) -> ()
+          | _ -> E.s (bug "Type of array length is not integer")
+      end)
+
+  | TFun (rt, targs, isva, a) -> 
+      checkAttributes a;
+      checkType rt CTFRes;
+      List.iter 
+        (fun (an, at, aa) -> 
+          checkType at CTFArg;
+          checkAttributes aa) (argsToList targs)
+
+(* Check that a type is a promoted integral type *)
+and checkIntegralType (t: typ) = 
+  checkType t CTExp;
+  match unrollType t with
+    TInt _ -> ()
+  | _ -> ignore (warn "Non-integral type")
+
+(* Check that a type is a promoted arithmetic type *)
+and checkArithmeticType (t: typ) = 
+  checkType t CTExp;
+  match unrollType t with
+    TInt _ | TFloat _ -> ()
+  | _ -> ignore (warn "Non-arithmetic type")
+
+(* Check that a type is a promoted boolean type *)
+and checkBooleanType (t: typ) = 
+  checkType t CTExp;
+  match unrollType t with
+    TInt _ | TFloat _ | TPtr _ -> ()
+  | _ -> ignore (warn "Non-boolean type")
+
+
+(* Check that a type is a pointer type *)
+and checkPointerType (t: typ) = 
+  checkType t CTExp;
+  match unrollType t with
+    TPtr _ -> ()
+  | _ -> ignore (warn "Non-pointer type")
+
+
+and typeMatch (t1: typ) (t2: typ) = 
+  if typeSig t1 <> typeSig t2 then
+    match unrollType t1, unrollType t2 with
+    (* Allow free interchange of TInt and TEnum *)
+      TInt (IInt, _), TEnum _ -> ()
+    | TEnum _, TInt (IInt, _) -> ()
+
+    | _, _ -> ignore (warn "Type mismatch:@!    %a@!and %a@!" 
+                        d_type t1 d_type t2)
+
+and checkCompInfo (isadef: defuse) comp = 
+  let fullname = compFullName comp in
+  try
+    let oldci, olddef = H.find compUsed comp.ckey in
+    (* Check that it is the same *)
+    if oldci != comp then 
+      ignore (warnContext "compinfo for %s not shared\n" fullname);
+    (match !olddef, isadef with 
+    | Defined, Defined -> 
+        ignore (warnContext "Multiple definition of %s\n" fullname)
+    | _, Defined -> olddef := Defined
+    | Defined, _ -> ()
+    | _, Forward -> olddef := Forward
+    | _, _ -> ())
+  with Not_found -> begin (* This is the first time we see it *)
+    (* Check that the name is not empty *)
+    if comp.cname = "" then 
+      E.s (bug "Compinfo with empty name");
+    (* Check that the name is unique *)
+    if H.mem compNames fullname then
+      ignore (warn "Duplicate name %s" fullname);
+    (* Add it to the map before we go on *)
+    H.add compUsed comp.ckey (comp, ref isadef);
+    H.add compNames fullname ();
+    (* Do not check the compinfo unless this is a definition. Otherwise you 
+     * might run into undefined types. *)
+    if isadef = Defined then begin
+      checkAttributes comp.cattr;
+      let fctx = if comp.cstruct then CTStruct else CTUnion in
+      let rec checkField f =
+        if not 
+            (f.fcomp == comp &&  (* Each field must share the self cell of 
+             * the host *)
+             f.fname <> "") then
+          ignore (warn "Self pointer not set in field %s of %s" 
+                    f.fname fullname);
+        checkType f.ftype fctx;
+        (* Check the bitfields *)
+        (match unrollType f.ftype, f.fbitfield with
+        | TInt (ik, a), Some w -> 
+            checkAttributes a;
+            if w < 0 || w >= bitsSizeOf (TInt(ik, a)) then
+              ignore (warn "Wrong width (%d) in bitfield" w)
+        | _, Some w -> 
+            ignore (E.error "Bitfield on a non integer type\n")
+        | _ -> ());
+        checkAttributes f.fattr
+      in
+      List.iter checkField comp.cfields
+    end
+  end
+
+
+and checkEnumInfo (isadef: defuse) enum = 
+  if enum.ename = "" then 
+    E.s (bug "Enuminfo with empty name");
+  try
+    let oldei, olddef = H.find enumUsed enum.ename in
+    (* Check that it is the same *)
+    if oldei != enum then 
+      ignore (warnContext "enuminfo for %s not shared\n" enum.ename);
+    (match !olddef, isadef with 
+      Defined, Defined -> 
+        ignore (warnContext "Multiple definition of enum %s\n" enum.ename)
+    | _, Defined -> olddef := Defined
+    | Defined, _ -> ()
+    | _, Forward -> olddef := Forward
+    | _, _ -> ())
+  with Not_found -> begin (* This is the first time we see it *)
+    (* Add it to the map before we go on *)
+    H.add enumUsed enum.ename (enum, ref isadef);
+    checkAttributes enum.eattr;
+    List.iter (fun (tn, _, _) -> defineName tn) enum.eitems;
+  end
+
+and checkTypeInfo (isadef: defuse) ti = 
+  try
+    let oldti, olddef = H.find typUsed ti.tname in
+    (* Check that it is the same *)
+    if oldti != ti then 
+      ignore (warnContext "typeinfo for %s not shared\n" ti.tname);
+    (match !olddef, isadef with 
+      Defined, Defined -> 
+        ignore (warnContext "Multiple definition of type %s\n" ti.tname)
+    | Defined, Used -> ()
+    | Used, Defined -> 
+        ignore (warnContext "Use of type %s before its definition\n" ti.tname)
+    | _, _ -> 
+        ignore (warnContext "Bug in checkTypeInfo for %s\n" ti.tname))
+  with Not_found -> begin (* This is the first time we see it *)
+    if ti.tname = "" then
+      ignore (warnContext "typeinfo with empty name");
+    checkType ti.ttype CTDecl;
+    (* Add it to the map before we go on *)
+    H.add typUsed ti.tname (ti, ref isadef);
+  end
+
+(* Check an lvalue. If isconst then the lvalue appears in a context where 
+ * only a compile-time constant can appear. Return the type of the lvalue. 
+ * See the typing rule from cil.mli *)
+and checkLval (isconst: bool) (lv: lval) : typ = 
+  match lv with
+    Var vi, off -> 
+      checkVariable vi; 
+      checkOffset vi.vtype off
+
+  | Mem addr, off -> begin
+      if isconst then
+        ignore (warn "Memory operation in constant");
+      let ta = checkExp false addr in
+      match unrollType ta with
+        TPtr (t, _) -> checkOffset t off
+      | _ -> E.s (bug "Mem on a non-pointer")
+  end
+
+(* Check an offset. The basetype is the type of the object referenced by the 
+ * base. Return the type of the lvalue constructed from a base value of right 
+ * type and the offset. See the typing rules from cil.mli *)
+and checkOffset basetyp : offset -> typ = function
+    NoOffset -> basetyp
+  | Index (ei, o) -> 
+      checkExpType false ei intType; 
+      begin
+        match unrollType basetyp with
+          TArray (t, _, _) -> checkOffset t o
+        | t -> E.s (bug "typeOffset: Index on a non-array: %a" d_plaintype t)
+      end
+
+  | Field (fi, o) -> 
+      (* Now check that the host is shared propertly *)
+      checkCompInfo Used fi.fcomp;
+      (* Check that this exact field is part of the host *)
+      if not (List.exists (fun f -> f == fi) fi.fcomp.cfields) then
+        ignore (warn "Field %s not part of %s" 
+                  fi.fname (compFullName fi.fcomp));
+      checkOffset fi.ftype o
+        
+and checkExpType (isconst: bool) (e: exp) (t: typ) =
+  let t' = checkExp isconst e in (* compute the type *)
+  if isconst then begin (* For initializers allow a string to initialize an 
+                         * array of characters  *)
+    if typeSig t' <> typeSig t then 
+      match e, t with
+      | _ -> typeMatch t' t
+  end else
+    typeMatch t' t
+
+(* Check an expression. isconst specifies if the expression occurs in a 
+ * context where only a compile-time constant can occur. Return the computed 
+ * type of the expression *)
+and checkExp (isconst: bool) (e: exp) : typ = 
+  E.withContext 
+    (fun _ -> dprintf "check%s: %a" 
+        (if isconst then "Const" else "Exp") d_exp e)
+    (fun _ ->
+      match e with
+      | Const(CInt64 (_, ik, _)) -> TInt(ik, [])
+      | Const(CChr _) -> charType
+      | Const(CStr s) -> charPtrType
+      | Const(CWStr s) -> TPtr(!wcharType,[])
+      | Const(CReal (_, fk, _)) -> TFloat(fk, [])
+      | Const(CEnum (_, _, ei)) -> TEnum(ei, [])
+      | Lval(lv) -> 
+          if isconst then
+            ignore (warn "Lval in constant");
+          checkLval isconst lv
+
+      | SizeOf(t) -> begin
+          (* Sizeof cannot be applied to certain types *)
+          checkType t CTSizeof;
+          (match unrollType t with
+            (TFun _ | TVoid _) -> 
+              ignore (warn "Invalid operand for sizeof")
+          | _ ->());
+          uintType
+      end
+      | SizeOfE(e) ->
+          (* The expression in a sizeof can be anything *)
+          let te = checkExp false e in
+          checkExp isconst (SizeOf(te))
+
+      | SizeOfStr s -> uintType
+
+      | AlignOf(t) -> begin
+          (* Sizeof cannot be applied to certain types *)
+          checkType t CTSizeof;
+          (match unrollType t with
+            (TFun _ | TVoid _) -> 
+              ignore (warn "Invalid operand for sizeof")
+          | _ ->());
+          uintType
+      end
+      | AlignOfE(e) ->
+          (* The expression in an AlignOfE can be anything *)
+          let te = checkExp false e in
+          checkExp isconst (AlignOf(te))
+
+      | UnOp (Neg, e, tres) -> 
+          checkArithmeticType tres; checkExpType isconst e tres; tres
+
+      | UnOp (BNot, e, tres) -> 
+          checkIntegralType tres; checkExpType isconst e tres; tres
+
+      | UnOp (LNot, e, tres) -> 
+          let te = checkExp isconst e in
+          checkBooleanType te;
+          checkIntegralType tres; (* Must check that t is well-formed *)
+          typeMatch tres intType;
+          tres
+
+      | BinOp (bop, e1, e2, tres) -> begin
+          let t1 = checkExp isconst e1 in
+          let t2 = checkExp isconst e2 in
+          match bop with
+            (Mult | Div) -> 
+              typeMatch t1 t2; checkArithmeticType tres; 
+              typeMatch t1 tres; tres
+          | (Eq|Ne|Lt|Le|Ge|Gt) -> 
+              typeMatch t1 t2; checkArithmeticType t1; 
+              typeMatch tres intType; tres
+          | Mod|BAnd|BOr|BXor -> 
+              typeMatch t1 t2; checkIntegralType tres;
+              typeMatch t1 tres; tres
+          | LAnd | LOr -> 
+              typeMatch t1 t2; checkBooleanType tres;
+              typeMatch t1 tres; tres
+          | Shiftlt | Shiftrt -> 
+              typeMatch t1 tres; checkIntegralType t1; 
+              checkIntegralType t2; tres
+          | (PlusA | MinusA) -> 
+                typeMatch t1 t2; typeMatch t1 tres;
+                checkArithmeticType tres; tres
+          | (PlusPI | MinusPI | IndexPI) -> 
+              checkPointerType tres;
+              typeMatch t1 tres;
+              checkIntegralType t2;
+              tres
+          | MinusPP  -> 
+              checkPointerType t1; checkPointerType t2;
+              typeMatch t1 t2;
+              typeMatch tres intType;
+              tres
+      end
+      | AddrOf (lv) -> begin
+          let tlv = checkLval isconst lv in
+          (* Only certain types can be in AddrOf *)
+          match unrollType tlv with
+          | TVoid _ -> 
+              E.s (bug "AddrOf on improper type");
+              
+          | (TInt _ | TFloat _ | TPtr _ | TComp _ | TFun _ | TArray _ ) -> 
+              TPtr(tlv, [])
+
+          | TEnum _ -> intPtrType
+          | _ -> E.s (bug "AddrOf on unknown type")
+      end
+
+      | StartOf lv -> begin
+          let tlv = checkLval isconst lv in
+          match unrollType tlv with
+            TArray (t,_, _) -> TPtr(t, [])
+          | _ -> E.s (bug "StartOf on a non-array")
+      end
+            
+      | CastE (tres, e) -> begin
+          let et = checkExp isconst e in
+          checkType tres CTExp;
+          (* Not all types can be cast *)
+          match unrollType et with
+            TArray _ -> E.s (bug "Cast of an array type")
+          | TFun _ -> E.s (bug "Cast of a function type")
+          | TComp _ -> E.s (bug "Cast of a composite type")
+          | TVoid _ -> E.s (bug "Cast of a void type")
+          | _ -> tres
+      end)
+    () (* The argument of withContext *)
+
+and checkInit  (i: init) : typ = 
+  E.withContext 
+    (fun _ -> dprintf "checkInit: %a" d_init i)
+    (fun _ ->
+      match i with
+        SingleInit e -> checkExp true e
+(*
+      | ArrayInit (bt, len, initl) -> begin
+          checkType bt CTSizeof;
+          if List.length initl > len then 
+            ignore (warn "Too many initializers in array");
+          List.iter (fun i -> checkInitType i bt) initl;
+          TArray(bt, Some (integer len), [])
+      end
+*)
+      | CompoundInit (ct, initl) -> begin
+          checkType ct CTSizeof;
+          (match unrollType ct with
+            TArray(bt, Some (Const(CInt64(len, _, _))), _) -> 
+              let rec loopIndex i = function
+                  [] -> 
+                    if i <> len then 
+                      ignore (warn "Wrong number of initializers in array")
+
+                | (Index(Const(CInt64(i', _, _)), NoOffset), ei) :: rest -> 
+                    if i' <> i then 
+                      ignore (warn "Initializer for index %s when %s was expected\n"
+                                (Int64.format "%d" i') (Int64.format "%d" i));
+                    checkInitType ei bt;
+                    loopIndex (Int64.succ i) rest
+                | _ :: rest -> 
+                    ignore (warn "Malformed initializer for array element")
+              in
+              loopIndex Int64.zero initl
+          | TArray(_, _, _) -> 
+              ignore (warn "Malformed initializer for array")
+          | TComp (comp, _) -> 
+              if comp.cstruct then
+                let rec loopFields 
+                    (nextflds: fieldinfo list) 
+                    (initl: (offset * init) list) : unit = 
+                  match nextflds, initl with 
+                    [], [] -> ()   (* We are done *)
+                  | f :: restf, (Field(f', NoOffset), i) :: resti -> 
+                      if f.fname <> f'.fname then 
+                        ignore (warn "Expected initializer for field %s and found one for %s\n" f.fname f'.fname);
+                      checkInitType i f.ftype;
+                      loopFields restf resti
+                  | [], _ :: _ -> 
+                      ignore (warn "Too many initializers for struct")
+                  | _ :: _, [] -> 
+                      ignore (warn "Too few initializers for struct")
+                  | _, _ -> 
+                      ignore (warn "Malformed initializer for struct")
+                in
+                loopFields
+                  (List.filter (fun f -> f.fname <> missingFieldName) 
+                     comp.cfields) 
+                  initl
+
+              else (* UNION *)
+                if comp.cfields == [] then begin
+                  if initl != [] then 
+                    ignore (warn "Initializer for empty union not empty");
+                end else begin
+                  match initl with 
+                    [(Field(f, NoOffset), ei)] -> 
+                      if f.fcomp != comp then 
+                        ignore (bug "Wrong designator for union initializer");
+                      if !msvcMode && f != List.hd comp.cfields then
+                        ignore (warn "On MSVC you can only initialize the first field of a union");
+                      checkInitType ei f.ftype
+                      
+                  | _ -> 
+                      ignore (warn "Malformed initializer for union")
+                end
+          | _ -> 
+              E.s (warn "Type of Compound is not array or struct or union"));
+          ct
+      end)
+    () (* The arguments of withContext *)
+
+
+and checkInitType (i: init) (t: typ) : unit = 
+  let it = checkInit i in
+  typeMatch it t
+  
+and checkStmt (s: stmt) = 
+  E.withContext 
+    (fun _ -> 
+      (* Print context only for certain small statements *)
+      match s.skind with 
+        (*Loop _*) While _ | DoWhile _ | For _ | If _ | Switch _  -> nil
+      | _ -> dprintf "checkStmt: %a" d_stmt s)
+    (fun _ -> 
+      (* Check the labels *)
+      let checkLabel = function
+          Label (ln, l, _) -> 
+            if H.mem labels ln then
+              ignore (warn "Multiply defined label %s" ln);
+            H.add labels ln ()
+        | Case (e, _) -> checkExpType true e intType
+        | _ -> () (* Not yet implemented *)
+      in
+      List.iter checkLabel s.labels;
+      (* See if we have seen this statement before *)
+      if List.memq s !statements then 
+        ignore (warn "Statement is shared");
+      (* Remember that we have seen this one *)
+      statements := s :: !statements;
+      match s.skind with
+        Break _ | Continue _ -> ()
+      | Goto (gref, l) -> 
+          currentLoc := l;
+          (* Find a label *)
+          let lab = 
+            match List.filter (function Label _ -> true | _ -> false) 
+                  !gref.labels with
+              Label (lab, _, _) :: _ -> lab
+            | _ -> 
+                ignore (warn "Goto to block without a label\n");
+                "<missing label>"
+          in
+          (* Remember it as a target *)
+          gotoTargets := (lab, !gref) :: !gotoTargets
+            
+
+      | Return (re,l) -> begin
+          currentLoc := l;
+          match re, !currentReturnType with
+            None, TVoid _  -> ()
+          | _, TVoid _ -> ignore (warn "Invalid return value")
+          | None, _ -> ignore (warn "Invalid return value")
+          | Some re', rt' -> checkExpType false re' rt'
+        end
+(*
+      | Loop (b, l, _, _) -> checkBlock b
+*)
+      | While (e, b, l) ->
+          currentLoc := l;
+          let te = checkExp false e in
+          checkBooleanType te;
+          checkBlock b;
+      | DoWhile (e, b, l) ->
+          currentLoc := l;
+          let te = checkExp false e in
+          checkBooleanType te;
+          checkBlock b;
+      | For (bInit, e, bIter, b, l) ->
+          currentLoc := l;
+	  checkBlock bInit;
+	  let te = checkExp false e in
+          checkBooleanType te;
+	  checkBlock bIter;
+          checkBlock b;
+      | Block b -> checkBlock b
+      | If (e, bt, bf, l) -> 
+          currentLoc := l;
+          let te = checkExp false e in
+          checkBooleanType te;
+          checkBlock bt;
+          checkBlock bf
+      | Switch (e, b, cases, l) -> 
+          currentLoc := l;
+          checkExpType false e intType;
+          (* Remember the statements so far *)
+          let prevStatements = !statements in
+          checkBlock b;
+          (* Now make sure that all the cases do occur in that block *)
+          List.iter
+            (fun c -> 
+              if not (List.exists (function Case _ -> true | _ -> false) 
+                        c.labels) then
+                ignore (warn "Case in switch statment without a \"case\"\n");
+              (* Make sure it is in there *)
+              let rec findCase = function
+                | l when l == prevStatements -> (* Not found *)
+                    ignore (warnContext 
+                              "Cannot find target of switch statement")
+                | [] -> E.s (E.bug "Check: findCase")
+                | c' :: rest when c == c' -> () (* Found *)
+                | _ :: rest -> findCase rest
+              in
+              findCase !statements)
+            cases;
+      | TryFinally (b, h, l) -> 
+          currentLoc := l;
+          checkBlock b;
+          checkBlock h
+
+      | TryExcept (b, (il, e), h, l) -> 
+          currentLoc := l;
+          checkBlock b;
+          List.iter checkInstr il;
+          checkExpType false e intType;
+          checkBlock h
+
+      | Instr il -> List.iter checkInstr il)
+    () (* argument of withContext *)
+
+and checkBlock (b: block) : unit = 
+  List.iter checkStmt b.bstmts
+
+
+and checkInstr (i: instr) = 
+  match i with 
+  | Set (dest, e, l) -> 
+      currentLoc := l;
+      let t = checkLval false dest in
+      (* Not all types can be assigned to *)
+      (match unrollType t with
+        TFun _ -> ignore (warn "Assignment to a function type")
+      | TArray _ -> ignore (warn "Assignment to an array type")
+      | TVoid _ -> ignore (warn "Assignment to a void type")
+      | _ -> ());
+      checkExpType false e t
+            
+  | Call(dest, what, args, l) -> 
+      currentLoc := l;
+      let (rt, formals, isva) = 
+        match checkExp false what with
+          TFun(rt, formals, isva, _) -> rt, formals, isva
+        | _ -> E.s (bug "Call to a non-function")
+      in
+          (* Now check the return value*)
+      (match dest, unrollType rt with
+        None, TVoid _ -> ()
+      | Some _, TVoid _ -> ignore (warn "void value is assigned")
+      | None, _ -> () (* "Call of function is not assigned" *)
+      | Some destlv, rt' -> 
+          let desttyp = checkLval false destlv in
+          if typeSig desttyp <> typeSig rt then begin
+            (* Not all types can be assigned to *)
+            (match unrollType desttyp with
+              TFun _ -> ignore (warn "Assignment to a function type")
+            | TArray _ -> ignore (warn "Assignment to an array type")
+            | TVoid _ -> ignore (warn "Assignment to a void type")
+            | _ -> ());
+            (* Not all types can be cast *)
+            (match rt' with
+              TArray _ -> ignore (warn "Cast of an array type")
+            | TFun _ -> ignore (warn "Cast of a function type")
+            | TComp _ -> ignore (warn "Cast of a composite type")
+            | TVoid _ -> ignore (warn "Cast of a void type")
+                  
+            | _ -> ())
+          end);
+          (* Now check the arguments *)
+      let rec loopArgs formals args = 
+        match formals, args with
+          [], _ when (isva || args = []) -> ()
+        | (fn,ft,_) :: formals, a :: args -> 
+            checkExpType false a ft;
+            loopArgs formals args
+        | _, _ -> ignore (warn "Not enough arguments")
+      in
+      if formals = None then 
+        ignore (warn "Call to function without prototype\n")
+      else
+        loopArgs (argsToList formals) args
+        
+  | Asm _ -> ()  (* Not yet implemented *)
+  
+let rec checkGlobal = function
+    GAsm _ -> ()
+  | GPragma _ -> ()
+  | GText _ -> ()
+  | GType (ti, l) -> 
+      currentLoc := l;
+      E.withContext (fun _ -> dprintf "GType(%s)" ti.tname)
+        (fun _ ->
+          checkTypeInfo Defined ti;
+          if ti.tname <> "" then defineName ti.tname)
+        ()
+
+  | GCompTag (comp, l) -> 
+      currentLoc := l;
+      checkCompInfo Defined comp;
+
+  | GCompTagDecl (comp, l) -> 
+      currentLoc := l;
+      checkCompInfo Forward comp;
+
+  | GEnumTag (enum, l) -> 
+      currentLoc := l;
+      checkEnumInfo Defined enum
+
+  | GEnumTagDecl (enum, l) -> 
+      currentLoc := l;
+      checkEnumInfo Forward enum
+
+  | GVarDecl (vi, l) -> 
+      currentLoc := l;
+      (* We might have seen it already *)
+      E.withContext (fun _ -> dprintf "GVarDecl(%s)" vi.vname)
+        (fun _ -> 
+          (* If we have seen this vid already then it must be for the exact 
+           * same varinfo *)
+          if H.mem varIdsEnv vi.vid then
+            checkVariable vi
+          else begin
+            defineVariable vi; 
+            checkAttributes vi.vattr;
+            checkType vi.vtype CTDecl;
+            if not (vi.vglob &&
+                    vi.vstorage <> Register) then
+              E.s (bug "Invalid declaration of %s" vi.vname)
+          end)
+        ()
+        
+  | GVar (vi, init, l) -> 
+      currentLoc := l;
+      (* Maybe this is the first occurrence *)
+      E.withContext (fun _ -> dprintf "GVar(%s)" vi.vname)
+        (fun _ -> 
+          checkGlobal (GVarDecl (vi, l));
+          (* Check the initializer *)
+          begin match init.init with
+            None -> ()
+          | Some i -> ignore (checkInitType i vi.vtype)
+          end;
+          (* Cannot be a function *)
+          if isFunctionType vi.vtype then
+            E.s (bug "GVar for a function (%s)\n" vi.vname);
+          )
+        ()
+        
+
+  | GFun (fd, l) -> begin
+      currentLoc := l;
+      (* Check if this is the first occurrence *)
+      let vi = fd.svar in
+      let fname = vi.vname in
+      E.withContext (fun _ -> dprintf "GFun(%s)" fname)
+        (fun _ -> 
+          checkGlobal (GVarDecl (vi, l));
+          (* Check that the argument types in the type are identical to the 
+           * formals *)
+          let rec loopArgs targs formals = 
+            match targs, formals with
+              [], [] -> ()
+            | (fn, ft, fa) :: targs, fo :: formals -> 
+                if fn <> fo.vname || ft != fo.vtype || fa != fo.vattr then 
+                  ignore (warnContext 
+                            "Formal %s not shared (type + locals) in %s" 
+                            fo.vname fname);
+                loopArgs targs formals
+
+            | _ -> 
+                E.s (bug "Type has different number of formals for %s" 
+                       fname)
+          in
+          begin match vi.vtype with
+            TFun (rt, args, isva, a) -> begin
+              currentReturnType := rt;
+              loopArgs (argsToList args) fd.sformals
+            end
+          | _ -> E.s (bug "Function %s does not have a function type" 
+                        fname)
+          end;
+          ignore (fd.smaxid >= 0 || E.s (bug "smaxid < 0 for %s" fname));
+          (* Now start a new environment, in a finally clause *)
+          begin try
+            startEnv ();
+            (* Do the locals *)
+            let doLocal tctx v = 
+              if v.vglob then
+                ignore (warnContext
+                          "Local %s has the vglob flag set" v.vname);
+              if v.vstorage <> NoStorage && v.vstorage <> Register then
+                ignore (warnContext
+                          "Local %s has storage %a\n" v.vname
+                          d_storage v.vstorage);
+              checkType v.vtype tctx;
+              checkAttributes v.vattr;
+              defineVariable v
+            in
+            List.iter (doLocal CTFArg) fd.sformals;
+            List.iter (doLocal CTDecl) fd.slocals;
+            statements := [];
+            gotoTargets := [];
+            checkBlock fd.sbody;
+            H.clear labels;
+            (* Now verify that we have scanned all targets *)
+            List.iter 
+              (fun (lab, t) -> if not (List.memq t !statements) then 
+                ignore (warnContext
+                          "Target of \"goto %s\" statement does not appear in function body" lab))
+              !gotoTargets;
+            statements := [];
+            gotoTargets := [];
+            (* Done *)
+            endEnv ()
+          with e -> 
+            endEnv ();
+            raise e
+          end;
+          ())
+        () (* final argument of withContext *)
+  end
+
+
+let checkFile flags fl = 
+  if !E.verboseFlag then ignore (E.log "Checking file %s\n" fl.fileName);
+  valid := true;
+  List.iter 
+    (function
+        NoCheckGlobalIds -> checkGlobalIds := false)
+    flags;
+  iterGlobals fl (fun g -> try checkGlobal g with _ -> ());
+  (* Check that for all struct/union tags there is a definition *)
+  H.iter 
+    (fun k (comp, isadef) -> 
+      if !isadef = Used then 
+	begin
+	  valid := false;
+          ignore (E.warn "Compinfo %s is referenced but not defined" 
+                    (compFullName comp))
+	end)
+    compUsed;
+  (* Check that for all enum tags there is a definition *)
+  H.iter 
+    (fun k (enum, isadef) -> 
+      if !isadef = Used then 
+	begin
+	  valid := false;
+          ignore (E.warn "Enuminfo %s is referenced but not defined" 
+                    enum.ename)
+	end)
+    enumUsed;
+  (* Clean the hashes to let the GC do its job *)
+  H.clear typeDefs;
+  H.clear varNamesEnv;
+  H.clear varIdsEnv;
+  H.clear allVarIds;
+  H.clear compNames;
+  H.clear compUsed;
+  H.clear enumUsed;
+  H.clear typUsed;
+  varNamesList := [];
+  if !E.verboseFlag then 
+    ignore (E.log "Finished checking file %s\n" fl.fileName);
+  !valid
+  
diff --git a/cil/src/check.mli b/cil/src/check.mli
new file mode 100644
index 000000000..fdcb8b82c
--- /dev/null
+++ b/cil/src/check.mli
@@ -0,0 +1,45 @@
+(* 
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+ 
+    (* Checks the well-formedness of the file. Prints warnings and
+     * returns false if errors are found *)
+
+type checkFlags = 
+    NoCheckGlobalIds   (* Do not check that the global ids have the proper 
+                        * hash value *) 
+ 
+val checkFile: checkFlags list -> Cil.file -> bool
diff --git a/cil/src/cil.ml b/cil/src/cil.ml
new file mode 100644
index 000000000..2c4e12a71
--- /dev/null
+++ b/cil/src/cil.ml
@@ -0,0 +1,6427 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+(* MODIF: useLogicalOperators flag set to true by default. *)
+
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+open Escape
+open Pretty
+open Trace      (* sm: 'trace' function *)
+module E = Errormsg
+module H = Hashtbl
+module IH = Inthash
+
+(*
+ * CIL: An intermediate language for analyzing C progams.
+ *
+ * Version Tue Dec 12 15:21:52 PST 2000 
+ * Scott McPeak, George Necula, Wes Weimer
+ *
+ *)
+
+(* The module Cilversion is generated automatically by Makefile from 
+ * information in configure.in *)
+let cilVersion         = Cilversion.cilVersion
+let cilVersionMajor    = Cilversion.cilVersionMajor
+let cilVersionMinor    = Cilversion.cilVersionMinor
+let cilVersionRevision = Cilversion.cilVersionRev
+
+(* A few globals that control the interpretation of C source *)
+let msvcMode = ref false              (* Whether the pretty printer should 
+                                       * print output for the MS VC 
+                                       * compiler. Default is GCC *)
+
+let useLogicalOperators = ref (*false*) true
+
+
+module M = Machdep
+(* Cil.initCil will set this to the current machine description.
+   Makefile.cil generates the file obj/@ARCHOS@/machdep.ml,
+   which contains the descriptions of gcc and msvc. *)
+let theMachine : M.mach ref = ref M.gcc
+
+
+let lowerConstants: bool ref = ref true
+    (** Do lower constants (default true) *)
+let insertImplicitCasts: bool ref = ref true
+    (** Do insert implicit casts (default true) *)
+
+
+let little_endian = ref true
+let char_is_unsigned = ref false
+let underscore_name = ref false
+
+type lineDirectiveStyle =
+  | LineComment
+  | LinePreprocessorInput
+  | LinePreprocessorOutput
+
+let lineDirectiveStyle = ref (Some LinePreprocessorInput)
+ 
+let print_CIL_Input = ref false
+           
+let printCilAsIs = ref false
+
+let lineLength = ref 80
+                      
+(* sm: return the string 's' if we're printing output for gcc, suppres
+ * it if we're printing for CIL to parse back in.  the purpose is to
+ * hide things from gcc that it complains about, but still be able
+ * to do lossless transformations when CIL is the consumer *)
+let forgcc (s: string) : string =
+  if (!print_CIL_Input) then "" else s
+
+
+let debugConstFold = false
+
+(** The Abstract Syntax of CIL *)
+
+
+(** The top-level representation of a CIL source file. Its main contents is 
+    the list of global declarations and definitions. *)
+type file = 
+    { mutable fileName: string;   (** The complete file name *)
+      mutable globals: global list; (** List of globals as they will appear 
+                                        in the printed file *)
+      mutable globinit: fundec option;  
+      (** An optional global initializer function. This is a function where 
+       * you can put stuff that must be executed before the program is 
+       * started. This function, is conceptually at the end of the file, 
+       * although it is not part of the globals list. Use {!Cil.getGlobInit} 
+       * to create/get one. *)
+      mutable globinitcalled: bool;     
+      (** Whether the global initialization function is called in main. This 
+          should always be false if there is no global initializer. When 
+          you create a global initialization CIL will try to insert code in 
+          main to call it. *)
+    } 
+
+and comment = location * string
+
+(** The main type for representing global declarations and definitions. A list 
+    of these form a CIL file. The order of globals in the file is generally 
+    important. *)
+and global =
+  | GType of typeinfo * location    
+    (** A typedef. All uses of type names (through the [TNamed] constructor) 
+        must be preceeded in the file by a definition of the name. The string 
+        is the defined name and always not-empty. *)
+
+  | GCompTag of compinfo * location     
+    (** Defines a struct/union tag with some fields. There must be one of 
+        these for each struct/union tag that you use (through the [TComp] 
+        constructor) since this is the only context in which the fields are 
+        printed. Consequently nested structure tag definitions must be 
+        broken into individual definitions with the innermost structure 
+        defined first. *)
+
+  | GCompTagDecl of compinfo * location
+    (** Declares a struct/union tag. Use as a forward declaration. This is 
+      * printed without the fields.  *)
+
+  | GEnumTag of enuminfo * location
+   (** Declares an enumeration tag with some fields. There must be one of 
+      these for each enumeration tag that you use (through the [TEnum] 
+      constructor) since this is the only context in which the items are 
+      printed. *)
+
+  | GEnumTagDecl of enuminfo * location
+    (** Declares an enumeration tag. Use as a forward declaration. This is 
+      * printed without the items.  *)
+
+  | GVarDecl of varinfo * location
+   (** A variable declaration (not a definition). If the variable has a 
+       function type then this is a prototype. There can be several 
+       declarations and at most one definition for a given variable. If both 
+       forms appear then they must share the same varinfo structure. A 
+       prototype shares the varinfo with the fundec of the definition. Either 
+       has storage Extern or there must be a definition in this file *)
+
+  | GVar  of varinfo * initinfo * location
+     (** A variable definition. Can have an initializer. The initializer is 
+      * updateable so that you can change it without requiring to recreate 
+      * the list of globals. There can be at most one definition for a 
+      * variable in an entire program. Cannot have storage Extern or function 
+      * type. *)
+
+
+  | GFun of fundec * location           
+     (** A function definition. *)
+
+  | GAsm of string * location           (** Global asm statement. These ones 
+                                            can contain only a template *)
+  | GPragma of attribute * location     (** Pragmas at top level. Use the same 
+                                            syntax as attributes *)
+  | GText of string                     (** Some text (printed verbatim) at 
+                                            top level. E.g., this way you can 
+                                            put comments in the output.  *)
+
+
+(** The various types available. Every type is associated with a list of 
+ * attributes, which are always kept in sorted order. Use {!Cil.addAttribute} 
+ * and {!Cil.addAttributes} to construct list of attributes. If you want to 
+ * inspect a type, you should use {!Cil.unrollType} to see through the uses 
+ * of named types. *)
+and typ =
+    TVoid of attributes   (** Void type *)
+  | TInt of ikind * attributes (** An integer type. The kind specifies 
+                                       the sign and width. *)
+  | TFloat of fkind * attributes (** A floating-point type. The kind 
+                                         specifies the precision. *)
+
+  | TPtr of typ * attributes  
+           (** Pointer type. *)
+
+  | TArray of typ * exp option * attributes
+           (** Array type. It indicates the base type and the array length. *)
+
+  | TFun of typ * (string * typ * attributes) list option * bool * attributes
+          (** Function type. Indicates the type of the result, the name, type 
+           * and name attributes of the formal arguments ([None] if no 
+           * arguments were specified, as in a function whose definition or 
+           * prototype we have not seen; [Some \[\]] means void). Use 
+           * {!Cil.argsToList} to obtain a list of arguments. The boolean 
+           * indicates if it is a variable-argument function. If this is the 
+           * type of a varinfo for which we have a function declaration then 
+           * the information for the formals must match that in the 
+           * function's sformals. *)
+
+  | TNamed of typeinfo * attributes 
+          (* The use of a named type. All uses of the same type name must 
+           * share the typeinfo. Each such type name must be preceeded 
+           * in the file by a [GType] global. This is printed as just the 
+           * type name. The actual referred type is not printed here and is 
+           * carried only to simplify processing. To see through a sequence 
+           * of named type references, use {!Cil.unrollType}. The attributes 
+           * are in addition to those given when the type name was defined. *)
+
+  | TComp of compinfo * attributes
+          (** A reference to a struct or a union type. All references to the 
+             same struct or union must share the same compinfo among them and 
+             with a [GCompTag] global that preceeds all uses (except maybe 
+             those that are pointers to the composite type). The attributes 
+             given are those pertaining to this use of the type and are in 
+             addition to the attributes that were given at the definition of 
+             the type and which are stored in the compinfo.  *)
+
+  | TEnum of enuminfo * attributes
+           (** A reference to an enumeration type. All such references must
+               share the enuminfo among them and with a [GEnumTag] global that 
+               preceeds all uses. The attributes refer to this use of the 
+               enumeration and are in addition to the attributes of the 
+               enumeration itself, which are stored inside the enuminfo  *)
+
+
+  
+  | TBuiltin_va_list of attributes
+            (** This is the same as the gcc's type with the same name *)
+
+(** Various kinds of integers *)
+and ikind = 
+    IChar       (** [char] *)
+  | ISChar      (** [signed char] *)
+  | IUChar      (** [unsigned char] *)
+  | IInt        (** [int] *)
+  | IUInt       (** [unsigned int] *)
+  | IShort      (** [short] *)
+  | IUShort     (** [unsigned short] *)
+  | ILong       (** [long] *)
+  | IULong      (** [unsigned long] *)
+  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
+  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on Microsoft 
+                    Visual C) *)
+
+(** Various kinds of floating-point numbers*)
+and fkind = 
+    FFloat      (** [float] *)
+  | FDouble     (** [double] *)
+  | FLongDouble (** [long double] *)
+
+(** An attribute has a name and some optional parameters *)
+and attribute = Attr of string * attrparam list
+
+(** Attributes are lists sorted by the attribute name *)
+and attributes = attribute list
+
+(** The type of parameters in attributes *)
+and attrparam = 
+  | AInt of int                          (** An integer constant *)
+  | AStr of string                       (** A string constant *)
+  | ACons of string * attrparam list       (** Constructed attributes. These 
+                                             are printed [foo(a1,a2,...,an)]. 
+                                             The list of parameters can be 
+                                             empty and in that case the 
+                                             parentheses are not printed. *)
+  | ASizeOf of typ                       (** A way to talk about types *)
+  | ASizeOfE of attrparam
+  | ASizeOfS of typsig                   (** Replacement for ASizeOf in type
+                                             signatures.  Only used for
+                                             attributes inside typsigs.*)
+  | AAlignOf of typ
+  | AAlignOfE of attrparam
+  | AAlignOfS of typsig
+  | AUnOp of unop * attrparam
+  | ABinOp of binop * attrparam * attrparam
+  | ADot of attrparam * string           (** a.foo **)
+
+
+(** Information about a composite type (a struct or a union). Use 
+    {!Cil.mkCompInfo} 
+    to create non-recursive or (potentially) recursive versions of this. Make 
+    sure you have a [GCompTag] for each one of these.  *)
+and compinfo = {
+    mutable cstruct: bool;              (** True if struct, False if union *)
+    mutable cname: string;              (** The name. Always non-empty. Use 
+                                         * {!Cil.compFullName} to get the 
+                                         * full name of a comp (along with 
+                                         * the struct or union) *)
+    mutable ckey: int;                  (** A unique integer constructed from 
+                                         * the name. Use {!Hashtbl.hash} on 
+                                         * the string returned by 
+                                         * {!Cil.compFullName}. All compinfo 
+                                         * for a given key are shared. *)
+    mutable cfields: fieldinfo list;    (** Information about the fields *) 
+    mutable cattr:   attributes;        (** The attributes that are defined at
+                                            the same time as the composite
+                                            type *)
+    mutable cdefined: bool;             (** Whether this is a defined 
+                                         * compinfo. *)
+    mutable creferenced: bool;          (** True if used. Initially set to 
+                                         * false *)
+  }
+
+(** Information about a struct/union field *)
+and fieldinfo = { 
+    mutable fcomp: compinfo;            (** The compinfo of the host. Note 
+                                            that this must be shared with the 
+                                            host since there can be only one 
+                                            compinfo for a given id *)
+    mutable fname: string;              (** The name of the field. Might be 
+                                         * the value of 
+                                         * {!Cil.missingFieldName} in which 
+                                         * case it must be a bitfield and is 
+                                         * not printed and it does not 
+                                         * participate in initialization *)
+    mutable ftype: typ;                 (** The type *)
+    mutable fbitfield: int option;      (** If a bitfield then ftype should be 
+                                            an integer type *)
+    mutable fattr: attributes;          (** The attributes for this field 
+                                          * (not for its type) *)
+    mutable floc: location;             (** The location where this field
+                                          * is defined *)
+}
+
+
+
+(** Information about an enumeration. This is shared by all references to an
+    enumeration. Make sure you have a [GEnumTag] for each of of these.   *)
+and enuminfo = {
+    mutable ename: string;              (** The name. Always non-empty *)
+    mutable eitems: (string * exp * location) list; (** Items with names
+                                                      and values. This list
+                                                      should be
+                                                      non-empty. The item
+                                                      values must be
+                                                      compile-time
+                                                      constants. *) 
+    mutable eattr: attributes;         (** Attributes *)
+    mutable ereferenced: bool;         (** True if used. Initially set to false*)
+}
+
+(** Information about a defined type *)
+and typeinfo = {
+    mutable tname: string;              
+    (** The name. Can be empty only in a [GType] when introducing a composite 
+     * or enumeration tag. If empty cannot be refered to from the file *)
+    mutable ttype: typ;
+    (** The actual type. *)
+    mutable treferenced: bool;         
+    (** True if used. Initially set to false*)
+}
+
+
+(** Information about a variable. These structures are shared by all 
+ * references to the variable. So, you can change the name easily, for 
+ * example. Use one of the {!Cil.makeLocalVar}, {!Cil.makeTempVar} or 
+ * {!Cil.makeGlobalVar} to create instances of this data structure. *)
+and varinfo = { 
+    mutable vname: string;		(** The name of the variable. Cannot 
+                                          * be empty. *)
+    mutable vtype: typ;                 (** The declared type of the 
+                                          * variable. *)
+    mutable vattr: attributes;          (** A list of attributes associated 
+                                          * with the variable. *)
+    mutable vstorage: storage;          (** The storage-class *)
+    (* The other fields are not used in varinfo when they appear in the formal 
+     * argument list in a [TFun] type *)
+
+
+    mutable vglob: bool;	        (** True if this is a global variable*)
+
+    (** Whether this varinfo is for an inline function. *)
+    mutable vinline: bool;
+
+    mutable vdecl: location;            (** Location of variable declaration *)
+
+    mutable vid: int;  (** A unique integer identifier.  *)
+    mutable vaddrof: bool;              (** True if the address of this
+                                            variable is taken. CIL will set 
+                                         * these flags when it parses C, but 
+                                         * you should make sure to set the 
+                                         * flag whenever your transformation 
+                                         * create [AddrOf] expression. *)
+
+    mutable vreferenced: bool;          (** True if this variable is ever 
+                                            referenced. This is computed by 
+                                            [removeUnusedVars]. It is safe to 
+                                            just initialize this to False *)
+}
+
+(** Storage-class information *)
+and storage = 
+    NoStorage |                         (** The default storage. Nothing is 
+                                         * printed  *)
+    Static |                           
+    Register |                          
+    Extern                              
+
+
+(** Expressions (Side-effect free)*)
+and exp =
+    Const      of constant              (** Constant *)
+  | Lval       of lval                  (** Lvalue *)
+  | SizeOf     of typ                   (** sizeof(<type>). Has [unsigned 
+                                         * int] type (ISO 6.5.3.4). This is 
+                                         * not turned into a constant because 
+                                         * some transformations might want to 
+                                         * change types *)
+
+  | SizeOfE    of exp                   (** sizeof(<expression>) *)
+  | SizeOfStr  of string
+    (** sizeof(string_literal). We separate this case out because this is the 
+      * only instance in which a string literal should not be treated as 
+      * having type pointer to character. *)
+
+  | AlignOf    of typ                   (** Has [unsigned int] type *)
+  | AlignOfE   of exp 
+
+                                        
+  | UnOp       of unop * exp * typ      (** Unary operation. Includes 
+                                            the type of the result *)
+
+  | BinOp      of binop * exp * exp * typ
+                                        (** Binary operation. Includes the 
+                                            type of the result. The arithemtic
+                                            conversions are made  explicit
+                                            for the arguments *)
+  | CastE      of typ * exp            (** Use {!Cil.mkCast} to make casts *)
+
+  | AddrOf     of lval                 (** Always use {!Cil.mkAddrOf} to 
+                                        * construct one of these. Apply to an 
+                                        * lvalue of type [T] yields an 
+                                        * expression of type [TPtr(T)] *)
+
+  | StartOf    of lval   (** There is no C correspondent for this. C has 
+                          * implicit coercions from an array to the address 
+                          * of the first element. [StartOf] is used in CIL to 
+                          * simplify type checking and is just an explicit 
+                          * form of the above mentioned implicit conversion. 
+                          * It is not printed. Given an lval of type 
+                          * [TArray(T)] produces an expression of type 
+                          * [TPtr(T)]. *)
+
+
+(** Literal constants *)
+and constant =
+  | CInt64 of int64 * ikind * string option 
+                 (** Integer constant. Give the ikind (see ISO9899 6.1.3.2) 
+                  * and the textual representation, if available. Use 
+                  * {!Cil.integer} or {!Cil.kinteger} to create these. Watch 
+                  * out for integers that cannot be represented on 64 bits. 
+                  * OCAML does not give Overflow exceptions. *)
+  | CStr of string (** String constant (of pointer type) *)
+  | CWStr of int64 list (** Wide string constant (of type "wchar_t *") *)
+  | CChr of char (** Character constant.  This has type int, so use
+                  *  charConstToInt to read the value in case
+                  *  sign-extension is needed. *)
+  | CReal of float * fkind * string option (** Floating point constant. Give
+                                               the fkind (see ISO 6.4.4.2) and
+                                               also the textual representation,
+                                               if available *)
+  | CEnum of exp * string * enuminfo
+     (** An enumeration constant with the given value, name, from the given 
+      * enuminfo. This is not used if {!Cil.lowerEnum} is false (default). 
+      * Use {!Cillower.lowerEnumVisitor} to replace these with integer 
+      * constants. *)
+
+(** Unary operators *)
+and unop =
+    Neg                                 (** Unary minus *)
+  | BNot                                (** Bitwise complement (~) *)
+  | LNot                                (** Logical Not (!) *)
+
+(** Binary operations *)
+and binop =
+    PlusA                               (** arithmetic + *)
+  | PlusPI                              (** pointer + integer *)
+  | IndexPI                             (** pointer + integer but only when 
+                                         * it arises from an expression 
+                                         * [e\[i\]] when [e] is a pointer and 
+                                         * not an array. This is semantically 
+                                         * the same as PlusPI but CCured uses 
+                                         * this as a hint that the integer is 
+                                         * probably positive. *)
+  | MinusA                              (** arithmetic - *)
+  | MinusPI                             (** pointer - integer *)
+  | MinusPP                             (** pointer - pointer *)
+  | Mult                                (** * *)
+  | Div                                 (** / *)
+  | Mod                                 (** % *)
+  | Shiftlt                             (** shift left *)
+  | Shiftrt                             (** shift right *)
+
+  | Lt                                  (** <  (arithmetic comparison) *)
+  | Gt                                  (** >  (arithmetic comparison) *)  
+  | Le                                  (** <= (arithmetic comparison) *)
+  | Ge                                  (** >  (arithmetic comparison) *)
+  | Eq                                  (** == (arithmetic comparison) *)
+  | Ne                                  (** != (arithmetic comparison) *)            
+  | BAnd                                (** bitwise and *)
+  | BXor                                (** exclusive-or *)
+  | BOr                                 (** inclusive-or *)
+
+  | LAnd                                (** logical and *)
+  | LOr                                 (** logical or *)
+
+
+
+
+(** An lvalue denotes the contents of a range of memory addresses. This range 
+ * is denoted as a host object along with an offset within the object. The 
+ * host object can be of two kinds: a local or global variable, or an object 
+ * whose address is in a pointer expression. We distinguish the two cases so 
+ * that we can tell quickly whether we are accessing some component of a 
+ * variable directly or we are accessing a memory location through a pointer.*)
+and lval =
+    lhost * offset
+
+(** The host part of an {!Cil.lval}. *)
+and lhost = 
+  | Var        of varinfo    
+    (** The host is a variable. *)
+
+  | Mem        of exp        
+    (** The host is an object of type [T] when the expression has pointer 
+     * [TPtr(T)]. *)
+
+
+(** The offset part of an {!Cil.lval}. Each offset can be applied to certain 
+  * kinds of lvalues and its effect is that it advances the starting address 
+  * of the lvalue and changes the denoted type, essentially focussing to some 
+  * smaller lvalue that is contained in the original one. *)
+and offset = 
+  | NoOffset          (** No offset. Can be applied to any lvalue and does 
+                        * not change either the starting address or the type. 
+                        * This is used when the lval consists of just a host 
+                        * or as a terminator in a list of other kinds of 
+                        * offsets. *)
+
+  | Field      of fieldinfo * offset    
+                      (** A field offset. Can be applied only to an lvalue 
+                       * that denotes a structure or a union that contains 
+                       * the mentioned field. This advances the offset to the 
+                       * beginning of the mentioned field and changes the 
+                       * type to the type of the mentioned field. *)
+
+  | Index    of exp * offset
+                     (** An array index offset. Can be applied only to an 
+                       * lvalue that denotes an array. This advances the 
+                       * starting address of the lval to the beginning of the 
+                       * mentioned array element and changes the denoted type 
+                       * to be the type of the array element *)
+
+
+
+(* The following equivalences hold *)
+(* Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off                *)
+(* Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off                *)
+(* AddrOf (Mem a, NoOffset)        = a                                *)
+
+(** Initializers for global variables.  You can create an initializer with 
+ * {!Cil.makeZeroInit}. *)
+and init = 
+  | SingleInit   of exp   (** A single initializer *)
+  | CompoundInit   of typ * (offset * init) list
+            (** Used only for initializers of structures, unions and arrays. 
+             * The offsets are all of the form [Field(f, NoOffset)] or 
+             * [Index(i, NoOffset)] and specify the field or the index being 
+             * initialized. For structures all fields
+             * must have an initializer (except the unnamed bitfields), in 
+             * the proper order. This is necessary since the offsets are not 
+             * printed. For arrays the list must contain a prefix of the 
+             * initializers; the rest are 0-initialized. 
+             * For unions there must be exactly one initializer. If 
+             * the initializer is not for the first field then a field 
+             * designator is printed, so you better be on GCC since MSVC does 
+             * not understand this. You can scan an initializer list with 
+             * {!Cil.foldLeftCompound}. *)
+
+(** We want to be able to update an initializer in a global variable, so we 
+ * define it as a mutable field *)
+and initinfo = {
+    mutable init : init option;
+  } 
+
+
+(** Function definitions. *)
+and fundec =
+    { mutable svar:     varinfo;        
+         (** Holds the name and type as a variable, so we can refer to it 
+          * easily from the program. All references to this function either 
+          * in a function call or in a prototype must point to the same 
+          * varinfo. *)
+      mutable sformals: varinfo list;   
+        (** Formals. These must be shared with the formals that appear in the 
+         * type of the function. Use {!Cil.setFormals} or 
+         * {!Cil.setFunctionType} to set these 
+         * formals and ensure that they are reflected in the function type. 
+         * Do not make copies of these because the body refers to them. *)
+      mutable slocals: varinfo list;    
+        (** Locals. Does not include the sformals. Do not make copies of 
+         * these because the body refers to them. *)
+      mutable smaxid: int;           (** Max local id. Starts at 0. *)
+      mutable sbody: block;          (** The function body. *)
+      mutable smaxstmtid: int option;  (** max id of a (reachable) statement 
+                                        * in this function, if we have 
+                                        * computed it. range = 0 ... 
+                                        * (smaxstmtid-1). This is computed by 
+                                        * {!Cil.computeCFGInfo}. *)
+      mutable sallstmts: stmt list;   (** After you call {!Cil.computeCFGInfo} 
+                                      * this field is set to contain all 
+                                      * statements in the function *)
+    }
+
+
+(** A block is a sequence of statements with the control falling through from 
+    one element to the next *)
+and block = 
+   { mutable battrs: attributes;      (** Attributes for the block *)
+     mutable bstmts: stmt list;       (** The statements comprising the block*)
+   } 
+
+
+(** Statements. 
+    The statement is the structural unit in the control flow graph. Use mkStmt 
+    to make a statement and then fill in the fields. *)
+and stmt = {
+    mutable labels: label list;        (** Whether the statement starts with 
+                                           some labels, case statements or 
+                                           default statement *)
+    mutable skind: stmtkind;           (** The kind of statement *)
+
+    (* Now some additional control flow information. Initially this is not 
+     * filled in. *)
+    mutable sid: int;                  (** A number (>= 0) that is unique 
+                                           in a function. *)
+    mutable succs: stmt list;          (** The successor statements. They can 
+                                           always be computed from the skind 
+                                           and the context in which this 
+                                           statement appears *)
+    mutable preds: stmt list;          (** The inverse of the succs function*)
+  } 
+
+(** Labels *)
+and label = 
+    Label of string * location * bool   
+          (** A real label. If the bool is "true", the label is from the 
+           * input source program. If the bool is "false", the label was 
+           * created by CIL or some other transformation *)
+  | Case of exp * location              (** A case statement *)
+  | Default of location                 (** A default statement *)
+
+
+
+(* The various kinds of statements *)
+and stmtkind = 
+  | Instr  of instr list               (** A group of instructions that do not 
+                                           contain control flow. Control
+                                           implicitly falls through. *)
+  | Return of exp option * location     (** The return statement. This is a 
+                                            leaf in the CFG. *)
+
+  | Goto of stmt ref * location         (** A goto statement. Appears from 
+                                            actual goto's in the code. *)
+  | Break of location                   (** A break to the end of the nearest 
+                                             enclosing loop or Switch *)
+  | Continue of location                (** A continue to the start of the 
+                                            nearest enclosing loop *)
+  | If of exp * block * block * location (** A conditional. 
+                                             Two successors, the "then" and 
+                                             the "else" branches. Both 
+                                             branches  fall-through to the 
+                                             successor of the If statement *)
+  | Switch of exp * block * (stmt list) * location  
+                                       (** A switch statement. The block 
+                                           contains within all of the cases. 
+                                           We also have direct pointers to the 
+                                           statements that implement the 
+                                           cases. Which cases they implement 
+                                           you can get from the labels of the 
+                                           statement *)
+
+(*
+  | Loop of block * location * (stmt option) * (stmt option) 
+                                           (** A [while(1)] loop. The 
+                                            * termination test is implemented 
+                                            * in the body of a loop using a 
+                                            * [Break] statement. If 
+                                            * prepareCFG has been called, the 
+                                            * first stmt option will point to 
+                                            * the stmt containing the 
+                                            * continue label for this loop 
+                                            * and the second will point to 
+                                            * the stmt containing the break 
+                                            * label for this loop. *)
+*)
+  | While of exp * block * location                 (** A while loop. *)
+  | DoWhile of exp * block * location               (** A do...while loop. *)
+  | For of block * exp * block * block * location   (** A for loop. *)
+
+  | Block of block                      (** Just a block of statements. Use it 
+                                            as a way to keep some attributes 
+                                            local *)
+    (** On MSVC we support structured exception handling. This is what you 
+     * might expect. Control can get into the finally block either from the 
+     * end of the body block, or if an exception is thrown. The location 
+     * corresponds to the try keyword. *)
+  | TryFinally of block * block * location
+
+    (** On MSVC we support structured exception handling. The try/except 
+     * statement is a bit tricky: 
+         __try { blk } 
+         __except (e) {
+            handler
+         }
+
+         The argument to __except  must be an expression. However, we keep a 
+         list of instructions AND an expression in case you need to make 
+         function calls. We'll print those as a comma expression. The control 
+         can get to the __except expression only if an exception is thrown. 
+         After that, depending on the value of the expression the control 
+         goes to the handler, propagates the exception, or retries the 
+         exception !!! The location corresponds to the try keyword. 
+     *)      
+  | TryExcept of block * (instr list * exp) * block * location
+    
+
+(** Instructions. They may cause effects directly but may not have control
+    flow.*)
+and instr =
+    Set        of lval * exp * location  (** An assignment. A cast is present 
+                                             if the exp has different type 
+                                             from lval *)
+  | Call       of lval option * exp * exp list * location
+ 			 (** optional: result is an lval. A cast might be 
+                             necessary if the declared result type of the 
+                             function is not the same as that of the 
+                             destination. If the function is declared then 
+                             casts are inserted for those arguments that 
+                             correspond to declared formals. (The actual 
+                             number of arguments might be smaller or larger 
+                             than the declared number of arguments. C allows 
+                             this.) If the type of the result variable is not 
+                             the same as the declared type of the function 
+                             result then an implicit cast exists. *)
+
+                         (* See the GCC specification for the meaning of ASM. 
+                          * If the source is MS VC then only the templates 
+                          * are used *)
+                         (* sm: I've added a notes.txt file which contains more
+                          * information on interpreting Asm instructions *)
+  | Asm        of attributes * (* Really only const and volatile can appear 
+                               * here *)
+                  string list *         (* templates (CR-separated) *)
+                  (string * lval) list * (* outputs must be lvals with 
+                                          * constraints. I would like these 
+                                          * to be actually variables, but I 
+                                          * run into some trouble with ASMs 
+                                          * in the Linux sources  *)
+                  (string * exp) list * (* inputs with constraints *)
+                  string list *         (* register clobbers *)
+                  location
+        (** An inline assembly instruction. The arguments are (1) a list of 
+            attributes (only const and volatile can appear here and only for 
+            GCC), (2) templates (CR-separated), (3) a list of 
+            outputs, each of which is an lvalue with a constraint, (4) a list 
+            of input expressions along with constraints, (5) clobbered 
+            registers, and (5) location information *)
+
+
+
+(** Describes a location in a source file *)
+and location = { 
+    line: int;		   (** The line number. -1 means "do not know" *)
+    file: string;          (** The name of the source file*)
+    byte: int;             (** The byte position in the source file *)
+}
+
+(* Type signatures. Two types are identical iff they have identical 
+ * signatures *)
+and typsig = 
+    TSArray of typsig * int64 option * attribute list
+  | TSPtr of typsig * attribute list
+  | TSComp of bool * string * attribute list
+  | TSFun of typsig * typsig list * bool * attribute list
+  | TSEnum of string * attribute list
+  | TSBase of typ
+
+
+
+(** To be able to add/remove features easily, each feature should be package 
+   * as an interface with the following interface. These features should be *)
+type featureDescr = {
+    fd_enabled: bool ref; 
+    (** The enable flag. Set to default value  *)
+
+    fd_name: string; 
+    (** This is used to construct an option "--doxxx" and "--dontxxx" that 
+     * enable and disable the feature  *)
+
+    fd_description: string; 
+    (* A longer name that can be used to document the new options  *)
+
+    fd_extraopt: (string * Arg.spec * string) list; 
+    (** Additional command line options *)
+
+    fd_doit: (file -> unit);
+    (** This performs the transformation *)
+
+    fd_post_check: bool; 
+    (* Whether to perform a CIL consistency checking after this stage, if 
+     * checking is enabled (--check is passed to cilly) *)
+}
+
+let locUnknown = { line = -1; 
+		   file = ""; 
+		   byte = -1;}
+
+(* A reference to the current location *)
+let currentLoc : location ref = ref locUnknown
+
+(* A reference to the current global being visited *)
+let currentGlobal: global ref = ref (GText "dummy")
+
+
+let compareLoc (a: location) (b: location) : int =
+  let namecmp = compare a.file b.file in
+  if namecmp != 0 
+  then namecmp
+  else
+    let linecmp = a.line - b.line in
+    if linecmp != 0 
+    then linecmp
+    else a.byte - b.byte
+
+let argsToList : (string * typ * attributes) list option 
+                  -> (string * typ * attributes) list 
+    = function
+    None -> []
+  | Some al -> al
+
+
+(* A hack to allow forward reference of d_exp *)
+let pd_exp : (unit -> exp -> doc) ref = 
+  ref (fun _ -> E.s (E.bug "pd_exp not initialized"))
+
+(** Different visiting actions. 'a will be instantiated with [exp], [instr],
+    etc. *)
+type 'a visitAction = 
+    SkipChildren                        (** Do not visit the children. Return 
+                                            the node as it is. *)
+  | DoChildren                          (** Continue with the children of this 
+                                            node. Rebuild the node on return 
+                                            if any of the children changes 
+                                            (use == test) *)
+  | ChangeTo of 'a                      (** Replace the expression with the 
+                                            given one *)
+  | ChangeDoChildrenPost of 'a * ('a -> 'a) (** First consider that the entire 
+                                           exp is replaced by the first 
+                                           parameter. Then continue with 
+                                           the children. On return rebuild 
+                                           the node if any of the children 
+                                           has changed and then apply the 
+                                           function on the node *)
+
+
+
+(* sm/gn: cil visitor interface for traversing Cil trees. *)
+(* Use visitCilStmt and/or visitCilFile to use this. *)
+(* Some of the nodes are changed in place if the children are changed. Use 
+ * one of Change... actions if you want to copy the node *)
+
+(** A visitor interface for traversing CIL trees. Create instantiations of 
+ * this type by specializing the class {!Cil.nopCilVisitor}. *)
+class type cilVisitor = object
+
+  method vvdec: varinfo -> varinfo visitAction  
+    (** Invoked for each variable declaration. The subtrees to be traversed 
+     * are those corresponding to the type and attributes of the variable. 
+     * Note that variable declarations are all the [GVar], [GVarDecl], [GFun], 
+     * all the [varinfo] in formals of function types, and the formals and 
+     * locals for function definitions. This means that the list of formals 
+     * in a function definition will be traversed twice, once as part of the 
+     * function type and second as part of the formals in a function 
+     * definition. *)
+
+  method vvrbl: varinfo -> varinfo visitAction  
+    (** Invoked on each variable use. Here only the [SkipChildren] and 
+     * [ChangeTo] actions make sense since there are no subtrees. Note that 
+     * the type and attributes of the variable are not traversed for a 
+     * variable use *)
+
+  method vexpr: exp -> exp visitAction          
+    (** Invoked on each expression occurence. The subtrees are the 
+     * subexpressions, the types (for a [Cast] or [SizeOf] expression) or the 
+     * variable use. *)
+
+  method vlval: lval -> lval visitAction        
+    (** Invoked on each lvalue occurence *)
+
+  method voffs: offset -> offset visitAction    
+    (** Invoked on each offset occurrence that is *not* as part
+      * of an initializer list specification, i.e. in an lval or
+      * recursively inside an offset. *)
+
+  method vinitoffs: offset -> offset visitAction
+    (** Invoked on each offset appearing in the list of a 
+      * CompoundInit initializer.  *)
+
+  method vinst: instr -> instr list visitAction 
+    (** Invoked on each instruction occurrence. The [ChangeTo] action can 
+     * replace this instruction with a list of instructions *)
+
+  method vstmt: stmt -> stmt visitAction        
+    (** Control-flow statement. *)
+
+  method vblock: block -> block visitAction     (** Block. Replaced in 
+                                                    place. *)
+  method vfunc: fundec -> fundec visitAction    (** Function definition. 
+                                                    Replaced in place. *)
+  method vglob: global -> global list visitAction (** Global (vars, types,
+                                                      etc.)  *)
+  method vinit: init -> init visitAction        (** Initializers for globals *)
+  method vtype: typ -> typ visitAction          (** Use of some type. Note 
+                                                 * that for structure/union 
+                                                 * and enumeration types the 
+                                                 * definition of the 
+                                                 * composite type is not 
+                                                 * visited. Use [vglob] to 
+                                                 * visit it.  *)
+  method vattr: attribute -> attribute list visitAction 
+    (** Attribute. Each attribute can be replaced by a list *)
+  method vattrparam: attrparam -> attrparam visitAction 
+    (** Attribute parameters. *)
+
+    (** Add here instructions while visiting to queue them to 
+     * preceede the current statement or instruction being processed *)
+  method queueInstr: instr list -> unit
+
+    (** Gets the queue of instructions and resets the queue *)
+  method unqueueInstr: unit -> instr list
+
+end
+
+(* the default visitor does nothing at each node, but does *)
+(* not stop; hence they return true *)
+class nopCilVisitor : cilVisitor = object
+  method vvrbl (v:varinfo) = DoChildren (* variable *)
+  method vvdec (v:varinfo) = DoChildren (* variable 
+                                                               * declaration *)
+  method vexpr (e:exp) = DoChildren   (* expression *) 
+  method vlval (l:lval) = DoChildren  (* lval (base is 1st 
+                                                         * field)  *)
+  method voffs (o:offset) = DoChildren      (* lval or recursive offset *)
+  method vinitoffs (o:offset) = DoChildren  (* initializer offset *)
+  method vinst (i:instr) = DoChildren       (* imperative instruction *)
+  method vstmt (s:stmt) = DoChildren        (* constrol-flow statement *)
+  method vblock (b: block) = DoChildren
+  method vfunc (f:fundec) = DoChildren      (* function definition *)
+  method vglob (g:global) = DoChildren      (* global (vars, types, etc.) *)
+  method vinit (i:init) = DoChildren        (* global initializers *)
+  method vtype (t:typ) = DoChildren         (* use of some type *)
+  method vattr (a: attribute) = DoChildren
+  method vattrparam (a: attrparam) = DoChildren
+
+  val mutable instrQueue = []
+      
+  method queueInstr (il: instr list) = 
+    List.iter (fun i -> instrQueue <- i :: instrQueue) il
+
+  method unqueueInstr () = 
+    let res = List.rev instrQueue in
+    instrQueue <- [];
+    res
+
+end
+
+let assertEmptyQueue vis =
+  if vis#unqueueInstr () <> [] then 
+    (* Either a visitor inserted an instruction somewhere that it shouldn't
+       have (i.e. at the top level rather than inside of a statement), or
+       there's a bug in the visitor engine. *)
+    E.s (E.bug "Visitor's instruction queue is not empty.\n  You should only use queueInstr inside a function body!");
+  ()
+
+
+let lu = locUnknown
+
+(* sm: utility *)
+let startsWith (prefix: string) (s: string) : bool =
+(
+  let prefixLen = (String.length prefix) in
+  (String.length s) >= prefixLen &&
+  (String.sub s 0 prefixLen) = prefix
+)
+
+
+let get_instrLoc (inst : instr) =
+  match inst with
+      Set(_, _, loc) -> loc
+    | Call(_, _, _, loc) -> loc
+    | Asm(_, _, _, _, _, loc) -> loc
+let get_globalLoc (g : global) =
+  match g with
+  | GFun(_,l) -> (l)
+  | GType(_,l) -> (l)
+  | GEnumTag(_,l) -> (l) 
+  | GEnumTagDecl(_,l) -> (l) 
+  | GCompTag(_,l) -> (l) 
+  | GCompTagDecl(_,l) -> (l) 
+  | GVarDecl(_,l) -> (l) 
+  | GVar(_,_,l) -> (l)
+  | GAsm(_,l) -> (l)
+  | GPragma(_,l) -> (l) 
+  | GText(_) -> locUnknown
+
+let rec get_stmtLoc (statement : stmtkind) =
+  match statement with 
+      Instr([]) -> lu
+    | Instr(hd::tl) -> get_instrLoc(hd)
+    | Return(_, loc) -> loc
+    | Goto(_, loc) -> loc
+    | Break(loc) -> loc
+    | Continue(loc) -> loc
+    | If(_, _, _, loc) -> loc
+    | Switch (_, _, _, loc) -> loc
+(*
+    | Loop (_, loc, _, _) -> loc
+*)
+    | While (_, _, loc) -> loc
+    | DoWhile (_, _, loc) -> loc
+    | For (_, _, _, _, loc) -> loc
+    | Block b -> if b.bstmts == [] then lu 
+                 else get_stmtLoc ((List.hd b.bstmts).skind)
+    | TryFinally (_, _, l) -> l
+    | TryExcept (_, _, _, l) -> l
+
+
+(* The next variable identifier to use. Counts up *)
+let nextGlobalVID = ref 1
+
+(* The next compindo identifier to use. Counts up. *)
+let nextCompinfoKey = ref 1
+
+(* Some error reporting functions *)
+let d_loc (_: unit) (loc: location) : doc =  
+  text loc.file ++ chr ':' ++ num loc.line
+
+let d_thisloc (_: unit) : doc = d_loc () !currentLoc
+
+let error (fmt : ('a,unit,doc) format) : 'a = 
+  let f d = 
+    E.hadErrors := true; 
+    ignore (eprintf "@!%t: Error: %a@!" 
+              d_thisloc insert d);
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let unimp (fmt : ('a,unit,doc) format) : 'a = 
+  let f d = 
+    E.hadErrors := true; 
+    ignore (eprintf "@!%t: Unimplemented: %a@!" 
+              d_thisloc insert d);
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let bug (fmt : ('a,unit,doc) format) : 'a = 
+  let f d = 
+    E.hadErrors := true; 
+    ignore (eprintf "@!%t: Bug: %a@!" 
+              d_thisloc insert d);
+    E.showContext ();
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let errorLoc (loc: location) (fmt : ('a,unit,doc) format) : 'a = 
+  let f d = 
+    E.hadErrors := true; 
+    ignore (eprintf "@!%a: Error: %a@!" 
+              d_loc loc insert d);
+    E.showContext ();
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let warn (fmt : ('a,unit,doc) format) : 'a = 
+  let f d =
+    ignore (eprintf "@!%t: Warning: %a@!" 
+              d_thisloc insert d);
+    nil
+  in
+  Pretty.gprintf f fmt
+
+
+let warnOpt (fmt : ('a,unit,doc) format) : 'a = 
+  let f d =
+    if !E.warnFlag then 
+      ignore (eprintf "@!%t: Warning: %a@!" 
+                d_thisloc insert d);
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let warnContext (fmt : ('a,unit,doc) format) : 'a = 
+  let f d =
+    ignore (eprintf "@!%t: Warning: %a@!" 
+              d_thisloc insert d);
+    E.showContext ();
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let warnContextOpt (fmt : ('a,unit,doc) format) : 'a = 
+  let f d =
+    if !E.warnFlag then 
+      ignore (eprintf "@!%t: Warning: %a@!" 
+                d_thisloc insert d);
+    E.showContext ();
+    nil
+  in
+  Pretty.gprintf f fmt
+
+let warnLoc (loc: location) (fmt : ('a,unit,doc) format) : 'a = 
+  let f d =
+    ignore (eprintf "@!%a: Warning: %a@!" 
+              d_loc loc insert d);
+    E.showContext ();
+    nil
+  in
+  Pretty.gprintf f fmt
+
+
+
+(* Construct an integer. Use only for values that fit on 31 bits.
+   For larger values, use kinteger *)
+let integer (i: int) = Const (CInt64(Int64.of_int i, IInt, None))
+            
+let zero      = integer 0
+let one       = integer 1
+let mone      = integer (-1)
+
+(** Given the character c in a (CChr c), sign-extend it to 32 bits.
+  (This is the official way of interpreting character constants, according to
+  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
+  Returns CInt64(sign-extened c, IInt, None) *)
+let charConstToInt (c: char) : constant =
+  let c' = Char.code c in
+  let value = 
+    if c' < 128 
+    then Int64.of_int c'
+    else Int64.of_int (c' - 256)
+  in
+  CInt64(value, IInt, None)
+  
+  
+let rec isInteger = function
+  | Const(CInt64 (n,_,_)) -> Some n
+  | Const(CChr c) -> isInteger (Const (charConstToInt c))  (* sign-extend *) 
+  | Const(CEnum(v, s, ei)) -> isInteger v
+  | CastE(_, e) -> isInteger e
+  | _ -> None
+        
+
+
+let rec isZero (e: exp) : bool = isInteger e = Some Int64.zero
+
+let voidType = TVoid([])
+let intType = TInt(IInt,[])
+let uintType = TInt(IUInt,[])
+let longType = TInt(ILong,[])
+let ulongType = TInt(IULong,[])
+let charType = TInt(IChar, [])
+
+let charPtrType = TPtr(charType,[])
+let charConstPtrType = TPtr(TInt(IChar, [Attr("const", [])]),[])
+let stringLiteralType = ref charPtrType
+
+let voidPtrType = TPtr(voidType, [])
+let intPtrType = TPtr(intType, [])
+let uintPtrType = TPtr(uintType, [])
+
+let doubleType = TFloat(FDouble, [])
+
+
+(* An integer type that fits pointers. Initialized by initCIL *)
+let upointType = ref voidType 
+
+(* An integer type that fits wchar_t. Initialized by initCIL *)
+let wcharKind = ref IChar
+let wcharType = ref voidType 
+
+
+(* An integer type that is the type of sizeof. Initialized by initCIL *)
+let typeOfSizeOf = ref voidType
+let kindOfSizeOf = ref IUInt
+
+let initCIL_called = ref false
+
+(** Returns true if and only if the given integer type is signed. *)
+let isSigned = function
+  | IUChar
+  | IUShort
+  | IUInt
+  | IULong
+  | IULongLong ->
+      false
+  | ISChar
+  | IShort
+  | IInt
+  | ILong
+  | ILongLong ->
+      true
+  | IChar ->
+      not !theMachine.M.char_is_unsigned
+
+let mkStmt (sk: stmtkind) : stmt = 
+  { skind = sk;
+    labels = [];
+    sid = -1; succs = []; preds = [] }
+
+let mkBlock (slst: stmt list) : block = 
+  { battrs = []; bstmts = slst; }
+
+let mkEmptyStmt () = mkStmt (Instr [])
+let mkStmtOneInstr (i: instr) = mkStmt (Instr [i])
+
+let dummyInstr = (Asm([], ["dummy statement!!"], [], [], [], lu))
+let dummyStmt =  mkStmt (Instr [dummyInstr])
+
+let compactStmts (b: stmt list) : stmt list =  
+      (* Try to compress statements. Scan the list of statements and remember 
+       * the last instrunction statement encountered, along with a Clist of 
+       * instructions in it. *)
+  let rec compress (lastinstrstmt: stmt) (* Might be dummStmt *)
+                   (lastinstrs: instr Clist.clist) 
+                   (body: stmt list) =
+    let finishLast (tail: stmt list) : stmt list = 
+      if lastinstrstmt == dummyStmt then tail
+      else begin
+        lastinstrstmt.skind <- Instr (Clist.toList lastinstrs);
+        lastinstrstmt :: tail
+      end
+    in
+    match body with 
+      [] -> finishLast []
+    | ({skind=Instr il} as s) :: rest ->
+        let ils = Clist.fromList il in
+        if lastinstrstmt != dummyStmt && s.labels == [] then
+          compress lastinstrstmt (Clist.append lastinstrs ils) rest
+        else
+          finishLast (compress s ils rest)
+
+    | s :: rest -> 
+        let res = s :: compress dummyStmt Clist.empty rest in
+        finishLast res
+  in
+  compress dummyStmt Clist.empty b
+
+
+(** Construct sorted lists of attributes ***)
+let rec addAttribute (Attr(an, _) as a: attribute) (al: attributes) = 
+  let rec insertSorted = function
+      [] -> [a]
+    | ((Attr(an0, _) as a0) :: rest) as l -> 
+        if an < an0 then a :: l
+        else if Util.equals a a0 then l (* Do not add if already in there *)
+        else a0 :: insertSorted rest (* Make sure we see all attributes with 
+                                      * this name *)
+  in
+  insertSorted al
+
+(** The second attribute list is sorted *)
+and addAttributes al0 (al: attributes) : attributes = 
+    if al0 == [] then al else
+    List.fold_left (fun acc a -> addAttribute a acc) al al0
+
+and dropAttribute (an: string) (al: attributes) = 
+  List.filter (fun (Attr(an', _)) -> an <> an') al
+
+and dropAttributes (anl: string list) (al: attributes) = 
+  List.fold_left (fun acc an -> dropAttribute an acc) al anl
+  
+and filterAttributes (s: string) (al: attribute list) : attribute list = 
+  List.filter (fun (Attr(an, _)) -> an = s) al
+
+(* sm: *)
+let hasAttribute s al =
+  (filterAttributes s al <> [])
+
+
+type attributeClass = 
+    AttrName of bool 
+        (* Attribute of a name. If argument is true and we are on MSVC then 
+         * the attribute is printed using __declspec as part of the storage 
+         * specifier  *)
+  | AttrFunType of bool 
+        (* Attribute of a function type. If argument is true and we are on 
+         * MSVC then the attribute is printed just before the function name *)
+
+  | AttrType  (* Attribute of a type *)
+
+(* This table contains the mapping of predefined attributes to classes. 
+ * Extend this table with more attributes as you need. This table is used to 
+ * determine how to associate attributes with names or type during cabs2cil 
+ * conversion *)
+let attributeHash: (string, attributeClass) H.t = 
+  let table = H.create 13 in
+  List.iter (fun a -> H.add table a (AttrName false))
+    [ "section"; "constructor"; "destructor"; "unused"; "used"; "weak"; 
+      "no_instrument_function"; "alias"; "no_check_memory_usage";
+      "exception"; "model"; (* "restrict"; *)
+      "aconst"; "__asm__" (* Gcc uses this to specifiy the name to be used in 
+                           * assembly for a global  *)];
+
+  (* Now come the MSVC declspec attributes *)
+  List.iter (fun a -> H.add table a (AttrName true))
+    [ "thread"; "naked"; "dllimport"; "dllexport";
+      "selectany"; "allocate"; "nothrow"; "novtable"; "property";  "noreturn";
+      "uuid"; "align" ];
+
+  List.iter (fun a -> H.add table a (AttrFunType false))
+    [ "format"; "regparm"; "longcall"; 
+      "noinline"; "always_inline"; ];
+
+  List.iter (fun a -> H.add table a (AttrFunType true))
+    [ "stdcall";"cdecl"; "fastcall" ];
+
+  List.iter (fun a -> H.add table a AttrType)
+    [ "const"; "volatile"; "restrict"; "mode" ];
+  table
+      
+
+(* Partition the attributes into classes *)
+let partitionAttributes 
+    ~(default:attributeClass)  
+    (attrs:  attribute list) :
+    attribute list * attribute list * attribute list = 
+  let rec loop (n,f,t) = function
+      [] -> n, f, t
+    | (Attr(an, _) as a) :: rest -> 
+        match (try H.find attributeHash an with Not_found -> default) with 
+          AttrName _ -> loop (addAttribute a n, f, t) rest
+        | AttrFunType _ -> 
+            loop (n, addAttribute a f, t) rest
+        | AttrType -> loop (n, f, addAttribute a t) rest
+  in
+  loop ([], [], []) attrs
+
+
+(* Get the full name of a comp *)
+let compFullName comp = 
+  (if comp.cstruct then "struct " else "union ") ^ comp.cname
+
+ 
+let missingFieldName = "___missing_field_name"
+
+(** Creates a a (potentially recursive) composite type. Make sure you add a 
+  * GTag for it to the file! **)
+let mkCompInfo
+      (isstruct: bool) 
+      (n: string)  
+      (* fspec is a function that when given a forward 
+       * representation of the structure type constructs the type of 
+       * the fields. The function can ignore this argument if not 
+       * constructing a recursive type.  *)
+       (mkfspec: compinfo -> (string * typ * int option * attribute list *
+                             location) list)   
+       (a: attribute list) : compinfo =
+
+  (* make an new name for anonymous structs *)
+   if n = "" then 
+     E.s (E.bug "mkCompInfo: missing structure name\n");
+   (* Make a new self cell and a forward reference *)
+   let comp = 
+     { cstruct = isstruct; cname = ""; ckey = 0; cfields = [];
+       cattr = a; creferenced = false; 
+       (* Make this compinfo undefined by default *)
+       cdefined = false; } 
+   in
+   comp.cname <- n;
+   comp.ckey <- !nextCompinfoKey;
+   incr nextCompinfoKey;
+   let flds = 
+       List.map (fun (fn, ft, fb, fa, fl) -> 
+          { fcomp = comp;
+            ftype = ft;
+            fname = fn;
+            fbitfield = fb;
+            fattr = fa;
+            floc = fl}) (mkfspec comp) in
+   comp.cfields <- flds;
+   if flds <> [] then comp.cdefined <- true;
+   comp
+
+(** Make a copy of a compinfo, changing the name and the key *)
+let copyCompInfo (ci: compinfo) (n: string) : compinfo = 
+  let ci' = {ci with cname = n; 
+                     ckey = !nextCompinfoKey; } in
+  incr nextCompinfoKey;
+  (* Copy the fields and set the new pointers to parents *)
+  ci'.cfields <- List.map (fun f -> {f with fcomp = ci'}) ci'.cfields;
+  ci'
+
+(**** Utility functions ******)
+
+let rec typeAttrs = function
+    TVoid a -> a
+  | TInt (_, a) -> a
+  | TFloat (_, a) -> a
+  | TNamed (t, a) -> addAttributes a (typeAttrs t.ttype)
+  | TPtr (_, a) -> a
+  | TArray (_, _, a) -> a
+  | TComp (comp, a) -> addAttributes comp.cattr a
+  | TEnum (enum, a) -> addAttributes enum.eattr a
+  | TFun (_, _, _, a) -> a
+  | TBuiltin_va_list a -> a
+
+
+let setTypeAttrs t a =
+  match t with
+    TVoid _ -> TVoid a
+  | TInt (i, _) -> TInt (i, a)
+  | TFloat (f, _) -> TFloat (f, a)
+  | TNamed (t, _) -> TNamed(t, a)
+  | TPtr (t', _) -> TPtr(t', a)
+  | TArray (t', l, _) -> TArray(t', l, a)
+  | TComp (comp, _) -> TComp (comp, a)
+  | TEnum (enum, _) -> TEnum (enum, a)
+  | TFun (r, args, v, _) -> TFun(r,args,v,a)
+  | TBuiltin_va_list _ -> TBuiltin_va_list a
+
+
+let typeAddAttributes a0 t =
+begin
+  match a0 with
+  | [] ->
+      (* no attributes, keep same type *)
+      t
+  | _ ->
+      (* anything else: add a0 to existing attributes *)
+      let add (a: attributes) = addAttributes a0 a in
+      match t with
+        TVoid a -> TVoid (add a)
+      | TInt (ik, a) -> TInt (ik, add a)
+      | TFloat (fk, a) -> TFloat (fk, add a)
+      | TEnum (enum, a) -> TEnum (enum, add a)
+      | TPtr (t, a) -> TPtr (t, add a)
+      | TArray (t, l, a) -> TArray (t, l, add a)
+      | TFun (t, args, isva, a) -> TFun(t, args, isva, add a)
+      | TComp (comp, a) -> TComp (comp, add a)
+      | TNamed (t, a) -> TNamed (t, add a)
+      | TBuiltin_va_list a -> TBuiltin_va_list (add a)
+end
+
+let typeRemoveAttributes (anl: string list) t = 
+  let drop (al: attributes) = dropAttributes anl al in
+  match t with 
+    TVoid a -> TVoid (drop a)
+  | TInt (ik, a) -> TInt (ik, drop a)
+  | TFloat (fk, a) -> TFloat (fk, drop a)
+  | TEnum (enum, a) -> TEnum (enum, drop a)
+  | TPtr (t, a) -> TPtr (t, drop a)
+  | TArray (t, l, a) -> TArray (t, l, drop a)
+  | TFun (t, args, isva, a) -> TFun(t, args, isva, drop a)
+  | TComp (comp, a) -> TComp (comp, drop a)
+  | TNamed (t, a) -> TNamed (t, drop a)
+  | TBuiltin_va_list a -> TBuiltin_va_list (drop a)
+
+let unrollType (t: typ) : typ = 
+  let rec withAttrs (al: attributes) (t: typ) : typ =     
+    match t with 
+      TNamed (r, a') -> withAttrs (addAttributes al a') r.ttype
+    | x -> typeAddAttributes al x
+  in
+  withAttrs [] t
+
+let rec unrollTypeDeep (t: typ) : typ = 
+  let rec withAttrs (al: attributes) (t: typ) : typ =     
+    match t with 
+      TNamed (r, a') -> withAttrs (addAttributes al a') r.ttype
+    | TPtr(t, a') -> TPtr(unrollTypeDeep t, addAttributes al a')
+    | TArray(t, l, a') -> TArray(unrollTypeDeep t, l, addAttributes al a')
+    | TFun(rt, args, isva, a') -> 
+        TFun (unrollTypeDeep rt, 
+              (match args with 
+                None -> None
+              | Some argl -> 
+                  Some (List.map (fun (an,at,aa) -> 
+                  (an, unrollTypeDeep at, aa)) argl)), 
+              isva, 
+              addAttributes al a')
+    | x -> typeAddAttributes al x
+  in
+  withAttrs [] t
+
+let isVoidType t = 
+  match unrollType t with
+    TVoid _ -> true
+  | _ -> false
+let isVoidPtrType t = 
+  match unrollType t with
+    TPtr(tau,_) when isVoidType tau -> true
+  | _ -> false
+
+let var vi : lval = (Var vi, NoOffset)
+(* let assign vi e = Instrs(Set (var vi, e), lu) *)
+
+let mkString s = Const(CStr s)
+
+
+let mkWhile ~(guard:exp) ~(body: stmt list) : stmt list = 
+  (* Do it like this so that the pretty printer recognizes it *)
+(*
+  [ mkStmt (Loop (mkBlock (mkStmt (If(guard, 
+                                      mkBlock [ mkEmptyStmt () ], 
+                                      mkBlock [ mkStmt (Break lu)], lu)) ::
+                           body), lu, None, None)) ]
+*)
+  [ mkStmt (While (guard, mkBlock body, lu)) ]
+
+
+
+let mkFor ~(start: stmt list) ~(guard: exp) ~(next: stmt list) 
+          ~(body: stmt list) : stmt list = 
+  (start @ 
+     (mkWhile guard (body @ next)))
+
+    
+let mkForIncr ~(iter : varinfo) ~(first: exp) ~stopat:(past: exp) ~(incr: exp) 
+    ~(body: stmt list) : stmt list = 
+      (* See what kind of operator we need *)
+  let compop, nextop = 
+    match unrollType iter.vtype with
+      TPtr _ -> Lt, PlusPI
+    | _ -> Lt, PlusA
+  in
+  mkFor 
+    [ mkStmt (Instr [(Set (var iter, first, lu))]) ]
+    (BinOp(compop, Lval(var iter), past, intType))
+    [ mkStmt (Instr [(Set (var iter, 
+                           (BinOp(nextop, Lval(var iter), incr, iter.vtype)),
+                           lu))])] 
+    body
+  
+
+let rec stripCasts (e: exp) = 
+  match e with CastE(_, e') -> stripCasts e' | _ -> e
+
+
+
+(* the name of the C function we call to get ccgr ASTs
+external parse : string -> file = "cil_main"
+*)
+(* 
+  Pretty Printing
+ *)
+
+let d_ikind () = function
+    IChar -> text "char"
+  | ISChar -> text "signed char"
+  | IUChar -> text "unsigned char"
+  | IInt -> text "int"
+  | IUInt -> text "unsigned int"
+  | IShort -> text "short"
+  | IUShort -> text "unsigned short"
+  | ILong -> text "long"
+  | IULong -> text "unsigned long"
+  | ILongLong -> 
+      if !msvcMode then text "__int64" else text "long long"
+  | IULongLong -> 
+      if !msvcMode then text "unsigned __int64" 
+      else text "unsigned long long"
+
+let d_fkind () = function
+    FFloat -> text "float"
+  | FDouble -> text "double"
+  | FLongDouble -> text "long double"
+
+let d_storage () = function
+    NoStorage -> nil
+  | Static -> text "static "
+  | Extern -> text "extern "
+  | Register -> text "register "
+
+(* sm: need this value below *)
+let mostNeg32BitInt : int64 = (Int64.of_string "-0x80000000")
+let mostNeg64BitInt : int64 = (Int64.of_string "-0x8000000000000000")
+
+(* constant *)
+let d_const () c = 
+  match c with
+    CInt64(_, _, Some s) -> text s (* Always print the text if there is one *)
+  | CInt64(i, ik, None) -> 
+      (** We must make sure to capture the type of the constant. For some 
+       * constants this is done with a suffix, for others with a cast prefix.*)
+      let suffix : string = 
+        match ik with
+          IUInt -> "U"
+        | ILong -> "L"
+        | IULong -> "UL"
+        | ILongLong -> if !msvcMode then "L" else "LL"
+        | IULongLong -> if !msvcMode then "UL" else "ULL"
+        | _ -> ""
+      in
+      let prefix : string = 
+        if suffix <> "" then "" 
+        else if ik = IInt then ""
+        else "(" ^ (sprint !lineLength (d_ikind () ik)) ^ ")"
+      in
+      (* Watch out here for negative integers that we should be printing as 
+       * large positive ones *)
+      if i < Int64.zero 
+          && (match ik with 
+            IUInt | IULong | IULongLong | IUChar | IUShort -> true | _ -> false) then
+        let high = Int64.shift_right i 32 in
+        if ik <> IULongLong && ik <> ILongLong && high = Int64.of_int (-1) then
+          (* Print only the low order 32 bits *)
+          text (prefix ^ "0x" ^ 
+                (Int64.format "%x" 
+                  (Int64.logand i (Int64.shift_right_logical high 32))
+                ^ suffix))
+        else
+          text (prefix ^ "0x" ^ Int64.format "%x" i ^ suffix)
+      else (
+        if (i = mostNeg32BitInt) then
+          (* sm: quirk here: if you print -2147483648 then this is two tokens *)
+          (* in C, and the second one is too large to represent in a signed *)
+          (* int.. so we do what's done in limits.h, and print (-2147483467-1); *)
+          (* in gcc this avoids a warning, but it might avoid a real problem *)
+          (* on another compiler or a 64-bit architecture *)
+          text (prefix ^ "(-0x7FFFFFFF-1)")
+        else if (i = mostNeg64BitInt) then
+          (* The same is true of the largest 64-bit negative. *)
+          text (prefix ^ "(-0x7FFFFFFFFFFFFFFF-1)")
+        else
+          text (prefix ^ (Int64.to_string i ^ suffix))
+      )
+
+  | CStr(s) -> text ("\"" ^ escape_string s ^ "\"")
+  | CWStr(s) -> 
+      (* text ("L\"" ^ escape_string s ^ "\"")  *)
+      (List.fold_left (fun acc elt -> 
+        acc ++ 
+        if (elt >= Int64.zero &&
+            elt <= (Int64.of_int 255)) then 
+          text (escape_char (Char.chr (Int64.to_int elt)))
+        else
+          ( text (Printf.sprintf "\\x%LX\"" elt) ++ break ++
+            (text "\""))
+      ) (text "L\"") s ) ++ text "\""
+      (* we cannot print L"\xabcd" "feedme" as L"\xabcdfeedme" --
+       * the former has 7 wide characters and the later has 3. *)
+
+  | CChr(c) -> text ("'" ^ escape_char c ^ "'")
+  | CReal(_, _, Some s) -> text s
+  | CReal(f, _, None) -> text (string_of_float f)
+  | CEnum(_, s, ei) -> text s
+
+
+(* Parentheses level. An expression "a op b" is printed parenthesized if its 
+ * parentheses level is >= that that of its context. Identifiers have the 
+ * lowest level and weakly binding operators (e.g. |) have the largest level. 
+ * The correctness criterion is that a smaller level MUST correspond to a 
+ * stronger precedence!
+ *)
+let derefStarLevel = 20
+let indexLevel = 20
+let arrowLevel = 20
+let addrOfLevel = 30
+let additiveLevel = 60
+let comparativeLevel = 70
+let bitwiseLevel = 75
+let getParenthLevel = function
+  | BinOp((LAnd | LOr), _,_,_) -> 80
+                                        (* Bit operations. *)
+  | BinOp((BOr|BXor|BAnd),_,_,_) -> bitwiseLevel (* 75 *)
+
+                                        (* Comparisons *)
+  | BinOp((Eq|Ne|Gt|Lt|Ge|Le),_,_,_) ->
+      comparativeLevel (* 70 *)
+                                        (* Additive. Shifts can have higher 
+                                         * level than + or - but I want 
+                                         * parentheses around them *)
+  | BinOp((MinusA|MinusPP|MinusPI|PlusA|
+           PlusPI|IndexPI|Shiftlt|Shiftrt),_,_,_)  
+    -> additiveLevel (* 60 *)
+
+                                        (* Multiplicative *)
+  | BinOp((Div|Mod|Mult),_,_,_) -> 40
+
+                                        (* Unary *)
+  | CastE(_,_) -> 30
+  | AddrOf(_) -> 30
+  | StartOf(_) -> 30
+  | UnOp((Neg|BNot|LNot),_,_) -> 30
+
+                                        (* Lvals *)
+  | Lval(Mem _ , _) -> 20                   
+  | Lval(Var _, (Field _|Index _)) -> 20
+  | SizeOf _ | SizeOfE _ | SizeOfStr _ -> 20
+  | AlignOf _ | AlignOfE _ -> 20
+
+  | Lval(Var _, NoOffset) -> 0        (* Plain variables *)
+  | Const _ -> 0                        (* Constants *)
+
+
+
+(* Separate out the storage-modifier name attributes *)
+let separateStorageModifiers (al: attribute list) = 
+  let isstoragemod (Attr(an, _): attribute) : bool =
+    try 
+      match H.find attributeHash an with
+        AttrName issm -> issm
+      | _ -> E.s (E.bug "separateStorageModifier: %s is not a name attribute" an)
+    with Not_found -> false
+  in
+    let stom, rest = List.partition isstoragemod al in
+    if not !msvcMode then
+      stom, rest
+    else
+      (* Put back the declspec. Put it without the leading __ since these will 
+       * be added later *)
+      let stom' = 
+	List.map (fun (Attr(an, args)) -> 
+          Attr("declspec", [ACons(an, args)])) stom in
+      stom', rest
+
+
+let isIntegralType t = 
+  match unrollType t with
+    (TInt _ | TEnum _) -> true
+  | _ -> false
+
+let isArithmeticType t = 
+  match unrollType t with
+    (TInt _ | TEnum _ | TFloat _) -> true
+  | _ -> false
+    
+
+let isPointerType t = 
+  match unrollType t with
+    TPtr _ -> true
+  | _ -> false
+
+let isFunctionType t = 
+  match unrollType t with
+    TFun _ -> true
+  | _ -> false
+
+(**** Compute the type of an expression ****)
+let rec typeOf (e: exp) : typ = 
+  match e with
+  | Const(CInt64 (_, ik, _)) -> TInt(ik, [])
+
+    (* Character constants have type int.  ISO/IEC 9899:1999 (E),
+     * section 6.4.4.4 [Character constants], paragraph 10, if you
+     * don't believe me. *)
+  | Const(CChr _) -> intType
+
+    (* The type of a string is a pointer to characters ! The only case when 
+     * you would want it to be an array is as an argument to sizeof, but we 
+     * have SizeOfStr for that *)
+  | Const(CStr s) -> !stringLiteralType
+
+  | Const(CWStr s) -> TPtr(!wcharType,[])
+
+  | Const(CReal (_, fk, _)) -> TFloat(fk, [])
+
+  | Const(CEnum(_, _, ei)) -> TEnum(ei, [])
+
+  | Lval(lv) -> typeOfLval lv
+  | SizeOf _ | SizeOfE _ | SizeOfStr _ -> !typeOfSizeOf
+  | AlignOf _ | AlignOfE _ -> !typeOfSizeOf
+  | UnOp (_, _, t) -> t
+  | BinOp (_, _, _, t) -> t
+  | CastE (t, _) -> t
+  | AddrOf (lv) -> TPtr(typeOfLval lv, [])
+  | StartOf (lv) -> begin
+      match unrollType (typeOfLval lv) with
+        TArray (t,_, _) -> TPtr(t, [])
+     | _ -> E.s (E.bug "typeOf: StartOf on a non-array")
+  end
+      
+and typeOfInit (i: init) : typ = 
+  match i with 
+    SingleInit e -> typeOf e
+  | CompoundInit (t, _) -> t
+
+and typeOfLval = function
+    Var vi, off -> typeOffset vi.vtype off
+  | Mem addr, off -> begin
+      match unrollType (typeOf addr) with
+        TPtr (t, _) -> typeOffset t off
+      | _ -> E.s (bug "typeOfLval: Mem on a non-pointer")
+  end
+
+and typeOffset basetyp =
+  let blendAttributes baseAttrs =
+    let (_, _, contageous) = 
+      partitionAttributes ~default:(AttrName false) baseAttrs in
+    typeAddAttributes contageous
+  in
+  function
+    NoOffset -> basetyp
+  | Index (_, o) -> begin
+      match unrollType basetyp with
+        TArray (t, _, baseAttrs) ->
+	  let elementType = typeOffset t o in
+	  blendAttributes baseAttrs elementType
+      | t -> E.s (E.bug "typeOffset: Index on a non-array")
+  end 
+  | Field (fi, o) ->
+      match unrollType basetyp with
+        TComp (_, baseAttrs) ->
+	  let fieldType = typeOffset fi.ftype o in
+	  blendAttributes baseAttrs fieldType
+      | _ -> E.s (bug "typeOffset: Field on a non-compound")
+
+
+(**
+ **
+ ** MACHINE DEPENDENT PART
+ **
+ **)
+exception SizeOfError of string * typ
+
+        
+(* Get the minimum aligment in bytes for a given type *)
+let rec alignOf_int = function
+  | TInt((IChar|ISChar|IUChar), _) -> 1
+  | TInt((IShort|IUShort), _) -> !theMachine.M.alignof_short
+  | TInt((IInt|IUInt), _) -> !theMachine.M.alignof_int
+  | TInt((ILong|IULong), _) -> !theMachine.M.alignof_long
+  | TInt((ILongLong|IULongLong), _) -> !theMachine.M.alignof_longlong
+  | TEnum _ -> !theMachine.M.alignof_enum
+  | TFloat(FFloat, _) -> !theMachine.M.alignof_float 
+  | TFloat(FDouble, _) -> !theMachine.M.alignof_double
+  | TFloat(FLongDouble, _) -> !theMachine.M.alignof_longdouble
+  | TNamed (t, _) -> alignOf_int t.ttype
+  | TArray (t, _, _) -> alignOf_int t
+  | TPtr _ | TBuiltin_va_list _ -> !theMachine.M.alignof_ptr
+
+        (* For composite types get the maximum alignment of any field inside *)
+  | TComp (c, _) ->
+      (* On GCC the zero-width fields do not contribute to the alignment. On 
+       * MSVC only those zero-width that _do_ appear after other 
+       * bitfields contribute to the alignment. So we drop those that 
+       * do not occur after othe bitfields *)
+      let rec dropZeros (afterbitfield: bool) = function
+        | f :: rest when f.fbitfield = Some 0 && not afterbitfield -> 
+            dropZeros afterbitfield rest
+        | f :: rest -> f :: dropZeros (f.fbitfield <> None) rest
+        | [] -> []
+      in
+      let fields = dropZeros false c.cfields in
+      List.fold_left 
+        (fun sofar f -> 
+          (* Bitfields with zero width do not contribute to the alignment in 
+           * GCC *)
+          if not !msvcMode && f.fbitfield = Some 0 then sofar else
+          max sofar (alignOf_int f.ftype)) 1 fields
+        (* These are some error cases *)
+  | TFun _ when not !msvcMode -> !theMachine.M.alignof_fun
+      
+  | TFun _ as t -> raise (SizeOfError ("function", t))
+  | TVoid _ as t -> raise (SizeOfError ("void", t))
+      
+
+let bitsSizeOfInt (ik: ikind): int = 
+  match ik with 
+  | IChar | ISChar | IUChar -> 8 
+  | IInt | IUInt -> 8 * !theMachine.M.sizeof_int
+  | IShort | IUShort -> 8 * !theMachine.M.sizeof_short
+  | ILong | IULong -> 8 * !theMachine.M.sizeof_long
+  | ILongLong | IULongLong -> 8 * !theMachine.M.sizeof_longlong
+
+(* Represents an integer as for a given kind. 
+   Returns a flag saying whether the value was changed
+   during truncation (because it was too large to fit in k). *)
+let truncateInteger64 (k: ikind) (i: int64) : int64 * bool = 
+  let nrBits = bitsSizeOfInt k in
+  let signed = isSigned k in
+  if nrBits = 64 then 
+    i, false
+  else begin
+    let i1 = Int64.shift_left i (64 - nrBits) in
+    let i2 = 
+      if signed then Int64.shift_right i1 (64 - nrBits) 
+      else Int64.shift_right_logical i1 (64 - nrBits)
+    in
+    let truncated =
+      if i2 = i then false
+      else
+        (* Examine the bits that we chopped off.  If they are all zero, then
+         * any difference between i2 and i is due to a simple sign-extension.
+         *   e.g. casting the constant 0x80000000 to int makes it
+         *        0xffffffff80000000.
+         * Suppress the truncation warning in this case.      *)
+        let chopped = Int64.shift_right_logical i (64 - nrBits)
+        in chopped <> Int64.zero
+    in
+    i2, truncated
+  end
+
+(* Construct an integer constant with possible truncation *)
+let kinteger64 (k: ikind) (i: int64) : exp = 
+  let i', truncated = truncateInteger64 k i in
+  if truncated then 
+    ignore (warnOpt "Truncating integer %s to %s\n" 
+              (Int64.format "0x%x" i) (Int64.format "0x%x" i'));
+  Const (CInt64(i', k,  None))
+
+(* Construct an integer of a given kind. *)
+let kinteger (k: ikind) (i: int) = kinteger64 k (Int64.of_int i)
+
+     
+type offsetAcc = 
+    { oaFirstFree: int;        (* The first free bit *)
+      oaLastFieldStart: int;   (* Where the previous field started *)
+      oaLastFieldWidth: int;   (* The width of the previous field. Might not 
+                                * be same as FirstFree - FieldStart because 
+                                * of internal padding *)
+      oaPrevBitPack: (int * ikind * int) option; (* If the previous fields 
+                                                   * were packed bitfields, 
+                                                   * the bit where packing 
+                                                   * has started, the ikind 
+                                                   * of the bitfield and the 
+                                                   * width of the ikind *)
+    } 
+
+
+(* GCC version *)
+(* Does not use the sofar.oaPrevBitPack *)
+let rec offsetOfFieldAcc_GCC (fi: fieldinfo) 
+                             (sofar: offsetAcc) : offsetAcc = 
+  (* field type *)
+  let ftype = unrollType fi.ftype in
+  let ftypeAlign = 8 * alignOf_int ftype in
+  let ftypeBits = bitsSizeOf ftype in
+(*
+  if fi.fcomp.cname = "comp2468" ||
+     fi.fcomp.cname = "comp2469" ||
+     fi.fcomp.cname = "comp2470" ||
+     fi.fcomp.cname = "comp2471" ||
+     fi.fcomp.cname = "comp2472" ||
+     fi.fcomp.cname = "comp2473" ||
+     fi.fcomp.cname = "comp2474" ||
+     fi.fcomp.cname = "comp2475" ||
+     fi.fcomp.cname = "comp2476" ||
+     fi.fcomp.cname = "comp2477" ||
+     fi.fcomp.cname = "comp2478" then
+
+    ignore (E.log "offsetOfFieldAcc_GCC(%s of %s:%a%a,firstFree=%d,pack=%a)\n" 
+              fi.fname fi.fcomp.cname 
+              d_type ftype
+              insert
+              (match fi.fbitfield with
+                None -> nil
+              | Some wdthis -> dprintf ":%d" wdthis)
+              sofar.oaFirstFree 
+              insert
+              (match sofar.oaPrevBitPack with 
+                None -> text "None"
+              | Some (packstart, _, wdpack) -> 
+                  dprintf "Some(packstart=%d,wd=%d)"
+                    packstart wdpack));
+*)
+  match ftype, fi.fbitfield with
+    (* A width of 0 means that we must end the current packing. It seems that 
+     * GCC pads only up to the alignment boundary for the type of this field. 
+     * *)
+  | _, Some 0 -> 
+      let firstFree      = addTrailing sofar.oaFirstFree ftypeAlign in
+      { oaFirstFree      = firstFree;
+        oaLastFieldStart = firstFree;
+        oaLastFieldWidth = 0;
+        oaPrevBitPack    = None }
+
+    (* A bitfield cannot span more alignment boundaries of its type than the 
+     * type itself *)
+  | _, Some wdthis 
+      when (sofar.oaFirstFree + wdthis + ftypeAlign - 1) / ftypeAlign 
+            - sofar.oaFirstFree / ftypeAlign > ftypeBits / ftypeAlign -> 
+          let start = addTrailing sofar.oaFirstFree ftypeAlign in    
+          { oaFirstFree      = start + wdthis;
+            oaLastFieldStart = start;
+            oaLastFieldWidth = wdthis;
+            oaPrevBitPack    = None }
+        
+   (* Try a simple method. Just put the field down *)
+  | _, Some wdthis -> 
+      { oaFirstFree      = sofar.oaFirstFree + wdthis;
+        oaLastFieldStart = sofar.oaFirstFree; 
+        oaLastFieldWidth = wdthis;
+        oaPrevBitPack    = None
+      } 
+
+     (* Non-bitfield *)
+  | _, None -> 
+      (* Align this field *)
+      let newStart = addTrailing sofar.oaFirstFree ftypeAlign  in
+      { oaFirstFree = newStart + ftypeBits;
+        oaLastFieldStart = newStart;
+        oaLastFieldWidth = ftypeBits;
+        oaPrevBitPack = None;
+      } 
+
+(* MSVC version *)
+and offsetOfFieldAcc_MSVC (fi: fieldinfo) 
+                              (sofar: offsetAcc) : offsetAcc = 
+  (* field type *)
+  let ftype = unrollType fi.ftype in
+  let ftypeAlign = 8 * alignOf_int ftype in
+  let ftypeBits = bitsSizeOf ftype in
+(*
+  ignore (E.log "offsetOfFieldAcc_MSVC(%s of %s:%a%a,firstFree=%d, pack=%a)\n" 
+            fi.fname fi.fcomp.cname 
+            d_type ftype
+            insert
+            (match fi.fbitfield with
+              None -> nil
+            | Some wdthis -> dprintf ":%d" wdthis)
+            sofar.oaFirstFree 
+            insert
+            (match sofar.oaPrevBitPack with 
+              None -> text "None"
+            | Some (prevpack, _, wdpack) -> dprintf "Some(prev=%d,wd=%d)"
+                  prevpack wdpack));
+*)
+  match ftype, fi.fbitfield, sofar.oaPrevBitPack with
+    (* Ignore zero-width bitfields that come after non-bitfields *)
+  | TInt (ikthis, _), Some 0, None -> 
+      let firstFree      = sofar.oaFirstFree in
+      { oaFirstFree      = firstFree;
+        oaLastFieldStart = firstFree;
+        oaLastFieldWidth = 0;
+        oaPrevBitPack    = None }
+
+    (* If we are in a bitpack and we see a bitfield for a type with the 
+     * different width than the pack, then we finish the pack and retry *)
+  | _, Some _, Some (packstart, _, wdpack) when wdpack != ftypeBits ->
+      let firstFree = 
+        if sofar.oaFirstFree = packstart then packstart else
+        packstart + wdpack
+      in
+      offsetOfFieldAcc_MSVC fi
+        { oaFirstFree      = addTrailing firstFree ftypeAlign;
+          oaLastFieldStart = sofar.oaLastFieldStart;
+          oaLastFieldWidth = sofar.oaLastFieldWidth;
+          oaPrevBitPack    = None }
+
+    (* A width of 0 means that we must end the current packing. *)
+  | TInt (ikthis, _), Some 0, Some (packstart, _, wdpack) -> 
+      let firstFree = 
+        if sofar.oaFirstFree = packstart then packstart else
+        packstart + wdpack
+      in
+      let firstFree      = addTrailing firstFree ftypeAlign in
+      { oaFirstFree      = firstFree;
+        oaLastFieldStart = firstFree;
+        oaLastFieldWidth = 0;
+        oaPrevBitPack    = Some (firstFree, ikthis, ftypeBits) }
+
+   (* Check for a bitfield that fits in the current pack after some other 
+    * bitfields *)
+  | TInt(ikthis, _), Some wdthis, Some (packstart, ikprev, wdpack)
+      when  packstart + wdpack >= sofar.oaFirstFree + wdthis ->
+              { oaFirstFree = sofar.oaFirstFree + wdthis;
+                oaLastFieldStart = sofar.oaFirstFree; 
+                oaLastFieldWidth = wdthis;
+                oaPrevBitPack = sofar.oaPrevBitPack
+              } 
+
+
+  | _, _, Some (packstart, _, wdpack) -> (* Finish up the bitfield pack and 
+                                          * restart. *)
+      let firstFree = 
+        if sofar.oaFirstFree = packstart then packstart else
+        packstart + wdpack
+      in
+      offsetOfFieldAcc_MSVC fi
+        { oaFirstFree      = addTrailing firstFree ftypeAlign;
+          oaLastFieldStart = sofar.oaLastFieldStart;
+          oaLastFieldWidth = sofar.oaLastFieldWidth;
+          oaPrevBitPack    = None }
+
+        (* No active bitfield pack. But we are seeing a bitfield. *)
+  | TInt(ikthis, _), Some wdthis, None -> 
+      let firstFree     = addTrailing sofar.oaFirstFree ftypeAlign in
+      { oaFirstFree     = firstFree + wdthis;
+        oaLastFieldStart = firstFree;
+        oaLastFieldWidth = wdthis;
+        oaPrevBitPack = Some (firstFree, ikthis, ftypeBits); }
+
+     (* No active bitfield pack. Non-bitfield *)
+  | _, None, None -> 
+      (* Align this field *)
+      let firstFree = addTrailing sofar.oaFirstFree ftypeAlign  in
+      { oaFirstFree = firstFree + ftypeBits;
+        oaLastFieldStart = firstFree;
+        oaLastFieldWidth = ftypeBits;
+        oaPrevBitPack = None;
+      } 
+
+  | _, Some _, None -> E.s (E.bug "offsetAcc")
+
+
+and offsetOfFieldAcc ~(fi: fieldinfo) 
+                     ~(sofar: offsetAcc) : offsetAcc = 
+  if !msvcMode then offsetOfFieldAcc_MSVC fi sofar
+  else offsetOfFieldAcc_GCC fi sofar
+
+(* The size of a type, in bits. If struct or array then trailing padding is 
+ * added *)
+and bitsSizeOf t = 
+  if not !initCIL_called then 
+    E.s (E.error "You did not call Cil.initCIL before using the CIL library");
+  match t with 
+  | TInt (ik,_) -> bitsSizeOfInt ik
+  | TFloat(FDouble, _) -> 8 * !theMachine.M.sizeof_double
+  | TFloat(FLongDouble, _) -> 8 * !theMachine.M.sizeof_longdouble
+  | TFloat _ -> 8 * !theMachine.M.sizeof_float
+  | TEnum _ -> 8 * !theMachine.M.sizeof_enum
+  | TPtr _ -> 8 * !theMachine.M.sizeof_ptr
+  | TBuiltin_va_list _ -> 8 * !theMachine.M.sizeof_ptr
+  | TNamed (t, _) -> bitsSizeOf t.ttype
+  | TComp (comp, _) when comp.cfields == [] -> begin
+      (* Empty structs are allowed in msvc mode *)
+      if not comp.cdefined && not !msvcMode then
+        raise (SizeOfError ("abstract type", t)) (*abstract type*)
+      else
+        0
+  end
+
+  | TComp (comp, _) when comp.cstruct -> (* Struct *)
+        (* Go and get the last offset *)
+      let startAcc = 
+        { oaFirstFree = 0;
+          oaLastFieldStart = 0;
+          oaLastFieldWidth = 0;
+          oaPrevBitPack = None;
+        } in
+      let lastoff = 
+        List.fold_left (fun acc fi -> offsetOfFieldAcc ~fi ~sofar:acc) 
+          startAcc comp.cfields 
+      in
+      if !msvcMode && lastoff.oaFirstFree = 0 && comp.cfields <> [] then
+          (* On MSVC if we have just a zero-width bitfields then the length 
+           * is 32 and is not padded  *)
+        32
+      else
+        addTrailing lastoff.oaFirstFree (8 * alignOf_int t)
+        
+  | TComp (comp, _) -> (* when not comp.cstruct *)
+        (* Get the maximum of all fields *)
+      let startAcc = 
+        { oaFirstFree = 0;
+          oaLastFieldStart = 0;
+          oaLastFieldWidth = 0;
+          oaPrevBitPack = None;
+        } in
+      let max = 
+        List.fold_left (fun acc fi -> 
+          let lastoff = offsetOfFieldAcc ~fi ~sofar:startAcc in
+          if lastoff.oaFirstFree > acc then
+            lastoff.oaFirstFree else acc) 0 comp.cfields in
+        (* Add trailing by simulating adding an extra field *)
+      addTrailing max (8 * alignOf_int t)
+
+  | TArray(t, Some len, _) -> begin
+      match constFold true len with 
+        Const(CInt64(l,_,_)) -> 
+          addTrailing ((bitsSizeOf t) * (Int64.to_int l)) (8 * alignOf_int t)
+      | _ -> raise (SizeOfError ("array non-constant length", t))
+  end
+
+
+  | TVoid _ -> 8 * !theMachine.M.sizeof_void
+  | TFun _ when not !msvcMode -> (* On GCC the size of a function is defined *)
+      8 * !theMachine.M.sizeof_fun
+
+  | TArray (_, None, _) -> (* it seems that on GCC the size of such an 
+                            * array is 0 *) 
+      0
+
+  | TFun _ -> raise (SizeOfError ("function", t))
+
+
+and addTrailing nrbits roundto = 
+    (nrbits + roundto - 1) land (lnot (roundto - 1))
+
+and sizeOf t = 
+  try
+    integer ((bitsSizeOf t) lsr 3)
+  with SizeOfError _ -> SizeOf(t)
+
+ 
+and bitsOffset (baset: typ) (off: offset) : int * int = 
+  let rec loopOff (baset: typ) (width: int) (start: int) = function
+      NoOffset -> start, width
+    | Index(e, off) -> begin
+        let ei = 
+          match isInteger e with
+            Some i64 -> Int64.to_int i64
+          | None -> raise (SizeOfError ("index not constant", baset))
+        in
+        let bt = 
+          match unrollType baset with
+            TArray(bt, _, _) -> bt
+          | _ -> E.s (E.bug "bitsOffset: Index on a non-array")
+        in
+        let bitsbt = bitsSizeOf bt in
+        loopOff bt bitsbt (start + ei * bitsbt) off
+    end
+    | Field(f, off) when not f.fcomp.cstruct -> 
+        (* All union fields start at offset 0 *)
+        loopOff f.ftype (bitsSizeOf f.ftype) start off
+
+    | Field(f, off) -> 
+        (* Construct a list of fields preceeding and including this one *)
+        let prevflds = 
+          let rec loop = function
+              [] -> E.s (E.bug "bitsOffset: Cannot find field %s in %s\n" 
+                           f.fname f.fcomp.cname)
+            | fi' :: _ when fi' == f -> [fi']
+            | fi' :: rest -> fi' :: loop rest
+          in
+          loop f.fcomp.cfields
+        in
+        let lastoff =
+          List.fold_left (fun acc fi' -> offsetOfFieldAcc ~fi:fi' ~sofar:acc)
+            { oaFirstFree      = 0; (* Start at 0 because each struct is done 
+                                     * separately *)
+              oaLastFieldStart = 0;
+              oaLastFieldWidth = 0;
+              oaPrevBitPack    = None } prevflds
+        in
+        (* ignore (E.log "Field %s of %s: start=%d, lastFieldStart=%d\n"
+                  f.fname f.fcomp.cname start lastoff.oaLastFieldStart); *)
+        loopOff f.ftype lastoff.oaLastFieldWidth 
+               (start + lastoff.oaLastFieldStart) off
+  in
+  loopOff baset (bitsSizeOf baset) 0 off
+        
+
+
+
+(*** Constant folding. If machdep is true then fold even sizeof operations ***)
+and constFold (machdep: bool) (e: exp) : exp = 
+  match e with
+    BinOp(bop, e1, e2, tres) -> constFoldBinOp machdep bop e1 e2 tres
+  | UnOp(unop, e1, tres) -> begin
+      try
+        let tk = 
+          match unrollType tres with
+            TInt(ik, _) -> ik
+          | TEnum _ -> IInt
+          | _ -> raise Not_found (* probably a float *)
+        in
+        match constFold machdep e1 with
+          Const(CInt64(i,ik,_)) -> begin
+            match unop with 
+              Neg -> kinteger64 tk (Int64.neg i)
+            | BNot -> kinteger64 tk (Int64.lognot i)
+            | LNot -> if i = Int64.zero then one else zero
+            end
+        | e1c -> UnOp(unop, e1c, tres)
+      with Not_found -> e
+  end
+        (* Characters are integers *)
+  | Const(CChr c) -> Const(charConstToInt c)
+  | Const(CEnum (v, _, _)) -> constFold machdep v
+  | SizeOf t when machdep -> begin
+      try
+        let bs = bitsSizeOf t in
+        kinteger !kindOfSizeOf (bs / 8)
+      with SizeOfError _ -> e
+  end
+  | SizeOfE e when machdep -> constFold machdep (SizeOf (typeOf e))
+  | SizeOfStr s when machdep -> kinteger !kindOfSizeOf (1 + String.length s)
+  | AlignOf t when machdep -> kinteger !kindOfSizeOf (alignOf_int t)
+  | AlignOfE e when machdep -> begin
+      (* The alignmetn of an expression is not always the alignment of its 
+       * type. I know that for strings this is not true *)
+      match e with 
+        Const (CStr _) when not !msvcMode -> 
+          kinteger !kindOfSizeOf !theMachine.M.alignof_str
+            (* For an array, it is the alignment of the array ! *)
+      | _ -> constFold machdep (AlignOf (typeOf e))
+  end
+
+  | CastE(it, 
+          AddrOf (Mem (CastE(TPtr(bt, _), z)), off)) 
+    when machdep && isZero z -> begin
+      try 
+        let start, width = bitsOffset bt off in
+        if start mod 8 <> 0 then 
+          E.s (error "Using offset of bitfield\n");
+        constFold machdep (CastE(it, (integer (start / 8))))
+      with SizeOfError _ -> e
+  end
+
+ 
+  | CastE (t, e) -> begin
+      match constFold machdep e, unrollType t with 
+        (* Might truncate silently *)
+        Const(CInt64(i,k,_)), TInt(nk,_) -> 
+          let i', _ = truncateInteger64 nk i in
+          Const(CInt64(i', nk, None))
+      | e', _ -> CastE (t, e')
+  end
+
+  | _ -> e
+
+and constFoldBinOp (machdep: bool) bop e1 e2 tres = 
+  let e1' = constFold machdep e1 in
+  let e2' = constFold machdep e2 in
+  if isIntegralType tres then begin
+    let newe = 
+      let rec mkInt = function
+          Const(CChr c) -> Const(charConstToInt c)
+        | Const(CEnum (v, s, ei)) -> mkInt v
+        | CastE(TInt (ik, ta), e) -> begin
+            match mkInt e with
+              Const(CInt64(i, _, _)) -> 
+                let i', _ = truncateInteger64 ik i in
+                Const(CInt64(i', ik, None))
+
+            | e' -> CastE(TInt(ik, ta), e')
+        end
+        | e -> e
+      in
+      let tk = 
+        match unrollType tres with
+          TInt(ik, _) -> ik
+        | TEnum _ -> IInt
+        | _ -> E.s (bug "constFoldBinOp")
+      in
+      (* See if the result is unsigned *)
+      let isunsigned typ = not (isSigned typ) in
+      let ge (unsigned: bool) (i1: int64) (i2: int64) : bool = 
+        if unsigned then 
+          let l1 = Int64.shift_right_logical i1 1 in
+          let l2 = Int64.shift_right_logical i2 1 in (* Both positive now *)
+          (l1 > l2) || (l1 = l2 && 
+                        Int64.logand i1 Int64.one >= Int64.logand i2 Int64.one)
+        else i1 >= i2
+      in
+      let shiftInBounds i2 =
+        (* We only try to fold shifts if the second arg is positive and 
+           less than 64.  Otherwise, the semantics are processor-dependent,
+           so let the compiler sort it out. *)
+        i2 >= Int64.zero && i2 < (Int64.of_int 64)
+      in
+      (* Assume that the necessary promotions have been done *)
+      match bop, mkInt e1', mkInt e2' with
+      | PlusA, Const(CInt64(z,_,_)), e2'' when z = Int64.zero -> e2''
+      | PlusA, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
+      | PlusPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
+      | IndexPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
+      | MinusPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
+      | PlusA, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.add i1 i2)
+      | MinusA, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.sub i1 i2)
+      | Mult, Const(CInt64(i1,ik1,_)), Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.mul i1 i2)
+      | Mult, Const(CInt64(0L,_,_)), _ -> zero
+      | Mult, Const(CInt64(1L,_,_)), e2'' -> e2''
+      | Mult, _,    Const(CInt64(0L,_,_)) -> zero
+      | Mult, e1'', Const(CInt64(1L,_,_)) -> e1''
+      | Div, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> begin
+          try kinteger64 tk (Int64.div i1 i2)
+          with Division_by_zero -> BinOp(bop, e1', e2', tres)
+      end
+      | Div, e1'', Const(CInt64(1L,_,_)) -> e1''
+
+      | Mod, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> begin
+          try kinteger64 tk (Int64.rem i1 i2)
+          with Division_by_zero -> BinOp(bop, e1', e2', tres) 
+      end
+      | BAnd, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.logand i1 i2)
+      | BAnd, Const(CInt64(0L,_,_)), _ -> zero
+      | BAnd, _, Const(CInt64(0L,_,_)) -> zero
+      | BOr, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.logor i1 i2)
+      | BOr, _, _ when isZero e1' -> e2'
+      | BOr, _, _ when isZero e2' -> e1'
+      | BXor, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          kinteger64 tk (Int64.logxor i1 i2)
+
+      | Shiftlt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,_,_)) when shiftInBounds i2 -> 
+          kinteger64 tk (Int64.shift_left i1 (Int64.to_int i2))
+      | Shiftlt, Const(CInt64(0L,_,_)), _ -> zero
+      | Shiftlt, e1'', Const(CInt64(0L,_,_)) -> e1''
+
+      | Shiftrt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,_,_)) when shiftInBounds i2 -> 
+          if isunsigned ik1 then 
+            kinteger64 tk (Int64.shift_right_logical i1 (Int64.to_int i2))
+          else
+            kinteger64 tk (Int64.shift_right i1 (Int64.to_int i2))
+      | Shiftrt, Const(CInt64(0L,_,_)), _ -> zero
+      | Shiftrt, e1'', Const(CInt64(0L,_,_)) -> e1''
+
+      | Eq, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          integer (if i1 = i2 then 1 else 0)
+      | Ne, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
+          integer (if i1 <> i2 then 1 else 0)
+      | Le, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
+          integer (if ge (isunsigned ik1) i2 i1 then 1 else 0)
+
+      | Ge, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
+          integer (if ge (isunsigned ik1) i1 i2 then 1 else 0)
+
+      | Lt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
+          integer (if i1 <> i2 && ge (isunsigned ik1) i2 i1 then 1 else 0)
+
+      | Gt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
+          integer (if i1 <> i2 && ge (isunsigned ik1) i1 i2 then 1 else 0)
+      | LAnd, _, _ when isZero e1' || isZero e2' -> zero
+      | LOr, _, _ when isZero e1' -> e2'
+      | LOr, _, _ when isZero e2' -> e1'
+      | _ -> BinOp(bop, e1', e2', tres)
+    in
+    if debugConstFold then 
+      ignore (E.log "Folded %a to %a\n" 
+                (!pd_exp) (BinOp(bop, e1', e2', tres)) (!pd_exp) newe);
+    newe
+  end else
+    BinOp(bop, e1', e2', tres)
+
+
+
+let parseInt (str: string) : exp = 
+  let hasSuffix str = 
+    let l = String.length str in
+    fun s -> 
+      let ls = String.length s in
+      l >= ls && s = String.uppercase (String.sub str (l - ls) ls)
+  in
+  let l = String.length str in
+  (* See if it is octal or hex *)
+  let octalhex = (l >= 1 && String.get str 0 = '0') in 
+  (* The length of the suffix and a list of possible kinds. See ISO 
+  * 6.4.4.1 *)
+  let hasSuffix = hasSuffix str in
+  let suffixlen, kinds = 
+    if hasSuffix "ULL" || hasSuffix "LLU" then 
+      3, [IULongLong]
+    else if hasSuffix "LL" then
+      2, if octalhex then [ILongLong; IULongLong] else [ILongLong]
+    else if hasSuffix "UL" || hasSuffix "LU" then
+      2, [IULong; IULongLong]
+    else if hasSuffix "L" then
+      1, if octalhex then [ILong; IULong; ILongLong; IULongLong] 
+      else [ILong; ILongLong]
+    else if hasSuffix "U" then
+      1, [IUInt; IULong; IULongLong]
+    else if (!msvcMode && hasSuffix "UI64") then
+      4, [IULongLong]
+    else if (!msvcMode && hasSuffix "I64") then
+      3, [ILongLong]
+    else
+      0, if octalhex || true (* !!! This is against the ISO but it 
+        * is what GCC and MSVC do !!! *)
+      then [IInt; IUInt; ILong; IULong; ILongLong; IULongLong]
+      else [IInt; ILong; IUInt; ILongLong]
+  in
+  (* Convert to integer. To prevent overflow we do the arithmetic 
+  * on Int64 and we take care of overflow. We work only with 
+  * positive integers since the lexer takes care of the sign *)
+  let rec toInt (base: int64) (acc: int64) (idx: int) : int64 = 
+    let doAcc (what: int) = 
+      let acc' = 
+        Int64.add (Int64.mul base acc)  (Int64.of_int what) in
+      if acc < Int64.zero || (* We clearly overflow since base >= 2 
+      * *)
+      (acc' > Int64.zero && acc' < acc) then 
+        E.s (unimp "Cannot represent on 64 bits the integer %s\n"
+               str)
+      else
+        toInt base acc' (idx + 1)
+    in 
+    if idx >= l - suffixlen then begin
+      acc
+    end else 
+      let ch = String.get str idx in
+      if ch >= '0' && ch <= '9' then
+        doAcc (Char.code ch - Char.code '0')
+      else if  ch >= 'a' && ch <= 'f'  then
+        doAcc (10 + Char.code ch - Char.code 'a')
+      else if  ch >= 'A' && ch <= 'F'  then
+        doAcc (10 + Char.code ch - Char.code 'A')
+      else
+        E.s (bug "Invalid integer constant: %s (char %c at idx=%d)" 
+               str ch idx)
+  in
+  try
+    let i = 
+      if octalhex then
+        if l >= 2 && 
+          (let c = String.get str 1 in c = 'x' || c = 'X') then
+          toInt (Int64.of_int 16) Int64.zero 2
+        else
+          toInt (Int64.of_int 8) Int64.zero 1
+      else
+        toInt (Int64.of_int 10) Int64.zero 0
+    in
+    (* Construct an integer of the first kinds that fits. i must be 
+    * POSITIVE  *)
+    let res = 
+      let rec loop = function
+        | ((IInt | ILong) as k) :: _ 
+                  when i < Int64.shift_left (Int64.of_int 1) 31 ->
+                    kinteger64 k i
+        | ((IUInt | IULong) as k) :: _ 
+                  when i < Int64.shift_left (Int64.of_int 1) 32
+          ->  kinteger64 k i
+        | (ILongLong as k) :: _ 
+                 when i <= Int64.sub (Int64.shift_left 
+                                              (Int64.of_int 1) 63) 
+                                          (Int64.of_int 1) 
+          -> 
+            kinteger64 k i
+        | (IULongLong as k) :: _ -> kinteger64 k i
+        | _ :: rest -> loop rest
+        | [] -> E.s (E.unimp "Cannot represent the integer %s\n" 
+                       (Int64.to_string i))
+      in
+      loop kinds 
+    in
+    res
+  with e -> begin
+    ignore (E.log "int_of_string %s (%s)\n" str 
+              (Printexc.to_string e));
+    zero
+  end
+
+
+
+let d_unop () u =
+  match u with
+    Neg -> text "-"
+  | BNot -> text "~"
+  | LNot -> text "!"
+
+let d_binop () b =
+  match b with
+    PlusA | PlusPI | IndexPI -> text "+"
+  | MinusA | MinusPP | MinusPI -> text "-"
+  | Mult -> text "*"
+  | Div -> text "/"
+  | Mod -> text "%"
+  | Shiftlt -> text "<<"
+  | Shiftrt -> text ">>"
+  | Lt -> text "<"
+  | Gt -> text ">"
+  | Le -> text "<="
+  | Ge -> text ">="
+  | Eq -> text "=="
+  | Ne -> text "!="
+  | BAnd -> text "&"
+  | BXor -> text "^"
+  | BOr -> text "|"
+  | LAnd -> text "&&"
+  | LOr -> text "||"
+
+let invalidStmt = mkStmt (Instr [])
+
+(** Construct a hash with the builtins *)
+let gccBuiltins : (string, typ * typ list * bool) H.t = 
+  let h = H.create 17 in
+  (* See if we have builtin_va_list *)
+  let hasbva = M.gccHas__builtin_va_list in
+  let ulongLongType = TInt(IULongLong, []) in
+  let floatType = TFloat(FFloat, []) in
+  let longDoubleType = TFloat (FLongDouble, []) in
+  let voidConstPtrType = TPtr(TVoid [Attr ("const", [])], []) in
+  let sizeType = uintType in
+
+  H.add h "__builtin___fprintf_chk" (intType, [ voidPtrType; intType; charConstPtrType ], true) (* first argument is really FILE*, not void*, but we don't want to build in the definition for FILE *);
+  H.add h "__builtin___memcpy_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
+  H.add h "__builtin___memmove_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
+  H.add h "__builtin___mempcpy_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
+  H.add h "__builtin___memset_chk" (voidPtrType, [ voidPtrType; intType; sizeType; sizeType ], false);
+  H.add h "__builtin___printf_chk" (intType, [ intType; charConstPtrType ], true);
+  H.add h "__builtin___snprintf_chk" (intType, [ charPtrType; sizeType; intType; sizeType; charConstPtrType ], true);
+  H.add h "__builtin___sprintf_chk" (intType, [ charPtrType; intType; sizeType; charConstPtrType ], true);
+  H.add h "__builtin___stpcpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin___strcat_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin___strcpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin___strncat_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType; sizeType ], false);
+  H.add h "__builtin___strncpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType; sizeType ], false);
+  H.add h "__builtin___vfprintf_chk" (intType, [ voidPtrType; intType; charConstPtrType; TBuiltin_va_list [] ], false) (* first argument is really FILE*, not void*, but we don't want to build in the definition for FILE *);
+  H.add h "__builtin___vprintf_chk" (intType, [ intType; charConstPtrType; TBuiltin_va_list [] ], false);
+  H.add h "__builtin___vsnprintf_chk" (intType, [ charPtrType; sizeType; intType; sizeType; charConstPtrType; TBuiltin_va_list [] ], false);
+  H.add h "__builtin___vsprintf_chk" (intType, [ charPtrType; intType; sizeType; charConstPtrType; TBuiltin_va_list [] ], false);
+
+  H.add h "__builtin_acos" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_acosf" (floatType, [ floatType ], false);
+  H.add h "__builtin_acosl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_alloca" (voidPtrType, [ uintType ], false);
+  
+  H.add h "__builtin_asin" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_asinf" (floatType, [ floatType ], false);
+  H.add h "__builtin_asinl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_atan" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_atanf" (floatType, [ floatType ], false);
+  H.add h "__builtin_atanl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_atan2" (doubleType, [ doubleType; doubleType ], false);
+  H.add h "__builtin_atan2f" (floatType, [ floatType; floatType ], false);
+  H.add h "__builtin_atan2l" (longDoubleType, [ longDoubleType; 
+                                                longDoubleType ], false);
+
+  H.add h "__builtin_ceil" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_ceilf" (floatType, [ floatType ], false);
+  H.add h "__builtin_ceill" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_cos" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_cosf" (floatType, [ floatType ], false);
+  H.add h "__builtin_cosl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_cosh" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_coshf" (floatType, [ floatType ], false);
+  H.add h "__builtin_coshl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_clz" (intType, [ uintType ], false);
+  H.add h "__builtin_clzl" (intType, [ ulongType ], false);
+  H.add h "__builtin_clzll" (intType, [ ulongLongType ], false);
+  H.add h "__builtin_constant_p" (intType, [ intType ], false);
+  H.add h "__builtin_ctz" (intType, [ uintType ], false);
+  H.add h "__builtin_ctzl" (intType, [ ulongType ], false);
+  H.add h "__builtin_ctzll" (intType, [ ulongLongType ], false);
+
+  H.add h "__builtin_exp" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_expf" (floatType, [ floatType ], false);
+  H.add h "__builtin_expl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_expect" (longType, [ longType; longType ], false);
+
+  H.add h "__builtin_fabs" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_fabsf" (floatType, [ floatType ], false);
+  H.add h "__builtin_fabsl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_ffs" (intType, [ uintType ], false);
+  H.add h "__builtin_ffsl" (intType, [ ulongType ], false);
+  H.add h "__builtin_ffsll" (intType, [ ulongLongType ], false);
+  H.add h "__builtin_frame_address" (voidPtrType, [ uintType ], false);
+
+  H.add h "__builtin_floor" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_floorf" (floatType, [ floatType ], false);
+  H.add h "__builtin_floorl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_huge_val" (doubleType, [], false);
+  H.add h "__builtin_huge_valf" (floatType, [], false);
+  H.add h "__builtin_huge_vall" (longDoubleType, [], false);
+  H.add h "__builtin_inf" (doubleType, [], false);
+  H.add h "__builtin_inff" (floatType, [], false);
+  H.add h "__builtin_infl" (longDoubleType, [], false);
+  H.add h "__builtin_memcpy" (voidPtrType, [ voidPtrType; voidConstPtrType; uintType ], false);
+  H.add h "__builtin_mempcpy" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType ], false);
+
+  H.add h "__builtin_fmod" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_fmodf" (floatType, [ floatType ], false);
+  H.add h "__builtin_fmodl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_frexp" (doubleType, [ doubleType; intPtrType ], false);
+  H.add h "__builtin_frexpf" (floatType, [ floatType; intPtrType  ], false);
+  H.add h "__builtin_frexpl" (longDoubleType, [ longDoubleType; 
+                                                intPtrType  ], false);
+
+  H.add h "__builtin_ldexp" (doubleType, [ doubleType; intType ], false);
+  H.add h "__builtin_ldexpf" (floatType, [ floatType; intType  ], false);
+  H.add h "__builtin_ldexpl" (longDoubleType, [ longDoubleType; 
+                                                intType  ], false);
+
+  H.add h "__builtin_log" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_logf" (floatType, [ floatType ], false);
+  H.add h "__builtin_logl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_log10" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_log10f" (floatType, [ floatType ], false);
+  H.add h "__builtin_log10l" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_modff" (floatType, [ floatType; 
+                                          TPtr(floatType,[]) ], false);
+  H.add h "__builtin_modfl" (longDoubleType, [ longDoubleType; 
+                                               TPtr(longDoubleType, []) ], 
+                             false);
+
+  H.add h "__builtin_nan" (doubleType, [ charConstPtrType ], false);
+  H.add h "__builtin_nanf" (floatType, [ charConstPtrType ], false);
+  H.add h "__builtin_nanl" (longDoubleType, [ charConstPtrType ], false);
+  H.add h "__builtin_nans" (doubleType, [ charConstPtrType ], false);
+  H.add h "__builtin_nansf" (floatType, [ charConstPtrType ], false);
+  H.add h "__builtin_nansl" (longDoubleType, [ charConstPtrType ], false);
+  H.add h "__builtin_next_arg" ((if hasbva then TBuiltin_va_list [] else voidPtrType), [], false) (* When we parse builtin_next_arg we drop the second argument *);
+  H.add h "__builtin_object_size" (sizeType, [ voidPtrType; intType ], false);
+
+  H.add h "__builtin_parity" (intType, [ uintType ], false);
+  H.add h "__builtin_parityl" (intType, [ ulongType ], false);
+  H.add h "__builtin_parityll" (intType, [ ulongLongType ], false);
+
+  H.add h "__builtin_popcount" (intType, [ uintType ], false);
+  H.add h "__builtin_popcountl" (intType, [ ulongType ], false);
+  H.add h "__builtin_popcountll" (intType, [ ulongLongType ], false);
+
+  H.add h "__builtin_powi" (doubleType, [ doubleType; intType ], false);
+  H.add h "__builtin_powif" (floatType, [ floatType; intType ], false);
+  H.add h "__builtin_powil" (longDoubleType, [ longDoubleType; intType ], false);
+  H.add h "__builtin_prefetch" (voidType, [ voidConstPtrType ], true);
+  H.add h "__builtin_return" (voidType, [ voidConstPtrType ], false);
+  H.add h "__builtin_return_address" (voidPtrType, [ uintType ], false);
+
+  H.add h "__builtin_sin" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_sinf" (floatType, [ floatType ], false);
+  H.add h "__builtin_sinl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_sinh" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_sinhf" (floatType, [ floatType ], false);
+  H.add h "__builtin_sinhl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_sqrt" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_sqrtf" (floatType, [ floatType ], false);
+  H.add h "__builtin_sqrtl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_stpcpy" (charPtrType, [ charPtrType; charConstPtrType ], false);
+  H.add h "__builtin_strchr" (charPtrType, [ charPtrType; charType ], false);
+  H.add h "__builtin_strcmp" (intType, [ charConstPtrType; charConstPtrType ], false);
+  H.add h "__builtin_strcpy" (charPtrType, [ charPtrType; charConstPtrType ], false);
+  H.add h "__builtin_strcspn" (uintType, [ charConstPtrType; charConstPtrType ], false);
+  H.add h "__builtin_strncat" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin_strncmp" (intType, [ charConstPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin_strncpy" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
+  H.add h "__builtin_strspn" (intType, [ charConstPtrType; charConstPtrType ], false);
+  H.add h "__builtin_strpbrk" (charPtrType, [ charConstPtrType; charConstPtrType ], false);
+  (* When we parse builtin_types_compatible_p, we change its interface *)
+  H.add h "__builtin_types_compatible_p"
+                              (intType, [ uintType; (* Sizeof the type *)
+                                          uintType  (* Sizeof the type *) ],
+                               false);
+  H.add h "__builtin_tan" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_tanf" (floatType, [ floatType ], false);
+  H.add h "__builtin_tanl" (longDoubleType, [ longDoubleType ], false);
+
+  H.add h "__builtin_tanh" (doubleType, [ doubleType ], false);
+  H.add h "__builtin_tanhf" (floatType, [ floatType ], false);
+  H.add h "__builtin_tanhl" (longDoubleType, [ longDoubleType ], false);
+
+
+  if hasbva then begin
+    H.add h "__builtin_va_end" (voidType, [ TBuiltin_va_list [] ], false);
+    H.add h "__builtin_varargs_start" 
+      (voidType, [ TBuiltin_va_list [] ], false);
+    H.add h "__builtin_va_start" (voidType, [ TBuiltin_va_list [] ], false);
+    (* When we parse builtin_stdarg_start, we drop the second argument *)
+    H.add h "__builtin_stdarg_start" (voidType, [ TBuiltin_va_list []; ],
+                                      false);
+    (* When we parse builtin_va_arg we change its interface *)
+    H.add h "__builtin_va_arg" (voidType, [ TBuiltin_va_list [];
+                                            uintType; (* Sizeof the type *)
+                                            voidPtrType; (* Ptr to res *) ],
+                               false);
+    H.add h "__builtin_va_copy" (voidType, [ TBuiltin_va_list [];
+					     TBuiltin_va_list [] ],
+                                false);
+  end;
+  h
+
+(** Construct a hash with the builtins *)
+let msvcBuiltins : (string, typ * typ list * bool) H.t = 
+  (* These are empty for now but can be added to depending on the application*)
+  let h = H.create 17 in
+  (** Take a number of wide string literals *)
+  H.add h "__annotation" (voidType, [ ], true);
+  h
+
+
+
+let pTypeSig : (typ -> typsig) ref =
+  ref (fun _ -> E.s (E.bug "pTypeSig not initialized"))
+
+
+(** A printer interface for CIL trees. Create instantiations of 
+ * this type by specializing the class {!Cil.defaultCilPrinter}. *)
+class type cilPrinter = object
+  method pVDecl: unit -> varinfo -> doc
+    (** Invoked for each variable declaration. Note that variable 
+     * declarations are all the [GVar], [GVarDecl], [GFun], all the [varinfo] 
+     * in formals of function types, and the formals and locals for function 
+     * definitions. *)
+
+  method pVar: varinfo -> doc
+    (** Invoked on each variable use. *)
+
+  method pLval: unit -> lval -> doc
+    (** Invoked on each lvalue occurence *)
+
+  method pOffset: doc -> offset -> doc
+    (** Invoked on each offset occurence. The second argument is the base. *)
+
+  method pInstr: unit -> instr -> doc
+    (** Invoked on each instruction occurrence. *)
+
+  method pStmt: unit -> stmt -> doc
+    (** Control-flow statement. This is used by 
+     * {!Cil.printGlobal} and by {!Cil.dumpGlobal}. *)
+
+  method dStmt: out_channel -> int -> stmt -> unit
+    (** Dump a control-flow statement to a file with a given indentation. This is used by 
+     * {!Cil.dumpGlobal}. *)
+
+  method dBlock: out_channel -> int -> block -> unit
+    (** Dump a control-flow block to a file with a given indentation. This is 
+     * used by {!Cil.dumpGlobal}. *)
+
+  method pBlock: unit -> block -> Pretty.doc
+    (** Print a block. *)
+
+  method pGlobal: unit -> global -> doc
+    (** Global (vars, types, etc.). This can be slow and is used only by 
+     * {!Cil.printGlobal} but by {!Cil.dumpGlobal} for everything else except 
+     * [GVar] and [GFun]. *)
+
+  method dGlobal: out_channel -> global -> unit
+    (** Dump a global to a file. This is used by {!Cil.dumpGlobal}. *)
+
+  method pFieldDecl: unit -> fieldinfo -> doc
+    (** A field declaration *)
+
+  method pType: doc option -> unit -> typ -> doc  
+  (* Use of some type in some declaration. The first argument is used to print 
+   * the declared element, or is None if we are just printing a type with no 
+   * name being decalred. Note that for structure/union and enumeration types 
+   * the definition of the composite type is not visited. Use [vglob] to 
+   * visit it.  *)
+
+  method pAttr: attribute -> doc * bool
+    (** Attribute. Also return an indication whether this attribute must be 
+      * printed inside the __attribute__ list or not. *)
+   
+  method pAttrParam: unit -> attrparam -> doc 
+    (** Attribute paramter *)
+   
+  method pAttrs: unit -> attributes -> doc
+    (** Attribute lists *)
+
+  method pLabel: unit -> label -> doc
+    (** Label *)
+
+  method pLineDirective: ?forcefile:bool -> location -> Pretty.doc
+    (** Print a line-number. This is assumed to come always on an empty line. 
+     * If the forcefile argument is present and is true then the file name 
+     * will be printed always. Otherwise the file name is printed only if it 
+     * is different from the last time time this function is called. The last 
+     * file name is stored in a private field inside the cilPrinter object. *)
+
+  method pStmtKind : stmt -> unit -> stmtkind -> Pretty.doc
+    (** Print a statement kind. The code to be printed is given in the
+     * {!Cil.stmtkind} argument.  The initial {!Cil.stmt} argument
+     * records the statement which follows the one being printed;
+     * {!Cil.defaultCilPrinterClass} uses this information to prettify
+     * statement printing in certain special cases. *)
+
+  method pExp: unit -> exp -> doc
+    (** Print expressions *) 
+
+  method pInit: unit -> init -> doc
+    (** Print initializers. This can be slow and is used by 
+     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
+
+  method dInit: out_channel -> int -> init -> unit
+    (** Dump a global to a file with a given indentation. This is used by 
+     * {!Cil.dumpGlobal}. *)
+end
+
+
+class defaultCilPrinterClass : cilPrinter = object (self)
+  val mutable currentFormals : varinfo list = []
+  method private getLastNamedArgument (s: string) : exp =
+    match List.rev currentFormals with 
+      f :: _ -> Lval (var f)
+    | [] -> 
+        E.s (warn "Cannot find the last named argument when priting call to %s\n" s)
+
+  (*** VARIABLES ***)
+  (* variable use *)
+  method pVar (v:varinfo) = text v.vname
+
+  (* variable declaration *)
+  method pVDecl () (v:varinfo) =
+    let stom, rest = separateStorageModifiers v.vattr in
+    (* First the storage modifiers *)
+    text (if v.vinline then "__inline " else "")
+      ++ d_storage () v.vstorage
+      ++ (self#pAttrs () stom)
+      ++ (self#pType (Some (text v.vname)) () v.vtype)
+      ++ text " "
+      ++ self#pAttrs () rest
+
+  (*** L-VALUES ***)
+  method pLval () (lv:lval) =  (* lval (base is 1st field)  *)
+    match lv with
+      Var vi, o -> self#pOffset (self#pVar vi) o
+    | Mem e, Field(fi, o) ->
+        self#pOffset
+          ((self#pExpPrec arrowLevel () e) ++ text ("->" ^ fi.fname)) o
+    | Mem e, o ->
+        self#pOffset
+          (text "(*" ++ self#pExpPrec derefStarLevel () e ++ text ")") o
+
+  (** Offsets **)
+  method pOffset (base: doc) = function
+    | NoOffset -> base
+    | Field (fi, o) -> 
+        self#pOffset (base ++ text "." ++ text fi.fname) o
+    | Index (e, o) ->
+        self#pOffset (base ++ text "[" ++ self#pExp () e ++ text "]") o
+
+  method private pLvalPrec (contextprec: int) () lv = 
+    if getParenthLevel (Lval(lv)) >= contextprec then
+      text "(" ++ self#pLval () lv ++ text ")"
+    else
+      self#pLval () lv
+
+  (*** EXPRESSIONS ***)
+  method pExp () (e: exp) : doc = 
+    let level = getParenthLevel e in
+    match e with
+      Const(c) -> d_const () c
+    | Lval(l) -> self#pLval () l
+    | UnOp(u,e1,_) -> 
+        (d_unop () u) ++ chr ' ' ++ (self#pExpPrec level () e1)
+          
+    | BinOp(b,e1,e2,_) -> 
+        align 
+          ++ (self#pExpPrec level () e1)
+          ++ chr ' ' 
+          ++ (d_binop () b)
+          ++ chr ' '
+          ++ (self#pExpPrec level () e2)
+          ++ unalign
+
+    | CastE(t,e) -> 
+        text "(" 
+          ++ self#pType None () t
+          ++ text ")"
+          ++ self#pExpPrec level () e
+
+    | SizeOf (t) -> 
+        text "sizeof(" ++ self#pType None () t ++ chr ')'
+    | SizeOfE (e) ->  
+        text "sizeof(" ++ self#pExp () e ++ chr ')'
+
+    | SizeOfStr s -> 
+        text "sizeof(" ++ d_const () (CStr s) ++ chr ')'
+
+    | AlignOf (t) -> 
+        text "__alignof__(" ++ self#pType None () t ++ chr ')'
+    | AlignOfE (e) -> 
+        text "__alignof__(" ++ self#pExp () e ++ chr ')'
+    | AddrOf(lv) -> 
+        text "& " ++ (self#pLvalPrec addrOfLevel () lv)
+          
+    | StartOf(lv) -> self#pLval () lv
+
+  method private pExpPrec (contextprec: int) () (e: exp) = 
+    let thisLevel = getParenthLevel e in
+    let needParens =
+      if thisLevel >= contextprec then
+	true
+      else if contextprec == bitwiseLevel then
+        (* quiet down some GCC warnings *)
+	thisLevel == additiveLevel || thisLevel == comparativeLevel
+      else
+	false
+    in
+    if needParens then
+      chr '(' ++ self#pExp () e ++ chr ')'
+    else
+      self#pExp () e
+
+  method pInit () = function 
+      SingleInit e -> self#pExp () e
+    | CompoundInit (t, initl) -> 
+      (* We do not print the type of the Compound *)
+(*
+      let dinit e = d_init () e in
+      dprintf "{@[%a@]}"
+        (docList ~sep:(chr ',' ++ break) dinit) initl
+*)
+        let printDesignator = 
+          if not !msvcMode then begin
+            (* Print only for union when we do not initialize the first field *)
+            match unrollType t, initl with
+              TComp(ci, _), [(Field(f, NoOffset), _)] -> 
+                if not (ci.cstruct) && ci.cfields != [] && 
+                  (List.hd ci.cfields) != f then
+                  true
+                else
+                  false
+            | _ -> false
+          end else 
+            false 
+        in
+        let d_oneInit = function
+            Field(f, NoOffset), i -> 
+              (if printDesignator then 
+                text ("." ^ f.fname ^ " = ") 
+              else nil) ++ self#pInit () i
+          | Index(e, NoOffset), i -> 
+              (if printDesignator then 
+                text "[" ++ self#pExp () e ++ text "] = " else nil) ++ 
+                self#pInit () i
+          | _ -> E.s (unimp "Trying to print malformed initializer")
+        in
+        chr '{' ++ (align 
+                      ++ ((docList ~sep:(chr ',' ++ break) d_oneInit) () initl) 
+                      ++ unalign)
+          ++ chr '}'
+(*
+    | ArrayInit (_, _, il) -> 
+        chr '{' ++ (align 
+                      ++ ((docList (chr ',' ++ break) (self#pInit ())) () il) 
+                      ++ unalign)
+          ++ chr '}'
+*)
+  (* dump initializers to a file. *)
+  method dInit (out: out_channel) (ind: int) (i: init) = 
+    (* Dump an array *)
+    let dumpArray (bt: typ) (il: 'a list) (getelem: 'a -> init) = 
+      let onALine = (* How many elements on a line *)
+        match unrollType bt with TComp _ | TArray _ -> 1 | _ -> 4
+      in
+      let rec outputElements (isfirst: bool) (room_on_line: int) = function
+          [] -> output_string out "}"
+        | (i: 'a) :: rest -> 
+            if not isfirst then output_string out ", ";
+            let new_room_on_line = 
+              if room_on_line == 0 then begin 
+                output_string out "\n"; output_string out (String.make ind ' ');
+                onALine - 1
+              end else 
+                room_on_line - 1
+            in
+            self#dInit out (ind + 2) (getelem i);
+            outputElements false new_room_on_line rest
+      in
+      output_string out "{ ";
+      outputElements true onALine il
+    in
+    match i with 
+      SingleInit e -> 
+        fprint out !lineLength (indent ind (self#pExp () e))
+    | CompoundInit (t, initl) -> begin 
+        match unrollType t with 
+          TArray(bt, _, _) -> 
+            dumpArray bt initl (fun (_, i) -> i)
+        | _ -> 
+            (* Now a structure or a union *)
+            fprint out !lineLength (indent ind (self#pInit () i))
+    end
+(*
+    | ArrayInit (bt, len, initl) -> begin
+        (* If the base type does not contain structs then use the pInit 
+        match unrollType bt with 
+          TComp _ | TArray _ -> 
+            dumpArray bt initl (fun x -> x)
+        | _ -> *)
+            fprint out !lineLength (indent ind (self#pInit () i))
+    end
+*)
+        
+  (** What terminator to print after an instruction. sometimes we want to 
+   * print sequences of instructions separated by comma *)
+  val mutable printInstrTerminator = ";"
+
+  (*** INSTRUCTIONS ****)
+  method pInstr () (i:instr) =       (* imperative instruction *)
+    match i with
+    | Set(lv,e,l) -> begin
+        (* Be nice to some special cases *)
+        match e with
+          BinOp((PlusA|PlusPI|IndexPI),Lval(lv'), Const(CInt64(one,_,_)),_)
+            when Util.equals lv lv' && one = Int64.one && not !printCilAsIs ->
+              self#pLineDirective l
+                ++ self#pLval () lv
+                ++ text (" ++" ^ printInstrTerminator)
+
+        | BinOp((MinusA|MinusPI),Lval(lv'),
+                Const(CInt64(one,_,_)), _) 
+            when Util.equals lv lv' && one = Int64.one && not !printCilAsIs ->
+                  self#pLineDirective l
+                    ++ self#pLval () lv
+                    ++ text (" --" ^ printInstrTerminator) 
+
+        | BinOp((PlusA|PlusPI|IndexPI),Lval(lv'),Const(CInt64(mone,_,_)),_)
+            when Util.equals lv lv' && mone = Int64.minus_one 
+                && not !printCilAsIs ->
+              self#pLineDirective l
+                ++ self#pLval () lv
+                ++ text (" --" ^ printInstrTerminator)
+
+        | BinOp((PlusA|PlusPI|IndexPI|MinusA|MinusPP|MinusPI|BAnd|BOr|BXor|
+          Mult|Div|Mod|Shiftlt|Shiftrt) as bop,
+                Lval(lv'),e,_) when Util.equals lv lv' ->
+                  self#pLineDirective l
+                    ++ self#pLval () lv
+                    ++ text " " ++ d_binop () bop
+                    ++ text "= "
+                    ++ self#pExp () e
+                    ++ text printInstrTerminator
+                    
+        | _ ->
+            self#pLineDirective l
+              ++ self#pLval () lv
+              ++ text " = "
+              ++ self#pExp () e
+              ++ text printInstrTerminator
+              
+    end
+      (* In cabs2cil we have turned the call to builtin_va_arg into a 
+       * three-argument call: the last argument is the address of the 
+       * destination *)
+    | Call(None, Lval(Var vi, NoOffset), [dest; SizeOf t; adest], l) 
+        when vi.vname = "__builtin_va_arg" && not !printCilAsIs -> 
+          let destlv = match stripCasts adest with 
+            AddrOf destlv -> destlv
+          | _ -> E.s (E.error "Encountered unexpected call to %s\n" vi.vname)
+          in
+          self#pLineDirective l
+	    ++ self#pLval () destlv ++ text " = "
+                   
+            (* Now the function name *)
+            ++ text "__builtin_va_arg"
+            ++ text "(" ++ (align
+                              (* Now the arguments *)
+                              ++ self#pExp () dest 
+                              ++ chr ',' ++ break 
+                              ++ self#pType None () t
+                              ++ unalign)
+            ++ text (")" ^ printInstrTerminator)
+
+      (* In cabs2cil we have dropped the last argument in the call to 
+       * __builtin_stdarg_start. *)
+    | Call(None, Lval(Var vi, NoOffset), [marker], l) 
+        when vi.vname = "__builtin_stdarg_start" && not !printCilAsIs -> begin
+          let last = self#getLastNamedArgument vi.vname in
+          self#pInstr () (Call(None,Lval(Var vi,NoOffset),[marker; last],l))
+        end
+
+      (* In cabs2cil we have dropped the last argument in the call to 
+       * __builtin_next_arg. *)
+    | Call(res, Lval(Var vi, NoOffset), [ ], l) 
+        when vi.vname = "__builtin_next_arg" && not !printCilAsIs -> begin
+          let last = self#getLastNamedArgument vi.vname in
+          self#pInstr () (Call(res,Lval(Var vi,NoOffset),[last],l))
+        end
+
+      (* In cparser we have turned the call to 
+       * __builtin_types_compatible_p(t1, t2) into 
+       * __builtin_types_compatible_p(sizeof t1, sizeof t2), so that we can
+       * represent the types as expressions. 
+       * Remove the sizeofs when printing. *)
+    | Call(dest, Lval(Var vi, NoOffset), [SizeOf t1; SizeOf t2], l) 
+        when vi.vname = "__builtin_types_compatible_p" && not !printCilAsIs -> 
+        self#pLineDirective l
+          (* Print the destination *)
+        ++ (match dest with
+              None -> nil
+            | Some lv -> self#pLval () lv ++ text " = ")
+          (* Now the call itself *)
+        ++ dprintf "%s(%a, %a)" vi.vname
+             (self#pType None) t1  (self#pType None) t2
+        ++ text printInstrTerminator
+    | Call(_, Lval(Var vi, NoOffset), _, l) 
+        when vi.vname = "__builtin_types_compatible_p" && not !printCilAsIs -> 
+        E.s (bug "__builtin_types_compatible_p: cabs2cil should have added sizeof to the arguments.")
+          
+    | Call(dest,e,args,l) ->
+        self#pLineDirective l
+          ++ (match dest with
+            None -> nil
+          | Some lv -> 
+              self#pLval () lv ++ text " = " ++
+                (* Maybe we need to print a cast *)
+                (let destt = typeOfLval lv in
+                match unrollType (typeOf e) with
+                  TFun (rt, _, _, _) 
+                      when not (Util.equals (!pTypeSig rt)
+                                            (!pTypeSig destt)) ->
+                    text "(" ++ self#pType None () destt ++ text ")"
+                | _ -> nil))
+          (* Now the function name *)
+          ++ (let ed = self#pExp () e in
+              match e with 
+                Lval(Var _, _) -> ed
+              | _ -> text "(" ++ ed ++ text ")")
+          ++ text "(" ++ 
+          (align
+             (* Now the arguments *)
+             ++ (docList ~sep:(chr ',' ++ break) 
+                   (self#pExp ()) () args)
+             ++ unalign)
+        ++ text (")" ^ printInstrTerminator)
+
+    | Asm(attrs, tmpls, outs, ins, clobs, l) ->
+        if !msvcMode then
+          self#pLineDirective l
+            ++ text "__asm {"
+            ++ (align
+                  ++ (docList ~sep:line text () tmpls)
+                  ++ unalign)
+            ++ text ("}" ^ printInstrTerminator)
+        else
+          self#pLineDirective l
+            ++ text ("__asm__ ") 
+            ++ self#pAttrs () attrs 
+            ++ text " ("
+            ++ (align
+                  ++ (docList ~sep:line
+                        (fun x -> text ("\"" ^ escape_string x ^ "\""))
+                        () tmpls)
+                  ++
+                  (if outs = [] && ins = [] && clobs = [] then
+                    chr ':'
+                else
+                  (text ": "
+                     ++ (docList ~sep:(chr ',' ++ break)
+                           (fun (c, lv) ->
+                             text ("\"" ^ escape_string c ^ "\" (")
+                               ++ self#pLval () lv
+                               ++ text ")") () outs)))
+                ++
+                  (if ins = [] && clobs = [] then
+                    nil
+                  else
+                    (text ": "
+                       ++ (docList ~sep:(chr ',' ++ break)
+                             (fun (c, e) ->
+                               text ("\"" ^ escape_string c ^ "\" (")
+                                 ++ self#pExp () e
+                                 ++ text ")") () ins)))
+                  ++
+                  (if clobs = [] then nil
+                  else
+                    (text ": "
+                       ++ (docList ~sep:(chr ',' ++ break)
+                             (fun c -> text ("\"" ^ escape_string c ^ "\""))
+                             ()
+                             clobs)))
+                  ++ unalign)
+            ++ text (")" ^ printInstrTerminator)
+            
+
+  (**** STATEMENTS ****)
+  method pStmt () (s:stmt) =        (* control-flow statement *)
+    self#pStmtNext invalidStmt () s
+
+  method dStmt (out: out_channel) (ind: int) (s:stmt) : unit = 
+    fprint out !lineLength (indent ind (self#pStmt () s))
+
+  method dBlock (out: out_channel) (ind: int) (b:block) : unit = 
+    fprint out !lineLength (indent ind (align ++ self#pBlock () b))
+
+  method private pStmtNext (next: stmt) () (s: stmt) =
+    (* print the labels *)
+    ((docList ~sep:line (fun l -> self#pLabel () l)) () s.labels)
+      (* print the statement itself. If the labels are non-empty and the
+      * statement is empty, print a semicolon  *)
+      ++ 
+      (if s.skind = Instr [] && s.labels <> [] then
+        text ";"
+      else
+        (if s.labels <> [] then line else nil) 
+          ++ self#pStmtKind next () s.skind)
+
+  method private pLabel () = function
+      Label (s, _, true) -> text (s ^ ": ")
+    | Label (s, _, false) -> text (s ^ ": /* CIL Label */ ")
+    | Case (e, _) -> text "case " ++ self#pExp () e ++ text ": "
+    | Default _ -> text "default: "
+
+  (* The pBlock will put the unalign itself *)
+  method pBlock () (blk: block) = 
+    let rec dofirst () = function
+        [] -> nil
+      | [x] -> self#pStmtNext invalidStmt () x
+      | x :: rest -> dorest nil x rest
+    and dorest acc prev = function
+        [] -> acc ++ (self#pStmtNext invalidStmt () prev)
+      | x :: rest -> 
+          dorest (acc ++ (self#pStmtNext x () prev) ++ line)
+            x rest
+    in
+    (* Let the host of the block decide on the alignment. The d_block will 
+     * pop the alignment as well  *)
+    text "{" 
+      ++ 
+      (if blk.battrs <> [] then 
+        self#pAttrsGen true blk.battrs
+      else nil)
+      ++ line
+      ++ (dofirst () blk.bstmts)
+      ++ unalign ++ line ++ text "}"
+
+  
+  (* Store here the name of the last file printed in a line number. This is 
+   * private to the object *)
+  val mutable lastFileName = ""
+  (* Make sure that you only call self#pLineDirective on an empty line *)
+  method pLineDirective ?(forcefile=false) l = 
+    currentLoc := l;
+    match !lineDirectiveStyle with
+    | Some style when l.line > 0 ->
+	let directive =
+	  match style with
+	  | LineComment -> text "//#line "
+	  | LinePreprocessorOutput when not !msvcMode -> chr '#'
+	  | _ -> text "#line"
+	in
+	let filename =
+          if forcefile || l.file <> lastFileName then
+	    begin
+	      lastFileName <- l.file;
+	      text " \"" ++ text l.file ++ text "\""
+            end
+	  else
+	    nil
+	in
+	leftflush ++ directive ++ chr ' ' ++ num l.line ++ filename ++ line
+    | _ ->
+	nil
+
+
+  method private pStmtKind (next: stmt) () = function
+      Return(None, l) ->
+        self#pLineDirective l
+          ++ text "return;"
+
+    | Return(Some e, l) ->
+        self#pLineDirective l
+          ++ text "return ("
+          ++ self#pExp () e
+          ++ text ");"
+          
+    | Goto (sref, l) -> begin
+        (* Grab one of the labels *)
+        let rec pickLabel = function
+            [] -> None
+          | Label (l, _, _) :: _ -> Some l
+          | _ :: rest -> pickLabel rest
+        in
+        match pickLabel !sref.labels with
+          Some l -> text ("goto " ^ l ^ ";")
+        | None -> 
+            ignore (error "Cannot find label for target of goto\n");
+            text "goto __invalid_label;"
+    end
+
+    | Break l ->
+        self#pLineDirective l
+          ++ text "break;"
+
+    | Continue l -> 
+        self#pLineDirective l
+          ++ text "continue;"
+
+    | Instr il ->
+        align
+          ++ (docList ~sep:line (fun i -> self#pInstr () i) () il)
+          ++ unalign
+
+    | If(be,t,{bstmts=[];battrs=[]},l) when not !printCilAsIs ->
+        self#pLineDirective l
+          ++ text "if"
+          ++ (align
+                ++ text " ("
+                ++ self#pExp () be
+                ++ text ") "
+                ++ self#pBlock () t)
+          
+    | If(be,t,{bstmts=[{skind=Goto(gref,_);labels=[]}];
+                battrs=[]},l)
+     when !gref == next && not !printCilAsIs ->
+       self#pLineDirective l
+         ++ text "if"
+         ++ (align
+               ++ text " ("
+               ++ self#pExp () be
+               ++ text ") "
+               ++ self#pBlock () t)
+
+    | If(be,{bstmts=[];battrs=[]},e,l) when not !printCilAsIs ->
+        self#pLineDirective l
+          ++ text "if"
+          ++ (align
+                ++ text " ("
+                ++ self#pExp () (UnOp(LNot,be,intType))
+                ++ text ") "
+                ++ self#pBlock () e)
+
+    | If(be,{bstmts=[{skind=Goto(gref,_);labels=[]}];
+           battrs=[]},e,l)
+      when !gref == next && not !printCilAsIs ->
+        self#pLineDirective l
+          ++ text "if"
+          ++ (align
+                ++ text " ("
+                ++ self#pExp () (UnOp(LNot,be,intType))
+                ++ text ") "
+                ++ self#pBlock () e)
+          
+    | If(be,t,e,l) ->
+        self#pLineDirective l
+          ++ (align
+                ++ text "if"
+                ++ (align
+                      ++ text " ("
+                      ++ self#pExp () be
+                      ++ text ") "
+                      ++ self#pBlock () t)
+                ++ text " "   (* sm: indent next code 2 spaces (was 4) *)
+                ++ (align
+                      ++ text "else "
+                      ++ self#pBlock () e)
+          ++ unalign)
+          
+    | Switch(e,b,_,l) ->
+        self#pLineDirective l
+          ++ (align
+                ++ text "switch ("
+                ++ self#pExp () e
+                ++ text ") "
+                ++ self#pBlock () b)
+
+(*
+    | Loop(b, l, _, _) -> begin
+        (* Maybe the first thing is a conditional. Turn it into a WHILE *)
+        try
+          let term, bodystmts =
+            let rec skipEmpty = function
+                [] -> []
+              | {skind=Instr [];labels=[]} :: rest -> skipEmpty rest
+              | x -> x
+            in
+            (* Bill McCloskey: Do not remove the If if it has labels *)
+            match skipEmpty b.bstmts with
+              {skind=If(e,tb,fb,_); labels=[]} :: rest 
+                                              when not !printCilAsIs -> begin
+                match skipEmpty tb.bstmts, skipEmpty fb.bstmts with
+                  [], {skind=Break _; labels=[]} :: _  -> e, rest
+                | {skind=Break _; labels=[]} :: _, [] 
+                                     -> UnOp(LNot, e, intType), rest
+                | _ -> raise Not_found
+              end
+            | _ -> raise Not_found
+          in
+          self#pLineDirective l
+            ++ text "wh"
+            ++ (align
+                  ++ text "ile ("
+                  ++ self#pExp () term
+                  ++ text ") "
+                  ++ self#pBlock () {bstmts=bodystmts; battrs=b.battrs})
+
+        with Not_found ->
+          self#pLineDirective l
+            ++ text "wh"
+            ++ (align
+                  ++ text "ile (1) "
+                  ++ self#pBlock () b)
+    end
+*)
+
+    | While (e, b, l) ->
+        self#pLineDirective l
+          ++ (align
+                ++ text "while ("
+                ++ self#pExp () e
+                ++ text ") "
+                ++ self#pBlock () b)
+
+    | DoWhile (e, b, l) ->
+        self#pLineDirective l
+          ++ (align
+                ++ text "do "
+                ++ self#pBlock () b
+                ++ text " while ("
+                ++ self#pExp () e
+                ++ text ");")
+
+    | For (bInit, e, bIter, b, l) ->
+	ignore (E.warn
+		  "in for loops, the 1st and 3rd expressions are not printed");
+          self#pLineDirective l
+            ++ (align
+                  ++ text "for ("
+                  ++ text "/* ??? */"   (* self#pBlock () bInit *)
+                  ++ text "; "
+                  ++ self#pExp () e
+                  ++ text "; "
+                  ++ text "/* ??? */"   (* self#pBlock() bIter *)
+                  ++ text ") "
+                  ++ self#pBlock () b)
+
+    | Block b -> align ++ self#pBlock () b
+      
+    | TryFinally (b, h, l) -> 
+        self#pLineDirective l 
+          ++ text "__try "
+          ++ align 
+          ++ self#pBlock () b
+          ++ text " __fin" ++ align ++ text "ally "
+          ++ self#pBlock () h
+
+    | TryExcept (b, (il, e), h, l) -> 
+        self#pLineDirective l 
+          ++ text "__try "
+          ++ align 
+          ++ self#pBlock () b
+          ++ text " __e" ++ align ++ text "xcept(" ++ line
+          ++ align
+          (* Print the instructions but with a comma at the end, instead of 
+           * semicolon *)
+          ++ (printInstrTerminator <- ","; 
+              let res = 
+                (docList ~sep:line (self#pInstr ())
+                   () il) 
+              in
+              printInstrTerminator <- ";";
+              res)
+          ++ self#pExp () e
+          ++ text ") " ++ unalign
+          ++ self#pBlock () h
+
+
+  (*** GLOBALS ***)
+  method pGlobal () (g:global) : doc =       (* global (vars, types, etc.) *)
+    match g with 
+    | GFun (fundec, l) ->
+        (* If the function has attributes then print a prototype because 
+        * GCC cannot accept function attributes in a definition *)
+        let oldattr = fundec.svar.vattr in
+        (* Always pring the file name before function declarations *)
+        let proto = 
+          if oldattr <> [] then 
+            (self#pLineDirective l) ++ (self#pVDecl () fundec.svar) 
+              ++ chr ';' ++ line 
+          else nil in
+        (* Temporarily remove the function attributes *)
+        fundec.svar.vattr <- [];
+        let body = (self#pLineDirective ~forcefile:true l) 
+                      ++ (self#pFunDecl () fundec) in
+        fundec.svar.vattr <- oldattr;
+        proto ++ body ++ line
+          
+    | GType (typ, l) ->
+        self#pLineDirective ~forcefile:true l ++
+          text "typedef "
+          ++ (self#pType (Some (text typ.tname)) () typ.ttype)
+          ++ text ";\n"
+
+    | GEnumTag (enum, l) ->
+        self#pLineDirective l ++
+          text "enum" ++ align ++ text (" " ^ enum.ename) ++
+          text " {" ++ line
+          ++ (docList ~sep:(chr ',' ++ line)
+                (fun (n,i, loc) -> 
+                  text (n ^ " = ") 
+                    ++ self#pExp () i)
+                () enum.eitems)
+          ++ unalign ++ line ++ text "} " 
+          ++ self#pAttrs () enum.eattr ++ text";\n"
+
+    | GEnumTagDecl (enum, l) -> (* This is a declaration of a tag *)
+        self#pLineDirective l ++
+          text ("enum " ^ enum.ename ^ ";\n")
+
+    | GCompTag (comp, l) -> (* This is a definition of a tag *)
+        let n = comp.cname in
+        let su, su1, su2 =
+          if comp.cstruct then "struct", "str", "uct"
+          else "union",  "uni", "on"
+        in
+        let sto_mod, rest_attr = separateStorageModifiers comp.cattr in
+        self#pLineDirective ~forcefile:true l ++
+          text su1 ++ (align ++ text su2 ++ chr ' ' ++ (self#pAttrs () sto_mod)
+                         ++ text n
+                         ++ text " {" ++ line
+                         ++ ((docList ~sep:line (self#pFieldDecl ())) () 
+                               comp.cfields)
+                         ++ unalign)
+          ++ line ++ text "}" ++
+          (self#pAttrs () rest_attr) ++ text ";\n"
+
+    | GCompTagDecl (comp, l) -> (* This is a declaration of a tag *)
+        self#pLineDirective l ++
+          text (compFullName comp) ++ text ";\n"
+
+    | GVar (vi, io, l) ->
+        self#pLineDirective ~forcefile:true l ++
+          self#pVDecl () vi
+          ++ chr ' '
+          ++ (match io.init with
+            None -> nil
+          | Some i -> text " = " ++ 
+                (let islong = 
+                  match i with
+                    CompoundInit (_, il) when List.length il >= 8 -> true
+                  | _ -> false 
+                in
+                if islong then 
+                  line ++ self#pLineDirective l ++ text "  " 
+                else nil) ++
+                (self#pInit () i))
+          ++ text ";\n"
+      
+    (* print global variable 'extern' declarations, and function prototypes *)    
+    | GVarDecl (vi, l) ->
+        self#pLineDirective l ++
+          (self#pVDecl () vi)
+          ++ text ";\n"
+
+    | GAsm (s, l) ->
+        self#pLineDirective l ++
+          text ("__asm__(\"" ^ escape_string s ^ "\");\n")
+
+    | GPragma (Attr(an, args), l) ->
+        (* sm: suppress printing pragmas that gcc does not understand *)
+        (* assume anything starting with "ccured" is ours *)
+        (* also don't print the 'combiner' pragma *)
+        (* nor 'cilnoremove' *)
+        let suppress =
+          not !print_CIL_Input && 
+          not !msvcMode &&
+          ((startsWith "box" an) ||
+           (startsWith "ccured" an) ||
+           (an = "merger") ||
+           (an = "cilnoremove")) in
+        let d =
+	  match an, args with
+	  | _, [] ->
+              text an
+	  | "weak", [ACons (symbol, [])] ->
+	      text "weak " ++ text symbol
+	  | _ ->
+            text (an ^ "(")
+              ++ docList ~sep:(chr ',') (self#pAttrParam ()) () args
+              ++ text ")"
+        in
+        self#pLineDirective l 
+          ++ (if suppress then text "/* " else text "")
+          ++ (text "#pragma ")
+          ++ d
+          ++ (if suppress then text " */\n" else text "\n")
+
+    | GText s  -> 
+        if s <> "//" then 
+          text s ++ text "\n"
+        else
+          nil
+
+
+   method dGlobal (out: out_channel) (g: global) : unit = 
+     (* For all except functions and variable with initializers, use the 
+      * pGlobal *)
+     match g with 
+       GFun (fdec, l) -> 
+         (* If the function has attributes then print a prototype because 
+          * GCC cannot accept function attributes in a definition *)
+         let oldattr = fdec.svar.vattr in
+         let proto = 
+           if oldattr <> [] then 
+             (self#pLineDirective l) ++ (self#pVDecl () fdec.svar) 
+               ++ chr ';' ++ line
+           else nil in
+         fprint out !lineLength
+           (proto ++ (self#pLineDirective ~forcefile:true l));
+         (* Temporarily remove the function attributes *)
+         fdec.svar.vattr <- [];
+         fprint out !lineLength (self#pFunDecl () fdec);               
+         fdec.svar.vattr <- oldattr;
+         output_string out "\n"
+
+     | GVar (vi, {init = Some i}, l) -> begin
+         fprint out !lineLength 
+           (self#pLineDirective ~forcefile:true l ++
+              self#pVDecl () vi
+              ++ text " = " 
+              ++ (let islong = 
+                match i with
+                  CompoundInit (_, il) when List.length il >= 8 -> true
+                | _ -> false 
+              in
+              if islong then 
+                line ++ self#pLineDirective l ++ text "  " 
+              else nil)); 
+         self#dInit out 3 i;
+         output_string out ";\n"
+     end
+
+     | g -> fprint out !lineLength (self#pGlobal () g)
+
+   method pFieldDecl () fi = 
+     (self#pType
+        (Some (text (if fi.fname = missingFieldName then "" else fi.fname)))
+        () 
+        fi.ftype)
+       ++ text " "
+       ++ (match fi.fbitfield with None -> nil 
+       | Some i -> text ": " ++ num i ++ text " ")
+       ++ self#pAttrs () fi.fattr
+       ++ text ";"
+       
+  method private pFunDecl () f =
+      self#pVDecl () f.svar
+      ++  line
+      ++ text "{ "
+      ++ (align
+            (* locals. *)
+            ++ (docList ~sep:line (fun vi -> self#pVDecl () vi ++ text ";") 
+                  () f.slocals)
+            ++ line ++ line
+            (* the body *)
+            ++ ((* remember the declaration *) currentFormals <- f.sformals; 
+                let body = self#pBlock () f.sbody in
+                currentFormals <- [];
+                body))
+      ++ line
+      ++ text "}"
+
+  (***** PRINTING DECLARATIONS and TYPES ****)
+    
+  method pType (nameOpt: doc option) (* Whether we are declaring a name or 
+                                      * we are just printing a type *)
+               () (t:typ) =       (* use of some type *)
+    let name = match nameOpt with None -> nil | Some d -> d in
+    let printAttributes (a: attributes) = 
+      let pa = self#pAttrs () a in
+      match nameOpt with 
+      | None when not !print_CIL_Input && not !msvcMode -> 
+          (* Cannot print the attributes in this case because gcc does not 
+           * like them here, except if we are printing for CIL, or for MSVC. 
+           * In fact, for MSVC we MUST print attributes such as __stdcall *)
+          if pa = nil then nil else 
+          text "/*" ++ pa ++ text "*/"
+      | _ -> pa
+    in
+    match t with 
+      TVoid a ->
+        text "void"
+          ++ self#pAttrs () a 
+          ++ text " " 
+          ++ name
+
+    | TInt (ikind,a) -> 
+        d_ikind () ikind 
+          ++ self#pAttrs () a 
+          ++ text " "
+          ++ name
+
+    | TFloat(fkind, a) -> 
+        d_fkind () fkind 
+          ++ self#pAttrs () a 
+          ++ text " " 
+          ++ name
+
+    | TComp (comp, a) -> (* A reference to a struct *)
+        let su = if comp.cstruct then "struct" else "union" in
+        text (su ^ " " ^ comp.cname ^ " ") 
+          ++ self#pAttrs () a 
+          ++ name
+          
+    | TEnum (enum, a) -> 
+        text ("enum " ^ enum.ename ^ " ")
+          ++ self#pAttrs () a 
+          ++ name
+    | TPtr (bt, a)  -> 
+        (* Parenthesize the ( * attr name) if a pointer to a function or an 
+         * array. However, on MSVC the __stdcall modifier must appear right 
+         * before the pointer constructor "(__stdcall *f)". We push them into 
+         * the parenthesis. *)
+        let (paren: doc option), (bt': typ) = 
+          match bt with 
+            TFun(rt, args, isva, fa) when !msvcMode -> 
+              let an, af', at = partitionAttributes ~default:AttrType fa in
+              (* We take the af' and we put them into the parentheses *)
+              Some (text "(" ++ printAttributes af'), 
+              TFun(rt, args, isva, addAttributes an at)
+
+          | TFun _ | TArray _ -> Some (text "("), bt
+
+          | _ -> None, bt
+        in
+        let name' = text "*" ++ printAttributes a ++ name in
+        let name'' = (* Put the parenthesis *)
+          match paren with 
+            Some p -> p ++ name' ++ text ")" 
+          | _ -> name' 
+        in
+        self#pType 
+          (Some name'')
+          () 
+          bt'
+
+    | TArray (elemt, lo, a) -> 
+        (* ignore the const attribute for arrays *)
+        let a' = dropAttributes [ "const" ] a in 
+        let name' = 
+          if a' == [] then name else
+          if nameOpt == None then printAttributes a' else 
+          text "(" ++ printAttributes a' ++ name ++ text ")" 
+        in
+        self#pType 
+          (Some (name'
+                   ++ text "[" 
+                   ++ (match lo with None -> nil | Some e -> self#pExp () e)
+                   ++ text "]"))
+          ()
+          elemt
+          
+    | TFun (restyp, args, isvararg, a) -> 
+        let name' = 
+          if a == [] then name else 
+          if nameOpt == None then printAttributes a else
+          text "(" ++ printAttributes a ++ name ++ text ")" 
+        in
+        self#pType 
+          (Some
+             (name'
+                ++ text "("
+                ++ (align 
+                      ++ 
+                      (if args = Some [] && isvararg then 
+                        text "..."
+                      else
+                        (if args = None then nil 
+                        else if args = Some [] then text "void"
+                        else 
+                          let pArg (aname, atype, aattr) = 
+                            let stom, rest = separateStorageModifiers aattr in
+                            (* First the storage modifiers *)
+                            (self#pAttrs () stom)
+                              ++ (self#pType (Some (text aname)) () atype)
+                              ++ text " "
+                              ++ self#pAttrs () rest
+                          in
+                          (docList ~sep:(chr ',' ++ break) pArg) () 
+                            (argsToList args))
+                          ++ (if isvararg then break ++ text ", ..." else nil))
+                      ++ unalign)
+                ++ text ")"))
+          ()
+          restyp
+
+  | TNamed (t, a) ->
+      text t.tname ++ self#pAttrs () a ++ text " " ++ name
+
+  | TBuiltin_va_list a -> 
+      text "__builtin_va_list"
+       ++ self#pAttrs () a 
+        ++ text " " 
+        ++ name
+
+
+  (**** PRINTING ATTRIBUTES *********)
+  method pAttrs () (a: attributes) = 
+    self#pAttrsGen false a
+
+
+  (* Print one attribute. Return also an indication whether this attribute 
+   * should be printed inside the __attribute__ list *)
+  method pAttr (Attr(an, args): attribute) : doc * bool =
+    (* Recognize and take care of some known cases *)
+    match an, args with 
+      "const", [] -> text "const", false
+          (* Put the aconst inside the attribute list *)
+    | "aconst", [] when not !msvcMode -> text "__const__", true
+    | "thread", [] when not !msvcMode -> text "__thread", false
+(*
+    | "used", [] when not !msvcMode -> text "__attribute_used__", false 
+*)
+    | "volatile", [] -> text "volatile", false
+    | "restrict", [] -> text "__restrict", false
+    | "missingproto", [] -> text "/* missing proto */", false
+    | "cdecl", [] when !msvcMode -> text "__cdecl", false
+    | "stdcall", [] when !msvcMode -> text "__stdcall", false
+    | "fastcall", [] when !msvcMode -> text "__fastcall", false
+    | "declspec", args when !msvcMode -> 
+        text "__declspec(" 
+          ++ docList (self#pAttrParam ()) () args
+          ++ text ")", false
+    | "w64", [] when !msvcMode -> text "__w64", false
+    | "asm", args -> 
+        text "__asm__(" 
+          ++ docList (self#pAttrParam ()) () args
+          ++ text ")", false
+    (* we suppress printing mode(__si__) because it triggers an *)
+    (* internal compiler error in all current gcc versions *)
+    (* sm: I've now encountered a problem with mode(__hi__)... *)
+    (* I don't know what's going on, but let's try disabling all "mode"..*)
+    | "mode", [ACons(tag,[])] -> 
+        text "/* mode(" ++ text tag ++ text ") */", false
+
+    (* sm: also suppress "format" because we seem to print it in *)
+    (* a way gcc does not like *)
+    | "format", _ -> text "/* format attribute */", false
+
+    (* sm: here's another one I don't want to see gcc warnings about.. *)
+    | "mayPointToStack", _ when not !print_CIL_Input 
+    (* [matth: may be inside another comment.]
+      -> text "/*mayPointToStack*/", false 
+    *)
+      -> text "", false
+
+    | _ -> (* This is the dafault case *)
+        (* Add underscores to the name *)
+        let an' = if !msvcMode then "__" ^ an else "__" ^ an ^ "__" in
+        if args = [] then 
+          text an', true
+        else
+          text (an' ^ "(") 
+            ++ (docList (self#pAttrParam ()) () args)
+            ++ text ")", 
+          true
+
+  method pAttrParam () = function 
+    | AInt n -> num n
+    | AStr s -> text ("\"" ^ escape_string s ^ "\"")
+    | ACons(s, []) -> text s
+    | ACons(s,al) ->
+        text (s ^ "(")
+          ++ (docList (self#pAttrParam ()) () al)
+          ++ text ")"
+    | ASizeOfE a -> text "sizeof(" ++ self#pAttrParam () a ++ text ")"
+    | ASizeOf t -> text "sizeof(" ++ self#pType None () t ++ text ")"
+    | ASizeOfS ts -> text "sizeof(<typsig>)"
+    | AAlignOfE a -> text "__alignof__(" ++ self#pAttrParam () a ++ text ")"
+    | AAlignOf t -> text "__alignof__(" ++ self#pType None () t ++ text ")"
+    | AAlignOfS ts -> text "__alignof__(<typsig>)"
+    | AUnOp(u,a1) -> 
+        (d_unop () u) ++ text " (" ++ (self#pAttrParam () a1) ++ text ")"
+
+    | ABinOp(b,a1,a2) -> 
+        align 
+          ++ text "(" 
+          ++ (self#pAttrParam () a1)
+          ++ text ") "
+          ++ (d_binop () b)
+          ++ break 
+          ++ text " (" ++ (self#pAttrParam () a2) ++ text ") "
+          ++ unalign
+    | ADot (ap, s) -> (self#pAttrParam () ap) ++ text ("." ^ s)
+          
+  (* A general way of printing lists of attributes *)
+  method private pAttrsGen (block: bool) (a: attributes) = 
+    (* Scan all the attributes and separate those that must be printed inside 
+     * the __attribute__ list *)
+    let rec loop (in__attr__: doc list) = function
+        [] -> begin 
+          match in__attr__ with
+            [] -> nil
+          | _ :: _->
+              (* sm: added 'forgcc' calls to not comment things out
+               * if CIL is the consumer; this is to address a case
+               * Daniel ran into where blockattribute(nobox) was being
+               * dropped by the merger
+               *)
+              (if block then 
+                text (" " ^ (forgcc "/*") ^ " __blockattribute__(")
+               else
+                 text "__attribute__((")
+
+                ++ (docList ~sep:(chr ',' ++ break)
+                      (fun a -> a)) () in__attr__
+                ++ text ")"
+                ++ (if block then text (forgcc "*/") else text ")")
+        end
+      | x :: rest -> 
+          let dx, ina = self#pAttr x in
+          if ina then 
+            loop (dx :: in__attr__) rest
+          else
+            dx ++ text " " ++ loop in__attr__ rest
+    in
+    let res = loop [] a in
+    if res = nil then
+      res
+    else
+      text " " ++ res ++ text " "
+
+end (* class defaultCilPrinterClass *)
+
+let defaultCilPrinter = new defaultCilPrinterClass
+
+(* Top-level printing functions *)
+let printType (pp: cilPrinter) () (t: typ) : doc = 
+  pp#pType None () t
+  
+let printExp (pp: cilPrinter) () (e: exp) : doc = 
+  pp#pExp () e
+
+let printLval (pp: cilPrinter) () (lv: lval) : doc = 
+  pp#pLval () lv
+
+let printGlobal (pp: cilPrinter) () (g: global) : doc = 
+  pp#pGlobal () g
+
+let dumpGlobal (pp: cilPrinter) (out: out_channel) (g: global) : unit = 
+  pp#dGlobal out g
+
+let printAttr (pp: cilPrinter) () (a: attribute) : doc = 
+  let ad, _ = pp#pAttr a in ad
+
+let printAttrs (pp: cilPrinter) () (a: attributes) : doc = 
+  pp#pAttrs () a
+
+let printInstr (pp: cilPrinter) () (i: instr) : doc = 
+  pp#pInstr () i
+
+let printStmt (pp: cilPrinter) () (s: stmt) : doc = 
+  pp#pStmt () s
+
+let printBlock (pp: cilPrinter) () (b: block) : doc = 
+  (* We must add the alignment ourselves, beucase pBlock will pop it *)
+  align ++ pp#pBlock () b
+
+let dumpStmt (pp: cilPrinter) (out: out_channel) (ind: int) (s: stmt) : unit = 
+  pp#dStmt out ind s
+
+let dumpBlock (pp: cilPrinter) (out: out_channel) (ind: int) (b: block) : unit = 
+  pp#dBlock out ind b
+
+let printInit (pp: cilPrinter) () (i: init) : doc = 
+  pp#pInit () i
+
+let dumpInit (pp: cilPrinter) (out: out_channel) (ind: int) (i: init) : unit = 
+  pp#dInit out ind i
+
+(* Now define some short cuts *)
+let d_exp () e = printExp defaultCilPrinter () e
+let _ = pd_exp := d_exp
+let d_lval () lv = printLval defaultCilPrinter () lv
+let d_offset base () off = defaultCilPrinter#pOffset base off
+let d_init () i = printInit defaultCilPrinter () i
+let d_type () t = printType defaultCilPrinter () t
+let d_global () g = printGlobal defaultCilPrinter () g
+let d_attrlist () a = printAttrs defaultCilPrinter () a 
+let d_attr () a = printAttr defaultCilPrinter () a
+let d_attrparam () e = defaultCilPrinter#pAttrParam () e
+let d_label () l = defaultCilPrinter#pLabel () l
+let d_stmt () s = printStmt defaultCilPrinter () s
+let d_block () b = printBlock defaultCilPrinter () b
+let d_instr () i = printInstr defaultCilPrinter () i
+
+let d_shortglobal () = function
+    GPragma (Attr(an, _), _) -> dprintf "#pragma %s" an
+  | GType (ti, _) -> dprintf "typedef %s" ti.tname
+  | GVarDecl (vi, _) -> dprintf "declaration of %s" vi.vname
+  | GVar (vi, _, _) -> dprintf "definition of %s" vi.vname
+  | GCompTag(ci,_) -> dprintf "definition of %s" (compFullName ci)
+  | GCompTagDecl(ci,_) -> dprintf "declaration of %s" (compFullName ci)
+  | GEnumTag(ei,_) -> dprintf "definition of enum %s" ei.ename
+  | GEnumTagDecl(ei,_) -> dprintf "declaration of enum %s" ei.ename
+  | GFun(fd, _) -> dprintf "definition of %s" fd.svar.vname
+  | GText _ -> text "GText"
+  | GAsm _ -> text "GAsm"
+
+
+(* sm: given an ordinary CIL object printer, yield one which
+ * behaves the same, except it never prints #line directives
+ * (this is useful for debugging printfs) *)
+let dn_obj (func: unit -> 'a -> doc) : (unit -> 'a -> doc) =
+begin
+  (* construct the closure to return *)
+  let theFunc () (obj:'a) : doc =
+  begin
+    let prevStyle = !lineDirectiveStyle in
+    lineDirectiveStyle := None;
+    let ret = (func () obj) in    (* call underlying printer *)
+    lineDirectiveStyle := prevStyle;
+    ret
+  end in
+  theFunc
+end
+
+(* now define shortcuts for the non-location-printing versions,
+ * with the naming prefix "dn_" *)
+let dn_exp       = (dn_obj d_exp)
+let dn_lval      = (dn_obj d_lval)
+(* dn_offset is missing because it has a different interface *)
+let dn_init      = (dn_obj d_init)
+let dn_type      = (dn_obj d_type)
+let dn_global    = (dn_obj d_global)
+let dn_attrlist  = (dn_obj d_attrlist)
+let dn_attr      = (dn_obj d_attr)
+let dn_attrparam = (dn_obj d_attrparam)
+let dn_stmt      = (dn_obj d_stmt)
+let dn_instr     = (dn_obj d_instr)
+
+
+(* Now define a cilPlainPrinter *)
+class plainCilPrinterClass =
+  (* We keep track of the composite types that we have done to avoid
+   * recursion *)
+  let donecomps : (int, unit) H.t = H.create 13 in
+  object (self)
+
+  inherit defaultCilPrinterClass as super
+  
+  (*** PLAIN TYPES ***)
+  method pType (dn: doc option) () (t: typ) = 
+    match dn with 
+      None -> self#pOnlyType () t
+    | Some d -> d ++ text " : " ++ self#pOnlyType () t
+
+ method private pOnlyType () = function 
+     TVoid a -> dprintf "TVoid(@[%a@])" self#pAttrs a
+   | TInt(ikind, a) -> dprintf "TInt(@[%a,@?%a@])" 
+         d_ikind ikind self#pAttrs a
+   | TFloat(fkind, a) -> 
+       dprintf "TFloat(@[%a,@?%a@])" d_fkind fkind self#pAttrs a
+   | TNamed (t, a) ->
+       dprintf "TNamed(@[%s,@?%a,@?%a@])" 
+         t.tname self#pOnlyType t.ttype self#pAttrs a
+   | TPtr(t, a) -> dprintf "TPtr(@[%a,@?%a@])" self#pOnlyType t self#pAttrs a
+   | TArray(t,l,a) -> 
+       let dl = match l with 
+         None -> text "None" | Some l -> dprintf "Some(@[%a@])" self#pExp l in
+       dprintf "TArray(@[%a,@?%a,@?%a@])" 
+         self#pOnlyType t insert dl self#pAttrs a
+   | TEnum(enum,a) -> dprintf "Enum(%s,@[%a@])" enum.ename self#pAttrs a
+   | TFun(tr,args,isva,a) -> 
+       dprintf "TFun(@[%a,@?%a%s,@?%a@])"
+         self#pOnlyType tr 
+         insert 
+         (if args = None then text "None"
+         else (docList ~sep:(chr ',' ++ break) 
+                 (fun (an,at,aa) -> 
+                   dprintf "%s: %a" an self#pOnlyType at)) 
+             () 
+             (argsToList args))
+         (if isva then "..." else "") self#pAttrs a
+   | TComp (comp, a) -> 
+       if H.mem donecomps comp.ckey then 
+         dprintf "TCompLoop(%s %s, _, %a)" 
+           (if comp.cstruct then "struct" else "union") comp.cname 
+           self#pAttrs comp.cattr
+       else begin
+         H.add donecomps comp.ckey (); (* Add it before we do the fields *)
+         dprintf "TComp(@[%s %s,@?%a,@?%a,@?%a@])" 
+           (if comp.cstruct then "struct" else "union") comp.cname
+           (docList ~sep:(chr ',' ++ break) 
+              (fun f -> dprintf "%s : %a" f.fname self#pOnlyType f.ftype)) 
+           comp.cfields
+           self#pAttrs comp.cattr
+           self#pAttrs a
+       end
+   | TBuiltin_va_list a -> 
+       dprintf "TBuiltin_va_list(%a)" self#pAttrs a
+
+    
+  (* Some plain pretty-printers. Unlike the above these expose all the 
+   * details of the internal representation *)
+  method pExp () = function
+    Const(c) -> 
+      let d_plainconst () c = 
+        match c with
+          CInt64(i, ik, so) -> 
+            dprintf "Int64(%s,%a,%s)" 
+              (Int64.format "%d" i)
+              d_ikind ik
+              (match so with Some s -> s | _ -> "None")
+        | CStr(s) -> 
+            text ("CStr(\"" ^ escape_string s ^ "\")")
+        | CWStr(s) -> 
+            dprintf "CWStr(%a)" d_const c
+              
+        | CChr(c) -> text ("CChr('" ^ escape_char c ^ "')")
+        | CReal(f, fk, so) -> 
+            dprintf "CReal(%f, %a, %s)" 
+              f
+              d_fkind fk 
+              (match so with Some s -> s | _ -> "None")
+        | CEnum(_, s, _) -> text s
+      in
+      text "Const(" ++ d_plainconst () c ++ text ")"
+
+
+  | Lval(lv) -> 
+      text "Lval(" 
+        ++ (align
+              ++ self#pLval () lv
+              ++ unalign)
+        ++ text ")"
+        
+  | CastE(t,e) -> dprintf "CastE(@[%a,@?%a@])" self#pOnlyType t self#pExp e
+
+  | UnOp(u,e1,_) -> 
+      dprintf "UnOp(@[%a,@?%a@])"
+        d_unop u self#pExp e1
+          
+  | BinOp(b,e1,e2,_) -> 
+      let d_plainbinop () b =
+        match b with
+          PlusA -> text "PlusA"
+        | PlusPI -> text "PlusPI"
+        | IndexPI -> text "IndexPI"
+        | MinusA -> text "MinusA"
+        | MinusPP -> text "MinusPP"
+        | MinusPI -> text "MinusPI"
+        | _ -> d_binop () b
+      in
+      dprintf "%a(@[%a,@?%a@])" d_plainbinop b
+        self#pExp e1 self#pExp e2
+
+  | SizeOf (t) -> 
+      text "sizeof(" ++ self#pType None () t ++ chr ')'
+  | SizeOfE (e) -> 
+      text "sizeofE(" ++ self#pExp () e ++ chr ')'
+  | SizeOfStr (s) -> 
+      text "sizeofStr(" ++ d_const () (CStr s) ++ chr ')'
+  | AlignOf (t) -> 
+      text "__alignof__(" ++ self#pType None () t ++ chr ')'
+  | AlignOfE (e) -> 
+      text "__alignof__(" ++ self#pExp () e ++ chr ')'
+
+  | StartOf lv -> dprintf "StartOf(%a)" self#pLval lv
+  | AddrOf (lv) -> dprintf "AddrOf(%a)" self#pLval lv
+
+
+
+  method private d_plainoffset () = function
+      NoOffset -> text "NoOffset"
+    | Field(fi,o) -> 
+        dprintf "Field(@[%s:%a,@?%a@])" 
+          fi.fname self#pOnlyType fi.ftype self#d_plainoffset o
+     | Index(e, o) -> 
+         dprintf "Index(@[%a,@?%a@])" self#pExp e self#d_plainoffset o
+
+  method pInit () = function
+      SingleInit e -> dprintf "SI(%a)" d_exp e
+    | CompoundInit (t, initl) -> 
+        let d_plainoneinit (o, i) = 
+          self#d_plainoffset () o ++ text " = " ++ self#pInit () i
+        in
+        dprintf "CI(@[%a,@?%a@])" self#pOnlyType t
+          (docList ~sep:(chr ',' ++ break) d_plainoneinit) initl
+(*
+    | ArrayInit (t, len, initl) -> 
+        let idx = ref (- 1) in
+        let d_plainoneinit i = 
+          incr idx;
+          text "[" ++ num !idx ++ text "] = " ++ self#pInit () i
+        in
+        dprintf "AI(@[%a,%d,@?%a@])" self#pOnlyType t len
+          (docList ~sep:(chr ',' ++ break) d_plainoneinit) initl
+*)           
+  method pLval () (lv: lval) =  
+    match lv with 
+    | Var vi, o -> dprintf "Var(@[%s,@?%a@])" vi.vname self#d_plainoffset o
+    | Mem e, o -> dprintf "Mem(@[%a,@?%a@])" self#pExp e self#d_plainoffset o
+
+
+end
+let plainCilPrinter = new plainCilPrinterClass
+
+(* And now some shortcuts *)
+let d_plainexp () e = plainCilPrinter#pExp () e
+let d_plaintype () t = plainCilPrinter#pType None () t
+let d_plaininit () i = plainCilPrinter#pInit () i
+let d_plainlval () l = plainCilPrinter#pLval () l
+
+(* zra: this allows pretty printers not in cil.ml to
+   be exposed to cilmain.ml *)
+let printerForMaincil = ref defaultCilPrinter
+
+let rec d_typsig () = function
+    TSArray (ts, eo, al) -> 
+      dprintf "TSArray(@[%a,@?%a,@?%a@])" 
+        d_typsig ts 
+        insert (text (match eo with None -> "None" 
+                       | Some e -> "Some " ^ Int64.to_string e))
+        d_attrlist al
+  | TSPtr (ts, al) -> 
+      dprintf "TSPtr(@[%a,@?%a@])"
+        d_typsig ts d_attrlist al
+  | TSComp (iss, name, al) -> 
+      dprintf "TSComp(@[%s %s,@?%a@])"
+        (if iss then "struct" else "union") name
+        d_attrlist al
+  | TSFun (rt, args, isva, al) -> 
+      dprintf "TSFun(@[%a,@?%a,%b,@?%a@])"
+        d_typsig rt
+        (docList ~sep:(chr ',' ++ break) (d_typsig ())) args isva
+        d_attrlist al
+  | TSEnum (n, al) -> 
+      dprintf "TSEnum(@[%s,@?%a@])"
+        n d_attrlist al
+  | TSBase t -> dprintf "TSBase(%a)" d_type t
+
+
+let newVID () = 
+  let t = !nextGlobalVID in 
+  incr nextGlobalVID;
+  t
+
+   (* Make a varinfo. Used mostly as a helper function below  *)
+let makeVarinfo global name typ =
+  (* Strip const from type for locals *)
+  let vi = 
+    { vname = name;
+      vid   = newVID ();
+      vglob = global;
+      vtype = if global then typ else typeRemoveAttributes ["const"] typ;
+      vdecl = lu;
+      vinline = false;
+      vattr = [];
+      vstorage = NoStorage;
+      vaddrof = false;
+      vreferenced = false;    (* sm *)
+    } in
+  vi
+      
+let copyVarinfo (vi: varinfo) (newname: string) : varinfo = 
+  let vi' = {vi with vname = newname; vid = newVID () } in
+  vi'
+
+let makeLocal fdec name typ = (* a helper function *)
+  fdec.smaxid <- 1 + fdec.smaxid;
+  let vi = makeVarinfo false name typ in
+  vi
+  
+   (* Make a local variable and add it to a function *)
+let makeLocalVar fdec ?(insert = true) name typ =
+  let vi = makeLocal fdec name typ in
+  if insert then fdec.slocals <- fdec.slocals @ [vi];
+  vi
+
+
+let makeTempVar fdec ?(name = "__cil_tmp") typ : varinfo =
+  let name = name ^ (string_of_int (1 + fdec.smaxid)) in
+  makeLocalVar fdec name typ
+
+ 
+  (* Set the formals and re-create the function name based on the information*)
+let setFormals (f: fundec) (forms: varinfo list) = 
+  f.sformals <- forms; (* Set the formals *)
+  match unrollType f.svar.vtype with
+    TFun(rt, _, isva, fa) -> 
+      f.svar.vtype <- 
+         TFun(rt, 
+              Some (List.map (fun a -> (a.vname, a.vtype, a.vattr)) forms), 
+              isva, fa)
+  | _ -> E.s (E.bug "Set formals. %s does not have function type\n"
+                f.svar.vname)
+    
+   (* Set the types of arguments and results as given by the function type 
+    * passed as the second argument *)
+let setFunctionType (f: fundec) (t: typ) = 
+  match unrollType t with
+    TFun (rt, Some args, va, a) -> 
+      if List.length f.sformals <> List.length args then 
+        E.s (E.bug "setFunctionType: number of arguments differs from the number of formals");
+      (* Change the function type. *)
+      f.svar.vtype <- t; 
+      (* Change the sformals and we know that indirectly we'll change the 
+       * function type *)
+      List.iter2 
+        (fun (an,at,aa) f -> 
+          f.vtype <- at; f.vattr <- aa) 
+        args f.sformals
+
+  | _ -> E.s (E.bug "setFunctionType: not a function type")
+      
+
+   (* Set the types of arguments and results as given by the function type 
+    * passed as the second argument *)
+let setFunctionTypeMakeFormals (f: fundec) (t: typ) = 
+  match unrollType t with
+    TFun (rt, Some args, va, a) -> 
+      if f.sformals <> [] then 
+        E.s (E.warn "setFunctionTypMakeFormals called on function %s with some formals already"
+               f.svar.vname);
+      (* Change the function type. *)
+      f.svar.vtype <- t; 
+      f.sformals <- [];
+      
+      f.sformals <- List.map (fun (n,t,a) -> makeLocal f n t) args;
+
+      setFunctionType f t
+
+  | _ -> E.s (E.bug "setFunctionTypeMakeFormals: not a function type: %a"
+             d_type t)
+      
+
+let setMaxId (f: fundec) = 
+  f.smaxid <- List.length f.sformals + List.length f.slocals
+
+  
+  (* Make a formal variable for a function. Insert it in both the sformals 
+   * and the type of the function. You can optionally specify where to insert 
+   * this one. If where = "^" then it is inserted first. If where = "$" then 
+   * it is inserted last. Otherwise where must be the name of a formal after 
+   * which to insert this. By default it is inserted at the end. *)
+let makeFormalVar fdec ?(where = "$") name typ : varinfo = 
+  (* Search for the insertion place *)
+  let thenewone = ref fdec.svar in (* Just a placeholder *)
+  let makeit () : varinfo = 
+    let vi = makeLocal fdec name typ in
+    thenewone := vi;
+    vi
+  in
+  let rec loopFormals = function
+      [] -> 
+        if where = "$" then [makeit ()]
+        else E.s (E.error "makeFormalVar: cannot find insert-after formal %s"
+                    where)
+    | f :: rest when f.vname = where -> f :: makeit () :: rest
+    | f :: rest -> f :: loopFormals rest
+  in
+  let newformals = 
+    if where = "^" then makeit () :: fdec.sformals else 
+    loopFormals fdec.sformals in
+  setFormals fdec newformals;
+  !thenewone
+
+   (* Make a global variable. Your responsibility to make sure that the name
+    * is unique *)
+let makeGlobalVar name typ =
+  let vi = makeVarinfo true name typ in
+  vi
+
+
+   (* Make an empty function *)
+let emptyFunction name = 
+  { svar  = makeGlobalVar name (TFun(voidType, Some [], false,[]));
+    smaxid = 0;
+    slocals = [];
+    sformals = [];
+    sbody = mkBlock [];
+    smaxstmtid = None;
+    sallstmts = [];
+  } 
+
+
+
+    (* A dummy function declaration handy for initialization *)
+let dummyFunDec = emptyFunction "@dummy"
+let dummyFile = 
+  { globals = [];
+    fileName = "<dummy>";
+    globinit = None;
+    globinitcalled = false;}
+
+let saveBinaryFile (cil_file : file) (filename : string) =
+  let outchan = open_out_bin filename in
+  Marshal.to_channel outchan cil_file [] ;
+  close_out outchan 
+
+let saveBinaryFileChannel (cil_file : file) (outchan : out_channel) =
+  Marshal.to_channel outchan cil_file [] 
+
+let loadBinaryFile (filename : string) : file = 
+  let inchan = open_in_bin filename in
+  let cil_file = (Marshal.from_channel inchan : file) in
+  close_in inchan ;
+  cil_file
+
+
+(* Take the name of a file and make a valid symbol name out of it. There are 
+ * a few chanracters that are not valid in symbols *)
+let makeValidSymbolName (s: string) = 
+  let s = String.copy s in (* So that we can update in place *)
+  let l = String.length s in
+  for i = 0 to l - 1 do
+    let c = String.get s i in
+    let isinvalid = 
+      match c with
+        '-' | '.' -> true
+      | _ -> false
+    in
+    if isinvalid then 
+      String.set s i '_';
+  done;
+  s
+
+
+(*** Define the visiting engine ****)
+(* visit all the nodes in a Cil expression *)
+let doVisit (vis: cilVisitor)
+            (startvisit: 'a -> 'a visitAction) 
+            (children: cilVisitor -> 'a -> 'a) 
+            (node: 'a) : 'a = 
+  let action = startvisit node in
+  match action with
+    SkipChildren -> node
+  | ChangeTo node' -> node'
+  | _ -> (* DoChildren and ChangeDoChildrenPost *)
+      let nodepre = match action with
+        ChangeDoChildrenPost (node', _) -> node'
+      | _ -> node
+      in
+      let nodepost = children vis nodepre in
+      match action with
+        ChangeDoChildrenPost (_, f) -> f nodepost
+      | _ -> nodepost
+
+(* mapNoCopy is like map but avoid copying the list if the function does not 
+ * change the elements. *)
+let rec mapNoCopy (f: 'a -> 'a) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let i' = f i in
+      let resti' = mapNoCopy f resti in
+      if i' != i || resti' != resti then i' :: resti' else li 
+
+let rec mapNoCopyList (f: 'a -> 'a list) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let il' = f i in
+      let resti' = mapNoCopyList f resti in
+      match il' with
+        [i'] when i' == i && resti' == resti -> li
+      | _ -> il' @ resti'
+
+(* A visitor for lists *)
+let doVisitList  (vis: cilVisitor)
+                 (startvisit: 'a -> 'a list visitAction)
+                 (children: cilVisitor -> 'a -> 'a)
+                 (node: 'a) : 'a list = 
+  let action = startvisit node in
+  match action with
+    SkipChildren -> [node]
+  | ChangeTo nodes' -> nodes'
+  | _ -> 
+      let nodespre = match action with
+        ChangeDoChildrenPost (nodespre, _) -> nodespre
+      | _ -> [node]
+      in
+      let nodespost = mapNoCopy (children vis) nodespre in
+      match action with
+        ChangeDoChildrenPost (_, f) -> f nodespost
+      | _ -> nodespost
+  
+let debugVisit = false
+
+let rec visitCilExpr (vis: cilVisitor) (e: exp) : exp = 
+  doVisit vis vis#vexpr childrenExp e
+and childrenExp (vis: cilVisitor) (e: exp) : exp = 
+  let vExp e = visitCilExpr vis e in
+  let vTyp t = visitCilType vis t in
+  let vLval lv = visitCilLval vis lv in
+  match e with
+  | Const (CEnum(v, s, ei)) -> 
+      let v' = vExp v in 
+      if v' != v then Const (CEnum(v', s, ei)) else e
+
+  | Const _ -> e
+  | SizeOf t -> 
+      let t'= vTyp t in 
+      if t' != t then SizeOf t' else e
+  | SizeOfE e1 -> 
+      let e1' = vExp e1 in
+      if e1' != e1 then SizeOfE e1' else e
+  | SizeOfStr s -> e
+
+  | AlignOf t -> 
+      let t' = vTyp t in
+      if t' != t then AlignOf t' else e
+  | AlignOfE e1 -> 
+      let e1' = vExp e1 in
+      if e1' != e1 then AlignOfE e1' else e
+  | Lval lv -> 
+      let lv' = vLval lv in
+      if lv' != lv then Lval lv' else e
+  | UnOp (uo, e1, t) -> 
+      let e1' = vExp e1 in let t' = vTyp t in
+      if e1' != e1 || t' != t then UnOp(uo, e1', t') else e
+  | BinOp (bo, e1, e2, t) -> 
+      let e1' = vExp e1 in let e2' = vExp e2 in let t' = vTyp t in
+      if e1' != e1 || e2' != e2 || t' != t then BinOp(bo, e1',e2',t') else e
+  | CastE (t, e1) ->           
+      let t' = vTyp t in let e1' = vExp e1 in
+      if t' != t || e1' != e1 then CastE(t', e1') else e
+  | AddrOf lv -> 
+      let lv' = vLval lv in
+      if lv' != lv then AddrOf lv' else e
+  | StartOf lv -> 
+      let lv' = vLval lv in
+      if lv' != lv then StartOf lv' else e
+
+and visitCilInit (vis: cilVisitor) (i: init) : init = 
+  doVisit vis vis#vinit childrenInit i
+and childrenInit (vis: cilVisitor) (i: init) : init = 
+  let fExp e = visitCilExpr vis e in
+  let fInit i = visitCilInit vis i in
+  let fTyp t = visitCilType vis t in
+  match i with
+  | SingleInit e -> 
+      let e' = fExp e in
+      if e' != e then SingleInit e' else i
+  | CompoundInit (t, initl) ->
+      let t' = fTyp t in
+      (* Collect the new initializer list, in reverse. We prefer two 
+       * traversals to ensure tail-recursion. *)
+      let newinitl : (offset * init) list ref = ref [] in
+      (* Keep track whether the list has changed *)
+      let hasChanged = ref false in
+      let doOneInit ((o, i) as oi) = 
+        let o' = visitCilInitOffset vis o in    (* use initializer version *)
+        let i' = fInit i in
+        let newio = 
+          if o' != o || i' != i then 
+            begin hasChanged := true; (o', i') end else oi 
+        in
+        newinitl := newio :: !newinitl
+      in
+      List.iter doOneInit initl;
+      let initl' = if !hasChanged then List.rev !newinitl else initl in
+      if t' != t || initl' != initl then CompoundInit (t', initl') else i
+  
+and visitCilLval (vis: cilVisitor) (lv: lval) : lval =
+  doVisit vis vis#vlval childrenLval lv
+and childrenLval (vis: cilVisitor) (lv: lval) : lval =  
+  (* and visit its subexpressions *)
+  let vExp e = visitCilExpr vis e in
+  let vOff off = visitCilOffset vis off in
+  match lv with
+    Var v, off ->
+      let v'   = doVisit vis vis#vvrbl (fun _ x -> x) v in
+      let off' = vOff off in
+      if v' != v || off' != off then Var v', off' else lv
+  | Mem e, off -> 
+      let e' = vExp e in
+      let off' = vOff off in
+      if e' != e || off' != off then Mem e', off' else lv
+
+and visitCilOffset (vis: cilVisitor) (off: offset) : offset =
+  doVisit vis vis#voffs childrenOffset off
+and childrenOffset (vis: cilVisitor) (off: offset) : offset =
+  let vOff off = visitCilOffset vis off in
+  match off with
+    Field (f, o) -> 
+      let o' = vOff o in
+      if o' != o then Field (f, o') else off
+  | Index (e, o) -> 
+      let e' = visitCilExpr vis e in
+      let o' = vOff o in
+      if e' != e || o' != o then Index (e', o') else off
+  | NoOffset -> off
+
+(* sm: for offsets in initializers, the 'startvisit' will be the
+ * vinitoffs method, but we can re-use the childrenOffset from
+ * above since recursive offsets are visited by voffs.  (this point
+ * is moot according to cil.mli which claims the offsets in 
+ * initializers will never recursively contain offsets)
+ *)
+and visitCilInitOffset (vis: cilVisitor) (off: offset) : offset =
+  doVisit vis vis#vinitoffs childrenOffset off
+
+and visitCilInstr (vis: cilVisitor) (i: instr) : instr list =
+  let oldloc = !currentLoc in
+  currentLoc := (get_instrLoc i);
+  assertEmptyQueue vis;
+  let res = doVisitList vis vis#vinst childrenInstr i in
+  currentLoc := oldloc;
+  (* See if we have accumulated some instructions *)
+  vis#unqueueInstr () @ res
+
+and childrenInstr (vis: cilVisitor) (i: instr) : instr =
+  let fExp = visitCilExpr vis in
+  let fLval = visitCilLval vis in
+  match i with
+  | Set(lv,e,l) -> 
+      let lv' = fLval lv in let e' = fExp e in
+      if lv' != lv || e' != e then Set(lv',e',l) else i
+  | Call(None,f,args,l) -> 
+      let f' = fExp f in let args' = mapNoCopy fExp args in
+      if f' != f || args' != args then Call(None,f',args',l) else i
+  | Call(Some lv,fn,args,l) -> 
+      let lv' = fLval lv in let fn' = fExp fn in 
+      let args' = mapNoCopy fExp args in
+      if lv' != lv || fn' != fn || args' != args 
+      then Call(Some lv', fn', args', l) else i
+
+  | Asm(sl,isvol,outs,ins,clobs,l) -> 
+      let outs' = mapNoCopy (fun ((s,lv) as pair) -> 
+                               let lv' = fLval lv in
+                               if lv' != lv then (s,lv') else pair) outs in
+      let ins'  = mapNoCopy (fun ((s,e) as pair) -> 
+                               let e' = fExp e in
+                               if e' != e then (s,e') else pair) ins in
+      if outs' != outs || ins' != ins then
+        Asm(sl,isvol,outs',ins',clobs,l) else i
+
+
+(* visit all nodes in a Cil statement tree in preorder *)
+and visitCilStmt (vis: cilVisitor) (s: stmt) : stmt =
+  let oldloc = !currentLoc in
+  currentLoc := (get_stmtLoc s.skind) ;
+  assertEmptyQueue vis;
+  let toPrepend : instr list ref = ref [] in (* childrenStmt may add to this *)
+  let res = doVisit vis vis#vstmt (childrenStmt toPrepend) s in
+  (* Now see if we have saved some instructions *)
+  toPrepend := !toPrepend @ vis#unqueueInstr ();
+  (match !toPrepend with 
+    [] -> () (* Return the same statement *)
+  | _ -> 
+      (* Make our statement contain the instructions to prepend *)
+      res.skind <- Block { battrs = []; bstmts = [ mkStmt (Instr !toPrepend);
+                                                   mkStmt res.skind ] });
+  currentLoc := oldloc;
+  res
+  
+and childrenStmt (toPrepend: instr list ref) (vis:cilVisitor) (s:stmt): stmt =
+  let fExp e = (visitCilExpr vis e) in
+  let fBlock b = visitCilBlock vis b in
+  let fInst i = visitCilInstr vis i in
+  (* Just change the statement kind *)
+  let skind' = 
+    match s.skind with
+      Break _ | Continue _ | Goto _ | Return (None, _) -> s.skind
+    | Return (Some e, l) -> 
+        let e' = fExp e in
+        if e' != e then Return (Some e', l) else s.skind
+(*
+    | Loop (b, l, s1, s2) -> 
+        let b' = fBlock b in
+        if b' != b then Loop (b', l, s1, s2) else s.skind
+*)
+    | While (e, b, l) ->
+	let e' = fExp e in 
+        let b' = fBlock b in
+          if e' != e || b' != b then While (e', b', l) else s.skind
+    | DoWhile (e, b, l) ->
+	let b' = fBlock b in
+        let e' = fExp e in 
+          if e' != e || b' != b then DoWhile (e', b', l) else s.skind
+    | For (bInit, e, bIter, b, l) -> 
+	let bInit' = fBlock bInit in
+	let e' = fExp e in
+	let bIter' = fBlock bIter in
+	let b' = fBlock b in
+	  if bInit' != bInit || e' != e || bIter' != bIter || b' != b then
+	    For (bInit', e', bIter', b', l) else s.skind
+    | If(e, s1, s2, l) -> 
+        let e' = fExp e in 
+        (*if e queued any instructions, pop them here and remember them so that
+          they are inserted before the If stmt, not in the then block. *)
+        toPrepend := vis#unqueueInstr (); 
+        let s1'= fBlock s1 in let s2'= fBlock s2 in
+        (* the stmts in the blocks should have cleaned up after themselves.*)
+        assertEmptyQueue vis;
+        if e' != e || s1' != s1 || s2' != s2 then 
+          If(e', s1', s2', l) else s.skind
+    | Switch (e, b, stmts, l) -> 
+        let e' = fExp e in 
+        toPrepend := vis#unqueueInstr (); (* insert these before the switch *)
+        let b' = fBlock b in
+        (* the stmts in b should have cleaned up after themselves.*)
+        assertEmptyQueue vis;
+        (* Don't do stmts, but we better not change those *)
+        if e' != e || b' != b then Switch (e', b', stmts, l) else s.skind
+    | Instr il -> 
+        let il' = mapNoCopyList fInst il in
+        if il' != il then Instr il' else s.skind
+    | Block b -> 
+        let b' = fBlock b in 
+        if b' != b then Block b' else s.skind
+    | TryFinally (b, h, l) -> 
+        let b' = fBlock b in
+        let h' = fBlock h in
+        if b' != b || h' != h then TryFinally(b', h', l) else s.skind
+    | TryExcept (b, (il, e), h, l) -> 
+        let b' = fBlock b in
+        assertEmptyQueue vis;
+        (* visit the instructions *)
+        let il' = mapNoCopyList fInst il in
+        (* Visit the expression *)
+        let e' = fExp e in
+        let il'' = 
+          let more = vis#unqueueInstr () in
+          if more != [] then 
+            il' @ more
+          else
+            il'
+        in
+        let h' = fBlock h in
+        (* Now collect the instructions *)
+        if b' != b || il'' != il || e' != e || h' != h then 
+          TryExcept(b', (il'', e'), h', l) 
+        else s.skind
+  in
+  if skind' != s.skind then s.skind <- skind';
+  (* Visit the labels *)
+  let labels' = 
+    let fLabel = function
+        Case (e, l) as lb -> 
+          let e' = fExp e in
+          if e' != e then Case (e', l) else lb
+        | lb -> lb
+    in
+    mapNoCopy fLabel s.labels
+  in
+  if labels' != s.labels then s.labels <- labels';
+  s
+      
+    
+ 
+and visitCilBlock (vis: cilVisitor) (b: block) : block = 
+  doVisit vis vis#vblock childrenBlock b
+and childrenBlock (vis: cilVisitor) (b: block) : block = 
+  let fStmt s = visitCilStmt vis s in
+  let stmts' = mapNoCopy fStmt b.bstmts in
+  if stmts' != b.bstmts then { battrs = b.battrs; bstmts = stmts'} else b
+
+
+and visitCilType (vis : cilVisitor) (t : typ) : typ =
+  doVisit vis vis#vtype childrenType t
+and childrenType (vis : cilVisitor) (t : typ) : typ =
+  (* look for types referred to inside t's definition *)
+  let fTyp t  = visitCilType vis t in
+  let fAttr a = visitCilAttributes vis a in
+  match t with
+    TPtr(t1, a) -> 
+      let t1' = fTyp t1 in
+      let a' = fAttr a in
+      if t1' != t || a' != a then TPtr(t1', a') else t
+  | TArray(t1, None, a) -> 
+      let t1' = fTyp t1 in
+      let a' = fAttr a in
+      if t1' != t || a' != a  then TArray(t1', None, a') else t
+  | TArray(t1, Some e, a) -> 
+      let t1' = fTyp t1 in
+      let e' = visitCilExpr vis e in
+      let a' = fAttr a in
+      if t1' != t || e' != e  || a' != a then TArray(t1', Some e', a') else t
+
+      (* DON'T recurse into the compinfo, this is done in visitCilGlobal.
+	 User can iterate over cinfo.cfields manually, if desired.*)
+  | TComp(cinfo, a) ->
+      let a' = fAttr a in
+      if a != a' then TComp(cinfo, a') else t
+
+  | TFun(rettype, args, isva, a) -> 
+      let rettype' = fTyp rettype in
+      (* iterate over formals, as variable declarations *)
+      let argslist = argsToList args in
+      let visitArg ((an,at,aa) as arg) = 
+        let at' = fTyp at in
+        let aa' = fAttr aa in
+        if at' != at || aa' != aa then (an,at',aa') else arg
+      in
+      let argslist' = mapNoCopy visitArg argslist in
+      let a' = fAttr a in
+      if rettype' != rettype || argslist' != argslist || a' != a  then 
+        let args' = if argslist' == argslist then args else Some argslist' in
+        TFun(rettype', args', isva, a') else t
+
+  | TNamed(t1, a) -> (* Do not go into the type. Will do it at the time of 
+                      * GType *)
+      let a' = fAttr a in
+      if a' != a  then TNamed (t1, a') else t
+
+  | _ ->  (* other types (TVoid, TInt, TFloat, TEnum, and TBuiltin_va_list)
+             don't contain nested types, but they do have attributes. *)
+      let a = typeAttrs t in
+      let a' = fAttr a in
+      if a' != a  then setTypeAttrs t a' else t
+      
+
+(* for declarations, we visit the types inside; but for uses, *)
+(* we just visit the varinfo node *)
+and visitCilVarDecl (vis : cilVisitor) (v : varinfo) : varinfo =
+  doVisit vis vis#vvdec childrenVarDecl v 
+and childrenVarDecl (vis : cilVisitor) (v : varinfo) : varinfo =
+  v.vtype <- visitCilType vis v.vtype;
+  v.vattr <- visitCilAttributes vis v.vattr;  
+  v
+
+and visitCilAttributes (vis: cilVisitor) (al: attribute list) : attribute list=
+   let al' = 
+     mapNoCopyList (doVisitList vis vis#vattr childrenAttribute) al in
+   if al' != al then 
+     (* Must re-sort *)
+     addAttributes al' []
+   else
+     al
+and childrenAttribute (vis: cilVisitor) (a: attribute) : attribute = 
+  let fAttrP a = visitCilAttrParams vis a in
+  match a with 
+    Attr (n, args) -> 
+      let args' = mapNoCopy fAttrP args in
+      if args' != args then Attr(n, args') else a
+      
+
+and visitCilAttrParams (vis: cilVisitor) (a: attrparam) : attrparam =
+   doVisit vis vis#vattrparam childrenAttrparam a
+and childrenAttrparam (vis: cilVisitor) (aa: attrparam) : attrparam = 
+  let fTyp t  = visitCilType vis t in
+  let fAttrP a = visitCilAttrParams vis a in
+  match aa with 
+      AInt _ | AStr _ -> aa
+    | ACons(n, args) -> 
+        let args' = mapNoCopy fAttrP args in
+        if args' != args then ACons(n, args') else aa
+    | ASizeOf t -> 
+        let t' = fTyp t in
+        if t' != t then ASizeOf t' else aa
+    | ASizeOfE e -> 
+        let e' = fAttrP e in
+        if e' != e then ASizeOfE e' else aa
+    | AAlignOf t -> 
+        let t' = fTyp t in
+        if t' != t then AAlignOf t' else aa
+    | AAlignOfE e -> 
+        let e' = fAttrP e in
+        if e' != e then AAlignOfE e' else aa
+    | ASizeOfS _ | AAlignOfS _ ->
+        ignore (warn "Visitor inside of a type signature.");
+        aa
+    | AUnOp (uo, e1) -> 
+        let e1' = fAttrP e1 in
+        if e1' != e1 then AUnOp (uo, e1') else aa
+    | ABinOp (bo, e1, e2) -> 
+        let e1' = fAttrP e1 in
+        let e2' = fAttrP e2 in
+        if e1' != e1 || e2' != e2 then ABinOp (bo, e1', e2') else aa
+    | ADot (ap, s) ->
+        let ap' = fAttrP ap in
+        if ap' != ap then ADot (ap', s) else aa
+ 
+
+let rec visitCilFunction (vis : cilVisitor) (f : fundec) : fundec =
+  if debugVisit then ignore (E.log "Visiting function %s\n" f.svar.vname);
+  assertEmptyQueue vis;
+  let f = doVisit vis vis#vfunc childrenFunction f in
+
+  let toPrepend = vis#unqueueInstr () in
+  if toPrepend <> [] then 
+    f.sbody.bstmts <- mkStmt (Instr toPrepend) :: f.sbody.bstmts;
+  f
+
+and childrenFunction (vis : cilVisitor) (f : fundec) : fundec =
+  f.svar <- visitCilVarDecl vis f.svar; (* hit the function name *)
+  (* visit local declarations *)
+  f.slocals <- mapNoCopy (visitCilVarDecl vis) f.slocals;
+  (* visit the formals *)
+  let newformals = mapNoCopy (visitCilVarDecl vis) f.sformals in
+  (* Make sure the type reflects the formals *)
+  setFormals f newformals;
+  (* Remember any new instructions that were generated while visiting
+     variable declarations. *)
+  let toPrepend = vis#unqueueInstr () in
+
+  f.sbody <- visitCilBlock vis f.sbody;        (* visit the body *)
+  if toPrepend <> [] then 
+    f.sbody.bstmts <- mkStmt (Instr toPrepend) :: f.sbody.bstmts;
+  f
+
+let rec visitCilGlobal (vis: cilVisitor) (g: global) : global list =
+  (*(trace "visit" (dprintf "visitCilGlobal\n"));*)
+  let oldloc = !currentLoc in
+  currentLoc := (get_globalLoc g) ;
+  currentGlobal := g;
+  let res = doVisitList vis vis#vglob childrenGlobal g in
+  currentLoc := oldloc;
+  res
+and childrenGlobal (vis: cilVisitor) (g: global) : global =
+  match g with
+  | GFun (f, l) -> 
+      let f' = visitCilFunction vis f in
+      if f' != f then GFun (f', l) else g
+  | GType(t, l) ->
+      t.ttype <- visitCilType vis t.ttype;
+      g
+
+  | GEnumTagDecl _ | GCompTagDecl _ -> g (* Nothing to visit *)
+  | GEnumTag (enum, _) ->
+      (trace "visit" (dprintf "visiting global enum %s\n" enum.ename));
+      (* Do the values and attributes of the enumerated items *)
+      let itemVisit (name, exp, loc) = (name, visitCilExpr vis exp, loc) in
+      enum.eitems <- mapNoCopy itemVisit enum.eitems;
+      enum.eattr <- visitCilAttributes vis enum.eattr;
+      g
+
+  | GCompTag (comp, _) ->
+      (trace "visit" (dprintf "visiting global comp %s\n" comp.cname));
+      (* Do the types and attirbutes of the fields *)
+      let fieldVisit = fun fi -> 
+        fi.ftype <- visitCilType vis fi.ftype;
+        fi.fattr <- visitCilAttributes vis fi.fattr
+      in
+      List.iter fieldVisit comp.cfields;
+      comp.cattr <- visitCilAttributes vis comp.cattr;
+      g
+
+  | GVarDecl(v, l) -> 
+      let v' = visitCilVarDecl vis v in
+      if v' != v then GVarDecl (v', l) else g
+  | GVar (v, inito, l) -> 
+      let v' = visitCilVarDecl vis v in
+      (match inito.init with
+        None -> ()
+      | Some i -> let i' = visitCilInit vis i in 
+        if i' != i then inito.init <- Some i');
+
+      if v' != v then GVar (v', inito, l) else g
+
+  | GPragma (a, l) -> begin
+      match visitCilAttributes vis [a] with
+        [a'] -> if a' != a then GPragma (a', l) else g
+      | _ -> E.s (E.unimp "visitCilAttributes returns more than one attribute")
+  end
+  | _ -> g
+
+
+(** A visitor that does constant folding. If "machdep" is true then we do 
+ * machine dependent simplification (e.g., sizeof) *)
+class constFoldVisitorClass (machdep: bool) : cilVisitor = object
+  inherit nopCilVisitor
+      
+  method vinst i = 
+    match i with 
+      (* Skip two functions to which we add Sizeof to the type arguments. 
+         See the comments for these above. *)
+      Call(_,(Lval (Var vi,NoOffset)),_,_) 
+        when ((vi.vname = "__builtin_va_arg") 
+              || (vi.vname = "__builtin_types_compatible_p")) ->
+          SkipChildren
+    | _ -> DoChildren
+  method vexpr (e: exp) = 
+    (* Do it bottom up *)
+    ChangeDoChildrenPost (e, constFold machdep)
+        
+end
+let constFoldVisitor (machdep: bool) = new constFoldVisitorClass machdep
+
+(* Iterate over all globals, including the global initializer *)
+let iterGlobals (fl: file)
+                (doone: global -> unit) : unit =
+  let doone' g = 
+      currentLoc := get_globalLoc g;
+      doone g
+  in
+  List.iter doone' fl.globals;
+  (match fl.globinit with
+    None -> ()
+  | Some g -> doone' (GFun(g, locUnknown)))
+
+(* Fold over all globals, including the global initializer *)
+let foldGlobals (fl: file) 
+                (doone: 'a -> global -> 'a) 
+                (acc: 'a) : 'a = 
+  let doone' acc g = 
+      currentLoc := get_globalLoc g;
+      doone acc g
+  in
+  let acc' = List.fold_left doone' acc fl.globals in
+  (match fl.globinit with
+    None -> acc'
+  | Some g -> doone' acc' (GFun(g, locUnknown)))
+
+
+(* A visitor for the whole file that does not change the globals *)
+let visitCilFileSameGlobals (vis : cilVisitor) (f : file) : unit =
+  let fGlob g = visitCilGlobal vis g in
+  iterGlobals f (fun g -> 
+    match fGlob g with 
+      [g'] when g' == g || Util.equals g' g -> () (* Try to do the pointer check first *)
+    | gl -> 
+        ignore (E.log "You used visitCilFilSameGlobals but the global got changed:\n %a\nchanged to %a\n" d_global g (docList ~sep:line (d_global ())) gl);
+        ())
+
+(* Be careful with visiting the whole file because it might be huge. *)
+let visitCilFile (vis : cilVisitor) (f : file) : unit =
+  let fGlob g = visitCilGlobal vis g in
+  (* Scan the globals. Make sure this is tail recursive. *)
+  let rec loop (acc: global list) = function
+      [] -> f.globals <- List.rev acc
+    | g :: restg -> 
+        loop ((List.rev (fGlob g)) @ acc) restg
+  in
+  loop [] f.globals;
+  (* the global initializer *)
+  (match f.globinit with
+    None -> ()
+  | Some g -> f.globinit <- Some (visitCilFunction vis g))
+
+
+
+(** Create or fetch the global initializer. Tries to put a call to in the the 
+ * function with the main_name *)
+let getGlobInit ?(main_name="main") (fl: file) = 
+  match fl.globinit with 
+    Some f -> f
+  | None -> begin
+      (* Sadly, we cannot use the Filename library because it does not like 
+       * function names with multiple . in them *)
+      let f = 
+        let len = String.length fl.fileName in
+        (* Find the last path separator and record the first . that we see, 
+        * going backwards *)
+        let lastDot = ref len in
+        let rec findLastPathSep i = 
+          if i < 0 then -1 else
+          let c = String.get fl.fileName i in
+          if c = '/' || c = '\\' then i
+          else begin
+            if c = '.' && !lastDot = len then 
+              lastDot := i;
+            findLastPathSep (i - 1)
+          end
+        in
+        let lastPathSep = findLastPathSep (len - 1) in
+        let basenoext = 
+          String.sub fl.fileName (lastPathSep + 1) (!lastDot - lastPathSep - 1) 
+        in
+        emptyFunction 
+          (makeValidSymbolName ("__globinit_" ^ basenoext))
+      in
+      fl.globinit <- Some f;
+      (* Now try to add a call to the global initialized at the beginning of 
+       * main *)
+      let inserted = ref false in
+      List.iter 
+        (fun g ->
+          match g with
+            GFun(m, lm) when m.svar.vname = main_name ->
+              (* Prepend a prototype to the global initializer *)
+              fl.globals <- GVarDecl (f.svar, lm) :: fl.globals;
+              m.sbody.bstmts <- 
+                 compactStmts (mkStmt (Instr [Call(None, 
+                                                   Lval(var f.svar), 
+                                                   [], locUnknown)]) 
+                               :: m.sbody.bstmts);
+              inserted := true;
+              if !E.verboseFlag then
+                ignore (E.log "Inserted the globinit\n");
+              fl.globinitcalled <- true;
+          | _ -> ())
+        fl.globals;
+
+      if not !inserted then 
+        ignore (E.warn "Cannot find %s to add global initializer %s" 
+                  main_name f.svar.vname);
+      
+      f
+  end
+  
+
+      
+(* Fold over all globals, including the global initializer *)
+let mapGlobals (fl: file) 
+               (doone: global -> global) : unit = 
+  fl.globals <- List.map doone fl.globals;
+  (match fl.globinit with
+    None -> ()
+  | Some g -> begin
+      match doone (GFun(g, locUnknown)) with
+        GFun(g', _) -> fl.globinit <- Some g'
+      | _ -> E.s (E.bug "mapGlobals: globinit is not a function")
+  end)
+
+
+
+let dumpFile (pp: cilPrinter) (out : out_channel) (outfile: string) file =
+  printDepth := 99999;  (* We don't want ... in the output *)
+  (* If we are in RELEASE mode then we do not print indentation *)
+
+  Pretty.fastMode := true;
+
+  if !E.verboseFlag then 
+    ignore (E.log "printing file %s\n" outfile);
+  let print x = fprint out 78 x in
+  print (text ("/* Generated by CIL v. " ^ cilVersion ^ " */\n" ^
+               (* sm: I want to easily tell whether the generated output
+                * is with print_CIL_Input or not *)
+               "/* print_CIL_Input is " ^ (if !print_CIL_Input then "true" else "false") ^ " */\n\n"));
+  iterGlobals file (fun g -> dumpGlobal pp out g);
+    
+  (* sm: we have to flush the output channel; if we don't then under *)
+  (* some circumstances (I haven't figure out exactly when, but it happens *)
+  (* more often with big inputs), we get a truncated output file *)
+  flush out
+
+
+
+(******************
+ ******************
+ ******************)
+
+
+
+(******************** OPTIMIZATIONS *****)
+let rec peepHole1 (* Process one statement and possibly replace it *)
+                  (doone: instr -> instr list option)
+                  (* Scan a block and recurse inside nested blocks *)
+                  (ss: stmt list) : unit = 
+  let rec doInstrList (il: instr list) : instr list = 
+    match il with 
+      [] -> []
+    | i :: rest -> begin
+        match doone i with
+          None -> i :: doInstrList rest
+        | Some sl -> doInstrList (sl @ rest)
+    end
+  in
+    
+  List.iter 
+    (fun s -> 
+      match s.skind with
+        Instr il -> s.skind <- Instr (doInstrList il)
+      | If (e, tb, eb, _) -> 
+          peepHole1 doone tb.bstmts;
+          peepHole1 doone eb.bstmts
+      | Switch (e, b, _, _) -> peepHole1 doone b.bstmts
+(*
+      | Loop (b, l, _, _) -> peepHole1 doone b.bstmts
+*)
+      | While (_, b, _) -> peepHole1 doone b.bstmts
+      | DoWhile (_, b, _) -> peepHole1 doone b.bstmts
+      | For (bInit, _, bIter, b, _) ->
+	  peepHole1 doone bInit.bstmts;
+	  peepHole1 doone bIter.bstmts;
+	  peepHole1 doone b.bstmts
+      | Block b -> peepHole1 doone b.bstmts
+      | TryFinally (b, h, l) -> 
+          peepHole1 doone b.bstmts; 
+          peepHole1 doone h.bstmts
+      | TryExcept (b, (il, e), h, l) -> 
+          peepHole1 doone b.bstmts; 
+          peepHole1 doone h.bstmts;
+          s.skind <- TryExcept(b, (doInstrList il, e), h, l);
+      | Return _ | Goto _ | Break _ | Continue _ -> ())
+    ss
+
+let rec peepHole2  (* Process two statements and possibly replace them both *)
+                   (dotwo: instr * instr -> instr list option)
+                   (ss: stmt list) : unit = 
+  let rec doInstrList (il: instr list) : instr list = 
+    match il with 
+      [] -> []
+    | [i] -> [i]
+    | (i1 :: ((i2 :: rest) as rest2)) -> 
+        begin
+          match dotwo (i1,i2) with
+            None -> i1 :: doInstrList rest2
+          | Some sl -> doInstrList (sl @ rest)
+        end
+  in
+  List.iter 
+    (fun s -> 
+      match s.skind with
+        Instr il -> s.skind <- Instr (doInstrList il)
+      | If (e, tb, eb, _) -> 
+          peepHole2 dotwo tb.bstmts;
+          peepHole2 dotwo eb.bstmts
+      | Switch (e, b, _, _) -> peepHole2 dotwo b.bstmts
+(*
+      | Loop (b, l, _, _) -> peepHole2 dotwo b.bstmts
+*)
+      | While (_, b, _) -> peepHole2 dotwo b.bstmts
+      | DoWhile (_, b, _) -> peepHole2 dotwo b.bstmts
+      | For (bInit, _, bIter, b, _) ->
+	  peepHole2 dotwo bInit.bstmts;
+	  peepHole2 dotwo bIter.bstmts;
+	  peepHole2 dotwo b.bstmts
+      | Block b -> peepHole2 dotwo b.bstmts
+      | TryFinally (b, h, l) -> peepHole2 dotwo b.bstmts; 
+                                peepHole2 dotwo h.bstmts
+      | TryExcept (b, (il, e), h, l) -> 
+          peepHole2 dotwo b.bstmts; 
+          peepHole2 dotwo h.bstmts;
+          s.skind <- TryExcept (b, (doInstrList il, e), h, l)
+
+      | Return _ | Goto _ | Break _ | Continue _ -> ())
+    ss
+
+
+
+
+(*** Type signatures ***)
+
+(* Helper class for typeSig: replace any types in attributes with typsigs *)
+class typeSigVisitor(typeSigConverter: typ->typsig) = object 
+  inherit nopCilVisitor 
+  method vattrparam ap =
+    match ap with
+      | ASizeOf t -> ChangeTo (ASizeOfS (typeSigConverter t))
+      | AAlignOf t -> ChangeTo (AAlignOfS (typeSigConverter t))
+      | _ -> DoChildren
+end
+
+let typeSigAddAttrs a0 t = 
+  if a0 == [] then t else
+  match t with 
+    TSBase t -> TSBase (typeAddAttributes a0 t)
+  | TSPtr (ts, a) -> TSPtr (ts, addAttributes a0 a)
+  | TSArray (ts, l, a) -> TSArray(ts, l, addAttributes a0 a)
+  | TSComp (iss, n, a) -> TSComp (iss, n, addAttributes a0 a)
+  | TSEnum (n, a) -> TSEnum (n, addAttributes a0 a)
+  | TSFun(ts, tsargs, isva, a) -> TSFun(ts, tsargs, isva, addAttributes a0 a)
+
+(* Compute a type signature.
+    Use ~ignoreSign:true to convert all signed integer types to unsigned,
+    so that signed and unsigned will compare the same. *)
+let rec typeSigWithAttrs ?(ignoreSign=false) doattr t = 
+  let typeSig = typeSigWithAttrs ~ignoreSign doattr in
+  let attrVisitor = new typeSigVisitor typeSig in
+  let doattr al = visitCilAttributes attrVisitor (doattr al) in
+  match t with 
+  | TInt (ik, al) -> 
+      let ik' = if ignoreSign then begin
+        match ik with
+          | ISChar | IChar -> IUChar
+          | IShort -> IUShort
+          | IInt -> IUInt
+          | ILong -> IULong
+          | ILongLong -> IULongLong
+          | _ -> ik          
+      end else
+        ik
+      in
+      TSBase (TInt (ik', doattr al))
+  | TFloat (fk, al) -> TSBase (TFloat (fk, doattr al))
+  | TVoid al -> TSBase (TVoid (doattr al))
+  | TEnum (enum, a) -> TSEnum (enum.ename, doattr a)
+  | TPtr (t, a) -> TSPtr (typeSig t, doattr a)
+  | TArray (t,l,a) -> (* We do not want fancy expressions in array lengths. 
+                       * So constant fold the lengths *)
+      let l' = 
+        match l with 
+          Some l -> begin 
+            match constFold true l with 
+              Const(CInt64(i, _, _)) -> Some i
+            | e -> E.s (E.bug "Invalid length in array type: %a\n" 
+                          (!pd_exp) e)
+          end 
+        | None -> None
+      in 
+      TSArray(typeSig t, l', doattr a)
+
+  | TComp (comp, a) -> 
+      TSComp (comp.cstruct, comp.cname, doattr (addAttributes comp.cattr a))
+  | TFun(rt,args,isva,a) -> 
+      TSFun(typeSig rt, 
+            List.map (fun (_, atype, _) -> (typeSig atype)) (argsToList args),
+            isva, doattr a)
+  | TNamed(t, a) -> typeSigAddAttrs (doattr a) (typeSig t.ttype)
+  | TBuiltin_va_list al -> TSBase (TBuiltin_va_list (doattr al))      
+
+let typeSig t = 
+  typeSigWithAttrs (fun al -> al) t
+
+let _ = pTypeSig := typeSig
+
+(* Remove the attribute from the top-level of the type signature *)
+let setTypeSigAttrs (a: attribute list) = function
+    TSBase t -> TSBase (setTypeAttrs t a)
+  | TSPtr (ts, _) -> TSPtr (ts, a)
+  | TSArray (ts, l, _) -> TSArray(ts, l, a)
+  | TSComp (iss, n, _) -> TSComp (iss, n, a)
+  | TSEnum (n, _) -> TSEnum (n, a)
+  | TSFun (ts, tsargs, isva, _) -> TSFun (ts, tsargs, isva, a)
+
+
+let typeSigAttrs = function
+    TSBase t -> typeAttrs t
+  | TSPtr (ts, a) -> a
+  | TSArray (ts, l, a) -> a
+  | TSComp (iss, n, a) -> a
+  | TSEnum (n, a) -> a
+  | TSFun (ts, tsargs, isva, a) -> a
+
+
+
+let dExp: doc -> exp = 
+  fun d -> Const(CStr(sprint !lineLength d))
+
+let dInstr: doc -> location -> instr = 
+  fun d l -> Asm([], [sprint !lineLength d], [], [], [], l)
+
+let dGlobal: doc -> location -> global = 
+  fun d l -> GAsm(sprint !lineLength d, l)
+
+let rec addOffset (toadd: offset) (off: offset) : offset =
+  match off with
+    NoOffset -> toadd
+  | Field(fid', offset) -> Field(fid', addOffset toadd offset)
+  | Index(e, offset) -> Index(e, addOffset toadd offset)
+
+ (* Add an offset at the end of an lv *)      
+let addOffsetLval toadd (b, off) : lval =
+ b, addOffset toadd off
+
+let rec removeOffset (off: offset) : offset * offset = 
+  match off with 
+    NoOffset -> NoOffset, NoOffset
+  | Field(f, NoOffset) -> NoOffset, off
+  | Index(i, NoOffset) -> NoOffset, off
+  | Field(f, restoff) -> 
+      let off', last = removeOffset restoff in
+      Field(f, off'), last
+  | Index(i, restoff) -> 
+      let off', last = removeOffset restoff in
+      Index(i, off'), last
+
+let removeOffsetLval ((b, off): lval) : lval * offset = 
+  let off', last = removeOffset off in
+  (b, off'), last
+
+  (* Make an AddrOf. Given an lval of type T will give back an expression of 
+   * type ptr(T)  *)
+let mkAddrOf ((b, off) as lval) : exp = 
+  (* Never take the address of a register variable *)
+  (match lval with
+    Var vi, off when vi.vstorage = Register -> vi.vstorage <- NoStorage
+  | _ -> ()); 
+  match lval with
+    Mem e, NoOffset -> e
+  | b, Index(z, NoOffset) when isZero z -> StartOf (b, NoOffset)(* array *)
+  | _ -> AddrOf lval
+
+
+let mkAddrOrStartOf (lv: lval) : exp = 
+  match unrollType (typeOfLval lv) with 
+    TArray _ -> StartOf lv
+  | _ -> mkAddrOf lv
+
+
+  (* Make a Mem, while optimizing AddrOf. The type of the addr must be 
+   * TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
+   * implicit conversion between a function and a pointer to a function does 
+   * not apply. You must do the conversion yourself using AddrOf *)
+let mkMem ~(addr: exp) ~(off: offset) : lval =  
+  let res = 
+    match addr, off with
+      AddrOf lv, _ -> addOffsetLval off lv
+    | StartOf lv, _ -> (* Must be an array *)
+        addOffsetLval (Index(zero, off)) lv 
+    | _, _ -> Mem addr, off
+  in
+(*  ignore (E.log "memof : %a:%a\nresult = %a\n" 
+            d_plainexp addr d_plainoffset off d_plainexp res); *)
+  res
+
+
+
+let splitFunctionType (ftype: typ) 
+    : typ * (string * typ * attributes) list option * bool * attributes = 
+  match unrollType ftype with 
+    TFun (rt, args, isva, a) -> rt, args, isva, a
+  | _ -> E.s (bug "splitFunctionType invoked on a non function type %a" 
+                d_type ftype)
+
+let splitFunctionTypeVI (fvi: varinfo) 
+    : typ * (string * typ * attributes) list option * bool * attributes = 
+  match unrollType fvi.vtype with 
+    TFun (rt, args, isva, a) -> rt, args, isva, a
+  | _ -> E.s (bug "Function %s invoked on a non function type" fvi.vname)
+
+let isArrayType t = 
+  match unrollType t with
+    TArray _ -> true
+  | _ -> false
+
+
+let rec isConstant = function
+  | Const _ -> true
+  | UnOp (_, e, _) -> isConstant e
+  | BinOp (_, e1, e2, _) -> isConstant e1 && isConstant e2
+  | Lval (Var vi, NoOffset) -> 
+      (vi.vglob && isArrayType vi.vtype || isFunctionType vi.vtype)
+  | Lval _ -> false
+  | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ -> true
+  | CastE (_, e) -> isConstant e
+  | AddrOf (Var vi, off) | StartOf (Var vi, off)
+        -> vi.vglob && isConstantOff off
+  | AddrOf (Mem e, off) | StartOf(Mem e, off) 
+        -> isConstant e && isConstantOff off
+
+and isConstantOff = function
+    NoOffset -> true
+  | Field(fi, off) -> isConstantOff off
+  | Index(e, off) -> isConstant e && isConstantOff off
+
+
+let getCompField (cinfo:compinfo) (fieldName:string) : fieldinfo =
+  (List.find (fun fi -> fi.fname = fieldName) cinfo.cfields)
+
+
+let rec mkCastT ~(e: exp) ~(oldt: typ) ~(newt: typ) = 
+  (* Do not remove old casts because they are conversions !!! *)
+  if Util.equals (typeSig oldt) (typeSig newt) then begin
+    e
+  end else begin
+    (* Watch out for constants *)
+    match newt, e with 
+      TInt(newik, []), Const(CInt64(i, _, _)) -> kinteger64 newik i
+    | _ -> CastE(newt,e)
+  end
+
+let mkCast ~(e: exp) ~(newt: typ) = 
+  mkCastT e (typeOf e) newt
+
+type existsAction = 
+    ExistsTrue                          (* We have found it *)
+  | ExistsFalse                         (* Stop processing this branch *)
+  | ExistsMaybe                         (* This node is not what we are 
+                                         * looking for but maybe its 
+                                         * successors are *)
+let existsType (f: typ -> existsAction) (t: typ) : bool = 
+  let memo : (int, unit) H.t = H.create 17 in  (* Memo table *)
+  let rec loop t = 
+    match f t with 
+      ExistsTrue -> true
+    | ExistsFalse -> false
+    | ExistsMaybe -> 
+        (match t with 
+          TNamed (t', _) -> loop t'.ttype
+        | TComp (c, _) -> loopComp c
+        | TArray (t', _, _) -> loop t'
+        | TPtr (t', _) -> loop t'
+        | TFun (rt, args, _, _) -> 
+            (loop rt || List.exists (fun (_, at, _) -> loop at) 
+              (argsToList args))
+        | _ -> false)
+  and loopComp c = 
+    if H.mem memo c.ckey then 
+      (* We are looping, the answer must be false *)
+      false
+    else begin
+      H.add memo c.ckey ();
+      List.exists (fun f -> loop f.ftype) c.cfields
+    end
+  in
+  loop t
+          
+
+(* Try to do an increment, with constant folding *)
+let increm (e: exp) (i: int) =
+  let et = typeOf e in
+  let bop = if isPointerType et then PlusPI else PlusA in
+  constFold false (BinOp(bop, e, integer i, et))
+      
+exception LenOfArray
+let lenOfArray (eo: exp option) : int = 
+  match eo with 
+    None -> raise LenOfArray
+  | Some e -> begin
+      match constFold true e with
+      | Const(CInt64(ni, _, _)) when ni >= Int64.zero -> 
+          Int64.to_int ni
+      | e -> raise LenOfArray
+  end
+  
+
+(*** Make a initializer for zeroe-ing a data type ***)
+let rec makeZeroInit (t: typ) : init = 
+  match unrollType t with
+    TInt (ik, _) -> SingleInit (Const(CInt64(Int64.zero, ik, None)))
+  | TFloat(fk, _) -> SingleInit(Const(CReal(0.0, fk, None)))
+  | TEnum _ -> SingleInit zero
+  | TComp (comp, _) as t' when comp.cstruct -> 
+      let inits = 
+        List.fold_right
+          (fun f acc -> 
+            if f.fname <> missingFieldName then 
+              (Field(f, NoOffset), makeZeroInit f.ftype) :: acc
+            else
+              acc)
+          comp.cfields []
+      in
+      CompoundInit (t', inits)
+
+  | TComp (comp, _) when not comp.cstruct -> 
+      let fstfield, rest = 
+        match comp.cfields with
+          f :: rest -> f, rest
+        | [] -> E.s (unimp "Cannot create init for empty union")
+      in
+      let fieldToInit = 
+        if !msvcMode then
+          (* ISO C99 [6.7.8.10] says that the first field of the union
+             is the one we should initialize. *)
+          fstfield
+        else begin
+          (* gcc initializes the whole union to zero.  So choose the largest
+             field, and set that to zero.  Choose the first field if possible.
+             MSVC also initializes the whole union, but use the ISO behavior
+             for MSVC because it only allows compound initializers to refer
+             to the first union field. *)
+          let fieldSize f = try bitsSizeOf f.ftype with SizeOfError _ -> 0 in
+          let widestField, widestFieldWidth =
+            List.fold_left (fun acc thisField ->
+                              let widestField, widestFieldWidth = acc in
+                              let thisSize = fieldSize thisField in
+                              if thisSize > widestFieldWidth then
+                                thisField, thisSize
+                              else
+                                acc)
+              (fstfield, fieldSize fstfield)
+              rest
+          in
+          widestField
+        end
+      in
+      CompoundInit(t, [(Field(fieldToInit, NoOffset), 
+                        makeZeroInit fieldToInit.ftype)])
+
+  | TArray(bt, Some len, _) as t' -> 
+      let n = 
+        match constFold true len with
+          Const(CInt64(n, _, _)) -> Int64.to_int n
+        | _ -> E.s (E.unimp "Cannot understand length of array")
+      in
+      let initbt = makeZeroInit bt in
+      let rec loopElems acc i = 
+        if i < 0 then acc
+        else loopElems ((Index(integer i, NoOffset), initbt) :: acc) (i - 1) 
+      in
+      CompoundInit(t', loopElems [] (n - 1))
+
+  | TArray (bt, None, at) as t' ->
+      (* Unsized array, allow it and fill it in later 
+       * (see cabs2cil.ml, collectInitializer) *)
+      CompoundInit (t', [])
+
+  | TPtr _ as t -> SingleInit(CastE(t, zero))
+  | x -> E.s (unimp "Cannot initialize type: %a" d_type x)
+
+
+(**** Fold over the list of initializers in a Compound. In the case of an 
+ * array initializer only the initializers present are scanned (a prefix of 
+ * all initializers) *)
+let foldLeftCompound 
+    ~(doinit: offset -> init -> typ -> 'a -> 'a)
+    ~(ct: typ) 
+    ~(initl: (offset * init) list)
+    ~(acc: 'a) : 'a = 
+  match unrollType ct with
+    TArray(bt, _, _) -> 
+      List.fold_left (fun acc (o, i) -> doinit o i bt acc) acc initl
+
+  | TComp (comp, _) -> 
+      let getTypeOffset = function
+          Field(f, NoOffset) -> f.ftype
+        | _ -> E.s (bug "foldLeftCompound: malformed initializer")
+      in
+      List.fold_left 
+        (fun acc (o, i) -> doinit o i (getTypeOffset o) acc) acc initl
+
+  | _ -> E.s (unimp "Type of Compound is not array or struct or union")
+
+(**** Fold over the list of initializers in a Compound. Like foldLeftCompound 
+ * but scans even the zero-initializers that are missing at the end of the 
+ * array *)
+let foldLeftCompoundAll 
+    ~(doinit: offset -> init -> typ -> 'a -> 'a)
+    ~(ct: typ) 
+    ~(initl: (offset * init) list)
+    ~(acc: 'a) : 'a = 
+  match unrollType ct with
+    TArray(bt, leno, _) -> begin
+      let part = 
+        List.fold_left (fun acc (o, i) -> doinit o i bt acc) acc initl in
+      (* See how many more we have to do *)
+      match leno with 
+        Some lene -> begin
+          match constFold true lene with 
+            Const(CInt64(i, _, _)) -> 
+              let len_array = Int64.to_int i in
+              let len_init = List.length initl in
+              if len_array > len_init then 
+                let zi = makeZeroInit bt in
+                let rec loop acc i = 
+                  if i >= len_array then acc
+                  else 
+                    loop (doinit (Index(integer i, NoOffset)) zi bt acc) 
+                         (i + 1)
+                in
+                loop part (len_init + 1)
+              else
+                part
+          | _ -> E.s (unimp "foldLeftCompoundAll: array with initializer and non-constant length\n")
+        end
+          
+      | _ -> E.s (unimp "foldLeftCompoundAll: TArray with initializer and no length")
+    end
+  | TComp (comp, _) -> 
+      let getTypeOffset = function
+          Field(f, NoOffset) -> f.ftype
+        | _ -> E.s (bug "foldLeftCompound: malformed initializer")
+      in
+      List.fold_left 
+        (fun acc (o, i) -> doinit o i (getTypeOffset o) acc) acc initl
+
+  | _ -> E.s (E.unimp "Type of Compound is not array or struct or union")
+
+
+
+let rec isCompleteType t =
+  match unrollType t with
+  | TArray(t, None, _) -> false
+  | TArray(t, Some z, _) when isZero z -> false
+  | TComp (comp, _) -> (* Struct or union *)
+      List.for_all (fun fi -> isCompleteType fi.ftype) comp.cfields
+  | _ -> true
+
+
+module A = Alpha
+  
+
+(** Uniquefy the variable names *)
+let uniqueVarNames (f: file) : unit = 
+  (* Setup the alpha conversion table for globals *)
+  let gAlphaTable: (string, 
+                    location A.alphaTableData ref) H.t = H.create 113 in
+  (* Keep also track of the global names that we have used. Map them to the 
+   * variable ID. We do this only to check that we do not have two globals 
+   * with the same name. *)
+  let globalNames: (string, int) H.t = H.create 113 in
+  (* Scan the file and add the global names to the table *)
+  iterGlobals f
+    (function
+        GVarDecl(vi, l) 
+      | GVar(vi, _, l) 
+      | GFun({svar = vi}, l) -> 
+          (* See if we have used this name already for something else *)
+          (try
+            let oldid = H.find globalNames vi.vname in
+            if oldid <> vi.vid then 
+              ignore (warn "The name %s is used for two distinct globals" 
+                        vi.vname);
+            (* Here if we have used this name already. Go ahead *)
+            ()
+          with Not_found -> begin
+            (* Here if this is the first time we define a name *)
+            H.add globalNames vi.vname vi.vid;
+            (* And register it *)
+            A.registerAlphaName gAlphaTable None vi.vname !currentLoc;
+            ()
+          end)
+      | _ -> ());
+
+  (* Now we must scan the function bodies and rename the locals *)
+  iterGlobals f
+    (function 
+        GFun(fdec, l) -> begin
+          currentLoc := l;
+          (* Setup an undo list to be able to revert the changes to the 
+           * global alpha table *)
+          let undolist = ref [] in
+          (* Process one local variable *)
+          let processLocal (v: varinfo) = 
+            let newname, oldloc = 
+              A.newAlphaName gAlphaTable (Some undolist) v.vname 
+               !currentLoc
+            in
+            if false && newname <> v.vname then (* Disable this warning *)
+              ignore (warn "uniqueVarNames: Changing the name of local %s in %s to %s (due to duplicate at %a)\n"
+                        v.vname fdec.svar.vname newname d_loc oldloc);
+            v.vname <- newname
+          in
+          (* Do the formals first *)
+          List.iter processLocal fdec.sformals;
+          (* Fix the type again *)
+          setFormals fdec fdec.sformals;
+          (* And now the locals *)
+          List.iter processLocal fdec.slocals;
+          (* Undo the changes to the global table *)
+          A.undoAlphaChanges gAlphaTable !undolist;
+          ()
+        end
+      | _ -> ());
+  ()
+          
+
+(* A visitor that makes a deep copy of a function body *)
+class copyFunctionVisitor (newname: string) = object (self)
+  inherit nopCilVisitor
+
+      (* Keep here a maping from locals to their copies *)
+  val map : (string, varinfo) H.t = H.create 113 
+      (* Keep here a maping from statements to their copies *)
+  val stmtmap : (int, stmt) H.t = H.create 113
+  val sid = ref 0 (* Will have to assign ids to statements *)
+      (* Keep here a list of statements to be patched *)
+  val patches : stmt list ref = ref []
+
+  val argid = ref 0
+
+      (* This is the main function *)
+  method vfunc (f: fundec) : fundec visitAction = 
+    (* We need a map from the old locals/formals to the new ones *)
+    H.clear map;
+    argid := 0;
+     (* Make a copy of the fundec. *)
+    let f' = {f with svar = f.svar} in
+    let patchfunction (f' : fundec) = 
+      (* Change the name. Only this late to allow the visitor to copy the 
+       * svar  *)
+      f'.svar.vname <- newname;
+      let findStmt (i: int) = 
+        try H.find stmtmap i 
+        with Not_found -> E.s (bug "Cannot find the copy of stmt#%d" i)
+      in
+      let patchstmt (s: stmt) = 
+        match s.skind with
+          Goto (sr, l) -> 
+            (* Make a copy of the reference *)
+            let sr' = ref (findStmt !sr.sid) in
+            s.skind <- Goto (sr',l)
+        | Switch (e, body, cases, l) -> 
+            s.skind <- Switch (e, body, 
+                               List.map (fun cs -> findStmt cs.sid) cases, l)
+        | _ -> ()
+      in
+      List.iter patchstmt !patches;
+      f'
+    in
+    patches := [];
+    sid := 0;
+    H.clear stmtmap;
+    ChangeDoChildrenPost (f', patchfunction)
+    
+      (* We must create a new varinfo for each declaration. Memoize to 
+       * maintain sharing *)
+  method vvdec (v: varinfo) = 
+    (* Some varinfo have empty names. Give them some name *)
+    if v.vname = "" then begin
+      v.vname <- "arg" ^ string_of_int !argid; incr argid
+    end;
+    try
+      ChangeTo (H.find map v.vname)
+    with Not_found -> begin
+      let v' = {v with vid = newVID () } in
+      H.add map v.vname v';
+      ChangeDoChildrenPost (v', fun x -> x)
+    end
+
+      (* We must replace references to local variables *)
+  method vvrbl (v: varinfo) = 
+    if v.vglob then SkipChildren else 
+    try
+      ChangeTo (H.find map v.vname)
+    with Not_found -> 
+      E.s (bug "Cannot find the new copy of local variable %s" v.vname)
+
+
+        (* Replace statements. *)
+  method vstmt (s: stmt) : stmt visitAction = 
+    s.sid <- !sid; incr sid;
+    let s' = {s with sid = s.sid} in
+    H.add stmtmap s.sid s'; (* Remember where we copied this *)
+    (* if we have a Goto or a Switch remember them to fixup at end *)
+    (match s'.skind with
+      (Goto _ | Switch _) -> patches := s' :: !patches
+    | _ -> ());
+    (* Do the children *)
+    ChangeDoChildrenPost (s', fun x -> x)
+
+      (* Copy blocks since they are mutable *)
+  method vblock (b: block) = 
+    ChangeDoChildrenPost ({b with bstmts = b.bstmts}, fun x -> x)
+
+
+  method vglob _ = E.s (bug "copyFunction should not be used on globals")
+end
+
+(* We need a function that copies a CIL function. *)
+let copyFunction (f: fundec) (newname: string) : fundec = 
+  visitCilFunction (new copyFunctionVisitor(newname)) f
+  
+(********* Compute the CFG ********)
+let sid_counter = ref 0
+
+let new_sid () =
+  let id = !sid_counter in
+  incr sid_counter;
+  id
+
+let statements : stmt list ref = ref [] 
+(* Clear all info about the CFG in statements *)  
+class clear : cilVisitor = object
+  inherit nopCilVisitor
+  method vstmt s = begin
+    s.sid <- !sid_counter ;
+    incr sid_counter ;
+    statements := s :: !statements;
+    s.succs <- [] ;
+    s.preds <- [] ;
+    DoChildren
+  end
+  method vexpr _ = SkipChildren
+  method vtype _ = SkipChildren
+  method vinst _ = SkipChildren
+end
+
+let link source dest = begin
+  if not (List.mem dest source.succs) then
+    source.succs <- dest :: source.succs ;
+  if not (List.mem source dest.preds) then
+    dest.preds <- source :: dest.preds 
+end
+let trylink source dest_option = match dest_option with
+  None -> ()
+| Some(dest) -> link source dest 
+
+
+(** Cmopute the successors and predecessors of a block, given a fallthrough *)
+let rec succpred_block b fallthrough =
+  let rec handle sl = match sl with
+    [] -> ()
+  | [a] -> succpred_stmt a fallthrough 
+  | hd :: ((next :: _) as tl) -> 
+      succpred_stmt hd (Some next) ;
+      handle tl 
+  in handle b.bstmts
+
+
+and succpred_stmt s fallthrough = 
+  match s.skind with
+    Instr _ -> trylink s fallthrough
+  | Return _ -> ()
+  | Goto(dest,l) -> link s !dest
+  | Break _  
+  | Continue _ 
+  | Switch _ ->
+    failwith "computeCFGInfo: cannot be called on functions with break, continue or switch statements. Use prepareCFG first to remove them."
+
+  | If(e1,b1,b2,l) -> 
+      (match b1.bstmts with
+        [] -> trylink s fallthrough
+      | hd :: tl -> (link s hd ; succpred_block b1 fallthrough )) ;
+      (match b2.bstmts with
+        [] -> trylink s fallthrough
+      | hd :: tl -> (link s hd ; succpred_block b2 fallthrough ))
+
+(*
+  | Loop(b,l,_,_) -> 
+      begin match b.bstmts with
+        [] -> failwith "computeCFGInfo: empty loop" 
+      | hd :: tl -> 
+          link s hd ; 
+          succpred_block b (Some(hd))
+      end
+*)
+
+  | While (e, b, l) -> begin match b.bstmts with
+                       | [] -> failwith "computeCFGInfo: empty loop" 
+	               | hd :: tl -> link s hd ;
+                                     succpred_block b (Some(hd))
+                       end
+
+  | DoWhile (e, b, l) ->begin match b.bstmts with
+                       |  [] -> failwith "computeCFGInfo: empty loop" 
+	               | hd :: tl -> link s hd ;
+                                     succpred_block b (Some(hd))
+                       end
+
+  | For (bInit, e, bIter, b, l) ->
+      (match bInit.bstmts with
+         |  [] -> failwith "computeCFGInfo: empty loop" 
+	 | hd :: tl -> link s hd ;
+             succpred_block bInit (Some(hd))) ;
+      (match bIter.bstmts with
+         |  [] -> failwith "computeCFGInfo: empty loop" 
+	 | hd :: tl -> link s hd ;
+             succpred_block bIter (Some(hd))) ;
+      (match b.bstmts with
+         |  [] -> failwith "computeCFGInfo: empty loop" 
+	 | hd :: tl -> link s hd ;
+             succpred_block b (Some(hd))) ;
+
+  | Block(b) -> begin match b.bstmts with
+                  [] -> trylink s fallthrough
+                | hd :: tl -> link s hd ;
+                    succpred_block b fallthrough
+                end
+  | TryExcept _ | TryFinally _ -> 
+      failwith "computeCFGInfo: structured exception handling not implemented"
+
+(* [weimer] Sun May  5 12:25:24 PDT 2002
+ * This code was pulled from ext/switch.ml because it looks like we really
+ * want it to be part of CIL. 
+ *
+ * Here is the magic handling to
+ *  (1) replace switch statements with if/goto
+ *  (2) remove "break"
+ *  (3) remove "default"
+ *  (4) remove "continue"
+ *)
+let is_case_label l = match l with
+  | Case _ | Default _ -> true
+  | _ -> false
+
+let switch_count = ref (-1) 
+let get_switch_count () = 
+  switch_count := 1 + !switch_count ;
+  !switch_count
+
+let switch_label = ref (-1)
+
+let rec xform_switch_stmt s break_dest cont_dest label_index = begin
+  s.labels <- List.map (fun lab -> match lab with
+    Label _ -> lab
+  | Case(e,l) ->
+      let suffix =
+	match isInteger e with
+	| Some value ->
+	    if value < Int64.zero then
+	      "neg_" ^ Int64.to_string (Int64.neg value)
+	    else
+	      Int64.to_string value
+	| None ->
+	    incr switch_label;
+	    "exp_" ^ string_of_int !switch_label
+      in
+      let str = Pretty.sprint !lineLength 
+	  (Pretty.dprintf "switch_%d_%s" label_index suffix) in 
+      (Label(str,l,false))
+  | Default(l) -> (Label(Printf.sprintf 
+                  "switch_%d_default" label_index,l,false))
+  ) s.labels ; 
+  match s.skind with
+  | Instr _ | Return _ | Goto _ -> ()
+  | Break(l) -> begin try 
+                  s.skind <- Goto(break_dest (),l)
+                with e ->
+                  ignore (error "prepareCFG: break: %a@!" d_stmt s) ;
+                  raise e
+                end
+  | Continue(l) -> begin try
+                  s.skind <- Goto(cont_dest (),l)
+                with e ->
+                  ignore (error "prepareCFG: continue: %a@!" d_stmt s) ;
+                  raise e
+                end
+  | If(e,b1,b2,l) -> xform_switch_block b1 break_dest cont_dest label_index ;
+                     xform_switch_block b2 break_dest cont_dest label_index
+  | Switch(e,b,sl,l) -> begin
+      (* change 
+       * switch (se) {
+       *   case 0: s0 ;
+       *   case 1: s1 ; break;
+       *   ...
+       * }
+       *
+       * into:
+       *
+       * if (se == 0) goto label_0;
+       * else if (se == 1) goto label_1;
+       * ...
+       * else if (0) { // body_block
+       *  label_0: s0;
+       *  label_1: s1; goto label_break;
+       *  ...
+       * } else if (0) { // break_block
+       *  label_break: ; // break_stmt
+       * } 
+       *)
+      let i = get_switch_count () in 
+      let break_stmt = mkStmt (Instr []) in
+      break_stmt.labels <- 
+	[Label((Printf.sprintf "switch_%d_break" i),l,false)] ;
+      let break_block = mkBlock [ break_stmt ] in
+      let body_block = b in 
+      let body_if_stmtkind = (If(zero,body_block,break_block,l)) in
+
+      (* The default case, if present, must be used only if *all*
+      non-default cases fail [ISO/IEC 9899:1999, §6.8.4.2, ¶5]. As a
+      result, we sort the order in which we handle the labels (but not the
+      order in which we print out the statements, so fall-through still
+      works as expected). *)
+      let compare_choices s1 s2 = match s1.labels, s2.labels with
+      | (Default(_) :: _), _ -> 1
+      | _, (Default(_) :: _) -> -1
+      | _, _ -> 0
+      in
+
+      let rec handle_choices sl = match sl with
+        [] -> body_if_stmtkind
+      | stmt_hd :: stmt_tl -> begin
+        let rec handle_labels lab_list = begin
+          match lab_list with
+            [] -> handle_choices stmt_tl 
+          | Case(ce,cl) :: lab_tl -> 
+              let pred = BinOp(Eq,e,ce,intType) in
+              let then_block = mkBlock [ mkStmt (Goto(ref stmt_hd,cl)) ] in
+              let else_block = mkBlock [ mkStmt (handle_labels lab_tl) ] in
+              If(pred,then_block,else_block,cl)
+          | Default(dl) :: lab_tl -> 
+              (* ww: before this was 'if (1) goto label', but as Ben points
+              out this might confuse someone down the line who doesn't have
+              special handling for if(1) into thinking that there are two
+              paths here. The simpler 'goto label' is what we want. *) 
+              Block(mkBlock [ mkStmt (Goto(ref stmt_hd,dl)) ;
+                              mkStmt (handle_labels lab_tl) ])
+          | Label(_,_,_) :: lab_tl -> handle_labels lab_tl
+        end in
+        handle_labels stmt_hd.labels
+      end in
+      s.skind <- handle_choices (List.sort compare_choices sl) ;
+      xform_switch_block b (fun () -> ref break_stmt) cont_dest i 
+    end
+(*
+  | Loop(b,l,_,_) -> 
+          let i = get_switch_count () in 
+          let break_stmt = mkStmt (Instr []) in
+          break_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
+          let cont_stmt = mkStmt (Instr []) in
+          cont_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
+          b.bstmts <- cont_stmt :: b.bstmts ;
+          let this_stmt = mkStmt 
+            (Loop(b,l,Some(cont_stmt),Some(break_stmt))) in 
+          let break_dest () = ref break_stmt in
+          let cont_dest () = ref cont_stmt in 
+          xform_switch_block b break_dest cont_dest label_index ;
+          break_stmt.succs <- s.succs ; 
+          let new_block = mkBlock [ this_stmt ; break_stmt ] in
+          s.skind <- Block new_block
+*)
+  | While (e, b, l) ->
+          let i = get_switch_count () in 
+          let break_stmt = mkStmt (Instr []) in
+          break_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
+          let cont_stmt = mkStmt (Instr []) in
+          cont_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
+          b.bstmts <- cont_stmt :: b.bstmts ;
+          let this_stmt = mkStmt 
+            (While(e,b,l)) in 
+          let break_dest () = ref break_stmt in
+          let cont_dest () = ref cont_stmt in 
+          xform_switch_block b break_dest cont_dest label_index ;
+          break_stmt.succs <- s.succs ; 
+          let new_block = mkBlock [ this_stmt ; break_stmt ] in
+          s.skind <- Block new_block
+
+  | DoWhile (e, b, l) ->
+          let i = get_switch_count () in 
+          let break_stmt = mkStmt (Instr []) in
+          break_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
+          let cont_stmt = mkStmt (Instr []) in
+          cont_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
+          b.bstmts <- cont_stmt :: b.bstmts ;
+          let this_stmt = mkStmt 
+            (DoWhile(e,b,l)) in 
+          let break_dest () = ref break_stmt in
+          let cont_dest () = ref cont_stmt in 
+          xform_switch_block b break_dest cont_dest label_index ;
+          break_stmt.succs <- s.succs ; 
+          let new_block = mkBlock [ this_stmt ; break_stmt ] in
+          s.skind <- Block new_block
+
+  | For (bInit, e, bIter , b, l) ->
+          let i = get_switch_count () in 
+          let break_stmt = mkStmt (Instr []) in
+          break_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
+          let cont_stmt = mkStmt (Instr []) in
+          cont_stmt.labels <- 
+	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
+          b.bstmts <- cont_stmt :: b.bstmts ;
+          let this_stmt = mkStmt 
+            (For(bInit,e,bIter,b,l)) in 
+          let break_dest () = ref break_stmt in
+          let cont_dest () = ref cont_stmt in 
+          xform_switch_block b break_dest cont_dest label_index ;
+          break_stmt.succs <- s.succs ; 
+          let new_block = mkBlock [ this_stmt ; break_stmt ] in
+          s.skind <- Block new_block
+
+
+  | Block(b) -> xform_switch_block b break_dest cont_dest label_index
+
+  | TryExcept _ | TryFinally _ -> 
+      failwith "xform_switch_statement: structured exception handling not implemented"
+
+end and xform_switch_block b break_dest cont_dest label_index = 
+  try 
+    let rec link_succs sl = match sl with
+    | [] -> ()
+    | hd :: tl -> (if hd.succs = [] then hd.succs <- tl) ; link_succs tl
+    in 
+    link_succs b.bstmts ;
+    List.iter (fun stmt -> 
+      xform_switch_stmt stmt break_dest cont_dest label_index) b.bstmts ;
+  with e ->
+    List.iter (fun stmt -> ignore
+      (warn "prepareCFG: %a@!" d_stmt stmt)) b.bstmts ;
+    raise e
+
+(* prepare a function for computeCFGInfo by removing break, continue,
+ * default and switch statements/labels and replacing them with Ifs and
+ * Gotos. *)
+let prepareCFG (fd : fundec) : unit =
+  xform_switch_block fd.sbody 
+      (fun () -> failwith "prepareCFG: break with no enclosing loop") 
+      (fun () -> failwith "prepareCFG: continue with no enclosing loop") (-1)
+
+(* make the cfg and return a list of statements *)
+let computeCFGInfo (f : fundec) (global_numbering : bool) : unit =
+  if not global_numbering then 
+    sid_counter := 0 ; 
+  statements := [];
+  let clear_it = new clear in 
+  ignore (visitCilBlock clear_it f.sbody) ;
+  f.smaxstmtid <- Some (!sid_counter) ;
+  succpred_block f.sbody (None);
+  let res = List.rev !statements in
+  statements := [];
+  f.sallstmts <- res;
+  ()
+
+let initCIL () = 
+  if not !initCIL_called then begin 
+    (* Set the machine *)
+    theMachine := if !msvcMode then M.msvc else M.gcc;
+    (* Pick type for string literals *)
+    stringLiteralType := if !theMachine.M.const_string_literals then
+      charConstPtrType
+    else
+      charPtrType;
+    (* Find the right ikind given the size *)
+    let findIkind (unsigned: bool) (sz: int) : ikind = 
+      (* Test the most common sizes first *)
+      if sz = !theMachine.M.sizeof_int then 
+        if unsigned then IUInt else IInt 
+      else if sz = !theMachine.M.sizeof_long then 
+        if unsigned then IULong else ILong
+      else if sz = 1 then 
+        if unsigned then IUChar else IChar 
+      else if sz = !theMachine.M.sizeof_short then
+        if unsigned then IUShort else IShort
+      else if sz = !theMachine.M.sizeof_longlong then
+        if unsigned then IULongLong else ILongLong
+      else 
+        E.s(E.unimp "initCIL: cannot find the right ikind for size %d\n" sz)
+    in      
+    upointType := TInt(findIkind true !theMachine.M.sizeof_ptr, []);
+    kindOfSizeOf := findIkind true !theMachine.M.sizeof_sizeof;
+    typeOfSizeOf := TInt(!kindOfSizeOf, []);
+    H.add gccBuiltins "__builtin_memset" 
+      (voidPtrType, [ voidPtrType; intType; intType ], false);
+    wcharKind := findIkind false !theMachine.M.sizeof_wchar;
+    wcharType := TInt(!wcharKind, []);
+    char_is_unsigned := !theMachine.M.char_is_unsigned;
+    little_endian := !theMachine.M.little_endian;
+    underscore_name := !theMachine.M.underscore_name;
+    nextGlobalVID := 1;
+    nextCompinfoKey := 1;
+    initCIL_called := true
+  end
+    
+
+(* We want to bring all type declarations before the data declarations. This 
+ * is needed for code of the following form: 
+
+   int f(); // Prototype without arguments
+   typedef int FOO;
+   int f(FOO x) { ... }
+
+   In CIL the prototype also lists the type of the argument as being FOO, 
+   which is undefined. 
+
+   There is one catch with this scheme. If the type contains an array whose 
+   length refers to variables then those variables must be declared before 
+   the type *)
+
+let pullTypesForward = true
+
+  
+    (* Scan a type and collect the variables that are refered *)
+class getVarsInGlobalClass (pacc: varinfo list ref) = object
+  inherit nopCilVisitor
+  method vvrbl (vi: varinfo) = 
+    pacc := vi :: !pacc;
+    SkipChildren
+
+  method vglob = function
+      GType _ | GCompTag _ -> DoChildren
+    | _ -> SkipChildren
+      
+end
+
+let getVarsInGlobal (g : global) : varinfo list = 
+  let pacc : varinfo list ref = ref [] in
+  let v : cilVisitor = new getVarsInGlobalClass pacc in
+  ignore (visitCilGlobal v g);
+  !pacc
+
+let hasPrefix p s = 
+  let pl = String.length p in
+  (String.length s >= pl) && String.sub s 0 pl = p
+
+let pushGlobal (g: global) 
+               ~(types:global list ref)
+               ~(variables: global list ref) = 
+  if not pullTypesForward then 
+    variables := g :: !variables
+  else
+    begin
+      (* Collect a list of variables that are refered from the type. Return 
+       * Some if the global should go with the types and None if it should go 
+       * to the variables. *)
+      let varsintype : (varinfo list * location) option = 
+        match g with 
+          GType (_, l) | GCompTag (_, l) -> Some (getVarsInGlobal g, l)
+        | GEnumTag (_, l) | GPragma (Attr("pack", _), l) 
+        | GCompTagDecl (_, l) | GEnumTagDecl (_, l) -> Some ([], l)
+          (** Move the warning pragmas early 
+        | GPragma(Attr(s, _), l) when hasPrefix "warning" s -> Some ([], l)
+          *)
+        | _ -> None (* Does not go with the types *)
+      in
+      match varsintype with 
+      None -> variables := g :: !variables
+    | Some (vl, loc) -> 
+        types := 
+           (* insert declarations for referred variables ('vl'), before
+            * the type definition 'g' itself *)
+           g :: (List.fold_left (fun acc v -> GVarDecl(v, loc) :: acc) 
+                                !types vl) 
+  end
+
+
+type formatArg = 
+    Fe of exp
+  | Feo of exp option  (** For array lengths *)
+  | Fu of unop
+  | Fb of binop
+  | Fk of ikind
+  | FE of exp list (** For arguments in a function call *)
+  | Ff of (string * typ * attributes) (** For a formal argument *)
+  | FF of (string * typ * attributes) list (* For formal argument lists *)
+  | Fva of bool (** For the ellipsis in a function type *)
+  | Fv of varinfo
+  | Fl of lval
+  | Flo of lval option (** For the result of a function call *)
+  | Fo of offset
+  | Fc of compinfo
+  | Fi of instr
+  | FI of instr list
+  | Ft of typ
+  | Fd of int
+  | Fg of string
+  | Fs of stmt
+  | FS of stmt list
+  | FA of attributes
+
+  | Fp of attrparam
+  | FP of attrparam list
+
+  | FX of string
+
+let d_formatarg () = function
+    Fe e -> dprintf "Fe(%a)" d_exp e
+  | Feo None -> dprintf "Feo(None)"
+  | Feo (Some e) -> dprintf "Feo(%a)" d_exp e
+  | FE _ -> dprintf "FE()"
+  | Fk ik -> dprintf "Fk()"
+  | Fva b -> dprintf "Fva(%b)" b
+  | Ff (an, _, _) -> dprintf "Ff(%s)" an
+  | FF _ -> dprintf "FF(...)"
+  | FA _ -> dprintf "FA(...)"
+  | Fu uo -> dprintf "Fu()"
+  | Fb bo -> dprintf "Fb()"
+  | Fv v -> dprintf "Fv(%s)" v.vname
+  | Fl l -> dprintf "Fl(%a)" d_lval l
+  | Flo None -> dprintf "Flo(None)"
+  | Flo (Some l) -> dprintf "Flo(%a)" d_lval l
+  | Fo o -> dprintf "Fo"
+  | Fc ci -> dprintf "Fc(%s)" ci.cname
+  | Fi i -> dprintf "Fi(...)"
+  | FI i -> dprintf "FI(...)"
+  | Ft t -> dprintf "Ft(%a)" d_type t
+  | Fd n -> dprintf "Fd(%d)" n
+  | Fg s -> dprintf "Fg(%s)" s
+  | Fp _ -> dprintf "Fp(...)" 
+  | FP n -> dprintf "FP(...)" 
+  | Fs _ -> dprintf "FS"
+  | FS _ -> dprintf "FS"
+
+  | FX _ -> dprintf "FX()"
+
+
diff --git a/cil/src/cil.mli b/cil/src/cil.mli
new file mode 100644
index 000000000..31c4e65ca
--- /dev/null
+++ b/cil/src/cil.mli
@@ -0,0 +1,2455 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(*
+ * CIL: An intermediate language for analyzing C programs.
+ *
+ * George Necula
+ *
+ *)
+
+(** CIL API Documentation. An html version of this document can be found at 
+ * http://manju.cs.berkeley.edu/cil. *)
+
+(** Call this function to perform some initialization. Call if after you have 
+ * set {!Cil.msvcMode}.  *)
+val initCIL: unit -> unit
+
+
+(** This are the CIL version numbers. A CIL version is a number of the form 
+ * M.m.r (major, minor and release) *)
+val cilVersion: string
+val cilVersionMajor: int
+val cilVersionMinor: int
+val cilVersionRevision: int
+
+(** This module defines the abstract syntax of CIL. It also provides utility 
+ * functions for traversing the CIL data structures, and pretty-printing 
+ * them. The parser for both the GCC and MSVC front-ends can be invoked as 
+ * [Frontc.parse: string -> unit ->] {!Cil.file}. This function must be given 
+ * the name of a preprocessed C file and will return the top-level data 
+ * structure that describes a whole source file. By default the parsing and 
+ * elaboration into CIL is done as for GCC source. If you want to use MSVC 
+ * source you must set the {!Cil.msvcMode} to [true] and must also invoke the 
+ * function [Frontc.setMSVCMode: unit -> unit]. *)
+
+
+(** {b The Abstract Syntax of CIL} *)
+
+
+(** The top-level representation of a CIL source file (and the result of the 
+ * parsing and elaboration). Its main contents is the list of global 
+ * declarations and definitions. You can iterate over the globals in a 
+ * {!Cil.file} using the following iterators: {!Cil.mapGlobals}, 
+ * {!Cil.iterGlobals} and {!Cil.foldGlobals}. You can also use the 
+ * {!Cil.dummyFile} when you need a {!Cil.file} as a placeholder. For each 
+ * global item CIL stores the source location where it appears (using the 
+ * type {!Cil.location}) *)
+
+type file = 
+    { mutable fileName: string;   (** The complete file name *)
+      mutable globals: global list; (** List of globals as they will appear 
+                                        in the printed file *)
+      mutable globinit: fundec option;  
+      (** An optional global initializer function. This is a function where 
+       * you can put stuff that must be executed before the program is 
+       * started. This function, is conceptually at the end of the file, 
+       * although it is not part of the globals list. Use {!Cil.getGlobInit} 
+       * to create/get one. *)
+      mutable globinitcalled: bool;     
+      (** Whether the global initialization function is called in main. This 
+       * should always be false if there is no global initializer. When you 
+       * create a global initialization CIL will try to insert code in main 
+       * to call it. This will not happen if your file does not contain a 
+       * function called "main" *)
+    } 
+(** Top-level representation of a C source file *)
+
+and comment = location * string
+
+(** {b Globals}. The main type for representing global declarations and 
+ * definitions. A list of these form a CIL file. The order of globals in the 
+ * file is generally important. *)
+
+(** A global declaration or definition *)
+and global =
+  | GType of typeinfo * location    
+    (** A typedef. All uses of type names (through the [TNamed] constructor) 
+        must be preceded in the file by a definition of the name. The string 
+        is the defined name and always not-empty. *)
+
+  | GCompTag of compinfo * location     
+    (** Defines a struct/union tag with some fields. There must be one of 
+        these for each struct/union tag that you use (through the [TComp] 
+        constructor) since this is the only context in which the fields are 
+        printed. Consequently nested structure tag definitions must be 
+        broken into individual definitions with the innermost structure 
+        defined first. *)
+
+  | GCompTagDecl of compinfo * location
+    (** Declares a struct/union tag. Use as a forward declaration. This is 
+      * printed without the fields.  *)
+
+  | GEnumTag of enuminfo * location
+   (** Declares an enumeration tag with some fields. There must be one of 
+      these for each enumeration tag that you use (through the [TEnum] 
+      constructor) since this is the only context in which the items are 
+      printed. *)
+
+  | GEnumTagDecl of enuminfo * location
+    (** Declares an enumeration tag. Use as a forward declaration. This is 
+      * printed without the items.  *)
+
+  | GVarDecl of varinfo * location
+   (** A variable declaration (not a definition). If the variable has a 
+       function type then this is a prototype. There can be several 
+       declarations and at most one definition for a given variable. If both 
+       forms appear then they must share the same varinfo structure. A 
+       prototype shares the varinfo with the fundec of the definition. Either 
+       has storage Extern or there must be a definition in this file *)
+
+  | GVar  of varinfo * initinfo * location
+     (** A variable definition. Can have an initializer. The initializer is 
+      * updateable so that you can change it without requiring to recreate 
+      * the list of globals. There can be at most one definition for a 
+      * variable in an entire program. Cannot have storage Extern or function 
+      * type. *)
+
+  | GFun of fundec * location           
+     (** A function definition. *)
+
+  | GAsm of string * location           (** Global asm statement. These ones 
+                                            can contain only a template *)
+  | GPragma of attribute * location     (** Pragmas at top level. Use the same 
+                                            syntax as attributes *)
+  | GText of string                     (** Some text (printed verbatim) at 
+                                            top level. E.g., this way you can 
+                                            put comments in the output.  *)
+
+(** {b Types}. A C type is represented in CIL using the type {!Cil.typ}. 
+ * Among types we differentiate the integral types (with different kinds 
+ * denoting the sign and precision), floating point types, enumeration types, 
+ * array and pointer types, and function types. Every type is associated with 
+ * a list of attributes, which are always kept in sorted order. Use 
+ * {!Cil.addAttribute} and {!Cil.addAttributes} to construct list of 
+ * attributes. If you want to inspect a type, you should use 
+ * {!Cil.unrollType} or {!Cil.unrollTypeDeep} to see through the uses of 
+ * named types. *)
+(** CIL is configured at build-time with the sizes and alignments of the 
+ * underlying compiler (GCC or MSVC). CIL contains functions that can compute 
+ * the size of a type (in bits) {!Cil.bitsSizeOf}, the alignment of a type 
+ * (in bytes) {!Cil.alignOf_int}, and can convert an offset into a start and 
+ * width (both in bits) using the function {!Cil.bitsOffset}. At the moment 
+ * these functions do not take into account the [packed] attributes and 
+ * pragmas. *)
+
+and typ =
+    TVoid of attributes   (** Void type. Also predefined as {!Cil.voidType} *)
+  | TInt of ikind * attributes 
+     (** An integer type. The kind specifies the sign and width. Several 
+      * useful variants are predefined as {!Cil.intType}, {!Cil.uintType}, 
+      * {!Cil.longType}, {!Cil.charType}. *)
+
+
+  | TFloat of fkind * attributes 
+     (** A floating-point type. The kind specifies the precision. You can 
+      * also use the predefined constant {!Cil.doubleType}. *)
+
+  | TPtr of typ * attributes  
+           (** Pointer type. Several useful variants are predefined as 
+            * {!Cil.charPtrType}, {!Cil.charConstPtrType} (pointer to a 
+            * constant character), {!Cil.voidPtrType}, 
+            * {!Cil.intPtrType}  *)
+
+  | TArray of typ * exp option * attributes
+           (** Array type. It indicates the base type and the array length. *)
+
+  | TFun of typ * (string * typ * attributes) list option * bool * attributes
+          (** Function type. Indicates the type of the result, the name, type 
+           * and name attributes of the formal arguments ([None] if no 
+           * arguments were specified, as in a function whose definition or 
+           * prototype we have not seen; [Some \[\]] means void). Use 
+           * {!Cil.argsToList} to obtain a list of arguments. The boolean 
+           * indicates if it is a variable-argument function. If this is the 
+           * type of a varinfo for which we have a function declaration then 
+           * the information for the formals must match that in the 
+           * function's sformals. Use {!Cil.setFormals}, or 
+           * {!Cil.setFunctionType}, or {!Cil.makeFormalVar} for this 
+           * purpose. *)
+
+  | TNamed of typeinfo * attributes 
+          (* The use of a named type. Each such type name must be preceded 
+           * in the file by a [GType] global. This is printed as just the 
+           * type name. The actual referred type is not printed here and is 
+           * carried only to simplify processing. To see through a sequence 
+           * of named type references, use {!Cil.unrollType} or 
+           * {!Cil.unrollTypeDeep}. The attributes are in addition to those 
+           * given when the type name was defined. *)
+
+  | TComp of compinfo * attributes
+(** The most delicate issue for C types is that recursion that is possible by 
+ * using structures and pointers. To address this issue we have a more 
+ * complex representation for structured types (struct and union). Each such 
+ * type is represented using the {!Cil.compinfo} type. For each composite 
+ * type the {!Cil.compinfo} structure must be declared at top level using 
+ * [GCompTag] and all references to it must share the same copy of the 
+ * structure. The attributes given are those pertaining to this use of the 
+ * type and are in addition to the attributes that were given at the 
+ * definition of the type and which are stored in the {!Cil.compinfo}. *)
+
+  | TEnum of enuminfo * attributes
+           (** A reference to an enumeration type. All such references must
+               share the enuminfo among them and with a [GEnumTag] global that 
+               precedes all uses. The attributes refer to this use of the 
+               enumeration and are in addition to the attributes of the 
+               enumeration itself, which are stored inside the enuminfo  *)
+
+  
+  | TBuiltin_va_list of attributes
+            (** This is the same as the gcc's type with the same name *)
+
+(**
+ There are a number of functions for querying the kind of a type. These are
+ {!Cil.isIntegralType}, 
+ {!Cil.isArithmeticType}, 
+ {!Cil.isPointerType}, 
+ {!Cil.isFunctionType}, 
+ {!Cil.isArrayType}. 
+
+ There are two easy ways to scan a type. First, you can use the
+{!Cil.existsType} to return a boolean answer about a type. This function
+is controlled by a user-provided function that is queried for each type that is
+used to construct the current type. The function can specify whether to
+terminate the scan with a boolean result or to continue the scan for the
+nested types. 
+
+ The other method for scanning types is provided by the visitor interface (see
+ {!Cil.cilVisitor}).
+
+ If you want to compare types (or to use them as hash-values) then you should
+use instead type signatures (represented as {!Cil.typsig}). These
+contain the same information as types but canonicalized such that simple Ocaml
+structural equality will tell whether two types are equal. Use
+{!Cil.typeSig} to compute the signature of a type. If you want to ignore
+certain type attributes then use {!Cil.typeSigWithAttrs}. 
+
+*)
+
+
+(** Various kinds of integers *)
+and ikind = 
+    IChar       (** [char] *)
+  | ISChar      (** [signed char] *)
+  | IUChar      (** [unsigned char] *)
+  | IInt        (** [int] *)
+  | IUInt       (** [unsigned int] *)
+  | IShort      (** [short] *)
+  | IUShort     (** [unsigned short] *)
+  | ILong       (** [long] *)
+  | IULong      (** [unsigned long] *)
+  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
+  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on Microsoft 
+                    Visual C) *)
+
+(** Various kinds of floating-point numbers*)
+and fkind = 
+    FFloat      (** [float] *)
+  | FDouble     (** [double] *)
+  | FLongDouble (** [long double] *)
+
+
+(** {b Attributes.} *)
+
+and attribute = Attr of string * attrparam list
+(** An attribute has a name and some optional parameters. The name should not 
+ * start or end with underscore. When CIL parses attribute names it will 
+ * strip leading and ending underscores (to ensure that the multitude of GCC 
+ * attributes such as const, __const and __const__ all mean the same thing.) *)
+
+(** Attributes are lists sorted by the attribute name. Use the functions 
+ * {!Cil.addAttribute} and {!Cil.addAttributes} to insert attributes in an 
+ * attribute list and maintain the sortedness. *)
+and attributes = attribute list
+ 
+(** The type of parameters of attributes *)
+and attrparam = 
+  | AInt of int                          (** An integer constant *)
+  | AStr of string                       (** A string constant *)
+  | ACons of string * attrparam list       (** Constructed attributes. These 
+                                             are printed [foo(a1,a2,...,an)]. 
+                                             The list of parameters can be 
+                                             empty and in that case the 
+                                             parentheses are not printed. *)
+  | ASizeOf of typ                       (** A way to talk about types *)
+  | ASizeOfE of attrparam
+  | ASizeOfS of typsig                   (** Replacement for ASizeOf in type
+                                             signatures.  Only used for
+                                             attributes inside typsigs.*)
+  | AAlignOf of typ
+  | AAlignOfE of attrparam
+  | AAlignOfS of typsig
+  | AUnOp of unop * attrparam
+  | ABinOp of binop * attrparam * attrparam
+  | ADot of attrparam * string           (** a.foo **)
+
+(** {b Structures.} The {!Cil.compinfo} describes the definition of a 
+ * structure or union type. Each such {!Cil.compinfo} must be defined at the 
+ * top-level using the [GCompTag] constructor and must be shared by all 
+ * references to this type (using either the [TComp] type constructor or from 
+ * the definition of the fields. 
+
+   If all you need is to scan the definition of each 
+ * composite type once, you can do that by scanning all top-level [GCompTag]. 
+
+ * Constructing a {!Cil.compinfo} can be tricky since it must contain fields 
+ * that might refer to the host {!Cil.compinfo} and furthermore the type of 
+ * the field might need to refer to the {!Cil.compinfo} for recursive types. 
+ * Use the {!Cil.mkCompInfo} function to create a {!Cil.compinfo}. You can 
+ * easily fetch the {!Cil.fieldinfo} for a given field in a structure with 
+ * {!Cil.getCompField}. *)
+
+(** The definition of a structure or union type. Use {!Cil.mkCompInfo} to 
+ * make one and use {!Cil.copyCompInfo} to copy one (this ensures that a new 
+ * key is assigned and that the fields have the right pointers to parents.). *)
+and compinfo = {
+    mutable cstruct: bool;              
+   (** True if struct, False if union *)
+    mutable cname: string;              
+   (** The name. Always non-empty. Use {!Cil.compFullName} to get the full 
+    * name of a comp (along with the struct or union) *)
+    mutable ckey: int;                  
+    (** A unique integer. This is assigned by {!Cil.mkCompInfo} using a 
+     * global variable in the Cil module. Thus two identical structs in two 
+     * different files might have different keys. Use {!Cil.copyCompInfo} to 
+     * copy structures so that a new key is assigned. *)
+    mutable cfields: fieldinfo list;    
+    (** Information about the fields. Notice that each fieldinfo has a 
+      * pointer back to the host compinfo. This means that you should not 
+      * share fieldinfo's between two compinfo's *) 
+    mutable cattr:   attributes;        
+    (** The attributes that are defined at the same time as the composite 
+     * type. These attributes can be supplemented individually at each 
+     * reference to this [compinfo] using the [TComp] type constructor. *)
+    mutable cdefined: bool;
+    (** This boolean flag can be used to distinguish between structures
+     that have not been defined and those that have been defined but have
+     no fields (such things are allowed in gcc). *)
+    mutable creferenced: bool;          
+    (** True if used. Initially set to false. *)
+  }
+
+(** {b Structure fields.} The {!Cil.fieldinfo} structure is used to describe 
+ * a structure or union field. Fields, just like variables, can have 
+ * attributes associated with the field itself or associated with the type of 
+ * the field (stored along with the type of the field). *)
+
+(** Information about a struct/union field *)
+and fieldinfo = { 
+    mutable fcomp: compinfo;            
+     (** The host structure that contains this field. There can be only one 
+      * [compinfo] that contains the field. *)
+    mutable fname: string;              
+    (** The name of the field. Might be the value of {!Cil.missingFieldName} 
+     * in which case it must be a bitfield and is not printed and it does not 
+     * participate in initialization *)
+    mutable ftype: typ;     
+    (** The type *)
+    mutable fbitfield: int option;      
+    (** If a bitfield then ftype should be an integer type and the width of 
+     * the bitfield must be 0 or a positive integer smaller or equal to the 
+     * width of the integer type. A field of width 0 is used in C to control 
+     * the alignment of fields. *)
+    mutable fattr: attributes;          
+    (** The attributes for this field (not for its type) *)
+    mutable floc: location;
+    (** The location where this field is defined *)
+}
+
+
+
+(** {b Enumerations.} Information about an enumeration. This is shared by all 
+ * references to an enumeration. Make sure you have a [GEnumTag] for each of 
+ * of these. *)
+
+(** Information about an enumeration *)
+and enuminfo = {
+    mutable ename: string;              
+    (** The name. Always non-empty. *)
+    mutable eitems: (string * exp * location) list;
+    (** Items with names and values. This list should be non-empty. The item 
+     * values must be compile-time constants. *)
+    mutable eattr: attributes;         
+    (** The attributes that are defined at the same time as the enumeration 
+     * type. These attributes can be supplemented individually at each 
+     * reference to this [enuminfo] using the [TEnum] type constructor. *)
+    mutable ereferenced: bool;         
+    (** True if used. Initially set to false*)
+}
+
+(** {b Enumerations.} Information about an enumeration. This is shared by all 
+ * references to an enumeration. Make sure you have a [GEnumTag] for each of 
+ * of these. *)
+
+(** Information about a defined type *)
+and typeinfo = {
+    mutable tname: string;              
+    (** The name. Can be empty only in a [GType] when introducing a composite 
+     * or enumeration tag. If empty cannot be referred to from the file *)
+    mutable ttype: typ;
+    (** The actual type. This includes the attributes that were present in 
+     * the typedef *)
+    mutable treferenced: bool;         
+    (** True if used. Initially set to false*)
+}
+
+(** {b Variables.} 
+ Each local or global variable is represented by a unique {!Cil.varinfo}
+structure. A global {!Cil.varinfo} can be introduced with the [GVarDecl] or
+[GVar] or [GFun] globals. A local varinfo can be introduced as part of a
+function definition {!Cil.fundec}. 
+
+ All references to a given global or local variable must refer to the same
+copy of the [varinfo]. Each [varinfo] has a globally unique identifier that 
+can be used to index maps and hashtables (the name can also be used for this 
+purpose, except for locals from different functions). This identifier is 
+constructor using a global counter.
+
+ It is very important that you construct [varinfo] structures using only one
+ of the following functions:
+- {!Cil.makeGlobalVar} : to make a global variable
+- {!Cil.makeTempVar} : to make a temporary local variable whose name
+will be generated so that to avoid conflict with other locals. 
+- {!Cil.makeLocalVar} : like {!Cil.makeTempVar} but you can specify the
+exact name to be used. 
+- {!Cil.copyVarinfo}: make a shallow copy of a varinfo assigning a new name 
+and a new unique identifier
+
+ A [varinfo] is also used in a function type to denote the list of formals. 
+
+*)
+
+(** Information about a variable. *)
+and varinfo = { 
+    mutable vname: string;		
+    (** The name of the variable. Cannot be empty. It is primarily your 
+     * responsibility to ensure the uniqueness of a variable name. For local 
+     * variables {!Cil.makeTempVar} helps you ensure that the name is unique. 
+     *)
+
+    mutable vtype: typ;                 
+    (** The declared type of the variable. *)
+
+    mutable vattr: attributes;          
+    (** A list of attributes associated with the variable.*)
+    mutable vstorage: storage;          
+    (** The storage-class *)
+
+    mutable vglob: bool;	        
+    (** True if this is a global variable*)
+
+    mutable vinline: bool;
+    (** Whether this varinfo is for an inline function. *)
+
+    mutable vdecl: location;            
+    (** Location of variable declaration. *)
+
+    mutable vid: int;  
+    (** A unique integer identifier. This field will be 
+     * set for you if you use one of the {!Cil.makeFormalVar}, 
+     * {!Cil.makeLocalVar}, {!Cil.makeTempVar}, {!Cil.makeGlobalVar}, or 
+     * {!Cil.copyVarinfo}. *)
+
+    mutable vaddrof: bool;              
+    (** True if the address of this variable is taken. CIL will set these 
+     * flags when it parses C, but you should make sure to set the flag 
+     * whenever your transformation create [AddrOf] expression. *)
+
+    mutable vreferenced: bool;          
+    (** True if this variable is ever referenced. This is computed by 
+     * [removeUnusedVars]. It is safe to just initialize this to False *)
+}
+
+(** Storage-class information *)
+and storage = 
+    NoStorage     (** The default storage. Nothing is printed  *)
+  | Static
+  | Register
+  | Extern                              
+
+
+(** {b Expressions.} The CIL expression language contains only the side-effect free expressions of
+C. They are represented as the type {!Cil.exp}. There are several
+interesting aspects of CIL expressions: 
+
+ Integer and floating point constants can carry their textual representation.
+This way the integer 15 can be printed as 0xF if that is how it occurred in the
+source. 
+
+ CIL uses 64 bits to represent the integer constants and also stores the width
+of the integer type. Care must be taken to ensure that the constant is
+representable with the given width. Use the functions {!Cil.kinteger},
+{!Cil.kinteger64} and {!Cil.integer} to construct constant
+expressions. CIL predefines the constants {!Cil.zero},
+{!Cil.one} and {!Cil.mone} (for -1). 
+
+ Use the functions {!Cil.isConstant} and {!Cil.isInteger} to test if
+an expression is a constant and a constant integer respectively.
+
+ CIL keeps the type of all unary and binary expressions. You can think of that
+type qualifying the operator. Furthermore there are different operators for
+arithmetic and comparisons on arithmetic types and on pointers. 
+
+ Another unusual aspect of CIL is that the implicit conversion between an
+expression of array type and one of pointer type is made explicit, using the
+[StartOf] expression constructor (which is not printed). If you apply the
+[AddrOf}]constructor to an lvalue of type [T] then you will be getting an
+expression of type [TPtr(T)].
+
+ You can find the type of an expression with {!Cil.typeOf}. 
+
+ You can perform constant folding on expressions using the function
+{!Cil.constFold}. 
+*)
+
+(** Expressions (Side-effect free)*)
+and exp =
+    Const      of constant              (** Constant *)
+  | Lval       of lval                  (** Lvalue *)
+  | SizeOf     of typ                   
+    (** sizeof(<type>). Has [unsigned int] type (ISO 6.5.3.4). This is not 
+     * turned into a constant because some transformations might want to 
+     * change types *)
+
+  | SizeOfE    of exp                   
+    (** sizeof(<expression>) *)
+
+  | SizeOfStr  of string
+    (** sizeof(string_literal). We separate this case out because this is the 
+      * only instance in which a string literal should not be treated as 
+      * having type pointer to character. *)
+
+  | AlignOf    of typ                   
+    (** This corresponds to the GCC __alignof_. Has [unsigned int] type *)
+  | AlignOfE   of exp  
+
+                                        
+  | UnOp       of unop * exp * typ     
+    (** Unary operation. Includes the type of the result. *)
+
+  | BinOp      of binop * exp * exp * typ
+    (** Binary operation. Includes the type of the result. The arithmetic 
+     * conversions are made explicit for the arguments. *)
+
+  | CastE      of typ * exp            
+    (** Use {!Cil.mkCast} to make casts.  *)
+
+  | AddrOf     of lval                 
+    (** Always use {!Cil.mkAddrOf} to construct one of these. Apply to an 
+     * lvalue of type [T] yields an expression of type [TPtr(T)] *)
+
+  | StartOf    of lval   
+    (** Conversion from an array to a pointer to the beginning of the array. 
+     * Given an lval of type [TArray(T)] produces an expression of type 
+     * [TPtr(T)]. In C this operation is implicit, the [StartOf] operator is 
+     * not printed. We have it in CIL because it makes the typing rules 
+     * simpler. *)
+
+(** {b Constants.} *)
+
+(** Literal constants *)
+and constant =
+  | CInt64 of int64 * ikind * string option 
+    (** Integer constant. Give the ikind (see ISO9899 6.1.3.2) and the 
+     * textual representation, if available. (This allows us to print a 
+     * constant as, for example, 0xF instead of 15.) Use {!Cil.integer} or 
+     * {!Cil.kinteger} to create these. Watch out for integers that cannot be 
+     * represented on 64 bits. OCAML does not give Overflow exceptions. *)
+  | CStr of string 
+    (* String constant. The escape characters inside the string have been 
+     * already interpreted. This constant has pointer to character type! The 
+     * only case when you would like a string literal to have an array type 
+     * is when it is an argument to sizeof. In that case you should use 
+     * SizeOfStr. *)
+  | CWStr of int64 list  
+    (* Wide character string constant. Note that the local interpretation
+     * of such a literal depends on {!Cil.wcharType} and {!Cil.wcharKind}.
+     * Such a constant has type pointer to {!Cil.wcharType}. The
+     * escape characters in the string have not been "interpreted" in 
+     * the sense that L"A\xabcd" remains "A\xabcd" rather than being
+     * represented as the wide character list with two elements: 65 and
+     * 43981. That "interpretation" depends on the underlying wide
+     * character type. *)
+  | CChr of char   
+    (** Character constant.  This has type int, so use charConstToInt
+     * to read the value in case sign-extension is needed. *)
+  | CReal of float * fkind * string option 
+     (** Floating point constant. Give the fkind (see ISO 6.4.4.2) and also 
+      * the textual representation, if available. *)
+  | CEnum of exp * string * enuminfo
+     (** An enumeration constant with the given value, name, from the given 
+      * enuminfo. This is used only if {!Cil.lowerConstants} is true 
+      * (default). Use {!Cil.constFoldVisitor} to replace these with integer 
+      * constants. *)
+
+(** Unary operators *)
+and unop =
+    Neg                                 (** Unary minus *)
+  | BNot                                (** Bitwise complement (~) *)
+  | LNot                                (** Logical Not (!) *)
+
+(** Binary operations *)
+and binop =
+    PlusA                               (** arithmetic + *)
+  | PlusPI                              (** pointer + integer *)
+  | IndexPI                             (** pointer + integer but only when 
+                                         * it arises from an expression 
+                                         * [e\[i\]] when [e] is a pointer and 
+                                         * not an array. This is semantically 
+                                         * the same as PlusPI but CCured uses 
+                                         * this as a hint that the integer is 
+                                         * probably positive. *)
+  | MinusA                              (** arithmetic - *)
+  | MinusPI                             (** pointer - integer *)
+  | MinusPP                             (** pointer - pointer *)
+  | Mult                                (** * *)
+  | Div                                 (** / *)
+  | Mod                                 (** % *)
+  | Shiftlt                             (** shift left *)
+  | Shiftrt                             (** shift right *)
+
+  | Lt                                  (** <  (arithmetic comparison) *)
+  | Gt                                  (** >  (arithmetic comparison) *)  
+  | Le                                  (** <= (arithmetic comparison) *)
+  | Ge                                  (** >  (arithmetic comparison) *)
+  | Eq                                  (** == (arithmetic comparison) *)
+  | Ne                                  (** != (arithmetic comparison) *)            
+  | BAnd                                (** bitwise and *)
+  | BXor                                (** exclusive-or *)
+  | BOr                                 (** inclusive-or *)
+
+  | LAnd                                (** logical and. Unlike other 
+                                         * expressions this one does not 
+                                         * always evaluate both operands. If 
+                                         * you want to use these, you must 
+                                         * set {!Cil.useLogicalOperators}. *)
+  | LOr                                 (** logical or. Unlike other 
+                                         * expressions this one does not 
+                                         * always evaluate both operands.  If 
+                                         * you want to use these, you must 
+                                         * set {!Cil.useLogicalOperators}. *)
+
+(** {b Lvalues.} Lvalues are the sublanguage of expressions that can appear at the left of an assignment or as operand to the address-of operator. 
+In C the syntax for lvalues is not always a good indication of the meaning 
+of the lvalue. For example the C value
+{v  
+a[0][1][2]
+ v}
+ might involve 1, 2 or 3 memory reads when used in an expression context,
+depending on the declared type of the variable [a]. If [a] has type [int
+\[4\]\[4\]\[4\]] then we have one memory read from somewhere inside the area 
+that stores the array [a]. On the other hand if [a] has type [int ***] then
+the expression really means [* ( * ( * (a + 0) + 1) + 2)], in which case it is
+clear that it involves three separate memory operations. 
+
+An lvalue denotes the contents of a range of memory addresses. This range 
+is denoted as a host object along with an offset within the object. The 
+host object can be of two kinds: a local or global variable, or an object 
+whose address is in a pointer expression. We distinguish the two cases so 
+that we can tell quickly whether we are accessing some component of a 
+variable directly or we are accessing a memory location through a pointer.
+To make it easy to 
+tell what an lvalue means CIL represents lvalues as a host object and an
+offset (see {!Cil.lval}). The host object (represented as
+{!Cil.lhost}) can be a local or global variable or can be the object
+pointed-to by a pointer expression. The offset (represented as
+{!Cil.offset}) is a sequence of field or array index designators.
+
+ Both the typing rules and the meaning of an lvalue is very precisely
+specified in CIL. 
+
+ The following are a few useful function for operating on lvalues:
+- {!Cil.mkMem} - makes an lvalue of [Mem] kind. Use this to ensure
+that certain equivalent forms of lvalues are canonized. 
+For example, [*&x = x]. 
+- {!Cil.typeOfLval} - the type of an lvalue
+- {!Cil.typeOffset} - the type of an offset, given the type of the
+host. 
+- {!Cil.addOffset} and {!Cil.addOffsetLval} - extend sequences
+of offsets.
+- {!Cil.removeOffset} and {!Cil.removeOffsetLval} - shrink sequences
+of offsets.
+
+The following equivalences hold {v 
+Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off 
+Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off 
+AddrOf (Mem a, NoOffset)        = a                 
+ v}
+
+*)
+(** An lvalue *)
+and lval =
+    lhost * offset
+
+(** The host part of an {!Cil.lval}. *)
+and lhost = 
+  | Var        of varinfo    
+    (** The host is a variable. *)
+
+  | Mem        of exp        
+    (** The host is an object of type [T] when the expression has pointer 
+     * [TPtr(T)]. *)
+
+
+(** The offset part of an {!Cil.lval}. Each offset can be applied to certain 
+  * kinds of lvalues and its effect is that it advances the starting address 
+  * of the lvalue and changes the denoted type, essentially focusing to some 
+  * smaller lvalue that is contained in the original one. *)
+and offset = 
+  | NoOffset          (** No offset. Can be applied to any lvalue and does 
+                        * not change either the starting address or the type. 
+                        * This is used when the lval consists of just a host 
+                        * or as a terminator in a list of other kinds of 
+                        * offsets. *)
+
+  | Field      of fieldinfo * offset    
+                      (** A field offset. Can be applied only to an lvalue 
+                       * that denotes a structure or a union that contains 
+                       * the mentioned field. This advances the offset to the 
+                       * beginning of the mentioned field and changes the 
+                       * type to the type of the mentioned field. *)
+
+  | Index    of exp * offset
+                     (** An array index offset. Can be applied only to an 
+                       * lvalue that denotes an array. This advances the 
+                       * starting address of the lval to the beginning of the 
+                       * mentioned array element and changes the denoted type 
+                       * to be the type of the array element *)
+
+
+(** {b Initializers.} 
+A special kind of expressions are those that can appear as initializers for
+global variables (initialization of local variables is turned into
+assignments). The initializers are represented as type {!Cil.init}. You
+can create initializers with {!Cil.makeZeroInit} and you can conveniently
+scan compound initializers them with {!Cil.foldLeftCompound} or with {!Cil.foldLeftCompoundAll}. 
+*)
+(** Initializers for global variables. *)
+and init = 
+  | SingleInit   of exp   (** A single initializer *)
+  | CompoundInit   of typ * (offset * init) list
+    (** Used only for initializers of structures, unions and arrays. The 
+     * offsets are all of the form [Field(f, NoOffset)] or [Index(i, 
+     * NoOffset)] and specify the field or the index being initialized. For 
+     * structures all fields must have an initializer (except the unnamed 
+     * bitfields), in the proper order. This is necessary since the offsets 
+     * are not printed. For unions there must be exactly one initializer. If 
+     * the initializer is not for the first field then a field designator is 
+     * printed, so you better be on GCC since MSVC does not understand this. 
+     * For arrays, however, we allow you to give only a prefix of the 
+     * initializers. You can scan an initializer list with 
+     * {!Cil.foldLeftCompound} or with {!Cil.foldLeftCompoundAll}. *)
+
+
+(** We want to be able to update an initializer in a global variable, so we 
+ * define it as a mutable field *)
+and initinfo = {
+    mutable init : init option;
+  } 
+
+(** {b Function definitions.} 
+A function definition is always introduced with a [GFun] constructor at the
+top level. All the information about the function is stored into a
+{!Cil.fundec}. Some of the information (e.g. its name, type,
+storage, attributes) is stored as a {!Cil.varinfo} that is a field of the
+[fundec]. To refer to the function from the expression language you must use
+the [varinfo]. 
+
+ The function definition contains, in addition to the body, a list of all the
+local variables and separately a list of the formals. Both kind of variables
+can be referred to in the body of the function. The formals must also be shared
+with the formals that appear in the function type. For that reason, to
+manipulate formals you should use the provided functions
+{!Cil.makeFormalVar} and {!Cil.setFormals} and {!Cil.makeFormalVar}. 
+*)
+(** Function definitions. *)
+and fundec =
+    { mutable svar:     varinfo;        
+         (** Holds the name and type as a variable, so we can refer to it 
+          * easily from the program. All references to this function either 
+          * in a function call or in a prototype must point to the same 
+          * [varinfo]. *)
+      mutable sformals: varinfo list;   
+        (** Formals. These must be in the same order and with the same 
+         * information as the formal information in the type of the function. 
+         * Use {!Cil.setFormals} or 
+         * {!Cil.setFunctionType} or {!Cil.makeFormalVar} 
+         * to set these formals and ensure that they 
+         * are reflected in the function type. Do not make copies of these 
+         * because the body refers to them. *)
+      mutable slocals: varinfo list;    
+        (** Locals. Does NOT include the sformals. Do not make copies of 
+         * these because the body refers to them. *)
+      mutable smaxid: int;           (** Max local id. Starts at 0. Used for 
+                                      * creating the names of new temporary 
+                                      * variables. Updated by 
+                                      * {!Cil.makeLocalVar} and 
+                                      * {!Cil.makeTempVar}. You can also use 
+                                      * {!Cil.setMaxId} to set it after you 
+                                      * have added the formals and locals. *)
+      mutable sbody: block;          (** The function body. *)
+      mutable smaxstmtid: int option;  (** max id of a (reachable) statement 
+                                        * in this function, if we have 
+                                        * computed it. range = 0 ... 
+                                        * (smaxstmtid-1). This is computed by 
+                                        * {!Cil.computeCFGInfo}. *)
+      mutable sallstmts: stmt list;  (** After you call {!Cil.computeCFGInfo} 
+                                      * this field is set to contain all 
+                                      * statements in the function *)
+    }
+
+
+(** A block is a sequence of statements with the control falling through from 
+    one element to the next *)
+and block = 
+   { mutable battrs: attributes;      (** Attributes for the block *)
+     mutable bstmts: stmt list;       (** The statements comprising the block*)
+   } 
+
+
+(** {b Statements}. 
+CIL statements are the structural elements that make the CFG. They are 
+represented using the type {!Cil.stmt}. Every
+statement has a (possibly empty) list of labels. The
+{!Cil.stmtkind} field of a statement indicates what kind of statement it 
+is.
+
+ Use {!Cil.mkStmt} to make a statement and the fill-in the fields. 
+
+CIL also comes with support for control-flow graphs. The [sid] field in
+[stmt] can be used to give unique numbers to statements, and the [succs]
+and [preds] fields can be used to maintain a list of successors and
+predecessors for every statement. The CFG information is not computed by
+default. Instead you must explicitly use the functions
+{!Cil.prepareCFG} and {!Cil.computeCFGInfo} to do it.
+
+*)
+(** Statements. *)
+and stmt = {
+    mutable labels: label list;        
+    (** Whether the statement starts with some labels, case statements or 
+     * default statements. *)
+
+    mutable skind: stmtkind;           
+    (** The kind of statement *)
+
+    mutable sid: int;                  
+    (** A number (>= 0) that is unique in a function. Filled in only after 
+     * the CFG is computed. *)
+    mutable succs: stmt list;          
+    (** The successor statements. They can always be computed from the skind 
+     * and the context in which this statement appears. Filled in only after 
+     * the CFG is computed. *)
+    mutable preds: stmt list;          
+    (** The inverse of the succs function. *)
+  } 
+
+(** Labels *)
+and label = 
+    Label of string * location * bool   
+          (** A real label. If the bool is "true", the label is from the 
+           * input source program. If the bool is "false", the label was 
+           * created by CIL or some other transformation *)
+  | Case of exp * location              (** A case statement. This expression 
+                                         * is lowered into a constant if 
+                                         * {!Cil.lowerConstants} is set to 
+                                         * true. *)
+  | Default of location                 (** A default statement *)
+
+
+
+(** The various kinds of control-flow statements statements *)
+and stmtkind = 
+  | Instr  of instr list               
+  (** A group of instructions that do not contain control flow. Control 
+   * implicitly falls through. *)
+
+  | Return of exp option * location     
+   (** The return statement. This is a leaf in the CFG. *)
+
+  | Goto of stmt ref * location         
+   (** A goto statement. Appears from actual goto's in the code or from 
+    * goto's that have been inserted during elaboration. The reference 
+    * points to the statement that is the target of the Goto. This means that 
+    * you have to update the reference whenever you replace the target 
+    * statement. The target statement MUST have at least a label. *)
+
+  | Break of location                   
+   (** A break to the end of the nearest enclosing loop or Switch *)
+
+  | Continue of location                
+   (** A continue to the start of the nearest enclosing loop *)
+  | If of exp * block * block * location 
+   (** A conditional. Two successors, the "then" and the "else" branches. 
+    * Both branches fall-through to the successor of the If statement. *)
+
+  | Switch of exp * block * (stmt list) * location  
+   (** A switch statement. The statements that implement the cases can be 
+    * reached through the provided list. For each such target you can find 
+    * among its labels what cases it implements. The statements that 
+    * implement the cases are somewhere within the provided [block]. *)
+
+(*
+  | Loop of block * location * (stmt option) * (stmt option)
+    (** A [while(1)] loop. The termination test is implemented in the body of 
+     * a loop using a [Break] statement. If prepareCFG has been called,
+     * the first stmt option will point to the stmt containing the continue
+     * label for this loop and the second will point to the stmt containing
+     * the break label for this loop. *)
+*)
+
+  | While of exp * block * location
+    (** A [while] loop. *)
+
+  | DoWhile of exp * block * location
+    (** A [do...while] loop. *)
+
+  | For of block * exp * block * block * location
+    (** A [for] loop. *)
+
+  | Block of block                      
+    (** Just a block of statements. Use it as a way to keep some block 
+     * attributes local *)
+
+    (** On MSVC we support structured exception handling. This is what you 
+     * might expect. Control can get into the finally block either from the 
+     * end of the body block, or if an exception is thrown. *)
+  | TryFinally of block * block * location
+
+    (** On MSVC we support structured exception handling. The try/except 
+     * statement is a bit tricky: 
+         [__try { blk } 
+         __except (e) {
+            handler
+         }]
+
+         The argument to __except  must be an expression. However, we keep a 
+         list of instructions AND an expression in case you need to make 
+         function calls. We'll print those as a comma expression. The control 
+         can get to the __except expression only if an exception is thrown. 
+         After that, depending on the value of the expression the control 
+         goes to the handler, propagates the exception, or retries the 
+         exception !!!
+     *)      
+  | TryExcept of block * (instr list * exp) * block * location
+  
+
+(** {b Instructions}. 
+ An instruction {!Cil.instr} is a statement that has no local
+(intraprocedural) control flow. It can be either an assignment,
+function call, or an inline assembly instruction. *)
+
+(** Instructions. *)
+and instr =
+    Set        of lval * exp * location  
+   (** An assignment. The type of the expression is guaranteed to be the same 
+    * with that of the lvalue *)
+  | Call       of lval option * exp * exp list * location
+   (** A function call with the (optional) result placed in an lval. It is 
+    * possible that the returned type of the function is not identical to 
+    * that of the lvalue. In that case a cast is printed. The type of the 
+    * actual arguments are identical to those of the declared formals. The 
+    * number of arguments is the same as that of the declared formals, except 
+    * for vararg functions. This construct is also used to encode a call to 
+    * "__builtin_va_arg". In this case the second argument (which should be a 
+    * type T) is encoded SizeOf(T) *)
+
+  | Asm        of attributes * (* Really only const and volatile can appear 
+                               * here *)
+                  string list *         (* templates (CR-separated) *)
+                  (string * lval) list * (* outputs must be lvals with 
+                                          * constraints. I would like these 
+                                          * to be actually variables, but I 
+                                          * run into some trouble with ASMs 
+                                          * in the Linux sources  *)
+                  (string * exp) list * (* inputs with constraints *)
+                  string list *         (* register clobbers *)
+                  location
+    (** There are for storing inline assembly. They follow the GCC 
+      * specification: 
+{v 
+  asm [volatile] ("...template..." "..template.."
+                  : "c1" (o1), "c2" (o2), ..., "cN" (oN)
+                  : "d1" (i1), "d2" (i2), ..., "dM" (iM)
+                  : "r1", "r2", ..., "nL" );
+ v}
+
+where the parts are
+
+  - [volatile] (optional): when present, the assembler instruction
+    cannot be removed, moved, or otherwise optimized
+  - template: a sequence of strings, with %0, %1, %2, etc. in the string to 
+    refer to the input and output expressions. I think they're numbered
+    consecutively, but the docs don't specify. Each string is printed on 
+    a separate line. This is the only part that is present for MSVC inline
+    assembly.
+  - "ci" (oi): pairs of constraint-string and output-lval; the 
+    constraint specifies that the register used must have some
+    property, like being a floating-point register; the constraint
+    string for outputs also has "=" to indicate it is written, or
+    "+" to indicate it is both read and written; 'oi' is the
+    name of a C lvalue (probably a variable name) to be used as
+    the output destination
+  - "dj" (ij): pairs of constraint and input expression; the constraint
+    is similar to the "ci"s.  the 'ij' is an arbitrary C expression
+    to be loaded into the corresponding register
+  - "rk": registers to be regarded as "clobbered" by the instruction;
+    "memory" may be specified for arbitrary memory effects
+
+an example (from gcc manual):
+{v 
+  asm volatile ("movc3 %0,%1,%2"
+                : /* no outputs */
+                : "g" (from), "g" (to), "g" (count)
+                : "r0", "r1", "r2", "r3", "r4", "r5");
+ v}
+*)
+
+(** Describes a location in a source file. *)
+and location = { 
+    line: int;		   (** The line number. -1 means "do not know" *)
+    file: string;          (** The name of the source file*)
+    byte: int;             (** The byte position in the source file *)
+}
+
+
+(** Type signatures. Two types are identical iff they have identical 
+ * signatures. These contain the same information as types but canonicalized. 
+ * For example, two function types that are identical except for the name of 
+ * the formal arguments are given the same signature. Also, [TNamed] 
+ * constructors are unrolled. *)
+and typsig = 
+    TSArray of typsig * int64 option * attribute list
+  | TSPtr of typsig * attribute list
+  | TSComp of bool * string * attribute list
+  | TSFun of typsig * typsig list * bool * attribute list
+  | TSEnum of string * attribute list
+  | TSBase of typ
+
+
+
+(** {b Lowering Options} *)
+
+val lowerConstants: bool ref
+    (** Do lower constants (default true) *)
+
+val insertImplicitCasts: bool ref
+    (** Do insert implicit casts (default true) *)
+
+(** To be able to add/remove features easily, each feature should be package 
+   * as an interface with the following interface. These features should be *)
+type featureDescr = {
+    fd_enabled: bool ref; 
+    (** The enable flag. Set to default value  *)
+
+    fd_name: string; 
+    (** This is used to construct an option "--doxxx" and "--dontxxx" that 
+     * enable and disable the feature  *)
+
+    fd_description: string; 
+    (* A longer name that can be used to document the new options  *)
+
+    fd_extraopt: (string * Arg.spec * string) list; 
+    (** Additional command line options *)
+
+    fd_doit: (file -> unit);
+    (** This performs the transformation *)
+
+    fd_post_check: bool; 
+    (* Whether to perform a CIL consistency checking after this stage, if 
+     * checking is enabled (--check is passed to cilly). Set this to true if 
+     * your feature makes any changes for the program. *)
+}
+
+(** Comparison function for locations.
+ ** Compares first by filename, then line, then byte *)
+val compareLoc: location -> location -> int
+
+(** {b Values for manipulating globals} *)
+
+(** Make an empty function *)
+val emptyFunction: string -> fundec
+
+(** Update the formals of a [fundec] and make sure that the function type 
+    has the same information. Will copy the name as well into the type. *)
+val setFormals: fundec -> varinfo list -> unit
+
+(** Set the types of arguments and results as given by the function type 
+ * passed as the second argument. Will not copy the names from the function 
+ * type to the formals *)
+val setFunctionType: fundec -> typ -> unit
+
+
+(** Set the type of the function and make formal arguments for them *)
+val setFunctionTypeMakeFormals: fundec -> typ -> unit
+
+(** Update the smaxid after you have populated with locals and formals 
+ * (unless you constructed those using {!Cil.makeLocalVar} or 
+ * {!Cil.makeTempVar}. *)
+val setMaxId: fundec -> unit
+
+(** A dummy function declaration handy when you need one as a placeholder. It 
+ * contains inside a dummy varinfo. *)
+val dummyFunDec: fundec
+
+(** A dummy file *)
+val dummyFile: file
+
+(** Write a {!Cil.file} in binary form to the filesystem. The file can be
+ * read back in later using {!Cil.loadBinaryFile}, possibly saving parsing
+ * time. The second argument is the name of the file that should be
+ * created. *)
+val saveBinaryFile : file -> string -> unit
+
+(** Write a {!Cil.file} in binary form to the filesystem. The file can be
+ * read back in later using {!Cil.loadBinaryFile}, possibly saving parsing
+ * time. Does not close the channel. *)
+val saveBinaryFileChannel : file -> out_channel -> unit
+
+(** Read a {!Cil.file} in binary form from the filesystem. The first
+ * argument is the name of a file previously created by
+ * {!Cil.saveBinaryFile}. *)
+val loadBinaryFile : string -> file 
+
+(** Get the global initializer and create one if it does not already exist. 
+ * When it creates a global initializer it attempts to place a call to it in 
+ * the main function named by the optional argument (default "main")  *)
+val getGlobInit: ?main_name:string -> file -> fundec  
+
+(** Iterate over all globals, including the global initializer *)
+val iterGlobals: file -> (global -> unit) -> unit
+
+(** Fold over all globals, including the global initializer *)
+val foldGlobals: file -> ('a -> global -> 'a) -> 'a -> 'a
+
+(** Map over all globals, including the global initializer and change things 
+    in place *)
+val mapGlobals: file -> (global -> global) -> unit
+
+val new_sid : unit -> int
+
+(** Prepare a function for CFG information computation by
+  * {!Cil.computeCFGInfo}. This function converts all [Break], [Switch],
+  * [Default] and [Continue] {!Cil.stmtkind}s and {!Cil.label}s into [If]s
+  * and [Goto]s, giving the function body a very CFG-like character. This
+  * function modifies its argument in place. *)
+val prepareCFG: fundec -> unit
+
+(** Compute the CFG information for all statements in a fundec and return a 
+  * list of the statements. The input fundec cannot have [Break], [Switch], 
+  * [Default], or [Continue] {!Cil.stmtkind}s or {!Cil.label}s. Use
+  * {!Cil.prepareCFG} to transform them away.  The second argument should
+  * be [true] if you wish a global statement number, [false] if you wish a
+  * local (per-function) statement numbering. The list of statements is set 
+  * in the sallstmts field of a fundec. 
+  * 
+  * NOTE: unless you want the simpler control-flow graph provided by
+  * prepareCFG, or you need the function's smaxstmtid and sallstmt fields
+  * filled in, we recommend you use {!Cfg.computeFileCFG} instead of this
+  * function to compute control-flow information.
+  * {!Cfg.computeFileCFG} is newer and will handle switch, break, and
+  * continue correctly.*)
+val computeCFGInfo: fundec -> bool -> unit
+
+
+(** Create a deep copy of a function. There should be no sharing between the 
+ * copy and the original function *)
+val copyFunction: fundec -> string -> fundec 
+
+
+(** CIL keeps the types at the beginning of the file and the variables at the 
+ * end of the file. This function will take a global and add it to the 
+ * corresponding stack. Its operation is actually more complicated because if 
+ * the global declares a type that contains references to variables (e.g. in 
+ * sizeof in an array length) then it will also add declarations for the 
+ * variables to the types stack *)
+val pushGlobal: global -> types: global list ref 
+                       -> variables: global list ref -> unit
+
+(** An empty statement. Used in pretty printing *)
+val invalidStmt: stmt
+
+(** A list of the GCC built-in functions. Maps the name to the result and 
+  * argument types, and whether it is vararg *)
+val gccBuiltins: (string, typ * typ list * bool) Hashtbl.t
+
+
+(** A list of the MSVC built-in functions. Maps the name to the result and 
+ * argument types, and whether it is vararg *)
+val msvcBuiltins: (string, typ * typ list * bool) Hashtbl.t
+ 
+(** {b Values for manipulating initializers} *)
+
+
+(** Make a initializer for zero-ing a data type *)
+val makeZeroInit: typ -> init
+
+
+(** Fold over the list of initializers in a Compound. [doinit] is called on 
+ * every present initializer, even if it is of compound type. In the case of 
+ * arrays there might be missing zero-initializers at the end of the list. 
+ * These are not scanned. This is much like [List.fold_left] except we also 
+ * pass the type of the initializer *)
+val foldLeftCompound: 
+    doinit: (offset -> init -> typ -> 'a -> 'a) ->
+    ct: typ ->
+    initl: (offset * init) list ->
+    acc: 'a -> 'a
+
+
+(** Fold over the list of initializers in a Compound, like 
+ * {!Cil.foldLeftCompound} but in the case of an array it scans even missing 
+ * zero initializers at the end of the array *)
+val foldLeftCompoundAll: 
+    doinit: (offset -> init -> typ -> 'a -> 'a) ->
+    ct: typ ->
+    initl: (offset * init) list ->
+    acc: 'a -> 'a
+
+
+
+(** {b Values for manipulating types} *)
+
+(** void *)
+val voidType: typ
+
+(* is the given type "void"? *)
+val isVoidType: typ -> bool
+
+(* is the given type "void *"? *)
+val isVoidPtrType: typ -> bool
+
+(** int *)
+val intType: typ
+
+(** unsigned int *)
+val uintType: typ
+
+(** long *)
+val longType: typ
+
+(** unsigned long *)
+val ulongType: typ
+
+(** char *)
+val charType: typ
+
+(** char * *)
+val charPtrType: typ
+
+(** wchar_t (depends on architecture) and is set when you call 
+ * {!Cil.initCIL}. *)
+val wcharKind: ikind ref
+val wcharType: typ ref 
+
+(** char const * *)
+val charConstPtrType: typ
+
+(** void * *)
+val voidPtrType: typ
+
+(** int * *)
+val intPtrType: typ
+
+(** unsigned int * *)
+val uintPtrType: typ
+
+(** double *)
+val doubleType: typ
+
+(* An unsigned integer type that fits pointers. Depends on {!Cil.msvcMode} 
+ *  and is set when you call {!Cil.initCIL}. *)
+val upointType: typ ref
+
+(* An unsigned integer type that is the type of sizeof. Depends on 
+ * {!Cil.msvcMode} and is set when you call {!Cil.initCIL}.  *)
+val typeOfSizeOf: typ ref
+
+(** Returns true if and only if the given integer type is signed. *)
+val isSigned: ikind -> bool
+
+
+(** Creates a a (potentially recursive) composite type. The arguments are: 
+ * (1) a boolean indicating whether it is a struct or a union, (2) the name 
+ * (always non-empty), (3) a function that when given a representation of the 
+ * structure type constructs the type of the fields recursive type (the first 
+ * argument is only useful when some fields need to refer to the type of the 
+ * structure itself), and (4) a list of attributes to be associated with the 
+ * composite type. The resulting compinfo has the field "cdefined" only if 
+ * the list of fields is non-empty. *)
+val mkCompInfo: bool ->      (* whether it is a struct or a union *)
+               string ->     (* name of the composite type; cannot be empty *)
+               (compinfo -> 
+                  (string * typ * int option * attributes * location) list) ->
+               (* a function that when given a forward 
+                  representation of the structure type constructs the type of 
+                  the fields. The function can ignore this argument if not 
+                  constructing a recursive type.  *)
+               attributes -> compinfo
+
+(** Makes a shallow copy of a {!Cil.compinfo} changing the name and the key.*)
+val copyCompInfo: compinfo -> string -> compinfo
+
+(** This is a constant used as the name of an unnamed bitfield. These fields
+    do not participate in initialization and their name is not printed. *)
+val missingFieldName: string 
+
+(** Get the full name of a comp *)
+val compFullName: compinfo -> string
+
+(** Returns true if this is a complete type. 
+   This means that sizeof(t) makes sense. 
+   Incomplete types are not yet defined 
+   structures and empty arrays. *)
+val isCompleteType: typ -> bool  
+
+(** Unroll a type until it exposes a non 
+ * [TNamed]. Will collect all attributes appearing in [TNamed]!!! *)
+val unrollType: typ -> typ  
+
+(** Unroll all the TNamed in a type (even under type constructors such as 
+ * [TPtr], [TFun] or [TArray]. Does not unroll the types of fields in [TComp] 
+ * types. Will collect all attributes *)
+val unrollTypeDeep: typ -> typ 
+
+(** Separate out the storage-modifier name attributes *)
+val separateStorageModifiers: attribute list -> attribute list * attribute list
+
+(** True if the argument is an integral type (i.e. integer or enum) *)
+val isIntegralType: typ -> bool
+
+(** True if the argument is an arithmetic type (i.e. integer, enum or 
+    floating point *)
+val isArithmeticType: typ -> bool
+
+(**True if the argument is a pointer type *)
+val isPointerType: typ -> bool
+
+(** True if the argument is a function type *)
+val isFunctionType: typ -> bool
+
+(** Obtain the argument list ([] if None) *)
+val argsToList: (string * typ * attributes) list option 
+                  -> (string * typ * attributes) list
+
+(** True if the argument is an array type *)
+val isArrayType: typ -> bool
+
+(** Raised when {!Cil.lenOfArray} fails either because the length is [None] 
+  * or because it is a non-constant expression *)
+exception LenOfArray
+
+(** Call to compute the array length as present in the array type, to an 
+  * integer. Raises {!Cil.LenOfArray} if not able to compute the length, such 
+  * as when there is no length or the length is not a constant. *)
+val lenOfArray: exp option -> int
+
+(** Return a named fieldinfo in compinfo, or raise Not_found *)
+val getCompField: compinfo -> string -> fieldinfo
+
+
+(** A datatype to be used in conjunction with [existsType] *)
+type existsAction = 
+    ExistsTrue                          (* We have found it *)
+  | ExistsFalse                         (* Stop processing this branch *)
+  | ExistsMaybe                         (* This node is not what we are 
+                                         * looking for but maybe its 
+                                         * successors are *)
+
+(** Scans a type by applying the function on all elements. 
+    When the function returns ExistsTrue, the scan stops with
+    true. When the function returns ExistsFalse then the current branch is not
+    scanned anymore. Care is taken to 
+    apply the function only once on each composite type, thus avoiding 
+    circularity. When the function returns ExistsMaybe then the types that 
+    construct the current type are scanned (e.g. the base type for TPtr and 
+    TArray, the type of fields for a TComp, etc). *)
+val existsType: (typ -> existsAction) -> typ -> bool
+
+
+(** Given a function type split it into return type, 
+ * arguments, is_vararg and attributes. An error is raised if the type is not 
+ * a function type *)
+val splitFunctionType: 
+    typ -> typ * (string * typ * attributes) list option * bool * attributes
+(** Same as {!Cil.splitFunctionType} but takes a varinfo. Prints a nicer 
+ * error message if the varinfo is not for a function *)
+val splitFunctionTypeVI: 
+    varinfo -> typ * (string * typ * attributes) list option * bool * attributes
+
+
+(** {b Type signatures} *)
+
+(** Type signatures. Two types are identical iff they have identical 
+ * signatures. These contain the same information as types but canonicalized. 
+ * For example, two function types that are identical except for the name of 
+ * the formal arguments are given the same signature. Also, [TNamed] 
+ * constructors are unrolled. You shoud use [Util.equals] to compare type 
+ * signatures because they might still contain circular structures (through 
+ * attributes, and sizeof) *)
+
+(** Print a type signature *)
+val d_typsig: unit -> typsig -> Pretty.doc
+
+(** Compute a type signature *)
+val typeSig: typ -> typsig
+
+(** Like {!Cil.typeSig} but customize the incorporation of attributes.
+    Use ~ignoreSign:true to convert all signed integer types to unsigned,
+    so that signed and unsigned will compare the same. *)
+val typeSigWithAttrs: ?ignoreSign:bool -> (attributes -> attributes) -> typ -> typsig
+
+(** Replace the attributes of a signature (only at top level) *)
+val setTypeSigAttrs: attributes -> typsig -> typsig 
+
+(** Get the top-level attributes of a signature *)
+val typeSigAttrs: typsig -> attributes
+
+(*********************************************************)
+(**  LVALUES *)
+
+(** Make a varinfo. Use this (rarely) to make a raw varinfo. Use other 
+ * functions to make locals ({!Cil.makeLocalVar} or {!Cil.makeFormalVar} or 
+ * {!Cil.makeTempVar}) and globals ({!Cil.makeGlobalVar}). Note that this 
+ * function will assign a new identifier. The first argument specifies 
+ * whether the varinfo is for a global. *)
+val makeVarinfo: bool -> string -> typ -> varinfo
+
+(** Make a formal variable for a function. Insert it in both the sformals 
+    and the type of the function. You can optionally specify where to insert 
+    this one. If where = "^" then it is inserted first. If where = "$" then 
+    it is inserted last. Otherwise where must be the name of a formal after 
+    which to insert this. By default it is inserted at the end. *)
+val makeFormalVar: fundec -> ?where:string -> string -> typ -> varinfo
+
+(** Make a local variable and add it to a function's slocals (only if insert = 
+    true, which is the default). Make sure you know what you are doing if you 
+    set insert=false.  *)
+val makeLocalVar: fundec -> ?insert:bool -> string -> typ -> varinfo
+
+(** Make a temporary variable and add it to a function's slocals. The name of 
+    the temporary variable will be generated based on the given name hint so 
+    that to avoid conflicts with other locals.  *)
+val makeTempVar: fundec -> ?name: string -> typ -> varinfo
+
+
+(** Make a global variable. Your responsibility to make sure that the name 
+    is unique *) 
+val makeGlobalVar: string -> typ -> varinfo
+
+(** Make a shallow copy of a [varinfo] and assign a new identifier *)
+val copyVarinfo: varinfo -> string -> varinfo
+
+
+(** Generate a new variable ID. This will be different than any variable ID 
+ * that is generated by {!Cil.makeLocalVar} and friends *)
+val newVID: unit -> int
+
+(** Add an offset at the end of an lvalue. Make sure the type of the lvalue 
+ * and the offset are compatible. *)
+val addOffsetLval: offset -> lval -> lval 
+
+(** [addOffset o1 o2] adds [o1] to the end of [o2]. *)
+val addOffset:     offset -> offset -> offset
+
+(** Remove ONE offset from the end of an lvalue. Returns the lvalue with the 
+ * trimmed offset and the final offset. If the final offset is [NoOffset] 
+ * then the original [lval] did not have an offset. *)
+val removeOffsetLval: lval -> lval * offset
+
+(** Remove ONE offset from the end of an offset sequence. Returns the 
+ * trimmed offset and the final offset. If the final offset is [NoOffset] 
+ * then the original [lval] did not have an offset. *)
+val removeOffset:   offset -> offset * offset
+
+(** Compute the type of an lvalue *)
+val typeOfLval: lval -> typ
+
+(** Compute the type of an offset from a base type *)
+val typeOffset: typ -> offset -> typ 
+
+
+(*******************************************************)
+(** {b Values for manipulating expressions} *)
+
+
+(* Construct integer constants *)
+
+(** 0 *)
+val zero: exp
+
+(** 1 *)
+val one: exp
+
+(** -1 *)
+val mone: exp
+
+
+(** Construct an integer of a given kind, using OCaml's int64 type. If needed 
+  * it will truncate the integer to be within the representable range for the 
+  * given kind. *)
+val kinteger64: ikind -> int64 -> exp
+
+(** Construct an integer of a given kind. Converts the integer to int64 and 
+  * then uses kinteger64. This might truncate the value if you use a kind 
+  * that cannot represent the given integer. This can only happen for one of 
+  * the Char or Short kinds *)
+val kinteger: ikind -> int -> exp
+
+(** Construct an integer of kind IInt. You can use this always since the 
+    OCaml integers are 31 bits and are guaranteed to fit in an IInt *)
+val integer: int -> exp
+
+
+(** True if the given expression is a (possibly cast'ed) 
+    character or an integer constant *)
+val isInteger: exp -> int64 option
+
+(** True if the expression is a compile-time constant *)
+val isConstant: exp -> bool
+
+(** True if the given expression is a (possibly cast'ed) integer or character 
+    constant with value zero *)
+val isZero: exp -> bool
+
+(** Given the character c in a (CChr c), sign-extend it to 32 bits.
+  (This is the official way of interpreting character constants, according to
+  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
+  Returns CInt64(sign-extened c, IInt, None) *)
+val charConstToInt: char -> constant
+
+(** Do constant folding on an expression. If the first argument is true then 
+    will also compute compiler-dependent expressions such as sizeof *)    
+val constFold: bool -> exp -> exp
+
+(** Do constant folding on a binary operation. The bulk of the work done by 
+    [constFold] is done here. If the first argument is true then 
+    will also compute compiler-dependent expressions such as sizeof *)
+val constFoldBinOp: bool -> binop -> exp -> exp -> typ -> exp
+
+(** Increment an expression. Can be arithmetic or pointer type *) 
+val increm: exp -> int -> exp
+
+
+(** Makes an lvalue out of a given variable *)
+val var: varinfo -> lval
+
+(** Make an AddrOf. Given an lvalue of type T will give back an expression of 
+    type ptr(T). It optimizes somewhat expressions like "& v" and "& v[0]"  *)
+val mkAddrOf: lval -> exp               
+
+
+(** Like mkAddrOf except if the type of lval is an array then it uses 
+    StartOf. This is the right operation for getting a pointer to the start 
+    of the storage denoted by lval. *)
+val mkAddrOrStartOf: lval -> exp
+
+(** Make a Mem, while optimizing AddrOf. The type of the addr must be 
+    TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
+    implicit conversion between an array and the pointer to the first 
+    element does not apply. You must do the conversion yourself using 
+    StartOf *)
+val mkMem: addr:exp -> off:offset -> lval
+
+(** Make an expression that is a string constant (of pointer type) *)
+val mkString: string -> exp
+
+(** Construct a cast when having the old type of the expression. If the new 
+  * type is the same as the old type, then no cast is added. *)
+val mkCastT: e:exp -> oldt:typ -> newt:typ -> exp
+
+(** Like {!Cil.mkCastT} but uses typeOf to get [oldt] *)  
+val mkCast: e:exp -> newt:typ -> exp 
+
+(** Removes casts from this expression, but ignores casts within
+  other expression constructs.  So we delete the (A) and (B) casts from 
+  "(A)(B)(x + (C)y)", but leave the (C) cast. *)
+val stripCasts: exp -> exp
+
+(** Compute the type of an expression *)
+val typeOf: exp -> typ
+
+(** Convert a string representing a C integer literal to an expression. 
+ * Handles the prefixes 0x and 0 and the suffixes L, U, UL, LL, ULL *)
+val parseInt: string -> exp
+
+
+(**********************************************)
+(** {b Values for manipulating statements} *)
+
+(** Construct a statement, given its kind. Initialize the [sid] field to -1,
+    and [labels], [succs] and [preds] to the empty list *)
+val mkStmt: stmtkind -> stmt
+
+(** Construct a block with no attributes, given a list of statements *)
+val mkBlock: stmt list -> block
+
+(** Construct a statement consisting of just one instruction *)
+val mkStmtOneInstr: instr -> stmt
+
+(** Try to compress statements so as to get maximal basic blocks *)
+(* use this instead of List.@ because you get fewer basic blocks *)
+val compactStmts: stmt list -> stmt list
+
+(** Returns an empty statement (of kind [Instr]) *)
+val mkEmptyStmt: unit -> stmt
+
+(** A instr to serve as a placeholder *)
+val dummyInstr: instr
+
+(** A statement consisting of just [dummyInstr] *)
+val dummyStmt: stmt
+
+(** Make a while loop. Can contain Break or Continue *)
+val mkWhile: guard:exp -> body:stmt list -> stmt list
+
+(** Make a for loop for(i=start; i<past; i += incr) \{ ... \}. The body 
+    can contain Break but not Continue. Can be used with i a pointer 
+    or an integer. Start and done must have the same type but incr 
+    must be an integer *)
+val mkForIncr:  iter:varinfo -> first:exp -> stopat:exp -> incr:exp 
+                 -> body:stmt list -> stmt list
+
+(** Make a for loop for(start; guard; next) \{ ... \}. The body can 
+    contain Break but not Continue !!! *) 
+val mkFor: start:stmt list -> guard:exp -> next: stmt list -> 
+                                       body: stmt list -> stmt list
+ 
+
+
+(**************************************************)
+(** {b Values for manipulating attributes} *)
+
+(** Various classes of attributes *)
+type attributeClass = 
+    AttrName of bool 
+        (** Attribute of a name. If argument is true and we are on MSVC then 
+            the attribute is printed using __declspec as part of the storage 
+            specifier  *)
+  | AttrFunType of bool 
+        (** Attribute of a function type. If argument is true and we are on 
+            MSVC then the attribute is printed just before the function name *)
+  | AttrType  (** Attribute of a type *)
+
+(** This table contains the mapping of predefined attributes to classes. 
+    Extend this table with more attributes as you need. This table is used to 
+    determine how to associate attributes with names or types *)
+val attributeHash: (string, attributeClass) Hashtbl.t
+
+(** Partition the attributes into classes:name attributes, function type, 
+    and type attributes *)
+val partitionAttributes:  default:attributeClass -> 
+                         attributes -> attribute list * (* AttrName *)
+                                       attribute list * (* AttrFunType *)
+                                           attribute list   (* AttrType *)
+
+(** Add an attribute. Maintains the attributes in sorted order of the second 
+    argument *)
+val addAttribute: attribute -> attributes -> attributes
+    
+(** Add a list of attributes. Maintains the attributes in sorted order. The 
+    second argument must be sorted, but not necessarily the first *)
+val addAttributes: attribute list -> attributes -> attributes
+
+(** Remove all attributes with the given name. Maintains the attributes in 
+    sorted order.  *)
+val dropAttribute: string -> attributes -> attributes
+
+(** Remove all attributes with names appearing in the string list.
+ *  Maintains the attributes in sorted order *)
+val dropAttributes: string list -> attributes -> attributes
+
+(** Retains attributes with the given name *)
+val filterAttributes: string -> attributes -> attributes
+
+(** True if the named attribute appears in the attribute list. The list of
+    attributes must be sorted.  *)
+val hasAttribute: string -> attributes -> bool
+
+(** Returns all the attributes contained in a type. This requires a traversal 
+    of the type structure, in case of composite, enumeration and named types *)
+val typeAttrs: typ -> attribute list
+
+val setTypeAttrs: typ -> attributes -> typ (* Resets the attributes *)
+
+
+(** Add some attributes to a type *)
+val typeAddAttributes: attribute list -> typ -> typ
+
+(** Remove all attributes with the given names from a type. Note that this
+    does not remove attributes from typedef and tag definitions, just from 
+    their uses *)
+val typeRemoveAttributes: string list -> typ -> typ
+
+
+(******************
+ ******************  VISITOR
+ ******************)
+(** {b The visitor} *)
+
+(** Different visiting actions. 'a will be instantiated with [exp], [instr],
+    etc. *)
+type 'a visitAction = 
+    SkipChildren                        (** Do not visit the children. Return 
+                                            the node as it is. *)
+  | DoChildren                          (** Continue with the children of this 
+                                            node. Rebuild the node on return 
+                                            if any of the children changes 
+                                            (use == test) *)
+  | ChangeTo of 'a                      (** Replace the expression with the 
+                                            given one *)
+  | ChangeDoChildrenPost of 'a * ('a -> 'a) (** First consider that the entire 
+                                           exp is replaced by the first 
+                                           parameter. Then continue with 
+                                           the children. On return rebuild 
+                                           the node if any of the children 
+                                           has changed and then apply the 
+                                           function on the node *)
+
+
+
+(** A visitor interface for traversing CIL trees. Create instantiations of 
+ * this type by specializing the class {!Cil.nopCilVisitor}. Each of the 
+ * specialized visiting functions can also call the [queueInstr] to specify 
+ * that some instructions should be inserted before the current instruction 
+ * or statement. Use syntax like [self#queueInstr] to call a method
+ * associated with the current object. *)
+class type cilVisitor = object
+  method vvdec: varinfo -> varinfo visitAction  
+    (** Invoked for each variable declaration. The subtrees to be traversed 
+     * are those corresponding to the type and attributes of the variable. 
+     * Note that variable declarations are all the [GVar], [GVarDecl], [GFun], 
+     * all the [varinfo] in formals of function types, and the formals and 
+     * locals for function definitions. This means that the list of formals 
+     * in a function definition will be traversed twice, once as part of the 
+     * function type and second as part of the formals in a function 
+     * definition. *)
+
+  method vvrbl: varinfo -> varinfo visitAction  
+    (** Invoked on each variable use. Here only the [SkipChildren] and 
+     * [ChangeTo] actions make sense since there are no subtrees. Note that 
+     * the type and attributes of the variable are not traversed for a 
+     * variable use *)
+
+  method vexpr: exp -> exp visitAction          
+    (** Invoked on each expression occurrence. The subtrees are the 
+     * subexpressions, the types (for a [Cast] or [SizeOf] expression) or the 
+     * variable use. *)
+
+  method vlval: lval -> lval visitAction        
+    (** Invoked on each lvalue occurrence *)
+
+  method voffs: offset -> offset visitAction    
+    (** Invoked on each offset occurrence that is *not* as part
+      * of an initializer list specification, i.e. in an lval or
+      * recursively inside an offset. *)
+
+  method vinitoffs: offset -> offset visitAction
+    (** Invoked on each offset appearing in the list of a 
+      * CompoundInit initializer.  *)
+
+  method vinst: instr -> instr list visitAction
+    (** Invoked on each instruction occurrence. The [ChangeTo] action can
+     * replace this instruction with a list of instructions *)
+
+  method vstmt: stmt -> stmt visitAction        
+    (** Control-flow statement. The default [DoChildren] action does not 
+     * create a new statement when the components change. Instead it updates 
+     * the contents of the original statement. This is done to preserve the 
+     * sharing with [Goto] and [Case] statements that point to the original 
+     * statement. If you use the [ChangeTo] action then you should take care 
+     * of preserving that sharing yourself.  *)
+
+  method vblock: block -> block visitAction     (** Block. *)
+  method vfunc: fundec -> fundec visitAction    (** Function definition. 
+                                                    Replaced in place. *)
+  method vglob: global -> global list visitAction (** Global (vars, types,
+                                                      etc.)  *)
+  method vinit: init -> init visitAction        (** Initializers for globals *)
+  method vtype: typ -> typ visitAction          (** Use of some type. Note 
+                                                 * that for structure/union 
+                                                 * and enumeration types the 
+                                                 * definition of the 
+                                                 * composite type is not 
+                                                 * visited. Use [vglob] to 
+                                                 * visit it.  *)
+  method vattr: attribute -> attribute list visitAction 
+    (** Attribute. Each attribute can be replaced by a list *)
+  method vattrparam: attrparam -> attrparam visitAction 
+    (** Attribute parameters. *)
+
+    (** Add here instructions while visiting to queue them to preceede the 
+     * current statement or instruction being processed. Use this method only 
+     * when you are visiting an expression that is inside a function body, or 
+     * a statement, because otherwise there will no place for the visitor to 
+     * place your instructions. *)
+  method queueInstr: instr list -> unit
+
+    (** Gets the queue of instructions and resets the queue. This is done 
+     * automatically for you when you visit statments. *)
+  method unqueueInstr: unit -> instr list
+
+end
+
+(** Default Visitor. Traverses the CIL tree without modifying anything *)
+class nopCilVisitor: cilVisitor
+
+(* other cil constructs *)
+
+(** Visit a file. This will will re-cons all globals TWICE (so that it is 
+ * tail-recursive). Use {!Cil.visitCilFileSameGlobals} if your visitor will 
+ * not change the list of globals.  *)
+val visitCilFile: cilVisitor -> file -> unit
+
+(** A visitor for the whole file that does not change the globals (but maybe
+ * changes things inside the globals). Use this function instead of
+ * {!Cil.visitCilFile} whenever appropriate because it is more efficient for
+ * long files. *)
+val visitCilFileSameGlobals: cilVisitor -> file -> unit
+
+(** Visit a global *)
+val visitCilGlobal: cilVisitor -> global -> global list
+
+(** Visit a function definition *)
+val visitCilFunction: cilVisitor -> fundec -> fundec
+
+(* Visit an expression *)
+val visitCilExpr: cilVisitor -> exp -> exp
+
+(** Visit an lvalue *)
+val visitCilLval: cilVisitor -> lval -> lval
+
+(** Visit an lvalue or recursive offset *)
+val visitCilOffset: cilVisitor -> offset -> offset
+
+(** Visit an initializer offset *)
+val visitCilInitOffset: cilVisitor -> offset -> offset
+
+(** Visit an instruction *)
+val visitCilInstr: cilVisitor -> instr -> instr list
+
+(** Visit a statement *)
+val visitCilStmt: cilVisitor -> stmt -> stmt
+
+(** Visit a block *)
+val visitCilBlock: cilVisitor -> block -> block
+
+(** Visit a type *)
+val visitCilType: cilVisitor -> typ -> typ
+
+(** Visit a variable declaration *)
+val visitCilVarDecl: cilVisitor -> varinfo -> varinfo
+
+(** Visit an initializer *)
+val visitCilInit: cilVisitor -> init -> init
+
+
+(** Visit a list of attributes *)
+val visitCilAttributes: cilVisitor -> attribute list -> attribute list
+
+(* And some generic visitors. The above are built with these *)
+
+
+(** {b Utility functions} *)
+
+(** Whether the pretty printer should print output for the MS VC compiler.
+   Default is GCC. After you set this function you should call {!Cil.initCIL}. *)
+val msvcMode: bool ref               
+
+
+(** Whether to use the logical operands LAnd and LOr. By default, do not use 
+ * them because they are unlike other expressions and do not evaluate both of 
+ * their operands *)
+val useLogicalOperators: bool ref
+
+
+(** A visitor that does constant folding. Pass as argument whether you want 
+ * machine specific simplifications to be done, or not. *)
+val constFoldVisitor: bool -> cilVisitor
+
+(** Styles of printing line directives *)
+type lineDirectiveStyle =
+  | LineComment
+  | LinePreprocessorInput
+  | LinePreprocessorOutput
+
+(** How to print line directives *)
+val lineDirectiveStyle: lineDirectiveStyle option ref
+
+(** Whether we print something that will only be used as input to our own 
+ * parser. In that case we are a bit more liberal in what we print *)
+val print_CIL_Input: bool ref
+
+(** Whether to print the CIL as they are, without trying to be smart and 
+  * print nicer code. Normally this is false, in which case the pretty 
+  * printer will turn the while(1) loops of CIL into nicer loops, will not 
+  * print empty "else" blocks, etc. These is one case howewer in which if you 
+  * turn this on you will get code that does not compile: if you use varargs 
+  * the __builtin_va_arg function will be printed in its internal form. *)
+val printCilAsIs: bool ref
+
+(** The length used when wrapping output lines.  Setting this variable to
+  * a large integer will prevent wrapping and make #line directives more
+  * accurate.
+  *)
+val lineLength: int ref
+
+(** Return the string 's' if we're printing output for gcc, suppres
+ *  it if we're printing for CIL to parse back in.  the purpose is to
+ *  hide things from gcc that it complains about, but still be able
+ *  to do lossless transformations when CIL is the consumer *)
+val forgcc: string -> string
+
+(** {b Debugging support} *)
+
+(** A reference to the current location. If you are careful to set this to 
+ * the current location then you can use some built-in logging functions that 
+ * will print the location. *)
+val currentLoc: location ref
+
+(** A reference to the current global being visited *)
+val currentGlobal: global ref 
+
+
+(** CIL has a fairly easy to use mechanism for printing error messages. This 
+ * mechanism is built on top of the pretty-printer mechanism (see 
+ * {!Pretty.doc}) and the error-message modules (see {!Errormsg.error}). 
+
+ Here is a typical example for printing a log message: {v 
+ignore (Errormsg.log "Expression %a is not positive (at %s:%i)\n"
+                        d_exp e loc.file loc.line)
+ v}
+
+ and here is an example of how you print a fatal error message that stop the 
+* execution: {v 
+Errormsg.s (Errormsg.bug "Why am I here?")
+ v}
+
+ Notice that you can use C format strings with some extension. The most 
+useful extension is "%a" that means to consumer the next two argument from 
+the argument list and to apply the first to [unit] and then to the second 
+and to print the resulting {!Pretty.doc}. For each major type in CIL there is 
+a corresponding function that pretty-prints an element of that type:
+*)
+
+
+(** Pretty-print a location *)
+val d_loc: unit -> location -> Pretty.doc
+
+(** Pretty-print the {!Cil.currentLoc} *)
+val d_thisloc: unit -> Pretty.doc
+
+(** Pretty-print an integer of a given kind *)
+val d_ikind: unit -> ikind -> Pretty.doc
+
+(** Pretty-print a floating-point kind *)
+val d_fkind: unit -> fkind -> Pretty.doc
+
+(** Pretty-print storage-class information *)
+val d_storage: unit -> storage -> Pretty.doc
+
+(** Pretty-print a constant *)
+val d_const: unit -> constant -> Pretty.doc
+
+
+val derefStarLevel: int
+val indexLevel: int
+val arrowLevel: int
+val addrOfLevel: int
+val additiveLevel: int
+val comparativeLevel: int
+val bitwiseLevel: int
+
+(** Parentheses level. An expression "a op b" is printed parenthesized if its 
+ * parentheses level is >= that that of its context. Identifiers have the 
+ * lowest level and weakly binding operators (e.g. |) have the largest level. 
+ * The correctness criterion is that a smaller level MUST correspond to a 
+ * stronger precedence!
+ *)
+val getParenthLevel: exp -> int
+
+(** A printer interface for CIL trees. Create instantiations of 
+ * this type by specializing the class {!Cil.defaultCilPrinterClass}. *)
+class type cilPrinter = object
+  method pVDecl: unit -> varinfo -> Pretty.doc
+    (** Invoked for each variable declaration. Note that variable 
+     * declarations are all the [GVar], [GVarDecl], [GFun], all the [varinfo] 
+     * in formals of function types, and the formals and locals for function 
+     * definitions. *)
+
+  method pVar: varinfo -> Pretty.doc
+    (** Invoked on each variable use. *)
+
+  method pLval: unit -> lval -> Pretty.doc
+    (** Invoked on each lvalue occurrence *)
+
+  method pOffset: Pretty.doc -> offset -> Pretty.doc
+    (** Invoked on each offset occurrence. The second argument is the base. *)
+
+  method pInstr: unit -> instr -> Pretty.doc
+    (** Invoked on each instruction occurrence. *)
+
+  method pLabel: unit -> label -> Pretty.doc
+    (** Print a label. *)
+
+  method pStmt: unit -> stmt -> Pretty.doc
+    (** Control-flow statement. This is used by 
+     * {!Cil.printGlobal} and by {!Cil.dumpGlobal}. *)
+
+  method dStmt: out_channel -> int -> stmt -> unit
+    (** Dump a control-flow statement to a file with a given indentation. 
+     * This is used by {!Cil.dumpGlobal}. *)
+
+  method dBlock: out_channel -> int -> block -> unit
+    (** Dump a control-flow block to a file with a given indentation. 
+     * This is used by {!Cil.dumpGlobal}. *)
+
+  method pBlock: unit -> block -> Pretty.doc
+
+  method pBlock: unit -> block -> Pretty.doc
+    (** Print a block. *)
+
+  method pGlobal: unit -> global -> Pretty.doc
+    (** Global (vars, types, etc.). This can be slow and is used only by 
+     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
+
+  method dGlobal: out_channel -> global -> unit
+    (** Dump a global to a file with a given indentation. This is used by 
+     * {!Cil.dumpGlobal} *)
+
+  method pFieldDecl: unit -> fieldinfo -> Pretty.doc
+    (** A field declaration *)
+
+  method pType: Pretty.doc option -> unit -> typ -> Pretty.doc  
+  (* Use of some type in some declaration. The first argument is used to print 
+   * the declared element, or is None if we are just printing a type with no 
+   * name being declared. Note that for structure/union and enumeration types 
+   * the definition of the composite type is not visited. Use [vglob] to 
+   * visit it.  *)
+
+  method pAttr: attribute -> Pretty.doc * bool
+    (** Attribute. Also return an indication whether this attribute must be 
+      * printed inside the __attribute__ list or not. *)
+   
+  method pAttrParam: unit -> attrparam -> Pretty.doc 
+    (** Attribute parameter *)
+   
+  method pAttrs: unit -> attributes -> Pretty.doc
+    (** Attribute lists *)
+
+  method pLineDirective: ?forcefile:bool -> location -> Pretty.doc
+    (** Print a line-number. This is assumed to come always on an empty line. 
+     * If the forcefile argument is present and is true then the file name 
+     * will be printed always. Otherwise the file name is printed only if it 
+     * is different from the last time time this function is called. The last 
+     * file name is stored in a private field inside the cilPrinter object. *)
+
+  method pStmtKind: stmt -> unit -> stmtkind -> Pretty.doc
+    (** Print a statement kind. The code to be printed is given in the
+     * {!Cil.stmtkind} argument.  The initial {!Cil.stmt} argument
+     * records the statement which follows the one being printed;
+     * {!Cil.defaultCilPrinterClass} uses this information to prettify
+     * statement printing in certain special cases. *)
+
+  method pExp: unit -> exp -> Pretty.doc
+    (** Print expressions *) 
+
+  method pInit: unit -> init -> Pretty.doc
+    (** Print initializers. This can be slow and is used by 
+     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
+
+  method dInit: out_channel -> int -> init -> unit
+    (** Dump a global to a file with a given indentation. This is used by 
+     * {!Cil.dumpGlobal} *)
+end
+
+class defaultCilPrinterClass: cilPrinter
+val defaultCilPrinter: cilPrinter
+
+(** These are pretty-printers that will show you more details on the internal 
+ * CIL representation, without trying hard to make it look like C *)
+class plainCilPrinterClass: cilPrinter
+val plainCilPrinter: cilPrinter
+
+(* zra: This is the pretty printer that Maincil will use.
+   by default it is set to defaultCilPrinter *)
+val printerForMaincil: cilPrinter ref
+
+(* Top-level printing functions *)
+(** Print a type given a pretty printer *)
+val printType: cilPrinter -> unit -> typ -> Pretty.doc
+  
+(** Print an expression given a pretty printer *)
+val printExp: cilPrinter -> unit -> exp -> Pretty.doc
+
+(** Print an lvalue given a pretty printer *)
+val printLval: cilPrinter -> unit -> lval -> Pretty.doc
+
+(** Print a global given a pretty printer *)
+val printGlobal: cilPrinter -> unit -> global -> Pretty.doc 
+
+(** Print an attribute given a pretty printer *)
+val printAttr: cilPrinter -> unit -> attribute -> Pretty.doc 
+
+(** Print a set of attributes given a pretty printer *)
+val printAttrs: cilPrinter -> unit -> attributes -> Pretty.doc 
+
+(** Print an instruction given a pretty printer *)
+val printInstr: cilPrinter -> unit -> instr -> Pretty.doc 
+
+(** Print a statement given a pretty printer. This can take very long 
+ * (or even overflow the stack) for huge statements. Use {!Cil.dumpStmt} 
+ * instead. *)
+val printStmt: cilPrinter -> unit -> stmt -> Pretty.doc
+
+(** Print a block given a pretty printer. This can take very long 
+ * (or even overflow the stack) for huge block. Use {!Cil.dumpBlock} 
+ * instead. *)
+val printBlock: cilPrinter -> unit -> block -> Pretty.doc
+
+(** Dump a statement to a file using a given indentation. Use this instead of 
+ * {!Cil.printStmt} whenever possible. *)
+val dumpStmt: cilPrinter -> out_channel -> int -> stmt -> unit
+
+(** Dump a block to a file using a given indentation. Use this instead of 
+ * {!Cil.printBlock} whenever possible. *)
+val dumpBlock: cilPrinter -> out_channel -> int -> block -> unit
+
+(** Print an initializer given a pretty printer. This can take very long 
+ * (or even overflow the stack) for huge initializers. Use {!Cil.dumpInit} 
+ * instead. *)
+val printInit: cilPrinter -> unit -> init -> Pretty.doc 
+
+(** Dump an initializer to a file using a given indentation. Use this instead of 
+ * {!Cil.printInit} whenever possible. *)
+val dumpInit: cilPrinter -> out_channel -> int -> init -> unit
+
+(** Pretty-print a type using {!Cil.defaultCilPrinter} *)
+val d_type: unit -> typ -> Pretty.doc
+
+(** Pretty-print an expression using {!Cil.defaultCilPrinter}  *)
+val d_exp: unit -> exp -> Pretty.doc
+
+(** Pretty-print an lvalue using {!Cil.defaultCilPrinter}   *)
+val d_lval: unit -> lval -> Pretty.doc
+
+(** Pretty-print an offset using {!Cil.defaultCilPrinter}, given the pretty 
+ * printing for the base.   *)
+val d_offset: Pretty.doc -> unit -> offset -> Pretty.doc
+
+(** Pretty-print an initializer using {!Cil.defaultCilPrinter}.  This can be 
+ * extremely slow (or even overflow the stack) for huge initializers. Use 
+ * {!Cil.dumpInit} instead. *)
+val d_init: unit -> init -> Pretty.doc
+
+(** Pretty-print a binary operator *)
+val d_binop: unit -> binop -> Pretty.doc
+
+(** Pretty-print a unary operator *)
+val d_unop: unit -> unop -> Pretty.doc
+
+(** Pretty-print an attribute using {!Cil.defaultCilPrinter}  *)
+val d_attr: unit -> attribute -> Pretty.doc
+
+(** Pretty-print an argument of an attribute using {!Cil.defaultCilPrinter}  *)
+val d_attrparam: unit -> attrparam -> Pretty.doc
+
+(** Pretty-print a list of attributes using {!Cil.defaultCilPrinter}  *)
+val d_attrlist: unit -> attributes -> Pretty.doc 
+
+(** Pretty-print an instruction using {!Cil.defaultCilPrinter}   *)
+val d_instr: unit -> instr -> Pretty.doc
+
+(** Pretty-print a label using {!Cil.defaultCilPrinter} *)
+val d_label: unit -> label -> Pretty.doc
+
+(** Pretty-print a statement using {!Cil.defaultCilPrinter}. This can be 
+ * extremely slow (or even overflow the stack) for huge statements. Use 
+ * {!Cil.dumpStmt} instead. *)
+val d_stmt: unit -> stmt -> Pretty.doc
+
+(** Pretty-print a block using {!Cil.defaultCilPrinter}. This can be 
+ * extremely slow (or even overflow the stack) for huge blocks. Use 
+ * {!Cil.dumpBlock} instead. *)
+val d_block: unit -> block -> Pretty.doc
+
+(** Pretty-print the internal representation of a global using 
+ * {!Cil.defaultCilPrinter}. This can be extremely slow (or even overflow the 
+ * stack) for huge globals (such as arrays with lots of initializers). Use 
+ * {!Cil.dumpGlobal} instead. *)
+val d_global: unit -> global -> Pretty.doc
+
+
+(** Versions of the above pretty printers, that don't print #line directives *)
+val dn_exp       : unit -> exp -> Pretty.doc
+val dn_lval      : unit -> lval -> Pretty.doc
+(* dn_offset is missing because it has a different interface *)
+val dn_init      : unit -> init -> Pretty.doc
+val dn_type      : unit -> typ -> Pretty.doc
+val dn_global    : unit -> global -> Pretty.doc
+val dn_attrlist  : unit -> attributes -> Pretty.doc
+val dn_attr      : unit -> attribute -> Pretty.doc
+val dn_attrparam : unit -> attrparam -> Pretty.doc
+val dn_stmt      : unit -> stmt -> Pretty.doc
+val dn_instr     : unit -> instr -> Pretty.doc
+
+
+(** Pretty-print a short description of the global. This is useful for error 
+ * messages *)
+val d_shortglobal: unit -> global -> Pretty.doc
+
+(** Pretty-print a global. Here you give the channel where the printout
+ * should be sent. *)
+val dumpGlobal: cilPrinter -> out_channel -> global -> unit
+
+(** Pretty-print an entire file. Here you give the channel where the printout
+ * should be sent. *)
+val dumpFile: cilPrinter -> out_channel -> string -> file -> unit
+
+
+(* the following error message producing functions also print a location in 
+ * the code. use {!Errormsg.bug} and {!Errormsg.unimp} if you do not want 
+ * that *)
+
+(** Like {!Errormsg.bug} except that {!Cil.currentLoc} is also printed *)
+val bug: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Errormsg.unimp} except that {!Cil.currentLoc}is also printed *)
+val unimp: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Errormsg.error} except that {!Cil.currentLoc} is also printed *)
+val error: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Cil.error} except that it explicitly takes a location argument, 
+ * instead of using the {!Cil.currentLoc} *)
+val errorLoc: location -> ('a,unit,Pretty.doc) format -> 'a  
+
+(** Like {!Errormsg.warn} except that {!Cil.currentLoc} is also printed *)
+val warn: ('a,unit,Pretty.doc) format -> 'a
+
+
+(** Like {!Errormsg.warnOpt} except that {!Cil.currentLoc} is also printed. 
+ * This warning is printed only of {!Errormsg.warnFlag} is set. *)
+val warnOpt: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Errormsg.warn} except that {!Cil.currentLoc} and context 
+    is also printed *)
+val warnContext: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Errormsg.warn} except that {!Cil.currentLoc} and context is also 
+ * printed. This warning is printed only of {!Errormsg.warnFlag} is set. *)
+val warnContextOpt: ('a,unit,Pretty.doc) format -> 'a
+
+(** Like {!Cil.warn} except that it explicitly takes a location argument, 
+ * instead of using the {!Cil.currentLoc} *)
+val warnLoc: location -> ('a,unit,Pretty.doc) format -> 'a  
+
+(** Sometimes you do not want to see the syntactic sugar that the above 
+ * pretty-printing functions add. In that case you can use the following 
+ * pretty-printing functions. But note that the output of these functions is 
+ * not valid C *)
+
+(** Pretty-print the internal representation of an expression *)
+val d_plainexp: unit -> exp -> Pretty.doc
+
+(** Pretty-print the internal representation of an integer *)
+val d_plaininit: unit -> init -> Pretty.doc
+
+(** Pretty-print the internal representation of an lvalue *)
+val d_plainlval: unit -> lval -> Pretty.doc
+
+(** Pretty-print the internal representation of an lvalue offset 
+val d_plainoffset: unit -> offset -> Pretty.doc *)
+
+(** Pretty-print the internal representation of a type *)
+val d_plaintype: unit -> typ -> Pretty.doc
+
+
+
+(** {b ALPHA conversion} has been moved to the Alpha module. *)
+
+
+(** Assign unique names to local variables. This might be necessary after you 
+ * transformed the code and added or renamed some new variables. Names are 
+ * not used by CIL internally, but once you print the file out the compiler 
+ * downstream might be confused. You might 
+ * have added a new global that happens to have the same name as a local in 
+ * some function. Rename the local to ensure that there would never be 
+ * confusioin. Or, viceversa, you might have added a local with a name that 
+ * conflicts with a global *)
+val uniqueVarNames: file -> unit
+
+(** {b Optimization Passes} *)
+
+(** A peephole optimizer that processes two adjacent statements and possibly 
+    replaces them both. If some replacement happens, then the new statements 
+    are themselves subject to optimization *)
+val peepHole2: (instr * instr -> instr list option) -> stmt list -> unit
+
+(** Similar to [peepHole2] except that the optimization window consists of 
+    one statement, not two *)
+val peepHole1: (instr -> instr list option) -> stmt list -> unit
+
+(** {b Machine dependency} *)
+
+     
+(** Raised when one of the bitsSizeOf functions cannot compute the size of a 
+ * type. This can happen because the type contains array-length expressions 
+ * that we don't know how to compute or because it is a type whose size is 
+ * not defined (e.g. TFun or an undefined compinfo). The string is an 
+ * explanation of the error *)        
+exception SizeOfError of string * typ
+
+(** The size of a type, in bits. Trailing padding is added for structs and 
+ * arrays. Raises {!Cil.SizeOfError} when it cannot compute the size. This 
+ * function is architecture dependent, so you should only call this after you 
+ * call {!Cil.initCIL}. Remember that on GCC sizeof(void) is 1! *)
+val bitsSizeOf: typ -> int
+
+(* The size of a type, in bytes. Returns a constant expression or a "sizeof" 
+ * expression if it cannot compute the size. This function is architecture 
+ * dependent, so you should only call this after you call {!Cil.initCIL}.  *)
+val sizeOf: typ -> exp
+
+(** The minimum alignment (in bytes) for a type. This function is 
+ * architecture dependent, so you should only call this after you call 
+ * {!Cil.initCIL}. *)
+val alignOf_int: typ -> int
+
+(** Give a type of a base and an offset, returns the number of bits from the 
+ * base address and the width (also expressed in bits) for the subobject 
+ * denoted by the offset. Raises {!Cil.SizeOfError} when it cannot compute 
+ * the size. This function is architecture dependent, so you should only call 
+ * this after you call {!Cil.initCIL}. *)
+val bitsOffset: typ -> offset -> int * int
+
+
+(** Whether "char" is unsigned. Set after you call {!Cil.initCIL} *)
+val char_is_unsigned: bool ref
+
+(** Whether the machine is little endian. Set after you call {!Cil.initCIL} *)
+val little_endian: bool ref
+
+(** Whether the compiler generates assembly labels by prepending "_" to the 
+    identifier. That is, will function foo() have the label "foo", or "_foo"?
+    Set after you call {!Cil.initCIL} *)
+val underscore_name: bool ref
+
+(** Represents a location that cannot be determined *)
+val locUnknown: location
+
+(** Return the location of an instruction *)
+val get_instrLoc: instr -> location 
+
+(** Return the location of a global, or locUnknown *)
+val get_globalLoc: global -> location 
+
+(** Return the location of a statement, or locUnknown *)
+val get_stmtLoc: stmtkind -> location 
+
+
+(** Generate an {!Cil.exp} to be used in case of errors. *)
+val dExp: Pretty.doc -> exp 
+
+(** Generate an {!Cil.instr} to be used in case of errors. *)
+val dInstr: Pretty.doc -> location -> instr
+
+(** Generate a {!Cil.global} to be used in case of errors. *)
+val dGlobal: Pretty.doc -> location -> global
+
+(** Like map but try not to make a copy of the list *)
+val mapNoCopy: ('a -> 'a) -> 'a list -> 'a list
+
+(** Like map but each call can return a list. Try not to make a copy of the 
+    list *)
+val mapNoCopyList: ('a -> 'a list) -> 'a list -> 'a list
+
+(** sm: return true if the first is a prefix of the second string *)
+val startsWith: string -> string -> bool
+
+
+(** {b An Interpreter for constructing CIL constructs} *)
+
+(** The type of argument for the interpreter *)
+type formatArg = 
+    Fe of exp
+  | Feo of exp option  (** For array lengths *)
+  | Fu of unop
+  | Fb of binop
+  | Fk of ikind
+  | FE of exp list (** For arguments in a function call *)
+  | Ff of (string * typ * attributes) (** For a formal argument *)
+  | FF of (string * typ * attributes) list (** For formal argument lists *)
+  | Fva of bool (** For the ellipsis in a function type *)
+  | Fv of varinfo
+  | Fl of lval
+  | Flo of lval option 
+
+  | Fo of offset
+
+  | Fc of compinfo
+  | Fi of instr
+  | FI of instr list
+  | Ft of typ
+  | Fd of int
+  | Fg of string
+  | Fs of stmt
+  | FS of stmt list
+  | FA of attributes
+
+  | Fp of attrparam
+  | FP of attrparam list
+
+  | FX of string
+
+
+(** Pretty-prints a format arg *)
+val d_formatarg: unit -> formatArg -> Pretty.doc
+
+val lowerConstants: bool ref
+ (** Do lower constant expressions into constants (default true) *)
diff --git a/cil/src/cillower.ml b/cil/src/cillower.ml
new file mode 100755
index 000000000..61745bf40
--- /dev/null
+++ b/cil/src/cillower.ml
@@ -0,0 +1,57 @@
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** A number of lowering passes over CIL *)
+open Cil
+open Pretty
+module E = Errormsg
+
+(** Lower CEnum constants *)
+class lowerEnumVisitorClass : cilVisitor = object (self)
+  inherit nopCilVisitor 
+
+  method vexpr (e: exp) =
+    match e with
+      Const (CEnum(v, s, ei)) -> 
+        ChangeTo (visitCilExpr (self :>cilVisitor) v)
+
+    | _ -> DoChildren
+
+end
+
+let lowerEnumVisitor = new lowerEnumVisitorClass
diff --git a/cil/src/cillower.mli b/cil/src/cillower.mli
new file mode 100755
index 000000000..a62c9e3b6
--- /dev/null
+++ b/cil/src/cillower.mli
@@ -0,0 +1,42 @@
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** A number of lowering passes over CIL *)
+
+(** Replace enumeration constants with integer constants *)
+val lowerEnumVisitor : Cil.cilVisitor
diff --git a/cil/src/ciloptions.ml b/cil/src/ciloptions.ml
new file mode 100755
index 000000000..9a2b4bd54
--- /dev/null
+++ b/cil/src/ciloptions.ml
@@ -0,0 +1,196 @@
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+module E = Errormsg
+
+let setDebugFlag v name = 
+  E.debugFlag := v;
+  if v then Pretty.flushOften := true
+
+type outfile = 
+    { fname: string;
+      fchan: out_channel } 
+
+let setTraceDepth n =
+  Pretty.printDepth := n
+
+
+      (* Processign of output file arguments *)
+let openFile (what: string) (takeit: outfile -> unit) (fl: string) = 
+  if !E.verboseFlag then
+    ignore (Printf.printf "Setting %s to %s\n" what fl);
+  (try takeit { fname = fl;
+                fchan = open_out fl }
+  with _ ->
+    raise (Arg.Bad ("Cannot open " ^ what ^ " file " ^ fl)))
+
+
+let fileNames : string list ref = ref []
+let recordFile fname = 
+  fileNames := fname :: (!fileNames) 
+
+                         (* Parsing of files with additional names *)
+let parseExtraFile (s: string) = 
+  try
+    let sfile = open_in s in
+    while true do
+      let line = try input_line sfile with e -> (close_in sfile; raise e) in
+      let linelen = String.length line in
+      let rec scan (pos: int) (* next char to look at *)
+          (start: int) : unit (* start of the word, 
+                                 or -1 if none *) =
+        if pos >= linelen then 
+          if start >= 0 then 
+            recordFile (String.sub line start (pos - start))
+          else 
+            () (* Just move on to the next line *)
+        else
+          let c = String.get line pos in
+          match c with 
+            ' ' | '\n' | '\r' | '\t' -> 
+              (* whitespace *)
+              if start >= 0 then begin
+                recordFile (String.sub line start (pos - start));
+              end;
+              scan (pos + 1) (-1)
+                
+          | _ -> (* non-whitespace *)
+              if start >= 0 then 
+                scan (pos + 1) start 
+              else
+                scan (pos + 1) pos
+      in
+        scan 0 (-1)
+    done
+  with Sys_error _ -> E.s (E.error "Cannot find extra file: %s\n" s)
+  |  End_of_file -> () 
+
+
+let options : (string * Arg.spec * string) list = 
+  [ 
+    (* General Options *) 
+    "", Arg.Unit (fun () -> ()), "\n\t\tGeneral Options\n" ; 
+
+    "--version", Arg.Unit 
+              (fun _ -> print_endline ("CIL version " ^ Cil.cilVersion ^
+                       "\nMore information at http://cil.sourceforge.net/\n");
+                 exit 0),
+           "output version information and exit";
+    "--verbose", Arg.Unit (fun _ -> E.verboseFlag := true),
+                "Print lots of random stuff. This is passed on from cilly.";
+    "--warnall", Arg.Unit (fun _ -> E.warnFlag := true), "Show all warnings";
+    "--debug", Arg.String (setDebugFlag true),
+                     "<xxx> turns on debugging flag xxx";
+    "--nodebug", Arg.String (setDebugFlag false), 
+                     "<xxx> turns off debugging flag xxx";
+
+    "--flush", Arg.Unit (fun _ -> Pretty.flushOften := true),
+                     "Flush the output streams often (aids debugging)" ;
+    "--check", Arg.Unit (fun _ -> Cilutil.doCheck := true),
+                     "Run a consistency check over the CIL after every operation.";
+    "--nocheck", Arg.Unit (fun _ -> Cilutil.doCheck := false),
+                     "turns off consistency checking of CIL";
+    "--noPrintLn", Arg.Unit (fun _ -> Cil.lineDirectiveStyle := None;
+                                     Cprint.printLn := false),
+               "Don't output #line directives in the output.";
+    "--commPrintLn", Arg.Unit (fun _ -> Cil.lineDirectiveStyle := Some Cil.LineComment;
+                                       Cprint.printLnComment := true),
+               "Print #line directives in the output, but put them in comments.";
+    "--stats", Arg.Unit (fun _ -> Cilutil.printStats := true),
+               "Print statistics about running times and memory usage.";
+
+
+    "--log", Arg.String (openFile "log" (fun oc -> E.logChannel := oc.fchan)),
+             "Set the name of the log file.  By default stderr is used";
+
+    "--MSVC", Arg.Unit (fun _ ->   Cil.msvcMode := true;
+                                   Frontc.setMSVCMode ();
+                                   if not Machdep.hasMSVC then
+                                     ignore (E.warn "Will work in MSVC mode but will be using machine-dependent parameters for GCC since you do not have the MSVC compiler installed\n")
+                       ), "Enable MSVC compatibility. Default is GNU.";
+
+    "--testcil", Arg.String (fun s -> Cilutil.testcil := s),
+          "test CIL using the given compiler";
+
+    "--ignore-merge-conflicts", 
+                 Arg.Unit (fun _ -> Mergecil.ignore_merge_conflicts := true),
+                  "ignore merging conflicts";
+    "--sliceGlobal", Arg.Unit (fun _ -> Cilutil.sliceGlobal := true),
+               "output is the slice of #pragma cilnoremove(sym) symbols";
+
+    (* sm: some more debugging options *)
+    "--tr",         Arg.String Trace.traceAddMulti,
+                     "<sys>: subsystem to show debug printfs for";
+    "--pdepth",     Arg.Int setTraceDepth,
+                      "<n>: set max print depth (default: 5)";
+
+    "--extrafiles", Arg.String parseExtraFile,
+    "<filename>: the name of a file that contains a list of additional files to process, separated by whitespace of newlines";
+
+    (* Lowering Options *) 
+    "", Arg.Unit (fun () -> ()), "\n\t\tLowering Options\n" ; 
+
+    "--noLowerConstants", Arg.Unit (fun _ -> Cil.lowerConstants := false), 
+     "do not lower constant expressions";
+
+    "--noInsertImplicitCasts", Arg.Unit (fun _ -> Cil.insertImplicitCasts := false),
+    "do not insert implicit casts";
+
+    "--forceRLArgEval", 
+          Arg.Unit (fun n -> Cabs2cil.forceRLArgEval := true),
+          "Forces right to left evaluation of function arguments";
+    "--nocil", Arg.Int (fun n -> Cabs2cil.nocil := n),
+                      "Do not compile to CIL the global with the given index";
+    "--disallowDuplication", Arg.Unit (fun n -> Cabs2cil.allowDuplication := false),
+                      "Prevent small chunks of code from being duplicated";
+    "--keepunused", Arg.Set Rmtmps.keepUnused,
+                "Do not remove the unused variables and types";
+    "--rmUnusedInlines", Arg.Set Rmtmps.rmUnusedInlines,
+                "Delete any unused inline functions.  This is the default in MSVC mode";
+
+
+
+    "", Arg.Unit (fun () -> ()), "\n\t\tOutput Options\n" ; 
+    "--printCilAsIs", Arg.Unit (fun _ -> Cil.printCilAsIs := true),
+               "do not try to simplify the CIL when printing.  Without this flag, CIL will attempt to produce prettier output by e.g. changing while(1) into more meaningful loops.";
+    "--noWrap", Arg.Unit (fun _ -> Cil.lineLength := 100000),
+               "do not wrap long lines when printing";
+
+  ]
+    
diff --git a/cil/src/ciloptions.mli b/cil/src/ciloptions.mli
new file mode 100755
index 000000000..13f65cf41
--- /dev/null
+++ b/cil/src/ciloptions.mli
@@ -0,0 +1,48 @@
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(** The command-line options for CIL *)
+val options : (string * Arg.spec * string) list 
+    
+
+(** The list of file names *)
+val fileNames : string list ref
+
+(** Adds the file to the start of fileNames *)
+val recordFile: string -> unit
diff --git a/cil/src/cilutil.ml b/cil/src/cilutil.ml
new file mode 100644
index 000000000..b9a4da983
--- /dev/null
+++ b/cil/src/cilutil.ml
@@ -0,0 +1,72 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Keep here the globally-visible flags *)
+let doCheck= ref false   (* Whether to check CIL *)
+
+let logCalls = ref false (* Whether to produce a log with all the function 
+                          * calls made *)
+let logWrites = ref false (* Whether to produce a log with all the mem 
+                          * writes made *)
+let doPartial = ref false (* Whether to do partial evaluation and constant 
+                          * folding *)                          
+let doSimpleMem = ref false (* reduce complex memory expressions so that
+                          * they contain at most one lval *) 
+let doOneRet = ref false (* make a functions have at most one 'return' *)
+let doStackGuard = ref false (* instrument function calls and returns to
+maintain a separate stack for return addresses *)
+let doHeapify = ref false (* move stack-allocated arrays to the heap *)
+let makeCFG = ref false (* turn the input CIL file into something more like
+                          * a CFG *)
+let printStats = ref false
+
+(* when 'sliceGlobal' is set, then when 'rmtmps' runs, only globals*)
+(* marked with #pragma cilnoremove(whatever) are kept; when used with *)
+(* cilly.asm.exe, the effect is to slice the input on the noremove symbols *)
+let sliceGlobal = ref false
+
+
+let printStages = ref false
+
+
+let doCxxPP = ref false
+
+let libDir = ref ""
+
+let dumpFCG = ref false
+let testcil = ref ""
+
diff --git a/cil/src/escape.ml b/cil/src/escape.ml
new file mode 100644
index 000000000..198c9e5c6
--- /dev/null
+++ b/cil/src/escape.ml
@@ -0,0 +1,93 @@
+(*
+ *
+ * Copyright (c) 2003, 
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(** OCaml types used to represent wide characters and strings *)
+type wchar = int64
+type wstring = wchar list
+
+
+let escape_char = function
+  | '\007' -> "\\a"
+  | '\b' -> "\\b"
+  | '\t' -> "\\t"
+  | '\n' -> "\\n"
+  | '\011' -> "\\v"
+  | '\012' -> "\\f"
+  | '\r' -> "\\r"
+  | '"' -> "\\\""
+  | '\'' -> "\\'"
+  | '\\' -> "\\\\"
+  | ' ' .. '~' as printable -> String.make 1 printable
+  | unprintable -> Printf.sprintf "\\%03o" (Char.code unprintable)
+
+let escape_string str =
+  let length = String.length str in
+  let buffer = Buffer.create length in
+  for index = 0 to length - 1 do
+    Buffer.add_string buffer (escape_char (String.get str index))
+  done;
+  Buffer.contents buffer
+
+(* a wide char represented as an int64 *)
+let escape_wchar =
+  (* limit checks whether upper > probe *)
+  let limit upper probe = (Int64.to_float (Int64.sub upper probe)) > 0.5 in
+  let fits_byte = limit (Int64.of_int 0x100) in
+  let fits_octal_escape = limit (Int64.of_int 0o1000) in
+  let fits_universal_4 = limit (Int64.of_int 0x10000) in
+  let fits_universal_8 = limit (Int64.of_string "0x100000000") in
+  fun charcode ->
+    if fits_byte charcode then
+      escape_char (Char.chr (Int64.to_int charcode))
+    else if fits_octal_escape charcode then
+      Printf.sprintf "\\%03Lo" charcode
+    else if fits_universal_4 charcode then
+      Printf.sprintf "\\u%04Lx" charcode
+    else if fits_universal_8 charcode then
+      Printf.sprintf "\\u%04Lx" charcode
+    else
+      invalid_arg "Cprint.escape_string_intlist"
+
+(* a wide string represented as a list of int64s *)
+let escape_wstring (str : int64 list) =
+  let length = List.length str in
+  let buffer = Buffer.create length in
+  let append charcode =
+    let addition = escape_wchar charcode in
+    Buffer.add_string buffer addition
+  in
+  List.iter append str;
+  Buffer.contents buffer
diff --git a/cil/src/escape.mli b/cil/src/escape.mli
new file mode 100644
index 000000000..b932ef142
--- /dev/null
+++ b/cil/src/escape.mli
@@ -0,0 +1,48 @@
+(*
+ *
+ * Copyright (c) 2003, 
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(*
+ * Character and string escaping utilities
+ *)
+
+(** OCaml types used to represent wide characters and strings *)
+type wchar = int64
+type wstring = wchar list
+
+(** escape various constructs in accordance with C lexical rules *)
+val escape_char : char -> string
+val escape_string : string -> string
+val escape_wchar : wchar -> string
+val escape_wstring : wstring -> string
diff --git a/cil/src/ext/astslicer.ml b/cil/src/ext/astslicer.ml
new file mode 100644
index 000000000..ffba48277
--- /dev/null
+++ b/cil/src/ext/astslicer.ml
@@ -0,0 +1,454 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+open Cil
+module E = Errormsg
+(*
+ * Weimer: an AST Slicer for use in Daniel's Delta Debugging Algorithm.
+ *)
+let debug = ref false 
+
+(* 
+ * This type encapsulates a mapping form program locations to names
+ * in our naming convention.
+ *)
+type enumeration_info = {
+  statements : (stmt, string) Hashtbl.t ;
+  instructions : (instr, string) Hashtbl.t ;
+} 
+
+(**********************************************************************
+ * Enumerate 1
+ *
+ * Given a cil file, enumerate all of the statement names in it using
+ * our naming scheme. 
+ **********************************************************************)
+let enumerate out (f : Cil.file) = 
+  let st_ht = Hashtbl.create 32767 in
+  let in_ht = Hashtbl.create 32767 in
+
+  let emit base i ht elt =
+    let str = Printf.sprintf "%s.%d" base !i in
+    Printf.fprintf out "%s\n" str ;
+    Hashtbl.add ht elt str ; 
+    incr i
+  in 
+  let emit_call base i str2 ht elt =
+    let str = Printf.sprintf "%s.%d" base !i in 
+    Printf.fprintf out "%s - %s\n" str str2 ;
+    Hashtbl.add ht elt str ; 
+    incr i
+  in 
+  let descend base i =
+    let res = (Printf.sprintf "%s.%d" base !i),(ref 0) in
+    res
+  in 
+  let rec doBlock b base i =
+    doStmtList b.bstmts base i
+  and doStmtList sl base i = 
+    List.iter (fun s -> match s.skind with
+    | Instr(il) -> doIL il base i 
+    | Return(_,_)
+    | Goto(_,_)
+    | Continue(_) 
+    | Break(_) -> emit base i st_ht s
+    | If(e,b1,b2,_) -> 
+          emit base i st_ht s ; 
+          decr i ; 
+          Printf.fprintf out "(\n" ; 
+          let base',i' = descend base i in
+          doBlock b1 base' i' ;
+          Printf.fprintf out ") (\n" ; 
+          let base'',i'' = descend base i in
+          doBlock b2 base'' i'' ;
+          Printf.fprintf out ")\n" ; 
+          incr i 
+    | Switch(_,b,_,_) 
+(*
+    | Loop(b,_,_,_) 
+*)
+    | While(_,b,_)
+    | DoWhile(_,b,_)
+    | For(_,_,_,b,_)
+    | Block(b) -> 
+          emit base i st_ht s ; 
+          decr i ; 
+          let base',i' = descend base i in
+          Printf.fprintf out "(\n" ; 
+          doBlock b base' i' ;
+          Printf.fprintf out ")\n" ; 
+          incr i 
+    | TryExcept _ | TryFinally _ -> 
+        E.s (E.unimp "astslicer:enumerate")
+    ) sl 
+  and doIL il base i = 
+    List.iter (fun ins -> match ins with
+      | Set _  
+      | Asm _ -> emit base i in_ht ins
+      | Call(_,(Lval(Var(vi),NoOffset)),_,_) -> 
+                 emit_call base i vi.vname in_ht ins
+      | Call(_,f,_,_) -> emit_call base i "*" in_ht ins
+    ) il 
+  in 
+  let doGlobal g = match g with 
+  | GFun(fd,_) -> 
+      Printf.fprintf out "%s (\n" fd.svar.vname ; 
+      let cur = ref 0 in 
+      doBlock fd.sbody fd.svar.vname cur ; 
+      Printf.fprintf out ")\n" ; 
+      ()
+  | _ -> () 
+  in
+  List.iter doGlobal f.globals ;
+  { statements = st_ht ;
+    instructions = in_ht ; }
+
+(**********************************************************************
+ * Enumerate 2
+ *
+ * Given a cil file and some enumeration information, do a log-calls-like
+ * transformation on it that prints out our names as you reach them. 
+ **********************************************************************)
+(* 
+ * This is the visitor that handles annotations
+ *)
+let print_it pfun name =
+  ((Call(None,Lval(Var(pfun),NoOffset),
+    [mkString (name ^ "\n")],locUnknown))) 
+
+class enumVisitor pfun st_ht in_ht = object
+  inherit nopCilVisitor
+  method vinst i = 
+    if Hashtbl.mem in_ht i then begin
+      let name = Hashtbl.find in_ht i in
+      let newinst = print_it pfun name in 
+      ChangeTo([newinst ; i])
+    end else
+      DoChildren
+  method vstmt s = 
+    if Hashtbl.mem st_ht s then begin
+      let name = Hashtbl.find st_ht s in
+      let newinst = print_it pfun name in 
+      let newstmt = mkStmtOneInstr newinst in
+      let newblock = mkBlock [newstmt ; s] in
+      let replace_with = mkStmt (Block(newblock)) in
+      ChangeDoChildrenPost(s,(fun i -> replace_with)) 
+    end else
+      DoChildren
+  method vfunc f = 
+      let newinst = print_it pfun f.svar.vname in 
+      let newstmt = mkStmtOneInstr newinst in
+      let new_f = { f with sbody = { f.sbody with 
+        bstmts = newstmt :: f.sbody.bstmts }} in
+      ChangeDoChildrenPost(new_f,(fun i -> i))
+end 
+
+let annotate (f : Cil.file) ei = begin
+  (* Create a prototype for the logging function *)
+  let printfFun =
+    let fdec = emptyFunction "printf" in
+    let argf  = makeLocalVar fdec "format" charConstPtrType in
+    fdec.svar.vtype <- TFun(intType, Some [ ("format", charConstPtrType, [])],
+                            true, []);
+    fdec
+  in
+  let visitor = (new enumVisitor printfFun.svar ei.statements 
+    ei.instructions) in 
+  visitCilFileSameGlobals visitor f;
+  f
+end 
+
+(**********************************************************************
+ * STAGE 2
+ *
+ * Perform a transitive-closure-like operation on the parts of the program
+ * that the user wants to keep. We use a CIL visitor to walk around
+ * and a number of hash tables to keep track of the things we want to keep. 
+ **********************************************************************)
+(*
+ * Hashtables: 
+ * ws   - wanted stmts
+ * wi   - wanted instructions
+ * wt   - wanted typeinfo 
+ * wc   - wanted compinfo 
+ * we   - wanted enuminfo 
+ * wv   - wanted varinfo 
+ *)
+
+let mode = ref false (* was our parented wanted? *)
+let finished = ref true (* set to false if we update something *)
+
+(* In the given hashtable, mark the given element was "wanted" *)
+let update ht elt =
+  if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then ()
+  else begin
+    Hashtbl.add ht elt true ;
+    finished := false 
+  end
+
+(* Handle a particular stage of the AST tree walk. Use "mode" (i.e.,
+ * whether our parent was wanted) and the hashtable (which tells us whether
+ * the user had any special instructions for this element) to determine
+ * what do to. *)
+let handle ht elt rep =
+    if !mode then begin
+      if Hashtbl.mem ht elt && (Hashtbl.find ht elt = false) then begin
+        (* our parent is Wanted but we were told to ignore this subtree,
+         * so we won't be wanted. *)
+        mode := false ;
+        ChangeDoChildrenPost(rep,(fun elt -> mode := true ; elt))
+      end else begin  
+        (* we were not told to ignore this subtree, and our parent is
+         * Wanted, so we will be Wanted too! *)
+        update ht elt ; 
+        DoChildren
+      end 
+    end else if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then begin
+      (* our parent was not wanted but we were wanted, so turn the
+       * mode on for now *)
+      mode := true ;
+      ChangeDoChildrenPost(rep,(fun elt -> mode := false ; elt))
+    end else 
+      DoChildren
+
+let handle_no_default ht elt rep old_mode = 
+    if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then begin
+      (* our parent was not wanted but we were wanted, so turn the
+       * mode on for now *)
+      mode := true ;
+      ChangeDoChildrenPost(rep,(fun elt -> mode := old_mode ; elt))
+    end else begin
+      mode := false ;
+      ChangeDoChildrenPost(rep,(fun elt -> mode := old_mode ; elt))
+    end
+
+(* 
+ * This is the visitor that handles elements (marks them as wanted)
+ *)
+class transVisitor ws wi wt wc we wv = object
+  inherit nopCilVisitor
+
+  method vvdec vi = handle_no_default wv vi vi !mode
+  method vvrbl vi = handle wv vi vi
+  method vinst i = handle wi i [i] 
+  method vstmt s = handle ws s s
+  method vfunc f = handle wv f.svar f
+  method vglob g = begin
+    match g with
+    | GType(ti,_) -> handle wt ti [g]
+    | GCompTag(ci,_) 
+    | GCompTagDecl(ci,_) -> handle wc ci [g]
+    | GEnumTag(ei,_) 
+    | GEnumTagDecl(ei,_) -> handle we ei [g]
+    | GVarDecl(vi,_) 
+    | GVar(vi,_,_) -> handle wv vi [g]
+    | GFun(f,_) -> handle wv f.svar [g]
+    | _ -> DoChildren
+  end
+  method vtype t = begin
+    match t with
+    | TNamed(ti,_) -> handle wt ti t
+    | TComp(ci,_) -> handle wc ci t
+    | TEnum(ei,_) -> handle we ei t
+    | _ -> DoChildren
+  end
+end 
+
+(**********************************************************************
+ * STAGE 3
+ *
+ * Eliminate all of the elements from the program that are not marked 
+ * "keep". 
+ **********************************************************************)
+(* 
+ * This is the visitor that throws away elements 
+ *)
+let handle ht elt keep drop =
+  if (Hashtbl.mem ht elt) && (Hashtbl.find ht elt = true) then
+    (* DoChildren *) ChangeDoChildrenPost(keep,(fun a -> a)) 
+  else 
+    ChangeTo(drop)
+
+class dropVisitor ws wi wt wc we wv = object
+  inherit nopCilVisitor
+
+  method vinst i = handle wi i [i] []
+  method vstmt s = handle ws s s (mkStmt (Instr([])))
+  method vglob g = begin
+    match g with
+    | GType(ti,_) -> handle wt ti [g] []
+    | GCompTag(ci,_) 
+    | GCompTagDecl(ci,_) -> handle wc ci [g] []
+    | GEnumTag(ei,_) 
+    | GEnumTagDecl(ei,_) -> handle we ei [g] []
+    | GVarDecl(vi,_) 
+    | GVar(vi,_,_) -> handle wv vi [g] []
+    | GFun(f,l) -> 
+        let new_locals = List.filter (fun vi ->
+          Hashtbl.mem wv vi && (Hashtbl.find wv vi = true)) f.slocals in
+        let new_fundec = { f with slocals = new_locals} in 
+        handle wv f.svar [(GFun(new_fundec,l))] []
+    | _ -> DoChildren
+  end
+end 
+
+(**********************************************************************
+ * STAGE 1
+ *
+ * Mark up the file with user-given information about what to keep and
+ * what to drop.
+ **********************************************************************)
+type mark = Wanted | Unwanted | Unspecified
+(* Given a cil file and a list of strings, mark all of the given ASTSlicer
+ * points as wanted or unwanted. *)
+let mark_file (f : Cil.file) (names : (string, mark) Hashtbl.t) = 
+  let ws = Hashtbl.create 32767 in
+  let wi = Hashtbl.create 32767 in
+  let wt = Hashtbl.create 32767 in
+  let wc = Hashtbl.create 32767 in
+  let we = Hashtbl.create 32767 in
+  let wv = Hashtbl.create 32767 in
+  if !debug then Printf.printf "Applying user marks to file ...\n" ; 
+  let descend base i =
+    let res = (Printf.sprintf "%s.%d" base !i),(ref 0) in
+    res
+  in 
+  let check base i (default : mark) =
+    let str = Printf.sprintf "%s.%d" base !i in
+    if !debug then Printf.printf "Looking for [%s]\n" str ; 
+    try Hashtbl.find names str
+    with _ -> default
+  in 
+  let mark ht stmt wanted = match wanted with
+    Unwanted -> Hashtbl.replace ht stmt false
+  | Wanted -> Hashtbl.replace ht stmt true
+  | Unspecified -> () 
+  in 
+  let rec doBlock b base i default =
+    doStmtList b.bstmts base i default
+  and doStmtList sl base i default = 
+    List.iter (fun s -> match s.skind with
+    | Instr(il) -> doIL il base i default
+    | Return(_,_) 
+    | Goto(_,_) 
+    | Continue(_) 
+    | Break(_) -> 
+        mark ws s (check base i default) ; incr i 
+    | If(e,b1,b2,_) -> 
+        let inside = check base i default in 
+        mark ws s inside ;
+        let base',i' = descend base i in
+        doBlock b1 base' i' inside ;
+        let base'',i'' = descend base i in
+        doBlock b2 base'' i'' inside ;
+        incr i
+    | Switch(_,b,_,_) 
+(*
+    | Loop(b,_,_,_) 
+*)
+    | While(_,b,_)
+    | DoWhile(_,b,_)
+    | For(_,_,_,b,_)
+    | Block(b) -> 
+        let inside = check base i default in 
+        mark ws s inside ;
+        let base',i' = descend base i in
+        doBlock b base' i' inside ;
+        incr i 
+    | TryExcept _ | TryFinally _ -> 
+        E.s (E.unimp "astslicer: mark")
+    ) sl 
+  and doIL il base i default = 
+    List.iter (fun ins -> mark wi ins (check base i default) ; incr i) il 
+  in 
+  let doGlobal g = match g with 
+  | GFun(fd,_) -> 
+      let cur = ref 0 in 
+      if Hashtbl.mem names fd.svar.vname then begin
+        if Hashtbl.find names fd.svar.vname = Wanted then begin
+          Hashtbl.replace wv fd.svar true ;
+          doBlock fd.sbody fd.svar.vname cur (Wanted); 
+        end else begin
+          Hashtbl.replace wv fd.svar false ;
+          doBlock fd.sbody fd.svar.vname cur (Unspecified); 
+        end
+      end else begin  
+        doBlock fd.sbody fd.svar.vname cur (Unspecified); 
+      end 
+  | _ -> () 
+  in
+  List.iter doGlobal f.globals ;
+  if !debug then begin 
+    Hashtbl.iter (fun k v -> 
+      ignore (Pretty.printf "want-s %b %a\n" v d_stmt k)) ws ;
+    Hashtbl.iter (fun k v -> 
+      ignore (Pretty.printf "want-i %b %a\n" v d_instr k)) wi ;
+    Hashtbl.iter (fun k v -> 
+      ignore (Pretty.printf "want-v %b %s\n" v k.vname)) wv ;
+  end ; 
+  (*
+   * Now repeatedly mark all other things that must be kept. 
+   *)
+  let visitor = (new transVisitor ws wi wt wc we wv) in 
+  finished := false ;
+  if !debug then  (Printf.printf "\nPerforming Transitive Closure\n\n" ); 
+  while not !finished do
+    finished := true ; 
+    visitCilFileSameGlobals visitor f
+  done  ;
+  if !debug then begin 
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-s %a\n" d_stmt k)) ws ;
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-i %a\n" d_instr k)) wi ;
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-t %s\n" k.tname)) wt ;
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-c %s\n" k.cname)) wc ;
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-e %s\n" k.ename)) we ;
+    Hashtbl.iter (fun k v -> 
+      if v then ignore (Pretty.printf "want-v %s\n" k.vname)) wv ;
+  end ; 
+
+  (*
+   * Now drop everything we didn't need. 
+   *)
+  if !debug then  (Printf.printf "Dropping Unwanted Elements\n" ); 
+  let visitor = (new dropVisitor ws wi wt wc we wv) in 
+  visitCilFile visitor f 
diff --git a/cil/src/ext/availexps.ml b/cil/src/ext/availexps.ml
new file mode 100644
index 000000000..28c22c0e7
--- /dev/null
+++ b/cil/src/ext/availexps.ml
@@ -0,0 +1,359 @@
+(* compute available expressions, although in a somewhat
+   non-traditional way. the abstract state is a mapping from
+   variable ids to expressions as opposed to a set of
+   expressions *)
+
+open Cil
+open Pretty
+
+module E = Errormsg
+module DF = Dataflow
+module UD = Usedef
+module IH = Inthash
+module U = Util
+module S = Stats
+
+let debug = ref false
+
+(* exp IH.t -> exp IH.t -> bool *)
+let eh_equals eh1 eh2 =
+  if not(IH.length eh1 = IH.length eh2)
+  then false
+  else IH.fold (fun vid e b ->
+    if not b then b else
+    try let e2 = IH.find eh2 vid in
+    if not(Util.equals e e2)
+    then false
+    else true
+    with Not_found -> false)
+      eh1 true
+
+let eh_pretty () eh = line ++ seq line (fun (vid,e) ->
+  text "AE:vid:" ++ num vid ++ text ": " ++
+    (d_exp () e)) (IH.tolist eh)
+
+(* the result must be the intersection of eh1 and eh2 *)
+(* exp IH.t -> exp IH.t -> exp IH.t *)
+let eh_combine eh1 eh2 =
+  if !debug then ignore(E.log "eh_combine: combining %a\n and\n %a\n"
+			  eh_pretty eh1 eh_pretty eh2);
+  let eh' = IH.copy eh1 in (* eh' gets all of eh1 *)
+  IH.iter (fun vid e1 ->
+    try let e2l = IH.find_all eh2 vid in
+    if not(List.exists (fun e2 -> Util.equals e1 e2) e2l)
+    (* remove things from eh' that eh2 doesn't have *)
+    then let e1l = IH.find_all eh' vid in
+    let e1l' = List.filter (fun e -> not(Util.equals e e1)) e1l in
+    IH.remove_all eh' vid;
+    List.iter (fun e -> IH.add eh' vid e) e1l'
+    with Not_found ->
+      IH.remove_all eh' vid) eh1;
+  if !debug then ignore(E.log "with result %a\n"
+			  eh_pretty eh');
+  eh'
+
+(* On a memory write, kill expressions containing memory writes
+ * or variables whose address has been taken. *)
+let exp_ok = ref false
+class memReadOrAddrOfFinderClass = object(self)
+  inherit nopCilVisitor
+
+  method vexpr e = match e with
+    Lval(Mem _, _) -> 
+      exp_ok := true;
+      SkipChildren
+  | _ -> DoChildren
+
+  method vvrbl vi =
+    if vi.vaddrof then
+      (exp_ok := true;
+       SkipChildren)
+    else DoChildren
+
+end
+
+let memReadOrAddrOfFinder = new memReadOrAddrOfFinderClass
+
+(* exp -> bool *)
+let exp_has_mem_read e =
+  exp_ok := false;
+  ignore(visitCilExpr memReadOrAddrOfFinder e);
+  !exp_ok
+
+let eh_kill_mem eh =
+  IH.iter (fun vid e ->
+    if exp_has_mem_read e
+    then IH.remove eh vid)
+    eh
+
+(* need to kill exps containing a particular vi sometimes *)
+let has_vi = ref false
+class viFinderClass vi = object(self)
+  inherit nopCilVisitor
+      
+  method vvrbl vi' = 
+    if vi.vid = vi'.vid
+    then (has_vi := true; SkipChildren)
+    else DoChildren
+
+end
+
+let exp_has_vi e vi =
+  let vis = new viFinderClass vi in
+  has_vi := false;
+  ignore(visitCilExpr vis e);
+  !has_vi
+
+let eh_kill_vi eh vi =
+  IH.iter (fun vid e ->
+    if exp_has_vi e vi
+    then IH.remove eh vid)
+    eh
+
+let varHash = IH.create 32
+
+let eh_kill_addrof_or_global eh =
+  if !debug then ignore(E.log "eh_kill: in eh_kill\n");
+  IH.iter (fun vid e ->
+    try let vi = IH.find varHash vid in
+    if vi.vaddrof
+    then begin
+      if !debug then ignore(E.log "eh_kill: %s has its address taken\n"
+			      vi.vname);
+      IH.remove eh vid
+    end
+    else if vi.vglob
+    then begin
+      if !debug then ignore(E.log "eh_kill: %s is global\n"
+			   vi.vname);
+      IH.remove eh vid
+    end
+    with Not_found -> ()) eh
+
+let eh_handle_inst i eh = match i with
+  (* if a pointer write, kill things with read in them.
+     also kill mappings from vars that have had their address taken,
+     and globals.
+     otherwise kill things with lv in them and add e *)
+  Set(lv,e,_) -> (match lv with
+    (Mem _, _) -> 
+      (eh_kill_mem eh; 
+       eh_kill_addrof_or_global eh;
+       eh)
+  | (Var vi, NoOffset) -> 
+      (match e with
+	Lval(Var vi', NoOffset) -> (* ignore x = x *)
+	  if vi'.vid = vi.vid then eh else
+	  (IH.replace eh vi.vid e;
+	   eh_kill_vi eh vi;
+	   eh)
+      | _ ->
+	  (IH.replace eh vi.vid e;
+	   eh_kill_vi eh vi;
+	   eh))
+  | _ -> eh) (* do nothing for now. *)
+| Call(Some(Var vi,NoOffset),_,_,_) ->
+    (IH.remove eh vi.vid;
+     eh_kill_vi eh vi;
+     eh_kill_mem eh;
+     eh_kill_addrof_or_global eh;
+     eh)
+| Call(_,_,_,_) ->
+    (eh_kill_mem eh;
+     eh_kill_addrof_or_global eh;
+     eh)
+| Asm(_,_,_,_,_,_) ->
+    let _,d = UD.computeUseDefInstr i in
+    (UD.VS.iter (fun vi ->
+      eh_kill_vi eh vi) d;
+     eh)
+
+let allExpHash = IH.create 128
+
+module AvailableExps =
+  struct
+
+    let name = "Available Expressions"
+
+    let debug = debug
+
+    (* mapping from var id to expression *)
+    type t = exp IH.t
+
+    let copy = IH.copy
+
+    let stmtStartData = IH.create 64
+
+    let pretty = eh_pretty
+
+    let computeFirstPredecessor stm eh = 
+      eh_combine (IH.copy allExpHash) eh
+
+    let combinePredecessors (stm:stmt) ~(old:t) (eh:t) =
+      if S.time "eh_equals" (eh_equals old) eh then None else
+      Some(S.time "eh_combine" (eh_combine old) eh)
+
+    let doInstr i eh = 
+      let action = eh_handle_inst i in
+      DF.Post(action)
+
+    let doStmt stm astate = DF.SDefault
+
+    let doGuard c astate = DF.GDefault
+
+    let filterStmt stm = true
+
+  end
+
+module AE = DF.ForwardsDataFlow(AvailableExps)
+
+(* make an exp IH.t with everything in it,
+ * also, fill in varHash while we're here.
+ *)
+class expCollectorClass = object(self)
+  inherit nopCilVisitor
+
+  method vinst i = match i with
+    Set((Var vi,NoOffset),e,_) ->
+      let e2l = IH.find_all allExpHash vi.vid in
+      if not(List.exists (fun e2 -> Util.equals e e2) e2l)
+      then IH.add allExpHash vi.vid e;
+      DoChildren
+  | _ -> DoChildren
+
+  method vvrbl vi =
+    (if not(IH.mem varHash vi.vid)
+    then 
+      (if !debug && vi.vglob then ignore(E.log "%s is global\n" vi.vname);
+       if !debug && not(vi.vglob) then ignore(E.log "%s is not global\n" vi.vname);
+       IH.add varHash vi.vid vi));
+    DoChildren
+
+end
+
+let expCollector = new expCollectorClass
+
+let make_all_exps fd =
+  IH.clear allExpHash;
+  IH.clear varHash;
+  ignore(visitCilFunction expCollector fd)
+
+
+
+(* set all statement data to allExpHash, make
+ * a list of statements 
+ *)
+let all_stmts = ref []
+class allExpSetterClass = object(self)
+  inherit nopCilVisitor
+
+  method vstmt s =
+    all_stmts := s :: (!all_stmts);
+    IH.add AvailableExps.stmtStartData s.sid (IH.copy allExpHash);
+    DoChildren
+
+end
+
+let allExpSetter = new allExpSetterClass
+
+let set_all_exps fd =
+  IH.clear AvailableExps.stmtStartData;
+  ignore(visitCilFunction allExpSetter fd)
+
+(*
+ * Computes AEs for function fd.
+ *
+ *
+ *)
+(*let iAEsHtbl = Hashtbl.create 128*)
+let computeAEs fd =
+  try let slst = fd.sbody.bstmts in
+  let first_stm = List.hd slst in
+  S.time "make_all_exps" make_all_exps fd;
+  all_stmts := [];
+  (*S.time "set_all_exps" set_all_exps fd;*)
+  (*Hashtbl.clear iAEsHtbl;*)
+  (*IH.clear (IH.find AvailableExps.stmtStartData first_stm.sid);*)
+  IH.add AvailableExps.stmtStartData first_stm.sid (IH.create 4);
+  S.time "compute" AE.compute [first_stm](*(List.rev !all_stmts)*)
+  with Failure "hd" -> if !debug then ignore(E.log "fn w/ no stmts?\n")
+  | Not_found -> if !debug then ignore(E.log "no data for first_stm?\n")
+
+
+(* get the AE data for a statement *)
+let getAEs sid =
+  try Some(IH.find AvailableExps.stmtStartData sid)
+  with Not_found -> None
+
+(* get the AE data for an instruction list *)
+let instrAEs il sid eh out =
+  (*if Hashtbl.mem iAEsHtbl (sid,out)
+  then Hashtbl.find iAEsHtbl (sid,out) 
+  else*) 
+    let proc_one hil i =
+      match hil with
+	[] -> let eh' = IH.copy eh in
+	let eh'' = eh_handle_inst i eh' in
+	(*if !debug then ignore(E.log "instrAEs: proc_one []: for %a\n data is %a\n"
+	   d_instr i eh_pretty eh'');*)
+	eh''::hil
+      | eh'::ehrst as l ->
+	  let eh' = IH.copy eh' in
+	  let eh'' = eh_handle_inst i eh' in
+	  (*if !debug then ignore(E.log "instrAEs: proc_one: for %a\n data is %a\n"
+	     d_instr i eh_pretty eh'');*)
+	  eh''::l
+    in
+    let folded = List.fold_left proc_one [eh] il in
+    (*let foldedout = List.tl (List.rev folded) in*)
+    let foldednotout = List.rev (List.tl folded) in
+    (*Hashtbl.add iAEsHtbl (sid,true) foldedout;
+    Hashtbl.add iAEsHtbl (sid,false) foldednotout;*)
+    (*if out then foldedout else*) foldednotout
+
+class aeVisitorClass = object(self)
+  inherit nopCilVisitor
+
+  val mutable sid = -1
+
+  val mutable ae_dat_lst = []
+
+  val mutable cur_ae_dat = None
+
+  method vstmt stm =
+    sid <- stm.sid;
+    match getAEs sid with
+      None ->
+	if !debug then ignore(E.log "aeVis: stm %d has no data\n" sid);
+	cur_ae_dat <- None;
+	DoChildren
+    | Some eh ->
+	match stm.skind with
+	  Instr il ->
+	    if !debug then ignore(E.log "aeVist: visit il\n");
+	    ae_dat_lst <- S.time "instrAEs" (instrAEs il stm.sid eh) false;
+	    DoChildren
+	| _ ->
+	    if !debug then ignore(E.log "aeVisit: visit non-il\n");
+	    cur_ae_dat <- None;
+	    DoChildren
+
+  method vinst i =
+    if !debug then ignore(E.log "aeVist: before %a, ae_dat_lst is %d long\n"
+			    d_instr i (List.length ae_dat_lst));
+    try
+      let data = List.hd ae_dat_lst in
+      cur_ae_dat <- Some(data);
+      ae_dat_lst <- List.tl ae_dat_lst;
+      if !debug then ignore(E.log "aeVisit: data is %a\n" eh_pretty data);
+      DoChildren
+    with Failure "hd" ->
+      if !debug then ignore(E.log "aeVis: il ae_dat_lst mismatch\n");
+      DoChildren
+
+  method get_cur_eh () =
+    match cur_ae_dat with
+      None -> getAEs sid
+    | Some eh -> Some eh
+
+end
diff --git a/cil/src/ext/bitmap.ml b/cil/src/ext/bitmap.ml
new file mode 100644
index 000000000..da1f8b99c
--- /dev/null
+++ b/cil/src/ext/bitmap.ml
@@ -0,0 +1,224 @@
+
+                                        (* Imperative bitmaps *)
+type t = { mutable nrWords  : int;
+           mutable nrBits   : int;      (* This is 31 * nrWords *)
+           mutable bitmap   : int array }
+
+
+                                        (* Enlarge a bitmap to contain at 
+                                         * least newBits *)
+let enlarge b newWords = 
+  let newbitmap = 
+    if newWords > b.nrWords then
+      let a = Array.create newWords 0 in
+      Array.blit b.bitmap 0 a 0 b.nrWords;
+      a
+    else
+      b.bitmap in
+  b.nrWords <- newWords;
+  b.nrBits  <- (newWords lsl 5) - newWords;
+  b.bitmap  <- newbitmap
+        
+
+                                        (* Create a new empty bitmap *)
+let make size = 
+  let wrd = (size + 30) / 31 in
+  { nrWords  = wrd;
+    nrBits   = (wrd lsl 5) - wrd;
+    bitmap   = Array.make wrd 0
+  } 
+
+let size t = t.nrBits 
+                                        (* Make an initialized array *)
+let init size how = 
+  let wrd = (size + 30) / 31 in
+  let how' w = 
+    let first = (w lsl 5) - w in
+    let last  = min size (first + 31) in 
+    let rec loop i acc = 
+      if i >= last then acc 
+      else
+        let acc' = acc lsl 1 in
+        if how i then loop (i + 1) (acc' lor 1) 
+        else loop (i + 1) acc'
+    in
+    loop first 0
+  in
+  { nrWords  = wrd;
+    nrBits   = (wrd lsl 5) - wrd;
+    bitmap   = Array.init wrd how'
+  } 
+  
+let clone b = 
+  { nrWords  = b.nrWords;
+    nrBits   = b.nrBits;
+    bitmap   = Array.copy b.bitmap;
+  } 
+    
+let cloneEmpty b =
+  { nrWords  = b.nrWords;
+    nrBits   = b.nrBits;
+    bitmap   = Array.make b.nrWords 0;
+  } 
+
+let union b1 b2 = 
+  begin
+    let n = b2.nrWords in
+    if b1.nrWords < n then enlarge b1 n else ();
+    let a1 = b1.bitmap in
+    let a2 = b2.bitmap in
+    let changed = ref false in
+    for i=0 to n - 1 do
+      begin
+        let t = a1.(i) in
+        let upd = t lor a2.(i) in
+        let _ = if upd <> t then changed := true else () in
+        Array.unsafe_set a1 i upd
+      end
+    done;
+    ! changed
+  end
+                                        (* lin += (lout - def) *)
+let accLive lin lout def = 
+  begin                                 (* Need to enlarge def to lout *)
+    let n = lout.nrWords in
+    if def.nrWords < n then enlarge def n else ();
+                                        (* Need to enlarge lin to lout *)
+    if lin.nrWords < n then enlarge lin n else ();
+    let changed = ref false in
+    let alin  = lin.bitmap in
+    let alout = lout.bitmap in
+    let adef  = def.bitmap in
+    for i=0 to n - 1 do
+      begin
+        let old = alin.(i) in
+        let nw  = old lor (alout.(i) land (lnot adef.(i))) in
+        alin.(i) <- nw;
+        changed := (old <> nw) || (!changed)
+      end
+    done;
+    !changed
+  end
+
+                                        (* b1 *= b2 *)
+let inters b1 b2 = 
+  begin
+    let n = min b1.nrWords b2.nrWords in
+    let a1 = b1.bitmap in
+    let a2 = b2.bitmap in
+    for i=0 to n - 1 do
+      begin
+        a1.(i) <- a1.(i) land a2.(i)
+      end
+    done;
+    if n < b1.nrWords then
+      Array.fill a1 n (b1.nrWords - n) 0
+    else
+      ()
+  end
+
+let emptyInt b start = 
+  let n = b.nrWords in
+  let a = b.bitmap in
+  let rec loop i = i >= n || (a.(i) = 0 && loop (i + 1))
+  in
+  loop start
+
+let empty b = emptyInt b 0
+
+                                        (* b1 =? b2 *)
+let equal b1 b2 =
+  begin
+    let n = min b1.nrWords b2.nrWords in
+    let a1 = b1.bitmap in
+    let a2 = b2.bitmap in
+    let res = ref true in
+    for i=0 to n - 1 do
+      begin
+        if a1.(i) != a2.(i) then res := false else ()
+      end
+    done;
+    if !res then 
+      if b1.nrWords > n then
+        emptyInt b1 n
+      else if b2.nrWords > n then 
+        emptyInt b2 n
+      else
+        true
+    else
+      false
+  end
+
+let assign b1 b2 = 
+  begin
+    let n = b2.nrWords in
+    if b1.nrWords < n then enlarge b1 n else ();
+    let a1 = b1.bitmap in
+    let a2 = b2.bitmap in
+    Array.blit a2 0 a1 0 n 
+  end
+
+                                        (* b1 -= b2 *)
+let diff b1 b2 = 
+  begin
+    let n = min b1.nrWords b2.nrWords in
+    let a1 = b1.bitmap in
+    let a2 = b2.bitmap in
+    for i=0 to n - 1 do
+        a1.(i) <- a1.(i) land (lnot a2.(i))
+    done;
+    if n < b1.nrWords then 
+      Array.fill a1 n (b1.nrWords - n) 0
+    else
+      ()
+  end
+
+
+      
+
+let get bmp i = 
+  assert (i >= 0);
+  if i >= bmp.nrBits then enlarge bmp (i / 31 + 1) else ();
+  let wrd = i / 31 in
+  let msk = 1 lsl (i + wrd - (wrd lsl 5)) in
+  bmp.bitmap.(wrd) land msk != 0 
+
+
+let set bmp i tv = 
+  assert(i >= 0);
+  let wrd = i / 31 in
+  let msk = 1 lsl (i + wrd - (wrd lsl 5)) in
+  if i >= bmp.nrBits then enlarge bmp (wrd + 1) else ();
+  if tv then 
+    bmp.bitmap.(wrd) <- bmp.bitmap.(wrd) lor msk
+  else
+    bmp.bitmap.(wrd) <- bmp.bitmap.(wrd) land (lnot msk)
+
+  
+
+                                        (* Iterate over all elements in a 
+                                         * bitmap *)
+let fold f bmp arg =
+  let a = bmp.bitmap in
+  let n = bmp.nrWords in
+  let rec allWords i bit arg = 
+    if i >= n then
+      arg
+    else
+      let rec allBits msk bit left arg = 
+        if left = 0 then 
+          allWords (i + 1) bit arg
+        else
+          allBits ((lsr) msk 1) (bit + 1) (left - 1) 
+                 (if (land) msk 1 != 0 then f arg bit else arg)
+      in
+      allBits a.(i) bit 31 arg 
+  in
+  allWords 0 0 arg
+
+
+let iter f t = fold (fun x y -> f y) t ()
+
+let toList bmp = fold (fun acc i -> i :: acc) bmp []
+
+let card bmp   = fold (fun acc _ -> acc + 1) bmp 0 
diff --git a/cil/src/ext/bitmap.mli b/cil/src/ext/bitmap.mli
new file mode 100644
index 000000000..5247e35d3
--- /dev/null
+++ b/cil/src/ext/bitmap.mli
@@ -0,0 +1,50 @@
+
+                              (* Imperative bitmaps *)
+
+type t
+                                        (* Create a bitmap given the number 
+                                         * of bits *)
+val  make : int -> t
+val  init : int -> (int -> bool) -> t   (* Also initialize it *)
+
+val  size : t -> int                    (* How much space it is reserved *)
+
+                                        (* The cardinality of a set *)
+val  card  : t -> int
+
+                                        (* Make a copy of a bitmap *)
+val  clone : t -> t 
+
+val  cloneEmpty : t -> t                (* An empty set with the same 
+                                         * dimentions *)
+
+val  set : t -> int -> bool -> unit
+val  get : t -> int -> bool
+                                        (* destructive union. The first 
+                                         * element is updated. Returns true 
+                                         * if any change was actually 
+                                         * necessary  *)
+val  union  : t -> t -> bool
+
+                                        (* accLive livein liveout def. Does 
+                                         * liveIn += (liveout - def) *)
+val  accLive : t -> t -> t -> bool
+
+                                        (* Copy the second argument onto the 
+                                         * first *)
+val  assign : t -> t -> unit
+
+
+val  inters : t -> t -> unit
+val  diff   : t -> t -> unit
+
+
+val  empty  : t -> bool
+
+val  equal  : t -> t -> bool
+
+val  toList : t -> int list
+
+val  iter   : (int -> unit) -> t -> unit
+val  fold   : ('a -> int -> 'a) -> t -> 'a -> 'a 
+
diff --git a/cil/src/ext/blockinggraph.ml b/cil/src/ext/blockinggraph.ml
new file mode 100644
index 000000000..281678ae0
--- /dev/null
+++ b/cil/src/ext/blockinggraph.ml
@@ -0,0 +1,769 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+open Cil
+open Pretty
+module E = Errormsg
+
+let debug = false
+
+let fingerprintAll = true
+
+
+type blockkind =
+    NoBlock
+  | BlockTrans
+  | BlockPoint
+  | EndPoint
+
+(* For each function we have a node *)
+type node =
+{
+  nodeid: int;
+  name: string;
+  mutable scanned: bool;
+  mutable expand: bool;
+  mutable fptr: bool;
+  mutable stacksize: int;
+  mutable fds: fundec option;
+  mutable bkind: blockkind;
+  mutable origkind: blockkind;
+  mutable preds: node list;
+  mutable succs: node list;
+  mutable predstmts: (stmt * node) list;
+}
+
+type blockpt =
+{
+  id: int;
+  point: stmt;
+  callfun: string;
+  infun: string;
+  mutable leadsto: blockpt list;
+}
+
+
+(* Fresh ids for each node. *)
+let curNodeNum : int ref = ref 0
+let getFreshNodeNum () : int =
+  let num = !curNodeNum in
+  incr curNodeNum;
+  num
+
+(* Initialize a node. *)
+let newNode (name: string) (fptr: bool) (mangle: bool) : node =
+  let id = getFreshNodeNum () in
+  { nodeid = id; name = if mangle then name ^ (string_of_int id) else name;
+    scanned = false; expand = false;
+    fptr = fptr; stacksize = 0; fds = None;
+    bkind = NoBlock; origkind = NoBlock;
+    preds = []; succs = []; predstmts = []; }
+
+
+(* My type signature ignores attributes and function pointers. *)
+let myTypeSig (t: typ) : typsig =
+  let rec removeFunPtrs (ts: typsig) : typsig =
+    match ts with
+      TSPtr (TSFun _, a) ->
+        TSPtr (TSBase voidType, a)
+    | TSPtr (base, a) ->
+        TSPtr (removeFunPtrs base, a)
+    | TSArray (base, e, a) ->
+        TSArray (removeFunPtrs base, e, a)
+    | TSFun (ret, args, v, a) ->
+        TSFun (removeFunPtrs ret, List.map removeFunPtrs args, v, a)
+    | _ -> ts
+  in
+  removeFunPtrs (typeSigWithAttrs (fun _ -> []) t)
+
+
+(* We add a dummy function whose name is "@@functionPointer@@" that is called 
+ * at all invocations of function pointers and itself calls all functions 
+ * whose address is taken.  *)
+let functionPointerName = "@@functionPointer@@"
+
+(* We map names to nodes *)
+let functionNodes: (string, node) Hashtbl.t = Hashtbl.create 113 
+let getFunctionNode (n: string) : node = 
+  Util.memoize 
+    functionNodes
+    n
+    (fun _ -> newNode n false false)
+
+(* We map types to nodes for function pointers *)
+let functionPtrNodes: (typsig, node) Hashtbl.t = Hashtbl.create 113
+let getFunctionPtrNode (t: typ) : node =
+  Util.memoize
+    functionPtrNodes
+    (myTypeSig t)
+    (fun _ -> newNode functionPointerName true true)
+
+let startNode: node = newNode "@@startNode@@" true false
+
+
+(*
+(** Dump the function call graph. *)
+let dumpFunctionCallGraph (start: node) = 
+  Hashtbl.iter (fun _ x -> x.scanned <- false) functionNodes;
+  let rec dumpOneNode (ind: int) (n: node) : unit = 
+    output_string !E.logChannel "\n";
+    for i = 0 to ind do 
+      output_string !E.logChannel "  "
+    done;
+    output_string !E.logChannel (n.name ^ " ");
+    begin
+      match n.bkind with
+        NoBlock -> ()
+      | BlockTrans -> output_string !E.logChannel " <blocks>"
+      | BlockPoint -> output_string !E.logChannel " <blockpt>"
+      | EndPoint -> output_string !E.logChannel " <endpt>"
+    end;
+    if n.scanned then (* Already dumped *)
+      output_string !E.logChannel " <rec> "
+    else begin
+      n.scanned <- true;
+      List.iter (fun n -> if n.bkind <> EndPoint then dumpOneNode (ind + 1) n)
+                n.succs
+    end
+  in
+  dumpOneNode 0 start;
+  output_string !E.logChannel "\n\n"
+*)
+
+let dumpFunctionCallGraphToFile () = 
+  let channel = open_out "graph" in
+  let dumpNode _ (n: node) : unit =
+    let first = ref true in
+    let dumpSucc (n: node) : unit =
+      if !first then
+        first := false
+      else
+        output_string channel ",";
+      output_string channel n.name
+    in
+    output_string channel (string_of_int n.nodeid);
+    output_string channel ":";
+    output_string channel (string_of_int n.stacksize);
+    output_string channel ":";
+    if n.fds = None && not n.fptr then
+      output_string channel "x";
+    output_string channel ":";
+    output_string channel n.name;
+    output_string channel ":";
+    List.iter dumpSucc n.succs;
+    output_string channel "\n";
+  in
+  dumpNode () startNode;
+  Hashtbl.iter dumpNode functionNodes;
+  Hashtbl.iter dumpNode functionPtrNodes;
+  close_out channel
+  
+
+let addCall (callerNode: node) (calleeNode: node) (sopt: stmt option) =
+  if not (List.exists (fun n -> n.name = calleeNode.name)
+                      callerNode.succs) then begin
+    if debug then
+      ignore (E.log "found call from %s to %s\n"
+                    callerNode.name calleeNode.name);
+    callerNode.succs <- calleeNode :: callerNode.succs;
+    calleeNode.preds <- callerNode :: calleeNode.preds;
+  end;
+  match sopt with
+    Some s ->
+      if not (List.exists (fun (s', _) -> s' = s) calleeNode.predstmts) then
+        calleeNode.predstmts <- (s, callerNode) :: calleeNode.predstmts
+  | None -> ()
+
+
+class findCallsVisitor (host: node) : cilVisitor = object
+  inherit nopCilVisitor
+
+  val mutable curStmt : stmt ref = ref (mkEmptyStmt ())
+
+  method vstmt s =
+    curStmt := s;
+    DoChildren
+
+  method vinst i =
+    match i with
+    | Call(_,Lval(Var(vi),NoOffset),args,l) -> 
+        addCall host (getFunctionNode vi.vname) (Some !curStmt);
+        SkipChildren
+
+    | Call(_,e,_,l) -> (* Calling a function pointer *)
+        addCall host (getFunctionPtrNode (typeOf e)) (Some !curStmt);
+        SkipChildren
+
+    | _ -> SkipChildren (* No calls in other instructions *)
+
+  (* There are no calls in expressions and types *)          
+  method vexpr e = SkipChildren
+  method vtype t = SkipChildren
+
+end
+
+
+let endPt = { id = 0; point = mkEmptyStmt (); callfun = "end"; infun = "end";
+              leadsto = []; }
+
+(* These values will be initialized for real in makeBlockingGraph. *)
+let curId : int ref = ref 1
+let startName : string ref = ref ""
+let blockingPoints : blockpt list ref = ref []
+let blockingPointsNew : blockpt Queue.t = Queue.create ()
+let blockingPointsHash : (int, blockpt) Hashtbl.t = Hashtbl.create 113
+
+let getFreshNum () : int =
+  let num = !curId in
+  curId := !curId + 1;
+  num
+
+let getBlockPt (s: stmt) (cfun: string) (ifun: string) : blockpt =
+  try
+    Hashtbl.find blockingPointsHash s.sid
+  with Not_found ->
+    let num = getFreshNum () in
+    let bpt = { id = num; point = s; callfun = cfun; infun = ifun;
+                leadsto = []; } in
+    Hashtbl.add blockingPointsHash s.sid bpt;
+    blockingPoints := bpt :: !blockingPoints;
+    Queue.add bpt blockingPointsNew;
+    bpt
+
+
+type action =
+    Process of stmt * node
+  | Next of stmt * node
+  | Return of node
+
+let getStmtNode (s: stmt) : node option =
+  match s.skind with
+    Instr instrs -> begin
+      let len = List.length instrs in
+      if len > 0 then
+        match List.nth instrs (len - 1) with
+          Call (_, Lval (Var vi, NoOffset), args, _) -> 
+            Some (getFunctionNode vi.vname)
+        | Call (_, e, _, _) -> (* Calling a function pointer *)
+            Some (getFunctionPtrNode (typeOf e))
+        | _ ->
+            None
+      else
+        None
+      end
+  | _ -> None
+
+let addBlockingPointEdge (bptFrom: blockpt) (bptTo: blockpt) : unit =
+  if not (List.exists (fun bpt -> bpt = bptTo) bptFrom.leadsto) then
+    bptFrom.leadsto <- bptTo :: bptFrom.leadsto
+
+let findBlockingPointEdges (bpt: blockpt) : unit =
+  let seenStmts = Hashtbl.create 117 in
+  let worklist = Queue.create () in
+  Queue.add (Next (bpt.point, getFunctionNode bpt.infun)) worklist;
+  while Queue.length worklist > 0 do
+    let act = Queue.take worklist in
+    match act with
+      Process (curStmt, curNode) -> begin
+        Hashtbl.add seenStmts curStmt.sid ();
+        match getStmtNode curStmt with
+          Some node -> begin
+            if debug then
+              ignore (E.log "processing node %s\n" node.name);
+            match node.bkind with
+              NoBlock ->
+                Queue.add (Next (curStmt, curNode)) worklist
+            | BlockTrans -> begin
+                let processFundec (fd: fundec) : unit =
+                  let s = List.hd fd.sbody.bstmts in
+                  if not (Hashtbl.mem seenStmts s.sid) then
+                    let n = getFunctionNode fd.svar.vname in
+                    Queue.add (Process (s, n)) worklist
+                in
+                match node.fds with
+                  Some fd ->
+                    processFundec fd
+                | None ->
+                    List.iter
+                      (fun n ->
+                         match n.fds with
+                           Some fd -> processFundec fd
+                         | None -> E.s (bug "expected fundec"))
+                      node.succs
+              end
+            | BlockPoint ->
+                addBlockingPointEdge bpt
+                  (getBlockPt curStmt node.name curNode.name)
+            | EndPoint ->
+                addBlockingPointEdge bpt endPt
+          end
+        | _ ->
+            Queue.add (Next (curStmt, curNode)) worklist
+      end
+    | Next (curStmt, curNode) -> begin
+        match curStmt.Cil.succs with
+          [] ->
+            if debug then
+              ignore (E.log "hit end of %s\n" curNode.name);
+            Queue.add (Return curNode) worklist
+        | _ ->
+            List.iter (fun s ->
+                         if not (Hashtbl.mem seenStmts s.sid) then
+                           Queue.add (Process (s, curNode)) worklist)
+                      curStmt.Cil.succs
+      end
+    | Return curNode when curNode.bkind = NoBlock ->
+        ()
+    | Return curNode when curNode.name = !startName ->
+        addBlockingPointEdge bpt endPt
+    | Return curNode ->
+        List.iter (fun (s, n) -> if n.bkind <> NoBlock then
+                                   Queue.add (Next (s, n)) worklist)
+                  curNode.predstmts;
+        List.iter (fun n -> if n.fptr then
+                               Queue.add (Return n) worklist)
+                  curNode.preds
+  done
+
+let markYieldPoints (n: node) : unit =
+  let rec markNode (n: node) : unit =
+    if n.bkind = NoBlock then
+      match n.origkind with
+        BlockTrans ->
+          if n.expand || n.fptr then begin
+            n.bkind <- BlockTrans;
+            List.iter markNode n.succs
+          end else begin
+            n.bkind <- BlockPoint
+          end
+      | _ ->
+          n.bkind <- n.origkind
+  in
+  Hashtbl.iter (fun _ n -> n.bkind <- NoBlock) functionNodes;
+  Hashtbl.iter (fun _ n -> n.bkind <- NoBlock) functionPtrNodes;
+  markNode n
+
+let makeBlockingGraph (start: node) =
+  let startStmt =
+    match start.fds with
+      Some fd -> List.hd fd.sbody.bstmts
+    | None -> E.s (bug "expected fundec")
+  in
+  curId := 1;
+  startName := start.name;
+  blockingPoints := [endPt];
+  Queue.clear blockingPointsNew;
+  Hashtbl.clear blockingPointsHash;
+  ignore (getBlockPt startStmt start.name start.name);
+  while Queue.length blockingPointsNew > 0 do
+    let bpt = Queue.take blockingPointsNew in
+    findBlockingPointEdges bpt;
+  done
+
+let dumpBlockingGraph () =
+  List.iter
+    (fun bpt ->
+       if bpt.id < 2 then begin
+         ignore (E.log "bpt %d (%s): " bpt.id bpt.callfun)
+       end else begin
+         ignore (E.log "bpt %d (%s in %s): " bpt.id bpt.callfun bpt.infun)
+       end;
+       List.iter (fun bpt -> ignore (E.log "%d " bpt.id)) bpt.leadsto;
+       ignore (E.log "\n"))
+    !blockingPoints;
+  ignore (E.log "\n")
+
+let beforeFun =
+  makeGlobalVar "before_bg_node"
+                (TFun (voidType, Some [("node_idx", intType, []);
+                                       ("num_edges", intType, [])],
+                       false, []))
+
+let initFun =
+  makeGlobalVar "init_blocking_graph"
+                (TFun (voidType, Some [("num_nodes", intType, [])],
+                       false, []))
+
+let fingerprintVar =
+  let vi = makeGlobalVar "stack_fingerprint" intType in
+  vi.vstorage <- Extern;
+  vi
+
+let startNodeAddrs =
+  let vi = makeGlobalVar "start_node_addrs" (TPtr (voidPtrType, [])) in
+  vi.vstorage <- Extern;
+  vi
+
+let startNodeStacks =
+  let vi = makeGlobalVar "start_node_stacks" (TPtr (intType, [])) in
+  vi.vstorage <- Extern;
+  vi
+
+let startNodeAddrsArray =
+  makeGlobalVar "start_node_addrs_array" (TArray (voidPtrType, None, [])) 
+
+let startNodeStacksArray =
+  makeGlobalVar "start_node_stacks_array" (TArray (intType, None, [])) 
+
+let insertInstr (newInstr: instr) (s: stmt) : unit =
+  match s.skind with
+    Instr instrs ->
+      let rec insert (instrs: instr list) : instr list =
+        match instrs with
+          [] -> E.s (bug "instr list does not end with call\n")
+        | [Call _] -> newInstr :: instrs
+        | i :: rest -> i :: (insert rest)
+      in
+      s.skind <- Instr (insert instrs)
+  | _ ->
+      E.s (bug "instr stmt expected\n")
+
+let instrumentBlockingPoints () =
+  List.iter
+    (fun bpt ->
+       if bpt.id > 1 then
+       let arg1 = integer bpt.id in
+       let arg2 = integer (List.length bpt.leadsto) in
+       let call = Call (None, Lval (var beforeFun),
+                        [arg1; arg2], locUnknown) in
+       insertInstr call bpt.point;
+       addCall (getFunctionNode bpt.infun)
+               (getFunctionNode beforeFun.vname) None)
+    !blockingPoints
+
+
+let startNodes : node list ref = ref []
+
+let makeAndDumpBlockingGraphs () : unit =
+  if List.length !startNodes > 1 then
+    E.s (unimp "We can't handle more than one start node right now.\n");
+  List.iter
+    (fun n ->
+       markYieldPoints n;
+       (*dumpFunctionCallGraph n;*)
+       makeBlockingGraph n;
+       dumpBlockingGraph ();
+       instrumentBlockingPoints ())
+    !startNodes
+
+
+let pragmas : (string, int) Hashtbl.t = Hashtbl.create 13
+
+let gatherPragmas (f: file) : unit =
+  List.iter
+    (function
+       GPragma (Attr ("stacksize", [AStr s; AInt n]), _) ->
+         Hashtbl.add pragmas s n
+     | _ -> ())
+    f.globals
+
+
+let blockingNodes : node list ref = ref []
+
+let markBlockingFunctions () : unit =
+  let rec markFunction (n: node) : unit =
+    if debug then
+      ignore (E.log "marking %s\n" n.name);
+    if n.origkind = NoBlock then begin
+      n.origkind <- BlockTrans;
+      List.iter markFunction n.preds;
+    end
+  in
+  List.iter (fun n -> List.iter markFunction n.preds) !blockingNodes
+
+let hasFunctionTypeAttribute (n: string) (t: typ) : bool = 
+  let _, _, _, a = splitFunctionType t in 
+  hasAttribute n a
+
+let markVar (vi: varinfo) : unit =
+  let node = getFunctionNode vi.vname in
+  if node.origkind = NoBlock then begin
+    if hasAttribute "yield" vi.vattr then begin
+      node.origkind <- BlockPoint;
+      blockingNodes := node :: !blockingNodes;
+    end else if hasFunctionTypeAttribute "noreturn" vi.vtype then begin
+      node.origkind <- EndPoint;
+    end else if hasAttribute "expand" vi.vattr then begin
+      node.expand <- true;
+    end
+  end;
+  begin
+    try
+      node.stacksize <- Hashtbl.find pragmas node.name
+    with Not_found -> begin
+      match filterAttributes "stacksize" vi.vattr with
+        (Attr (_, [AInt n])) :: _ when n > node.stacksize ->
+          node.stacksize <- n
+      | _ -> ()
+    end
+  end
+
+let makeFunctionCallGraph (f: Cil.file) : unit = 
+  Hashtbl.clear functionNodes;
+  (* Scan the file and construct the control-flow graph *)
+  List.iter
+    (function
+        GFun(fdec, _) -> 
+          let curNode = getFunctionNode fdec.svar.vname in
+          if fdec.svar.vaddrof then begin
+            addCall (getFunctionPtrNode fdec.svar.vtype)
+                    curNode None;
+          end;
+          if hasAttribute "start" fdec.svar.vattr then begin
+            startNodes := curNode :: !startNodes;
+          end;
+          markVar fdec.svar;
+          curNode.fds <- Some fdec;
+          let vis = new findCallsVisitor curNode in
+          ignore (visitCilBlock vis fdec.sbody)
+
+      | GVarDecl(vi, _) when isFunctionType vi.vtype ->
+          (* TODO: what if we take the addr of an extern? *)
+          markVar vi
+
+      | _ -> ())
+    f.globals
+
+let makeStartNodeLinks () : unit =
+  addCall startNode (getFunctionNode "main") None;
+  List.iter (fun n -> addCall startNode n None) !startNodes
+
+let funType (ret_t: typ) (args: (string * typ) list) = 
+  TFun(ret_t, 
+      Some (List.map (fun (n,t) -> (n, t, [])) args),
+      false, [])
+
+class instrumentClass = object
+  inherit nopCilVisitor
+
+  val mutable curNode : node ref = ref (getFunctionNode "main")
+  val mutable seenRet : bool ref = ref false
+
+  val mutable funId : int ref = ref 0
+
+  method vfunc (fdec: fundec) : fundec visitAction = begin
+    (* Remember the current function. *)
+    curNode := getFunctionNode fdec.svar.vname;
+    seenRet := false;
+    funId := Random.bits ();
+    (* Add useful locals. *)
+    ignore (makeLocalVar fdec "savesp" voidPtrType);
+    ignore (makeLocalVar fdec "savechunk" voidPtrType);
+    ignore (makeLocalVar fdec "savebottom" voidPtrType);
+    (* Add macro for function entry when we're done. *)
+    let addEntryNode (fdec: fundec) : fundec =
+      if not !seenRet then E.s (bug "didn't find a return statement");
+      let node = getFunctionNode fdec.svar.vname in
+      if fingerprintAll || node.origkind <> NoBlock then begin
+        let fingerprintSet =
+          Set (var fingerprintVar, BinOp (BXor, Lval (var fingerprintVar),
+                                          integer !funId, intType),
+               locUnknown)
+        in
+        fdec.sbody.bstmts <- mkStmtOneInstr fingerprintSet :: fdec.sbody.bstmts
+      end;
+      let nodeFun = emptyFunction ("NODE_CALL_"^(string_of_int node.nodeid)) in
+      let nodeCall = Call (None, Lval (var nodeFun.svar), [], locUnknown) in
+      nodeFun.svar.vtype <- funType voidType [];
+      nodeFun.svar.vstorage <- Static;
+      fdec.sbody.bstmts <- mkStmtOneInstr nodeCall :: fdec.sbody.bstmts;
+      fdec
+    in
+    ChangeDoChildrenPost (fdec, addEntryNode)
+  end
+
+  method vstmt (s: stmt) : stmt visitAction = begin
+    begin
+      match s.skind with
+        Instr instrs -> begin
+          let instrumentNode (callNode: node) : unit =
+            (* Make calls to macros. *)
+            let suffix = "_" ^ (string_of_int !curNode.nodeid) ^
+                         "_" ^ (string_of_int callNode.nodeid)
+            in
+            let beforeFun = emptyFunction ("BEFORE_CALL" ^ suffix) in
+            let beforeCall = Call (None, Lval (var beforeFun.svar),
+                                   [], locUnknown) in
+            beforeFun.svar.vtype <- funType voidType [];
+            beforeFun.svar.vstorage <- Static;
+            let afterFun = emptyFunction ("AFTER_CALL" ^ suffix) in
+            let afterCall = Call (None, Lval (var afterFun.svar),
+                                  [], locUnknown) in
+            afterFun.svar.vtype <- funType voidType [];
+            afterFun.svar.vstorage <- Static;
+            (* Insert instrumentation around call site. *)
+            let rec addCalls (is: instr list) : instr list =
+              match is with
+                [call] -> [beforeCall; call; afterCall]
+              | cur :: rest -> cur :: addCalls rest
+              | [] -> E.s (bug "expected list of non-zero length")
+            in
+            s.skind <- Instr (addCalls instrs)
+          in
+          (* If there's a call site here, instrument it. *)
+          let len = List.length instrs in
+          if len > 0 then begin
+            match List.nth instrs (len - 1) with
+              Call (_, Lval (Var vi, NoOffset), _, _) ->
+              (*
+                if (try String.sub vi.vname 0 10 <> "NODE_CALL_"
+                    with Invalid_argument _ -> true) then
+*)
+                  instrumentNode (getFunctionNode vi.vname)
+            | Call (_, e, _, _) -> (* Calling a function pointer *)
+                instrumentNode (getFunctionPtrNode (typeOf e))
+            | _ -> ()
+          end;
+          DoChildren
+        end
+      | Cil.Return _ -> begin
+          if !seenRet then E.s (bug "found multiple returns");
+          seenRet := true;
+          if fingerprintAll || !curNode.origkind <> NoBlock then begin
+            let fingerprintSet =
+              Set (var fingerprintVar, BinOp (BXor, Lval (var fingerprintVar),
+                                              integer !funId, intType),
+                   locUnknown)
+            in
+            s.skind <- Block (mkBlock [mkStmtOneInstr fingerprintSet;
+                                       mkStmt s.skind]);
+          end;
+          SkipChildren
+        end
+      | _ -> DoChildren
+    end
+  end
+end
+
+let makeStartNodeTable (globs: global list) : global list =
+  if List.length !startNodes = 0 then
+    globs
+  else
+    let addrInitInfo = { init = None } in
+    let stackInitInfo = { init = None } in
+    let rec processNode (nodes: node list) (i: int) =
+      match nodes with
+        node :: rest ->
+          let curGlobs, addrInit, stackInit = processNode rest (i + 1) in
+          let fd =
+            match node.fds with
+              Some fd -> fd
+            | None -> E.s (bug "expected fundec")
+          in
+          let stack =
+            makeGlobalVar ("NODE_STACK_" ^ (string_of_int node.nodeid)) intType
+          in
+          GVarDecl (fd.svar, locUnknown) :: curGlobs,
+          ((Index (integer i, NoOffset), SingleInit (mkAddrOf (var fd.svar))) ::
+           addrInit),
+          ((Index (integer i, NoOffset), SingleInit (Lval (var stack))) ::
+           stackInit)
+      | [] -> (GVarDecl (startNodeAddrs, locUnknown) ::
+               GVarDecl (startNodeStacks, locUnknown) ::
+               GVar (startNodeAddrsArray, addrInitInfo, locUnknown) ::
+               GVar (startNodeStacksArray, stackInitInfo, locUnknown) ::
+               []),
+              [Index (integer i, NoOffset), SingleInit zero],
+              [Index (integer i, NoOffset), SingleInit zero]
+    in
+    let newGlobs, addrInit, stackInit = processNode !startNodes 0 in
+    addrInitInfo.init <-
+      Some (CompoundInit (TArray (voidPtrType, None, []), addrInit));
+    stackInitInfo.init <-
+      Some (CompoundInit (TArray (intType, None, []), stackInit));
+    let file = { fileName = "startnode.h"; globals = newGlobs;
+                 globinit = None; globinitcalled = false; } in
+    let channel = open_out file.fileName in
+    dumpFile defaultCilPrinter channel file;
+    close_out channel;
+    GText ("#include \"" ^ file.fileName ^ "\"") :: globs
+
+let instrumentProgram (f: file) : unit =
+  (* Add function prototypes. *)
+  f.globals <- makeStartNodeTable f.globals;
+  f.globals <- GText ("#include \"stack.h\"") ::
+               GVarDecl (initFun, locUnknown) ::
+               GVarDecl (beforeFun, locUnknown) ::
+               GVarDecl (fingerprintVar, locUnknown) ::
+               f.globals;
+  (* Add instrumentation to call sites. *)
+  visitCilFile ((new instrumentClass) :> cilVisitor) f;
+  (* Force creation of this node. *)
+  ignore (getFunctionNode beforeFun.vname);
+  (* Add initialization call to main(). *)
+  let mainNode = getFunctionNode "main" in
+  match mainNode.fds with
+    Some fdec ->
+      let arg1 = integer (List.length !blockingPoints) in
+      let initInstr = Call (None, Lval (var initFun), [arg1], locUnknown) in
+      let addrsInstr =
+        Set (var startNodeAddrs, StartOf (var startNodeAddrsArray),
+             locUnknown)
+      in
+      let stacksInstr =
+        Set (var startNodeStacks, StartOf (var startNodeStacksArray),
+             locUnknown)
+      in
+      let newStmt =
+        if List.length !startNodes = 0 then
+          mkStmtOneInstr initInstr
+        else
+          mkStmt (Instr [addrsInstr; stacksInstr; initInstr])
+      in
+      fdec.sbody.bstmts <- newStmt :: fdec.sbody.bstmts;
+      addCall mainNode (getFunctionNode initFun.vname) None
+  | None ->
+      E.s (bug "expected main fundec")
+
+
+
+let feature : featureDescr = 
+  { fd_name = "FCG";
+    fd_enabled = ref false;
+    fd_description = "computing and printing a static call graph";
+    fd_extraopt = [];
+    fd_doit = 
+    (function (f : file) ->
+      Random.init 0; (* Use the same seed so that results are predictable. *)
+      gatherPragmas f;
+      makeFunctionCallGraph f;
+      makeStartNodeLinks ();
+      markBlockingFunctions ();
+      (* makeAndDumpBlockingGraphs (); *)
+      instrumentProgram f;
+      dumpFunctionCallGraphToFile ());
+    fd_post_check = true;
+  } 
diff --git a/cil/src/ext/blockinggraph.mli b/cil/src/ext/blockinggraph.mli
new file mode 100644
index 000000000..72f9ba7be
--- /dev/null
+++ b/cil/src/ext/blockinggraph.mli
@@ -0,0 +1,40 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* This module finds and analyzes yield points. *)
+
+val feature: Cil.featureDescr
diff --git a/cil/src/ext/callgraph.ml b/cil/src/ext/callgraph.ml
new file mode 100644
index 000000000..58472ac67
--- /dev/null
+++ b/cil/src/ext/callgraph.ml
@@ -0,0 +1,250 @@
+(* callgraph.ml *)
+(* code for callgraph.mli *)
+
+(* see copyright notice at end of this file *)
+
+open Cil
+open Trace
+open Printf
+module P = Pretty
+module IH = Inthash
+module H = Hashtbl
+module E = Errormsg
+
+(* ------------------- interface ------------------- *)
+(* a call node describes the local calling structure for a
+ * single function: which functions it calls, and which
+ * functions call it *)
+type callnode = {
+  (* An id *)
+  cnid: int;
+  
+  (* the function this node describes *)
+  cnInfo: nodeinfo;
+
+  (* set of functions this one calls, indexed by the node id *)
+  cnCallees: callnode IH.t;
+
+  (* set of functions that call this one , indexed by the node id *)
+  cnCallers: callnode IH.t;
+}
+
+and nodeinfo = 
+    NIVar of varinfo * bool ref 
+                         (* Node corresponding to a function. If the boolean 
+                          * is true, then the function is defined, otherwise 
+                          * it is external *)
+
+  | NIIndirect of string (* Indirect nodes have a string associated to them. 
+                          * These strings must be invalid function names *)
+               * varinfo list ref 
+                         (* A list of functions that this indirect node might 
+                          * denote *)
+
+let nodeName (n: nodeinfo) : string =
+  match n with
+    NIVar (v, _) -> v.vname
+  | NIIndirect (n, _) -> n
+
+(* a call graph is a hashtable, mapping a function name to
+ * the node which describes that function's call structure *)
+type callgraph = 
+  (string, callnode) Hashtbl.t
+
+(* given the name of a function, retrieve its callnode; this will create a 
+ * node if one doesn't already exist. Will use the given nodeinfo only when 
+ * creating nodes. *)
+let nodeId = ref 0
+let getNodeByName (cg: callgraph) (ni: nodeinfo) : callnode =
+  let name = nodeName ni in
+  try
+    H.find cg name
+  with Not_found -> (
+    (* make a new node *)
+    let ret:callnode = {
+      cnInfo = ni;
+      cnid   = !nodeId;
+      cnCallees = IH.create 5;
+      cnCallers = IH.create 5;
+    }  
+    in
+    incr nodeId;
+    (* add it to the table, then return it *)
+    H.add cg name ret;
+    ret
+   )
+
+(* Get the node for a variable *)
+let getNodeForVar (cg: callgraph) (v: varinfo) : callnode = 
+  getNodeByName cg (NIVar (v, ref false))
+
+let getNodeForIndirect (cg: callgraph) (e: exp) : callnode = 
+  getNodeByName cg (NIIndirect ("<indirect>", ref []))
+
+
+(* Find the name of an indirect node that a function whose address is taken 
+ * belongs *)
+let markFunctionAddrTaken (cg: callgraph) (f: varinfo) : unit = 
+  (*
+  ignore (E.log "markFunctionAddrTaken %s\n" f.vname);
+   *)
+  let n = getNodeForIndirect cg (AddrOf (Var f, NoOffset)) in 
+  match n.cnInfo with 
+    NIIndirect (_, r) -> r := f :: !r
+  | _ -> assert false
+
+
+
+class cgComputer (graph: callgraph) = object(self)
+  inherit nopCilVisitor
+
+  (* the current function we're in, so when we visit a call node
+   * we know who is the caller *)
+  val mutable curFunc: callnode option = None
+
+
+  (* begin visiting a function definition *)
+  method vfunc (f:fundec) : fundec visitAction = begin 
+    (trace "callgraph" (P.dprintf "entering function %s\n" f.svar.vname));
+   let node =  getNodeForVar graph f.svar in 
+   (match node.cnInfo with 
+     NIVar (v, r) -> r := true
+   | _ -> assert false);
+   curFunc <- (Some node);
+   DoChildren
+  end
+
+  (* visit an instruction; we're only interested in calls *)
+  method vinst (i:instr) : instr list visitAction = begin 
+    (*(trace "callgraph" (P.dprintf "visiting instruction: %a\n" dn_instr i));*)
+    let caller : callnode = 
+      match curFunc with 
+        None -> assert false
+      | Some c -> c
+    in
+    let callerName: string = nodeName caller.cnInfo in
+    (match i with
+      Call(_,f,_,_) -> (
+        let callee: callnode = 
+          match f with 
+          | Lval(Var(vi),NoOffset) -> 
+              (trace "callgraph" (P.dprintf "I see a call by %s to %s\n"
+                                    callerName vi.vname));
+              getNodeForVar graph vi
+
+          | _ -> 
+              (trace "callgraph" (P.dprintf "indirect call: %a\n"
+                                  dn_instr i));
+              getNodeForIndirect graph f
+        in
+        
+        (* add one entry to each node's appropriate list *)
+        IH.replace caller.cnCallees callee.cnid callee;
+        IH.replace callee.cnCallers caller.cnid caller
+       )    
+
+    | _ -> ());     (* ignore other kinds instructions *)
+
+    DoChildren
+  end
+      
+  method vexpr (e: exp) = 
+    (match e with 
+      AddrOf (Var fv, NoOffset) when isFunctionType fv.vtype -> 
+        markFunctionAddrTaken graph fv
+    | _ -> ());
+    
+    DoChildren
+end
+
+let computeGraph (f:file) : callgraph = begin
+  let graph = H.create 37 in 
+  let obj:cgComputer = new cgComputer graph in
+
+  (* visit the whole file, computing the graph *)
+  visitCilFileSameGlobals (obj :> cilVisitor) f;
+
+
+  (* return the computed graph *)
+  graph
+end
+    
+let printGraph (out:out_channel) (g:callgraph) : unit = begin 
+  let printEntry _ (n:callnode) : unit =
+    let name = nodeName n.cnInfo in
+    (Printf.fprintf out " %s" name) 
+  in
+  
+  let printCalls (node:callnode) : unit =
+    (fprintf out "  calls:");
+    (IH.iter printEntry node.cnCallees);
+    (fprintf out "\n  is called by:");
+    (IH.iter printEntry node.cnCallers);
+    (fprintf out "\n")
+  in
+  
+  H.iter (fun (name: string) (node: callnode) -> 
+    match node.cnInfo with 
+      NIVar (v, def) -> 
+        (fprintf out "%s (%s):\n" 
+           v.vname (if !def then "defined" else "external"));
+        printCalls node
+
+    | NIIndirect (n, funcs) -> 
+        fprintf out "Indirect %s:\n" n;
+        fprintf out "   possible aliases: ";
+        List.iter (fun a -> fprintf out "%s " a.vname) !funcs;
+        fprintf out "\n"
+
+         )
+
+    g
+  end
+    
+let doCallGraph = ref false
+
+let feature : featureDescr = 
+  { fd_name = "callgraph";
+    fd_enabled = doCallGraph;
+    fd_description = "generation of a static call graph";
+    fd_extraopt = [];
+    fd_doit = 
+    (function (f: file) -> 
+      let graph:callgraph = computeGraph f in
+      printGraph stdout graph);
+    fd_post_check = false;
+  } 
+
+
+(*
+ *
+ * Copyright (c) 2001-2002 by
+ *  George C. Necula	necula@cs.berkeley.edu
+ *  Scott McPeak        smcpeak@cs.berkeley.edu
+ *  Wes Weimer          weimer@cs.berkeley.edu
+ *  Ben Liblit          liblit@cs.berkeley.edu
+ *
+ * All rights reserved.  Permission to use, copy, modify and distribute
+ * this software for research purposes only is hereby granted, 
+ * provided that the following conditions are met: 
+ * 1. XSRedistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * 2. Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * 3. The name of the authors may not be used to endorse or promote products 
+ * derived from  this software without specific prior written permission. 
+ *
+ * DISCLAIMER:
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/callgraph.mli b/cil/src/ext/callgraph.mli
new file mode 100644
index 000000000..bc760180f
--- /dev/null
+++ b/cil/src/ext/callgraph.mli
@@ -0,0 +1,123 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(* callgraph.mli *)
+(* compute a static call graph *)
+
+(* module maintainer: scott *)
+(* see copyright notice at end of this file *)
+
+
+(* ------------------ types ------------------- *)
+(* a call node describes the local calling structure for a
+ * single function: which functions it calls, and which
+ * functions call it *)
+type callnode = {
+  (* An id *)
+  cnid: int;
+  
+  (* the function this node describes *)
+  cnInfo: nodeinfo;
+
+  (* set of functions this one calls, indexed by the node id *)
+  cnCallees: callnode Inthash.t;
+
+  (* set of functions that call this one , indexed by the node id *)
+  cnCallers: callnode Inthash.t;
+}
+
+and nodeinfo = 
+    NIVar of Cil.varinfo * bool ref 
+                         (* Node corresponding to a function. If the boolean 
+                          * is true, then the function is defined, otherwise 
+                          * it is external *)
+
+  | NIIndirect of string (* Indirect nodes have a string associated to them. 
+                          * These strings must be invalid function names *)
+               * Cil.varinfo list ref 
+                         (* A list of functions that this indirect node might 
+                          * denote *)
+
+
+val nodeName: nodeinfo -> string
+
+(* a call graph is a hashtable, mapping a function name to
+ * the node which describes that function's call structure *)
+type callgraph =
+  (string, callnode) Hashtbl.t
+
+
+(* ----------------- functions ------------------- *)  
+(* given a CIL file, compute its static call graph *)
+val computeGraph : Cil.file -> callgraph
+
+(* print the callgraph in a human-readable format to a channel *)
+val printGraph : out_channel -> callgraph -> unit
+
+
+val feature: Cil.featureDescr
+(*
+ *
+ * Copyright (c) 2001-2002 by
+ *  George C. Necula	necula@cs.berkeley.edu
+ *  Scott McPeak        smcpeak@cs.berkeley.edu
+ *  Wes Weimer          weimer@cs.berkeley.edu
+ *  Ben Liblit          liblit@cs.berkeley.edu
+ *   
+ * All rights reserved.  Permission to use, copy, modify and distribute
+ * this software for research purposes only is hereby granted, 
+ * provided that the following conditions are met: 
+ * 1. Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * 2. Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * 3. The name of the authors may not be used to endorse or promote products 
+ * derived from  this software without specific prior written permission. 
+ *
+ * DISCLAIMER:
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/canonicalize.ml b/cil/src/ext/canonicalize.ml
new file mode 100644
index 000000000..a75deeacd
--- /dev/null
+++ b/cil/src/ext/canonicalize.ml
@@ -0,0 +1,292 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+
+(************************************************************************
+ * canonicalize performs several transformations to correct differences
+ * between C and C++, so that the output is (hopefully) valid C++ code.
+ * This is incomplete -- certain fixes which are necessary 
+ * for some programs are not yet implemented.
+ * 
+ * #1) C allows global variables to have multiple declarations and multiple
+ *     (equivalent) definitions. This transformation removes all but one
+ *     declaration and all but one definition.
+ *
+ * #2) Any variables that use C++ keywords as identifiers are renamed.
+ *
+ * #3) __inline is #defined to inline, and __restrict is #defined to nothing.
+ *
+ * #4) C allows function pointers with no specified arguments to be used on
+ *     any argument list.  To make C++ accept this code, we insert a cast
+ *     from the function pointer to a type that matches the arguments.  Of
+ *     course, this does nothing to guarantee that the pointer actually has
+ *     that type.
+ *
+ * #5) Makes casts from int to enum types explicit.  (CIL changes enum
+ *     constants to int constants, but doesn't use a cast.)
+ *
+ ************************************************************************)
+
+open Cil
+module E = Errormsg
+module H = Hashtbl
+
+(* For transformation #1. Stores all variable definitions in the file. *)
+let varDefinitions: (varinfo, global) H.t = H.create 111
+
+
+class canonicalizeVisitor = object(self)
+  inherit nopCilVisitor
+  val mutable currentFunction: fundec = Cil.dummyFunDec;
+
+  (* A hashtable to prevent duplicate declarations. *)
+  val alreadyDeclared: (varinfo, unit) H.t = H.create 111
+  val alreadyDefined: (varinfo, unit) H.t = H.create 111
+
+  (* move variable declarations around *) 
+  method vglob g = match g with 
+    GVar(v, ({init = Some _} as inito), l) ->
+      (* A definition.  May have been moved to an earlier position. *)
+      if H.mem alreadyDefined v then begin
+	ignore (E.warn "Duplicate definition of %s at %a.\n" 
+		        v.vname d_loc !currentLoc);
+	ChangeTo [] (* delete from here. *)
+      end else begin
+	H.add alreadyDefined v ();
+	if H.mem alreadyDeclared v then begin
+	  (* Change the earlier declaration to Extern *)
+	  let oldS = v.vstorage in
+	  ignore (E.log "changing storage of %s from %a\n" 
+		    v.vname d_storage oldS);
+	  v.vstorage <- Extern;	  
+	  let newv = {v with vstorage = oldS} in
+	  ChangeDoChildrenPost([GVar(newv, inito, l)], (fun g -> g) )
+	end else
+	  DoChildren
+      end
+  | GVar(v, {init=None}, l)
+  | GVarDecl(v, l) when not (isFunctionType v.vtype) -> begin
+      (* A declaration.  May have been moved to an earlier position. *)
+      if H.mem alreadyDefined v || H.mem alreadyDeclared v then 
+	ChangeTo [] (* delete from here. *)
+      else begin
+	H.add alreadyDeclared v ();
+	DoChildren
+      end
+  end
+  | GFun(f, l) ->
+      currentFunction <- f; 
+      DoChildren
+  | _ ->
+      DoChildren
+
+(* #2. rename any identifiers whose names are C++ keywords *)
+  method vvdec v = 
+    match v.vname with
+    | "bool"
+    | "catch"
+    | "cdecl"
+    | "class"
+    | "const_cast"
+    | "delete"
+    | "dynamic_cast"
+    | "explicit"
+    | "export"
+    | "false"
+    | "friend"
+    | "mutable"
+    | "namespace"
+    | "new"
+    | "operator"
+    | "pascal"
+    | "private"
+    | "protected"
+    | "public"
+    | "register"
+    | "reinterpret_cast"
+    | "static_cast"
+    | "template"
+    | "this"
+    | "throw"
+    | "true"
+    | "try"
+    | "typeid"
+    | "typename"
+    | "using"
+    | "virtual"
+    | "wchar_t"->
+	v.vname <- v.vname ^ "__cil2cpp";
+	DoChildren
+    | _ -> DoChildren
+
+  method vinst i = 
+(* #5. If an assignment or function call uses expressions as enum values,
+   add an explicit cast. *)
+    match i with 
+      Set (dest, exp, l) -> begin
+	let typeOfDest = typeOfLval dest in
+	match unrollType typeOfDest with 
+	  TEnum _ -> (* add an explicit cast *)
+	    let newI = Set(dest, mkCast exp typeOfDest, l) in
+	    ChangeTo [newI] 
+	| _ -> SkipChildren
+      end
+    | Call (dest, f, args, l) -> begin
+	let rt, formals, isva, attrs = splitFunctionType (typeOf f) in
+	if isva then
+	  SkipChildren (* ignore vararg functions *)
+	else 
+	  match formals with
+	    Some formals' -> begin
+	      let newArgs = try
+		(*Iterate over the arguments, looking for formals that
+		   expect enum types, and insert casts where necessary. *)
+		List.map2 
+		  (fun (actual: exp) (formalName, formalType, _) ->
+		    match unrollType formalType with
+		      TEnum _ -> mkCast actual formalType
+		    | _ ->  actual)
+		  args
+		  formals' 	
+	      with Invalid_argument _ -> 
+		E.s (error "Number of arguments to %a doesn't match type.\n"
+		       d_exp f)
+	      in	  
+	      let newI = Call(dest, f, newArgs, l) in
+	      ChangeTo [newI] 
+	    end
+	  | None -> begin
+  (* #4. No arguments were specified for this type.  To fix this, infer the
+         type from the arguments that are used n this instruction, and insert
+         a cast to that type.*)
+	      match f with 
+		Lval(Mem(fp), off) ->
+		  let counter: int ref = ref 0 in
+		  let newFormals = List.map
+		      (fun (actual:exp) ->
+			incr counter;
+			let formalName = "a" ^ (string_of_int !counter) in
+			(formalName, typeOf actual, []))(* (name,type,attrs) *)
+			  args in
+		  let newFuncPtrType =
+		    TPtr((TFun (rt, Some newFormals, false, attrs)), []) in
+		  let newFuncPtr = Lval(Mem(mkCast fp newFuncPtrType), off) in
+		  ChangeTo [Call(dest, newFuncPtr, args, l)] 
+	      | _ -> 
+		  ignore (warn "cppcanon: %a has no specified arguments, but it's not a function pointer." d_exp f);
+		  SkipChildren
+	  end
+    end
+    | _ -> SkipChildren
+
+  method vinit i = 
+(* #5. If an initializer uses expressions as enum values,
+   add an explicit cast. *)
+    match i with 
+      SingleInit e -> DoChildren (* we don't handle simple initializers here, 
+				  because we don't know what type is expected.
+				  This should be done in vglob if needed. *)
+    | CompoundInit(t, initList) ->
+	let changed: bool ref = ref false in
+	let initList' = List.map
+	    (* iterate over the list, adding casts for any expression that
+	       is expected to be an enum type. *)
+	  (function
+	      (Field(fi, off), SingleInit e) -> begin
+		match unrollType fi.ftype with
+		  TEnum _ -> (* add an explicit cast *)
+		    let newE = mkCast e fi.ftype in
+		    changed := true;
+		    (Field(fi, off), SingleInit newE)
+		| _ -> (* not enum, no cast needed *)
+		    (Field(fi, off), SingleInit e)
+	      end
+	    | other ->
+                   (* This is a more complicated initializer, and I don't think
+		      it can have type enum.  It's children might, though. *)
+		other)
+	    initList in
+	if !changed then begin
+          (* There may be other casts needed in other parts of the
+	     initialization, so do the children too. *)
+	  ChangeDoChildrenPost(CompoundInit(t, initList'), (fun x -> x))
+	end else
+	  DoChildren
+   
+
+(* #5. If a function returns an enum type, add an explicit cast to the
+       return type. *)
+  method vstmt stmt = 
+    (match stmt.skind with
+      Return (Some exp, l) -> begin
+	let typeOfDest, _, _, _ = 
+	  splitFunctionType currentFunction.svar.vtype in
+	match unrollType typeOfDest with 
+	  TEnum _ -> 
+	    stmt.skind <- Return (Some (mkCast exp typeOfDest), l)
+	| _ -> ()
+      end
+    | _ -> ());
+    DoChildren
+end (* class canonicalizeVisitor *)
+
+
+
+(* Entry point for this extension *)
+let canonicalize (f:file) =
+  visitCilFile (new canonicalizeVisitor) f;
+
+  (* #3. Finally, add some #defines to change C keywords to their C++ 
+     equivalents: *)
+  f.globals <-
+    GText( "#ifdef __cplusplus\n"
+	  ^" #define __restrict\n" (* "restrict" doesn't work *)
+	  ^" #define __inline inline\n"
+	  ^"#endif")
+    ::f.globals
+
+
+
+let feature : featureDescr = 
+  { fd_name = "canonicalize";
+    fd_enabled = ref false;
+    fd_description = "fixing some C-isms so that the result is C++ compliant.";
+    fd_extraopt = [];
+    fd_doit = canonicalize;
+    fd_post_check = true;
+  } 
diff --git a/cil/src/ext/canonicalize.mli b/cil/src/ext/canonicalize.mli
new file mode 100644
index 000000000..37bc0d83f
--- /dev/null
+++ b/cil/src/ext/canonicalize.mli
@@ -0,0 +1,48 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(************************************************************************
+ * canonicalize performs several transformations to correct differences
+ * between C and C++, so that the output is (hopefully) valid C++ code.
+ * This is incomplete -- certain fixes which are necessary 
+ * for some programs are not yet implemented.
+ * 
+ * See canonicalize.ml for a list of changes.
+ *
+ ************************************************************************)
+
+val feature: Cil.featureDescr
diff --git a/cil/src/ext/cfg.ml b/cil/src/ext/cfg.ml
new file mode 100644
index 000000000..8b19c797e
--- /dev/null
+++ b/cil/src/ext/cfg.ml
@@ -0,0 +1,289 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2003, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Simon Goldsmith     <sfg@cs.berkeley.edu>
+ *  S.P Rahul, Aman Bhargava
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Authors: Aman Bhargava, S. P. Rahul *)
+(* sfg: this stuff was stolen from optim.ml - the code to print the cfg as
+   a dot graph is mine *)
+
+open Pretty
+open Cil
+module E=Errormsg
+
+(* entry points: cfgFun, printCfgChannel, printCfgFilename *)
+
+(* known issues:
+ * -sucessors of if somehow end up with two edges each 
+ *)
+
+(*------------------------------------------------------------*)
+(* Notes regarding CFG computation:
+   1) Initially only succs and preds are computed. sid's are filled in
+      later, in whatever order is suitable (e.g. for forward problems, reverse
+      depth-first postorder).
+   2) If a stmt (return, break or continue) has no successors, then
+      function return must follow.
+      No predecessors means it is the start of the function
+   3) We use the fact that initially all the succs and preds are assigned []
+*)
+
+(* Fill in the CFG info for the stmts in a block
+   next = succ of the last stmt in this block
+   break = succ of any Break in this block
+   cont  = succ of any Continue in this block
+   None means the succ is the function return. It does not mean the break/cont
+   is invalid. We assume the validity has already been checked.
+*)
+(* At the end of CFG computation, 
+   - numNodes = total number of CFG nodes 
+   - length(nodeList) = numNodes
+*)
+
+let numNodes = ref 0 (* number of nodes in the CFG *)
+let nodeList : stmt list ref = ref [] (* All the nodes in a flat list *) (* ab: Added to change dfs from quadratic to linear *)
+let start_id = ref 0 (* for unique ids across many functions *)
+
+(* entry point *)
+
+(** Compute a control flow graph for fd.  Stmts in fd have preds and succs
+  filled in *)
+let rec cfgFun (fd : fundec): int = 
+  begin
+    numNodes := !start_id;
+    nodeList := [];
+
+    cfgBlock fd.sbody None None None;
+    !numNodes - !start_id
+  end
+
+
+and cfgStmts (ss: stmt list) 
+                 (next:stmt option) (break:stmt option) (cont:stmt option) =
+  match ss with
+    [] -> ();
+  | [s] -> cfgStmt s next break cont
+  | hd::tl ->
+      cfgStmt hd (Some (List.hd tl))  break cont;
+      cfgStmts tl next break cont
+
+and cfgBlock  (blk: block) 
+              (next:stmt option) (break:stmt option) (cont:stmt option) = 
+   cfgStmts blk.bstmts next break cont
+
+(* Fill in the CFG info for a stmt
+   Meaning of next, break, cont should be clear from earlier comment
+*)
+and cfgStmt (s: stmt) (next:stmt option) (break:stmt option) (cont:stmt option) =
+  incr numNodes;
+  s.sid <- !numNodes;
+  nodeList := s :: !nodeList; (* Future traversals can be made in linear time. e.g.  *)
+  if s.succs <> [] then
+    E.s (bug "CFG must be cleared before being computed!");
+  let addSucc (n: stmt) =
+    if not (List.memq n s.succs) then
+      s.succs <- n::s.succs;
+    if not (List.memq s n.preds) then
+      n.preds <- s::n.preds
+  in
+  let addOptionSucc (n: stmt option) =
+    match n with
+      None -> ()
+    | Some n' -> addSucc n'
+  in
+  let addBlockSucc (b: block) =
+    match b.bstmts with
+      [] -> addOptionSucc next
+    | hd::_ -> addSucc hd
+  in
+  match s.skind with
+    Instr _  -> addOptionSucc next
+  | Return _  -> ()
+  | Goto (p,_) -> addSucc !p
+  | Break _ -> addOptionSucc break
+  | Continue _ -> addOptionSucc cont
+  | If (_, blk1, blk2, _) ->
+      (* The succs of If is [true branch;false branch] *)
+      addBlockSucc blk2;
+      addBlockSucc blk1;
+      cfgBlock blk1 next break cont;
+      cfgBlock blk2 next break cont
+  | Block b -> 
+      addBlockSucc b;
+      cfgBlock b next break cont
+  | Switch(_,blk,l,_) -> 
+      List.iter addSucc (List.rev l); (* Add successors in order *)
+      (* sfg: if there's no default, need to connect s->next *)
+      if not (List.exists 
+                (fun stmt -> List.exists 
+                   (function Default _ -> true | _ -> false)
+                   stmt.labels) 
+                l) 
+      then 
+        addOptionSucc next;
+      cfgBlock blk next next cont
+(*
+  | Loop(blk,_,_,_) ->
+*)
+  | While(_,blk,_)
+  | DoWhile(_,blk,_)
+  | For(_,_,_,blk,_) ->
+      addBlockSucc blk;
+      cfgBlock blk (Some s) next (Some s)
+      (* Since all loops have terminating condition true, we don't put
+         any direct successor to stmt following the loop *)
+  | TryExcept _ | TryFinally _ -> 
+      E.s (E.unimp "try/except/finally")
+
+(*------------------------------------------------------------*)
+
+(**************************************************************)
+(* do something for all stmts in a fundec *)
+
+let rec forallStmts (todo) (fd : fundec) = 
+  begin
+    fasBlock todo fd.sbody;
+  end
+
+and fasBlock (todo) (b : block) =
+  List.iter (fasStmt todo) b.bstmts
+
+and fasStmt (todo) (s : stmt) =
+  begin
+    ignore(todo s);
+    match s.skind with
+      | Block b -> fasBlock todo b
+      | If (_, tb, fb, _) -> (fasBlock todo tb; fasBlock todo fb)
+      | Switch (_, b, _, _) -> fasBlock todo b
+(*
+      | Loop (b, _, _, _) -> fasBlock todo b
+*)
+      | While (_, b, _) -> fasBlock todo b
+      | DoWhile (_, b, _) -> fasBlock todo b
+      | For (_, _, _, b, _) -> fasBlock todo b
+      | (Return _ | Break _ | Continue _ | Goto _ | Instr _) -> ()
+      | TryExcept _ | TryFinally _ -> E.s (E.unimp "try/except/finally")
+  end
+;;
+
+(**************************************************************)
+(* printing the control flow graph - you have to compute it first *)
+
+let d_cfgnodename () (s : stmt) =
+  dprintf "%d" s.sid
+
+let d_cfgnodelabel () (s : stmt) =
+  let label = 
+  begin
+    match s.skind with
+      | If (e, _, _, _)  -> "if" (*sprint ~width:999 (dprintf "if %a" d_exp e)*)
+(*
+      | Loop _ -> "loop"
+*)
+      | While _ -> "while"
+      | DoWhile _ -> "dowhile"
+      | For _ -> "for"
+      | Break _ -> "break"
+      | Continue _ -> "continue"
+      | Goto _ -> "goto"
+      | Instr _ -> "instr"
+      | Switch _ -> "switch"
+      | Block _ -> "block"
+      | Return _ -> "return"
+      | TryExcept _ -> "try-except"
+      | TryFinally _ -> "try-finally"
+  end in
+    dprintf "%d: %s" s.sid label
+
+let d_cfgedge (src) () (dest) =
+  dprintf "%a -> %a"
+    d_cfgnodename src
+    d_cfgnodename dest
+
+let d_cfgnode () (s : stmt) =
+    dprintf "%a [label=\"%a\"]\n\t%a" 
+    d_cfgnodename s
+    d_cfgnodelabel s
+    (d_list "\n\t" (d_cfgedge s)) s.succs
+
+(**********************************************************************)
+(* entry points *)
+
+(** print control flow graph (in dot form) for fundec to channel *)
+let printCfgChannel (chan : out_channel) (fd : fundec) =
+  let pnode (s:stmt) = fprintf chan "%a\n" d_cfgnode s in
+    begin
+      ignore (fprintf chan "digraph CFG_%s {\n" fd.svar.vname);
+      forallStmts pnode fd;
+      ignore(fprintf chan  "}\n");
+    end
+
+(** Print control flow graph (in dot form) for fundec to file *)
+let printCfgFilename (filename : string) (fd : fundec) =
+  let chan = open_out filename in
+    begin
+      printCfgChannel chan fd;
+      close_out chan;
+    end
+
+
+;;
+
+(**********************************************************************)
+
+let clearCFGinfo (fd : fundec) =
+  let clear s =
+    s.sid <- -1;
+    s.succs <- [];
+    s.preds <- [];
+  in
+  forallStmts clear fd
+
+let clearFileCFG (f : file) =
+  iterGlobals f (fun g ->
+    match g with GFun(fd,_) ->
+      clearCFGinfo fd
+    | _ -> ())
+
+let computeFileCFG (f : file) =
+  iterGlobals f (fun g ->
+    match g with GFun(fd,_) ->
+      numNodes := cfgFun fd;
+      start_id := !start_id + !numNodes
+    | _ -> ())
diff --git a/cil/src/ext/cfg.mli b/cil/src/ext/cfg.mli
new file mode 100644
index 000000000..19c51666f
--- /dev/null
+++ b/cil/src/ext/cfg.mli
@@ -0,0 +1,36 @@
+(** Code to compute the control-flow graph of a function or file.  
+  This will fill in the [preds] and [succs] fields of {!Cil.stmt}
+
+  This is required for several other extensions, such as {!Dataflow}. 
+*)
+
+open Cil
+
+
+(** Compute the CFG for an entire file, by calling cfgFun on each function. *)
+val computeFileCFG: Cil.file -> unit
+
+(** clear the sid, succs, and preds fields of each statement. *)
+val clearFileCFG: Cil.file -> unit
+
+(** Compute a control flow graph for fd.  Stmts in fd have preds and succs
+  filled in *)
+val cfgFun : fundec -> int
+
+(** clear the sid, succs, and preds fields of each statment in a function *)
+val clearCFGinfo: Cil.fundec -> unit
+
+(** print control flow graph (in dot form) for fundec to channel *)
+val printCfgChannel : out_channel -> fundec -> unit
+
+(** Print control flow graph (in dot form) for fundec to file *)
+val printCfgFilename : string -> fundec -> unit
+
+(** Next statement id that will be assigned. *)
+val start_id: int ref
+
+(** All of the nodes in a file. *)
+val nodeList : stmt list ref
+
+(** number of nodes in the CFG *)
+val numNodes : int ref
diff --git a/cil/src/ext/ciltools.ml b/cil/src/ext/ciltools.ml
new file mode 100755
index 000000000..78f1aafc3
--- /dev/null
+++ b/cil/src/ext/ciltools.ml
@@ -0,0 +1,228 @@
+open Cil
+
+(* Contributed by Nathan Cooprider *)
+
+let isOne e = 
+  isInteger e = Some Int64.one
+
+
+(* written by Zach *)
+let is_volatile_tp tp =
+  List.exists (function (Attr("volatile",_)) -> true 
+    | _ -> false) (typeAttrs tp) 
+    
+(* written by Zach *)
+let is_volatile_vi vi =
+  let vi_vol =
+    List.exists (function (Attr("volatile",_)) -> true 
+      | _ -> false) vi.vattr in
+  let typ_vol = is_volatile_tp vi.vtype in
+  vi_vol || typ_vol
+
+(*****************************************************************************
+ * A collection of useful functions that were not already in CIL as far as I 
+ * could tell. However, I have been surprised before . . . 
+ ****************************************************************************)
+
+type sign = Signed | Unsigned 
+
+exception Not_an_integer
+
+(*****************************************************************************
+ * A bunch of functions for accessing integers. Originally written for 
+ * somebody who didn't know CIL and just wanted to mess with it at the 
+ * OCaml level. 
+ ****************************************************************************)
+
+let unbox_int_type (ye : typ) : (int * sign) =
+  let tp = unrollType ye in
+  let s = 
+    match tp with 
+      TInt (i, _) -> 
+	if (isSigned i) then
+	  Signed
+	else
+	  Unsigned
+    | _ -> raise Not_an_integer
+  in
+  (bitsSizeOf tp), s
+  
+(* depricated. Use isInteger directly instead *)
+let unbox_int_exp (e : exp) : int64 = 
+  match isInteger e with 
+    None -> raise Not_an_integer
+  | Some (x) -> x
+  
+let box_int_to_exp (n : int64) (ye : typ) : exp =
+  let tp = unrollType ye in
+  match tp with 
+    TInt (i, _) -> 
+      kinteger64 i n 
+  | _ -> raise Not_an_integer
+
+let cil_to_ocaml_int (e : exp) : (int64 * int * sign) = 
+  let v, s = unbox_int_type (typeOf e) in
+  unbox_int_exp (e), v, s
+
+exception Weird_bitwidth
+
+(* (int64 * int * sign) : exp *)
+let ocaml_int_to_cil v n s =
+  let char_size = bitsSizeOf charType in 
+  let int_size = bitsSizeOf intType in
+  let short_size = bitsSizeOf (TInt(IShort,[]))in 
+  let long_size = bitsSizeOf longType in
+  let longlong_size = bitsSizeOf (TInt(ILongLong,[])) in
+  let i = 
+    match s with
+      Signed ->
+	if (n = char_size) then 
+	  ISChar
+	else if (n = int_size) then
+	  IInt
+	else if (n = short_size) then
+	  IShort
+	else if (n = long_size) then
+	  ILong
+	else if (n = longlong_size) then
+	  ILongLong
+	else
+	  raise Weird_bitwidth
+    | Unsigned ->
+	if (n = char_size) then 
+	  IUChar
+	else if (n = int_size) then
+	  IUInt
+	else if (n = short_size) then
+	  IUShort
+	else if (n = long_size) then
+	  IULong
+	else if (n = longlong_size) then
+	  IULongLong
+	else
+	  raise Weird_bitwidth
+  in
+  kinteger64 i v
+
+(*****************************************************************************
+ * a couple of type functions that I thought would be useful:
+ ****************************************************************************)
+
+let rec isCompositeType tp =
+  match tp with
+    TComp _  -> true
+  | TPtr(x, _) -> isCompositeType x
+  | TArray(x,_,_) -> isCompositeType x
+  | TFun(x,_,_,_) -> isCompositeType x
+  | TNamed (x,_) -> isCompositeType x.ttype
+  | _ -> false
+
+(** START OF deepHasAttribute ************************************************)
+let visited = ref [] 
+class attribute_checker target rflag = object (self)
+  inherit nopCilVisitor
+  method vtype t =
+    match t with 
+      TComp(cinfo, a) ->
+	if(not (List.exists (fun x -> cinfo.cname = x) !visited )) then begin
+	  visited := cinfo.cname :: !visited;
+	  List.iter 
+	    (fun f -> 
+	      if (hasAttribute target f.fattr) then 
+		rflag := true
+	      else
+		ignore(visitCilType (new attribute_checker target rflag) 
+			 f.ftype)) cinfo.cfields;
+	end;
+	DoChildren	
+    | TNamed(t1, a) ->
+	if(not (List.exists (fun x -> t1.tname = x) !visited )) then begin
+	  visited := t1.tname :: !visited;
+	  ignore(visitCilType (new attribute_checker target rflag) t1.ttype);
+	end;
+	DoChildren
+    | _ ->
+	DoChildren
+  method vattr (Attr(name,params)) =
+    if (name = target) then rflag := true;
+    DoChildren
+end
+
+let deepHasAttribute s t =
+  let found = ref false in
+  visited := [];
+  ignore(visitCilType (new attribute_checker s found) t);
+  !found
+(** END OF deepHasAttribute **************************************************)
+
+(** Stuff from ptranal, slightly modified ************************************)
+
+(*****************************************************************************
+ * A transformation to make every instruction be in its own statement.  
+ ****************************************************************************)
+
+class callBBVisitor = object
+  inherit nopCilVisitor 
+
+  method vstmt s =
+    match s.skind with
+      Instr(il) -> begin
+	if (List.length il > 1) then 
+          let list_of_stmts = List.map (fun one_inst -> 
+            mkStmtOneInstr one_inst) il in
+          let block = mkBlock list_of_stmts in
+	  s.skind <- Block block;
+	  ChangeTo(s)
+	else
+	  SkipChildren
+      end
+    | _ -> DoChildren
+
+  method vvdec _ = SkipChildren
+  method vexpr _ = SkipChildren
+  method vlval _ = SkipChildren
+  method vtype _ = SkipChildren
+end 
+
+let one_instruction_per_statement f =
+  let thisVisitor = new callBBVisitor in
+  visitCilFileSameGlobals thisVisitor f  
+
+(*****************************************************************************
+ * A transformation that gives each variable a unique identifier. 
+ ****************************************************************************)
+
+class vidVisitor = object
+  inherit nopCilVisitor 
+  val count = ref 0 
+
+  method vvdec vi = 
+    vi.vid <- !count ;
+    incr count ; SkipChildren
+end 
+
+let globally_unique_vids f =
+  let thisVisitor = new vidVisitor in
+  visitCilFileSameGlobals thisVisitor f 
+
+(** End of stuff from ptranal ************************************************)
+
+class sidVisitor = object
+  inherit nopCilVisitor 
+  val count = ref 0 
+
+  method vstmt s = 
+    s.sid <- !count ;
+    incr count ;
+    DoChildren
+end 
+
+let globally_unique_sids f =
+  let thisVisitor = new sidVisitor in
+  visitCilFileSameGlobals thisVisitor f 
+
+(** Comparing expressions without a Out_of_memory error **********************)
+
+let compare_exp x y =
+  compare x y
+    
diff --git a/cil/src/ext/dataflow.ml b/cil/src/ext/dataflow.ml
new file mode 100755
index 000000000..7f28f841b
--- /dev/null
+++ b/cil/src/ext/dataflow.ml
@@ -0,0 +1,466 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+module IH = Inthash
+module E = Errormsg
+
+open Cil
+open Pretty
+
+(** A framework for data flow analysis for CIL code.  Before using 
+    this framework, you must initialize the Control-flow Graph for your
+    program, e.g using {!Cfg.computeFileCFG} *)
+
+type 't action = 
+    Default (** The default action *)
+  | Done of 't (** Do not do the default action. Use this result *)
+  | Post of ('t -> 't) (** The default action, followed by the given 
+                        * transformer *)
+
+type 't stmtaction = 
+    SDefault   (** The default action *)
+  | SDone      (** Do not visit this statement or its successors *)
+  | SUse of 't (** Visit the instructions and successors of this statement
+                  as usual, but use the specified state instead of the 
+                  one that was passed to doStmt *)
+
+(* For if statements *)
+type 't guardaction = 
+    GDefault      (** The default state *) 
+  | GUse of 't    (** Use this data for the branch *)
+  | GUnreachable  (** The branch will never be taken. *)
+
+
+(******************************************************************
+ **********
+ **********         FORWARDS 
+ **********
+ ********************************************************************)
+
+module type ForwardsTransfer = sig
+  val name: string (** For debugging purposes, the name of the analysis *)
+
+  val debug: bool ref (** Whether to turn on debugging *)
+
+  type t  (** The type of the data we compute for each block start. May be 
+           * imperative.  *)
+
+  val copy: t -> t
+  (** Make a deep copy of the data *)
+
+
+  val stmtStartData: t Inthash.t
+  (** For each statement id, the data at the start. Not found in the hash 
+   * table means nothing is known about the state at this point. At the end 
+   * of the analysis this means that the block is not reachable. *)
+
+  val pretty: unit -> t -> Pretty.doc 
+  (** Pretty-print the state *)
+
+  val computeFirstPredecessor: Cil.stmt -> t -> t
+  (** Give the first value for a predecessors, compute the value to be set 
+   * for the block *)
+
+  val combinePredecessors: Cil.stmt -> old:t -> t -> t option
+  (** Take some old data for the start of a statement, and some new data for 
+   * the same point. Return None if the combination is identical to the old 
+   * data. Otherwise, compute the combination, and return it. *)
+
+  val doInstr: Cil.instr -> t -> t action
+  (** The (forwards) transfer function for an instruction. The 
+   * {!Cil.currentLoc} is set before calling this. The default action is to 
+   * continue with the state unchanged. *)
+
+  val doStmt: Cil.stmt -> t -> t stmtaction
+  (** The (forwards) transfer function for a statement. The {!Cil.currentLoc} 
+   * is set before calling this. The default action is to do the instructions
+   * in this statement, if applicable, and continue with the successors. *)
+
+  val doGuard: Cil.exp -> t -> t guardaction
+  (** Generate the successor to an If statement assuming the given expression
+    * is nonzero.  Analyses that don't need guard information can return 
+    * GDefault; this is equivalent to returning GUse of the input.
+    * A return value of GUnreachable indicates that this half of the branch
+    * will not be taken and should not be explored.  This will be called
+    * twice per If, once for "then" and once for "else".  
+    *)
+
+  val filterStmt: Cil.stmt -> bool
+  (** Whether to put this statement in the worklist. This is called when a 
+   * block would normally be put in the worklist. *)
+  
+end
+
+
+module ForwardsDataFlow = 
+  functor (T : ForwardsTransfer) ->
+  struct
+
+    (** Keep a worklist of statements to process. It is best to keep a queue, 
+     * because this way it is more likely that we are going to process all 
+     * predecessors of a statement before the statement itself. *)
+    let worklist: Cil.stmt Queue.t = Queue.create ()
+
+    (** We call this function when we have encountered a statement, with some 
+     * state. *)
+    let reachedStatement (s: stmt) (d: T.t) : unit = 
+      (** see if we know about it already *)
+      E.pushContext (fun _ -> dprintf "Reached statement %d with %a" 
+          s.sid T.pretty d);
+      let newdata: T.t option = 
+        try
+          let old = IH.find T.stmtStartData s.sid in 
+          match T.combinePredecessors s ~old:old d with 
+            None -> (* We are done here *)
+              if !T.debug then 
+                ignore (E.log "FF(%s): reached stmt %d with %a\n  implies the old state %a\n"
+                          T.name s.sid T.pretty d T.pretty old);
+              None
+          | Some d' -> begin
+              (* We have changed the data *) 
+              if !T.debug then 
+                ignore (E.log "FF(%s): weaken data for block %d: %a\n" 
+                          T.name s.sid T.pretty d');
+              Some d'
+          end
+        with Not_found -> (* was bottom before *)
+          let d' = T.computeFirstPredecessor s d in 
+          if !T.debug then 
+            ignore (E.log "FF(%s): set data for block %d: %a\n" 
+                      T.name s.sid T.pretty d');
+          Some d'
+      in
+      E.popContext ();
+      match newdata with 
+        None -> ()
+      | Some d' -> 
+          IH.replace T.stmtStartData s.sid d';
+          if T.filterStmt s && 
+            not (Queue.fold (fun exists s' -> exists || s'.sid = s.sid)
+                            false
+                            worklist) then 
+            Queue.add s worklist
+
+
+    (** Get the two successors of an If statement *)
+    let ifSuccs (s:stmt) : stmt * stmt = 
+      let fstStmt blk = match blk.bstmts with
+          [] -> Cil.dummyStmt
+        | fst::_ -> fst
+      in
+      match s.skind with
+        If(e, b1, b2, _) ->
+          let thenSucc = fstStmt b1 in
+          let elseSucc = fstStmt b2 in
+          let oneFallthrough () = 
+            let fallthrough = 
+              List.filter 
+                (fun s' -> thenSucc != s' && elseSucc != s')
+                s.succs
+            in
+            match fallthrough with
+              [] -> E.s (bug "Bad CFG: missing fallthrough for If.")
+            | [s'] -> s'
+            | _ ->  E.s (bug "Bad CFG: multiple fallthrough for If.")
+          in
+          (* If thenSucc or elseSucc is Cil.dummyStmt, it's an empty block.
+             So the successor is the statement after the if *)
+          let stmtOrFallthrough s' =
+            if s' == Cil.dummyStmt then
+              oneFallthrough ()
+            else 
+              s'
+          in
+          (stmtOrFallthrough thenSucc,
+           stmtOrFallthrough elseSucc)
+            
+      | _-> E.s (bug "ifSuccs on a non-If Statement.")
+
+    (** Process a statement *)
+    let processStmt (s: stmt) : unit = 
+      currentLoc := get_stmtLoc s.skind;
+      if !T.debug then 
+        ignore (E.log "FF(%s).stmt %d at %t\n" T.name s.sid d_thisloc);
+
+      (* It must be the case that the block has some data *)
+      let init: T.t = 
+         try T.copy (IH.find T.stmtStartData s.sid) 
+         with Not_found -> 
+            E.s (E.bug "FF(%s): processing block without data" T.name)
+      in
+
+      (** See what the custom says *)
+      match T.doStmt s init with 
+        SDone  -> ()
+      | (SDefault | SUse _) as act -> begin
+          let curr = match act with
+              SDefault -> init
+            | SUse d -> d
+            | SDone -> E.s (bug "SDone")
+          in
+          (* Do the instructions in order *)
+          let handleInstruction (s: T.t) (i: instr) : T.t = 
+            currentLoc := get_instrLoc i;
+            
+            (* Now handle the instruction itself *)
+            let s' = 
+              let action = T.doInstr i s in 
+              match action with 
+               | Done s' -> s'
+               | Default -> s (* do nothing *)
+               | Post f -> f s
+            in
+            s'
+          in
+
+          let after: T.t = 
+            match s.skind with 
+              Instr il -> 
+                (* Handle instructions starting with the first one *)
+                List.fold_left handleInstruction curr il
+
+            | Goto _ | Break _ | Continue _ | If _ 
+            | TryExcept _ | TryFinally _ 
+            | Switch _ | (*Loop _*) While _ | DoWhile _ | For _
+	    | Return _ | Block _ -> curr
+          in
+          currentLoc := get_stmtLoc s.skind;
+                
+          (* Handle If guards *)
+          let succsToReach = match s.skind with
+              If (e, _, _, _) -> begin
+                let not_e = UnOp(LNot, e, intType) in
+                let thenGuard = T.doGuard e after in
+                let elseGuard = T.doGuard not_e after in
+                if thenGuard = GDefault && elseGuard = GDefault then
+                  (* this is the common case *)
+                  s.succs
+                else begin
+                  let doBranch succ guard =
+                    match guard with
+                      GDefault -> reachedStatement succ after
+                    | GUse d ->  reachedStatement succ d
+                    | GUnreachable -> 
+                        if !T.debug then 
+                          ignore (E.log "FF(%s): Not exploring branch to %d\n" 
+                                    T.name succ.sid);
+
+                        ()
+                  in
+                  let thenSucc, elseSucc = ifSuccs s  in
+                  doBranch thenSucc thenGuard;
+                  doBranch elseSucc elseGuard;
+                  []
+                end
+              end
+            | _ -> s.succs
+          in
+          (* Reach the successors *)
+          List.iter (fun s' -> reachedStatement s' after) succsToReach;
+
+      end
+
+
+
+
+          (** Compute the data flow. Must have the CFG initialized *)
+    let compute (sources: stmt list) = 
+      Queue.clear worklist;
+      List.iter (fun s -> Queue.add s worklist) sources;
+
+      (** All initial stmts must have non-bottom data *)
+      List.iter (fun s -> 
+         if not (IH.mem T.stmtStartData s.sid) then 
+           E.s (E.error "FF(%s): initial stmt %d does not have data"
+                  T.name s.sid))
+         sources;
+      if !T.debug then
+        ignore (E.log "\nFF(%s): processing\n"
+                  T.name); 
+      let rec fixedpoint () = 
+        if !T.debug && not (Queue.is_empty worklist) then 
+          ignore (E.log "FF(%s): worklist= %a\n" 
+                    T.name
+                    (docList (fun s -> num s.sid)) 
+                    (List.rev
+                       (Queue.fold (fun acc s -> s :: acc) [] worklist)));
+        try 
+          let s = Queue.take worklist in 
+          processStmt s;
+          fixedpoint ();
+        with Queue.Empty -> 
+          if !T.debug then 
+            ignore (E.log "FF(%s): done\n\n" T.name)
+      in
+      fixedpoint ()
+          
+  end
+
+
+
+(******************************************************************
+ **********
+ **********         BACKWARDS 
+ **********
+ ********************************************************************)
+module type BackwardsTransfer = sig
+  val name: string (* For debugging purposes, the name of the analysis *)
+
+  val debug: bool ref (** Whether to turn on debugging *)
+
+  type t  (** The type of the data we compute for each block start. In many 
+           * presentations of backwards data flow analysis we maintain the 
+           * data at the block end. This is not easy to do with JVML because 
+           * a block has many exceptional ends. So we maintain the data for 
+           * the statement start. *)
+
+  val pretty: unit -> t -> Pretty.doc (** Pretty-print the state *)
+
+  val stmtStartData: t Inthash.t
+  (** For each block id, the data at the start. This data structure must be 
+   * initialized with the initial data for each block *)
+
+  val combineStmtStartData: Cil.stmt -> old:t -> t -> t option
+  (** When the analysis reaches the start of a block, combine the old data 
+   * with the one we have just computed. Return None if the combination is 
+   * the same as the old data, otherwise return the combination. In the 
+   * latter case, the predecessors of the statement are put on the working 
+   * list. *)
+
+
+  val combineSuccessors: t -> t -> t
+  (** Take the data from two successors and combine it *)
+
+
+  val doStmt: Cil.stmt -> t action
+  (** The (backwards) transfer function for a branch. The {!Cil.currentLoc} is 
+   * set before calling this. If it returns None, then we have some default 
+   * handling. Otherwise, the returned data is the data before the branch 
+   * (not considering the exception handlers) *)
+
+  val doInstr: Cil.instr -> t -> t action
+  (** The (backwards) transfer function for an instruction. The 
+   * {!Cil.currentLoc} is set before calling this. If it returns None, then we 
+   * have some default handling. Otherwise, the returned data is the data 
+   * before the branch (not considering the exception handlers) *)
+
+  val filterStmt: Cil.stmt -> Cil.stmt -> bool
+  (** Whether to put this predecessor block in the worklist. We give the 
+   * predecessor and the block whose predecessor we are (and whose data has 
+   * changed)  *)
+  
+end
+
+module BackwardsDataFlow = 
+  functor (T : BackwardsTransfer) -> 
+  struct
+
+    let getStmtStartData (s: stmt) : T.t = 
+      try IH.find T.stmtStartData s.sid
+      with Not_found -> 
+        E.s (E.bug "BF(%s): stmtStartData is not initialized for %d"
+               T.name s.sid)
+
+    (** Process a statement and return true if the set of live return 
+     * addresses on its entry has changed. *)
+    let processStmt (s: stmt) : bool = 
+      if !T.debug then 
+        ignore (E.log "FF(%s).stmt %d\n" T.name s.sid);
+
+
+      (* Find the state before the branch *)
+      currentLoc := get_stmtLoc s.skind;
+      let d: T.t = 
+        match T.doStmt s with 
+           Done d -> d
+         | (Default | Post _) as action -> begin
+             (* Do the default one. Combine the successors *)
+             let res = 
+               match s.succs with 
+                 [] -> E.s (E.bug "You must doStmt for the statements with no successors")
+               | fst :: rest -> 
+                   List.fold_left (fun acc succ -> 
+                     T.combineSuccessors acc (getStmtStartData succ))
+                     (getStmtStartData fst)
+                     rest
+             in
+             (* Now do the instructions *)
+             let res' = 
+               match s.skind with 
+                 Instr il -> 
+                   (* Now scan the instructions in reverse order. This may 
+                    * Stack_overflow on very long blocks ! *)
+                   let handleInstruction (i: instr) (s: T.t) : T.t = 
+                     currentLoc := get_instrLoc i;
+                     (* First handle the instruction itself *)
+                     let action = T.doInstr i s in 
+                     match action with 
+                     | Done s' -> s'
+                     | Default -> s (* do nothing *)
+                     | Post f -> f s
+                   in
+                   (* Handle instructions starting with the last one *)
+                   List.fold_right handleInstruction il res
+
+               | _ -> res
+             in
+             match action with 
+               Post f -> f res'
+             | _ -> res'
+         end
+      in
+
+      (* See if the state has changed. The only changes are that it may grow.*)
+      let s0 = getStmtStartData s in 
+
+      match T.combineStmtStartData s ~old:s0 d with 
+        None -> (* The old data is good enough *)
+          false
+
+      | Some d' -> 
+          (* We have changed the data *) 
+          if !T.debug then 
+            ignore (E.log "BF(%s): set data for block %d: %a\n" 
+                      T.name s.sid T.pretty d');
+          IH.replace T.stmtStartData s.sid d';
+          true
+
+
+          (** Compute the data flow. Must have the CFG initialized *)
+    let compute (sinks: stmt list) = 
+      let worklist: Cil.stmt Queue.t = Queue.create () in
+      List.iter (fun s -> Queue.add s worklist) sinks;
+      if !T.debug && not (Queue.is_empty worklist) then
+        ignore (E.log "\nBF(%s): processing\n" 
+                  T.name); 
+      let rec fixedpoint () = 
+        if !T.debug &&  not (Queue.is_empty worklist) then 
+          ignore (E.log "BF(%s): worklist= %a\n" 
+                    T.name
+                    (docList (fun s -> num s.sid)) 
+                    (List.rev
+                       (Queue.fold (fun acc s -> s :: acc) [] worklist)));
+        try 
+          let s = Queue.take worklist in 
+          let changes = processStmt s in 
+          if changes then begin
+            (* We must add all predecessors of block b, only if not already 
+             * in and if the filter accepts them. *)
+            List.iter 
+              (fun p ->
+                if not (Queue.fold (fun exists s' -> exists || p.sid = s'.sid) 
+                          false worklist) &&
+                  T.filterStmt p s then 
+                  Queue.add p worklist)
+              s.preds;
+          end;
+          fixedpoint ();
+
+        with Queue.Empty -> 
+          if !T.debug then 
+            ignore (E.log "BF(%s): done\n\n" T.name)
+      in
+      fixedpoint ();
+          
+  end
+
+
diff --git a/cil/src/ext/dataflow.mli b/cil/src/ext/dataflow.mli
new file mode 100755
index 000000000..e72c5db01
--- /dev/null
+++ b/cil/src/ext/dataflow.mli
@@ -0,0 +1,151 @@
+(** A framework for data flow analysis for CIL code.  Before using 
+    this framework, you must initialize the Control-flow Graph for your
+    program, e.g using {!Cfg.computeFileCFG} *)
+
+type 't action = 
+    Default (** The default action *)
+  | Done of 't (** Do not do the default action. Use this result *)
+  | Post of ('t -> 't) (** The default action, followed by the given 
+                        * transformer *)
+
+type 't stmtaction = 
+    SDefault   (** The default action *)
+  | SDone      (** Do not visit this statement or its successors *)
+  | SUse of 't (** Visit the instructions and successors of this statement
+                  as usual, but use the specified state instead of the 
+                  one that was passed to doStmt *)
+
+(* For if statements *)
+type 't guardaction = 
+    GDefault      (** The default state *) 
+  | GUse of 't    (** Use this data for the branch *)
+  | GUnreachable  (** The branch will never be taken. *)
+
+
+(******************************************************************
+ **********
+ **********         FORWARDS 
+ **********
+ ********************************************************************)
+
+module type ForwardsTransfer = sig
+  val name: string (** For debugging purposes, the name of the analysis *)
+
+  val debug: bool ref (** Whether to turn on debugging *)
+
+  type t  (** The type of the data we compute for each block start. May be 
+           * imperative.  *)
+
+  val copy: t -> t
+  (** Make a deep copy of the data *)
+
+
+  val stmtStartData: t Inthash.t
+  (** For each statement id, the data at the start. Not found in the hash 
+   * table means nothing is known about the state at this point. At the end 
+   * of the analysis this means that the block is not reachable. *)
+
+  val pretty: unit -> t -> Pretty.doc 
+  (** Pretty-print the state *)
+
+  val computeFirstPredecessor: Cil.stmt -> t -> t
+  (** Give the first value for a predecessors, compute the value to be set 
+   * for the block *)
+
+  val combinePredecessors: Cil.stmt -> old:t -> t -> t option
+  (** Take some old data for the start of a statement, and some new data for 
+   * the same point. Return None if the combination is identical to the old 
+   * data. Otherwise, compute the combination, and return it. *)
+
+  val doInstr: Cil.instr -> t -> t action
+  (** The (forwards) transfer function for an instruction. The 
+   * {!Cil.currentLoc} is set before calling this. The default action is to 
+   * continue with the state unchanged. *)
+
+  val doStmt: Cil.stmt -> t -> t stmtaction
+  (** The (forwards) transfer function for a statement. The {!Cil.currentLoc} 
+   * is set before calling this. The default action is to do the instructions
+   * in this statement, if applicable, and continue with the successors. *)
+
+  val doGuard: Cil.exp -> t -> t guardaction
+  (** Generate the successor to an If statement assuming the given expression
+    * is nonzero.  Analyses that don't need guard information can return 
+    * GDefault; this is equivalent to returning GUse of the input.
+    * A return value of GUnreachable indicates that this half of the branch
+    * will not be taken and should not be explored.  This will be called
+    * twice per If, once for "then" and once for "else".  
+    *)
+
+  val filterStmt: Cil.stmt -> bool
+  (** Whether to put this statement in the worklist. This is called when a 
+   * block would normally be put in the worklist. *)
+  
+end
+
+module ForwardsDataFlow (T : ForwardsTransfer) : sig
+  val compute: Cil.stmt list -> unit
+  (** Fill in the T.stmtStartData, given a number of initial statements to 
+   * start from. All of the initial statements must have some entry in 
+   * T.stmtStartData (i.e., the initial data should not be bottom) *)
+end
+
+(******************************************************************
+ **********
+ **********         BACKWARDS 
+ **********
+ ********************************************************************)
+module type BackwardsTransfer = sig
+  val name: string (** For debugging purposes, the name of the analysis *)
+
+  val debug: bool ref (** Whether to turn on debugging *)
+
+  type t  (** The type of the data we compute for each block start. In many 
+           * presentations of backwards data flow analysis we maintain the 
+           * data at the block end. This is not easy to do with JVML because 
+           * a block has many exceptional ends. So we maintain the data for 
+           * the statement start. *)
+
+  val pretty: unit -> t -> Pretty.doc (** Pretty-print the state *)
+
+  val stmtStartData: t Inthash.t
+  (** For each block id, the data at the start. This data structure must be 
+   * initialized with the initial data for each block *)
+
+  val combineStmtStartData: Cil.stmt -> old:t -> t -> t option
+  (** When the analysis reaches the start of a block, combine the old data 
+   * with the one we have just computed. Return None if the combination is 
+   * the same as the old data, otherwise return the combination. In the 
+   * latter case, the predecessors of the statement are put on the working 
+   * list. *)
+
+
+  val combineSuccessors: t -> t -> t
+  (** Take the data from two successors and combine it *)
+
+
+  val doStmt: Cil.stmt -> t action
+  (** The (backwards) transfer function for a branch. The {!Cil.currentLoc} is 
+   * set before calling this. If it returns None, then we have some default 
+   * handling. Otherwise, the returned data is the data before the branch 
+   * (not considering the exception handlers) *)
+
+  val doInstr: Cil.instr -> t -> t action
+  (** The (backwards) transfer function for an instruction. The 
+   * {!Cil.currentLoc} is set before calling this. If it returns None, then we 
+   * have some default handling. Otherwise, the returned data is the data 
+   * before the branch (not considering the exception handlers) *)
+
+  val filterStmt: Cil.stmt -> Cil.stmt -> bool
+  (** Whether to put this predecessor block in the worklist. We give the 
+   * predecessor and the block whose predecessor we are (and whose data has 
+   * changed)  *)
+  
+end
+
+module BackwardsDataFlow (T : BackwardsTransfer) : sig
+  val compute: Cil.stmt list -> unit
+  (** Fill in the T.stmtStartData, given a number of initial statements to 
+   * start from (the sinks for the backwards data flow). All of the statements
+   * (not just the initial ones!) must have some entry in T.stmtStartData 
+   * (i.e., the initial data should not be bottom) *)
+end
diff --git a/cil/src/ext/dataslicing.ml b/cil/src/ext/dataslicing.ml
new file mode 100644
index 000000000..35390b40c
--- /dev/null
+++ b/cil/src/ext/dataslicing.ml
@@ -0,0 +1,462 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2004, 
+ *  Jeremy Condit       <jcondit@cs.berkeley.edu>
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+open Cil
+open Pretty
+module E = Errormsg
+
+let debug = false
+
+let numRegions : int = 2
+
+let newGlobals : global list ref = ref []
+
+let curFundec : fundec ref = ref dummyFunDec
+let curLocation : location ref = ref locUnknown
+
+let applyOption (fn : 'a -> 'b) (ao : 'a option) : 'b option =
+  match ao with
+  | Some a -> Some (fn a)
+  | None -> None
+
+let getRegion (attrs : attributes) : int =
+  try
+    match List.hd (filterAttributes "region" attrs) with
+    | Attr (_, [AInt i]) -> i
+    | _ -> E.s (bug "bad region attribute")
+  with Failure _ ->
+    1
+
+let checkRegion (i : int) (attrs : attributes) : bool =
+  (getRegion attrs) = i
+
+let regionField (i : int) : string =
+  "r" ^ (string_of_int i)
+
+let regionStruct (i : int) (name : string) : string =
+  name ^ "_r" ^ (string_of_int i)
+
+let foldRegions (fn : int -> 'a -> 'a) (base : 'a) : 'a =
+  let rec helper (i : int) : 'a =
+    if i <= numRegions then
+      fn i (helper (i + 1))
+    else
+      base
+  in
+  helper 1
+
+let rec getTypeName (t : typ) : string =
+  match t with
+  | TVoid _ -> "void"
+  | TInt _ -> "int"
+  | TFloat _ -> "float"
+  | TComp (cinfo, _) -> "comp_" ^ cinfo.cname
+  | TNamed (tinfo, _) -> "td_" ^ tinfo.tname
+  | TPtr (bt, _) -> "ptr_" ^ (getTypeName bt)
+  | TArray (bt, _, _) -> "array_" ^ (getTypeName bt)
+  | TFun _ -> "fn"
+  | _ -> E.s (unimp "typename")
+
+let isAllocFunction (fn : exp) : bool =
+  match fn with
+  | Lval (Var vinfo, NoOffset) when vinfo.vname = "malloc" -> true
+  | _ -> false
+
+let isExternalFunction (fn : exp) : bool =
+  match fn with
+  | Lval (Var vinfo, NoOffset) when vinfo.vstorage = Extern -> true
+  | _ -> false
+
+let types : (int * typsig, typ) Hashtbl.t = Hashtbl.create 113
+let typeInfos : (int * string, typeinfo) Hashtbl.t = Hashtbl.create 113
+let compInfos : (int * int, compinfo) Hashtbl.t = Hashtbl.create 113
+let varTypes : (typsig, typ) Hashtbl.t = Hashtbl.create 113
+let varCompInfos : (typsig, compinfo) Hashtbl.t = Hashtbl.create 113
+
+let rec sliceCompInfo (i : int) (cinfo : compinfo) : compinfo =
+  try
+    Hashtbl.find compInfos (i, cinfo.ckey)
+  with Not_found ->
+    mkCompInfo cinfo.cstruct (regionStruct i cinfo.cname)
+      (fun cinfo' -> 
+         Hashtbl.add compInfos (i, cinfo.ckey) cinfo';
+         List.fold_right
+           (fun finfo rest ->
+              let t = sliceType i finfo.ftype in
+              if not (isVoidType t) then
+                (finfo.fname, t, finfo.fbitfield,
+                 finfo.fattr, finfo.floc) :: rest
+              else
+                rest)
+           cinfo.cfields [])
+      cinfo.cattr
+
+and sliceTypeInfo (i : int) (tinfo : typeinfo) : typeinfo =
+  try
+    Hashtbl.find typeInfos (i, tinfo.tname)
+  with Not_found ->
+    let result =
+      { tinfo with tname = regionStruct i tinfo.tname;
+                   ttype = sliceType i tinfo.ttype; }
+    in
+    Hashtbl.add typeInfos (i, tinfo.tname) result;
+    result
+
+and sliceType (i : int) (t : typ) : typ =
+  let ts = typeSig t in
+  try
+    Hashtbl.find types (i, ts)
+  with Not_found ->
+    let result =
+      match t with
+      | TVoid _ -> t
+      | TInt (_, attrs) -> if checkRegion i attrs then t else TVoid []
+      | TFloat (_, attrs) -> if checkRegion i attrs then t else TVoid []
+      | TComp (cinfo, attrs) -> TComp (sliceCompInfo i cinfo, attrs)
+      | TNamed (tinfo, attrs) -> TNamed (sliceTypeInfo i tinfo, attrs)
+      | TPtr (TVoid _, _) -> t (* Avoid discarding void*. *)
+      | TPtr (bt, attrs) ->
+          let bt' = sliceType i bt in
+          if not (isVoidType bt') then TPtr (bt', attrs) else TVoid []
+      | TArray (bt, eo, attrs) ->
+          TArray (sliceType i bt, applyOption (sliceExp 1) eo, attrs)
+      | TFun (ret, args, va, attrs) ->
+          if checkRegion i attrs then
+            TFun (sliceTypeAll ret,
+                  applyOption
+                    (List.map (fun (aname, atype, aattrs) ->
+                               (aname, sliceTypeAll atype, aattrs)))
+                    args,
+                  va, attrs)
+          else
+            TVoid []
+      | TBuiltin_va_list _ -> t
+      | _ -> E.s (unimp "type %a" d_type t)
+    in
+    Hashtbl.add types (i, ts) result;
+    result
+
+and sliceTypeAll (t : typ) : typ =
+  begin
+  match t with
+  | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
+      E.s (bug "tried to slice twice")
+  | _ -> ()
+  end;
+  let ts = typeSig t in
+  try
+    Hashtbl.find varTypes ts
+  with Not_found ->
+    let cinfo =
+      let name = ("var_" ^ (getTypeName t)) in
+      if debug then ignore (E.log "creating %s\n" name);
+      try
+        Hashtbl.find varCompInfos ts
+      with Not_found ->
+        mkCompInfo true name
+          (fun cinfo ->
+             Hashtbl.add varCompInfos ts cinfo;
+             foldRegions
+               (fun i rest ->
+                  let t' = sliceType i t in
+                  if not (isVoidType t') then
+                    (regionField i, t', None, [], !curLocation) :: rest
+                  else
+                    rest)
+             [])
+          [Attr ("var_type_sliced", [])]
+    in
+    let t' =
+      if List.length cinfo.cfields > 1 then
+        begin
+        newGlobals := GCompTag (cinfo, !curLocation) :: !newGlobals;
+        TComp (cinfo, [])
+        end
+      else
+        t
+    in
+    Hashtbl.add varTypes ts t';
+    t'
+
+and sliceLval (i : int) (lv : lval) : lval =
+  if debug then ignore (E.log "lval %a\n" d_lval lv);
+  let lh, offset = lv in
+  match lh with
+  | Var vinfo ->
+      let t = sliceTypeAll vinfo.vtype in
+      let offset' =
+        match t with
+        | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
+            Field (getCompField cinfo (regionField i), offset)
+        | _ -> offset
+      in
+      Var vinfo, offset'
+  | Mem e ->
+      Mem (sliceExp i e), offset
+
+and sliceExp (i : int) (e : exp) : exp =
+  if debug then ignore (E.log "exp %a\n" d_exp e);
+  match e with
+  | Const c -> Const c
+  | Lval lv -> Lval (sliceLval i lv)
+  | UnOp (op, e1, t) -> UnOp (op, sliceExp i e1, sliceType i t)
+  | BinOp (op, e1, e2, t) -> BinOp (op, sliceExp i e1, sliceExp i e2,
+                                    sliceType i t)
+  | CastE (t, e) -> sliceCast i t e
+  | AddrOf lv -> AddrOf (sliceLval i lv)
+  | StartOf lv -> StartOf (sliceLval i lv)
+  | SizeOf t -> SizeOf (sliceTypeAll t)
+  | _ -> E.s (unimp "exp %a" d_exp e)
+
+and sliceCast (i : int) (t : typ) (e : exp) : exp =
+  let te = typeOf e in
+  match t, te with
+  | TInt (k1, _), TInt (k2, attrs2) when k1 = k2 ->
+      (* Note: We strip off integer cast operations. *)
+      sliceExp (getRegion attrs2) e
+  | TInt (k1, _), TPtr _ ->
+      (* Note: We strip off integer cast operations. *)
+      sliceExp i e
+  | TPtr _, _ when isZero e ->
+      CastE (sliceType i t, sliceExp i e)
+  | TPtr (bt1, _), TPtr (bt2, _) when (typeSig bt1) = (typeSig bt2) ->
+      CastE (sliceType i t, sliceExp i e)
+  | _ ->
+      E.s (unimp "sketchy cast (%a) -> (%a)\n" d_type te d_type t)
+
+and sliceExpAll (e : exp) (l : location) : instr list * exp =
+  let t = typeOf e in
+  let t' = sliceTypeAll t in
+  match t' with
+  | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
+      let vinfo = makeTempVar !curFundec t in
+      let instrs =
+        foldRegions
+          (fun i rest ->
+             try
+               let finfo = getCompField cinfo (regionField i) in
+               if not (isVoidType finfo.ftype) then
+                 Set ((Var vinfo, Field (finfo, NoOffset)),
+                      sliceExp i e, l) :: rest
+               else
+                 rest
+             with Not_found ->
+               rest)
+          []
+      in
+      instrs, Lval (var vinfo)
+  | _ -> [], sliceExp 1 e
+
+let sliceVar (vinfo : varinfo) : unit =
+  if hasAttribute "var_sliced" vinfo.vattr then
+    E.s (bug "tried to slice a var twice");
+  let t = sliceTypeAll vinfo.vtype in
+  if debug then ignore (E.log "setting %s type to %a\n" vinfo.vname d_type t);
+  vinfo.vattr <- addAttribute (Attr ("var_sliced", [])) vinfo.vattr;
+  vinfo.vtype <- t
+
+let sliceInstr (inst : instr) : instr list =
+  match inst with
+  | Set (lv, e, loc) ->
+      if debug then ignore (E.log "set %a %a\n" d_lval lv d_exp e);
+      let t = typeOfLval lv in
+      foldRegions
+        (fun i rest ->
+           if not (isVoidType (sliceType i t)) then
+             Set (sliceLval i lv, sliceExp i e, loc) :: rest
+           else
+             rest)
+        []
+  | Call (ret, fn, args, l) when isAllocFunction fn ->
+      let lv =
+        match ret with
+        | Some lv -> lv
+        | None -> E.s (bug "malloc call has no return lval")
+      in
+      let t = typeOfLval lv in
+      foldRegions
+        (fun i rest ->
+           if not (isVoidType (sliceType i t)) then
+             Call (Some (sliceLval i lv), sliceExp 1 fn,
+                   List.map (sliceExp i) args, l) :: rest
+           else
+             rest)
+        []
+  | Call (ret, fn, args, l) when isExternalFunction fn ->
+      [Call (applyOption (sliceLval 1) ret, sliceExp 1 fn,
+             List.map (sliceExp 1) args, l)]
+  | Call (ret, fn, args, l) ->
+      let ret', set =
+        match ret with
+        | Some lv ->
+            let vinfo = makeTempVar !curFundec (typeOfLval lv) in
+            Some (var vinfo), [Set (lv, Lval (var vinfo), l)]
+        | None ->
+            None, []
+      in
+      let instrs, args' =
+        List.fold_right
+          (fun arg (restInstrs, restArgs) ->
+             let instrs, arg' = sliceExpAll arg l in
+             instrs @ restInstrs, (arg' :: restArgs))
+          args ([], [])
+      in
+      instrs @ (Call (ret', sliceExp 1 fn, args', l) :: set)
+  | _ -> E.s (unimp "inst %a" d_instr inst)
+
+let sliceReturnExp (eo : exp option) (l : location) : stmtkind =
+  match eo with
+  | Some e ->
+      begin
+      match sliceExpAll e l with
+      | [], e' -> Return (Some e', l)
+      | instrs, e' -> Block (mkBlock [mkStmt (Instr instrs);
+                                      mkStmt (Return (Some e', l))])
+      end
+  | None -> Return (None, l)
+
+let rec sliceStmtKind (sk : stmtkind) : stmtkind =
+  match sk with
+  | Instr instrs -> Instr (List.flatten (List.map sliceInstr instrs))
+  | Block b -> Block (sliceBlock b)
+  | If (e, b1, b2, l) -> If (sliceExp 1 e, sliceBlock b1, sliceBlock b2, l)
+  | Break l -> Break l
+  | Continue l -> Continue l
+  | Return (eo, l) -> sliceReturnExp eo l
+  | Switch (e, b, sl, l) -> Switch (sliceExp 1 e, sliceBlock b,
+                                    List.map sliceStmt sl, l)
+(*
+  | Loop (b, l, so1, so2) -> Loop (sliceBlock b, l,
+                                   applyOption sliceStmt so1,
+                                   applyOption sliceStmt so2)
+*)
+  | While (e, b, l) -> While (sliceExp 1 e, sliceBlock b, l)
+  | DoWhile (e, b, l) -> DoWhile (sliceExp 1 e, sliceBlock b, l)
+  | For (bInit, e, bIter, b, l) ->
+	For (sliceBlock bInit, sliceExp 1e, sliceBlock bIter, sliceBlock b, l)
+  | Goto _ -> sk
+  | _ -> E.s (unimp "statement")
+
+and sliceStmt (s : stmt) : stmt =
+  (* Note: We update statements destructively so that goto/switch work. *)
+  s.skind <- sliceStmtKind s.skind;
+  s
+
+and sliceBlock (b : block) : block =
+  ignore (List.map sliceStmt b.bstmts);
+  b
+
+let sliceFundec (fd : fundec) (l : location) : unit =
+  curFundec := fd;
+  curLocation := l;
+  ignore (sliceBlock fd.sbody);
+  curFundec := dummyFunDec;
+  curLocation := locUnknown
+
+let sliceGlobal (g : global) : unit =
+  match g with
+  | GType (tinfo, l) ->
+      newGlobals :=
+        foldRegions (fun i rest -> GType (sliceTypeInfo i tinfo, l) :: rest)
+                    !newGlobals
+  | GCompTag (cinfo, l) ->
+      newGlobals :=
+        foldRegions (fun i rest -> GCompTag (sliceCompInfo i cinfo, l) :: rest)
+                    !newGlobals
+  | GCompTagDecl (cinfo, l) ->
+      newGlobals :=
+        foldRegions (fun i rest -> GCompTagDecl (sliceCompInfo i cinfo, l) ::
+                                   rest)
+                    !newGlobals
+  | GFun (fd, l) ->
+      sliceFundec fd l;
+      newGlobals := GFun (fd, l) :: !newGlobals
+  | GVarDecl _
+  | GVar _ ->
+      (* Defer processing of vars until end. *)
+      newGlobals := g :: !newGlobals
+  | _ ->
+      E.s (unimp "global %a\n" d_global g)
+
+let sliceGlobalVars (g : global) : unit =
+  match g with
+  | GFun (fd, l) ->
+      curFundec := fd;
+      curLocation := l;
+      List.iter sliceVar fd.slocals;
+      List.iter sliceVar fd.sformals;
+      setFunctionType fd (sliceType 1 fd.svar.vtype);
+      curFundec := dummyFunDec;
+      curLocation := locUnknown;
+  | GVar (vinfo, _, l) ->
+      curLocation := l;
+      sliceVar vinfo;
+      curLocation := locUnknown
+  | _ -> ()
+
+class dropAttrsVisitor = object
+  inherit nopCilVisitor
+
+  method vvrbl (vinfo : varinfo) =
+    vinfo.vattr <- dropAttribute "var_sliced" vinfo.vattr;
+    DoChildren
+
+  method vglob (g : global) =
+    begin
+    match g with
+    | GCompTag (cinfo, _) ->
+        cinfo.cattr <- dropAttribute "var_type_sliced" cinfo.cattr;
+    | _ -> ()
+    end;
+    DoChildren
+end
+
+let sliceFile (f : file) : unit =
+  newGlobals := [];
+  List.iter sliceGlobal f.globals;
+  List.iter sliceGlobalVars f.globals;
+  f.globals <- List.rev !newGlobals;
+  visitCilFile (new dropAttrsVisitor) f
+
+let feature : featureDescr = 
+  { fd_name = "DataSlicing";
+    fd_enabled = ref false;
+    fd_description = "data slicing";
+    fd_extraopt = [];
+    fd_doit = sliceFile;
+    fd_post_check = true;
+  } 
diff --git a/cil/src/ext/dataslicing.mli b/cil/src/ext/dataslicing.mli
new file mode 100644
index 000000000..00606484c
--- /dev/null
+++ b/cil/src/ext/dataslicing.mli
@@ -0,0 +1,41 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  Jeremy Condit       <jcondit@cs.berkeley.edu>
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* This feature implements data slicing.  The user annotates base types
+ * and function types with region(i) annotations, and this transformation
+ * will separate the fields into parallel data structures accordingly. *)
+
+val feature: Cil.featureDescr
diff --git a/cil/src/ext/deadcodeelim.ml b/cil/src/ext/deadcodeelim.ml
new file mode 100644
index 000000000..e560e01de
--- /dev/null
+++ b/cil/src/ext/deadcodeelim.ml
@@ -0,0 +1,173 @@
+(* Eliminate assignment instructions whose results are not
+   used *)
+
+open Cil
+open Pretty
+
+module E = Errormsg
+module RD = Reachingdefs
+module UD = Usedef
+module IH = Inthash
+module S = Stats
+
+module IS = Set.Make(
+  struct
+    type t = int
+    let compare = compare
+  end)
+
+let debug = RD.debug
+
+
+let usedDefsSet = ref IS.empty
+(* put used def ids into usedDefsSet *)
+(* assumes reaching definitions have already been computed *)
+class usedDefsCollectorClass = object(self)
+    inherit RD.rdVisitorClass
+
+  method add_defids iosh e u =
+    UD.VS.iter (fun vi ->
+      if IH.mem iosh vi.vid then 
+	let ios = IH.find iosh vi.vid in
+	if !debug then ignore(E.log "DCE: IOS size for vname=%s at stmt=%d: %d\n" 
+				vi.vname sid (RD.IOS.cardinal ios));
+	RD.IOS.iter (function
+	    Some(i) -> 
+	      if !debug then ignore(E.log "DCE: def %d used: %a\n" i d_plainexp e);
+	      usedDefsSet := IS.add i (!usedDefsSet)
+	  | None -> ()) ios
+      else if !debug then ignore(E.log "DCE: vid %d:%s not in stm:%d iosh at %a\n"
+				   vi.vid vi.vname sid d_plainexp e)) u
+
+  method vexpr e =
+    let u = UD.computeUseExp e in
+    match self#get_cur_iosh() with
+      Some(iosh) -> self#add_defids iosh e u; DoChildren
+    | None ->
+	if !debug then ignore(E.log "DCE: use but no rd data: %a\n" d_plainexp e);
+	DoChildren
+
+  method vinst i =
+    let handle_inst iosh i = match i with
+    | Asm(_,_,slvl,_,_,_) -> List.iter (fun (s,lv) ->
+	match lv with (Var v, off) ->
+	  if s.[0] = '+' then
+	    self#add_defids iosh (Lval(Var v, off)) (UD.VS.singleton v)
+	| _ -> ()) slvl
+    | _ -> ()
+    in
+    begin try
+      cur_rd_dat <- Some(List.hd rd_dat_lst);
+      rd_dat_lst <- List.tl rd_dat_lst
+    with Failure "hd" -> ()
+    end;
+    match self#get_cur_iosh() with
+      Some iosh -> handle_inst iosh i; DoChildren
+    | None -> DoChildren
+
+end
+
+(***************************************************
+ * Also need to find reads from volatiles 
+ * uses two functions I've put in ciltools which 
+ * are basically what Zach wrote, except one is for 
+ * types and one is for vars. Another difference is
+ * they filter out pointers to volatiles. This 
+ * handles DMA 
+ ***************************************************)
+class hasVolatile flag = object (self)
+  inherit nopCilVisitor   
+  method vlval l = 
+    let tp = typeOfLval l in
+    if (Ciltools.is_volatile_tp tp) then flag := true;
+    DoChildren
+  method vexpr e =
+    DoChildren
+end
+
+let exp_has_volatile e = 
+  let flag = ref false in
+  ignore (visitCilExpr (new hasVolatile flag) e);
+  !flag
+ (***************************************************)
+
+let removedCount = ref 0
+(* Filter out instructions whose definition ids are not
+   in usedDefsSet *)
+class uselessInstrElim : cilVisitor = object(self)
+  inherit nopCilVisitor
+
+  method vstmt stm =
+
+    let test (i,(_,s,iosh)) =
+      match i with 
+	Call _ -> true 
+      | Set((Var vi,NoOffset),e,_) ->
+	  if vi.vglob || (Ciltools.is_volatile_vi vi) || (exp_has_volatile e) then true else
+	  let _, defd = UD.computeUseDefInstr i in
+	  let rec loop n =
+	    if n < 0 then false else
+	    if IS.mem (n+s) (!usedDefsSet)
+	    then true
+	    else loop (n-1)
+	  in
+	  if loop (UD.VS.cardinal defd - 1)
+	  then true
+	  else (incr removedCount; false)
+      | _ -> true
+    in
+
+    let filter il stmdat =
+      let rd_dat_lst = RD.instrRDs il stm.sid stmdat false in
+      let ildatlst = List.combine il rd_dat_lst in
+      let ildatlst' = List.filter test ildatlst in
+      let (newil,_) = List.split ildatlst' in
+      newil
+    in
+
+    match RD.getRDs stm.sid with
+      None -> DoChildren
+    | Some(_,s,iosh) ->
+	match stm.skind with
+	  Instr il ->
+	    stm.skind <- Instr(filter il ((),s,iosh));
+	    SkipChildren
+	| _ -> DoChildren
+	    
+end
+
+(* until fixed point is reached *)
+let elim_dead_code_fp (fd : fundec) :  fundec =
+  (* fundec -> fundec *)
+  let rec loop fd =
+    usedDefsSet := IS.empty;
+    removedCount := 0;
+    S.time "reaching definitions" RD.computeRDs fd;
+    ignore(visitCilFunction (new usedDefsCollectorClass :> cilVisitor) fd);
+    let fd' = visitCilFunction (new uselessInstrElim) fd in
+    if !removedCount = 0 then fd' else loop fd'
+  in
+  loop fd
+
+(* just once *)
+let elim_dead_code (fd : fundec) :  fundec =
+  (* fundec -> fundec *)
+  usedDefsSet := IS.empty;
+  removedCount := 0;
+  S.time "reaching definitions" RD.computeRDs fd;
+  ignore(visitCilFunction (new usedDefsCollectorClass :> cilVisitor) fd);
+  let fd' = visitCilFunction (new uselessInstrElim) fd in
+  fd'
+
+class deadCodeElimClass : cilVisitor = object(self)
+    inherit nopCilVisitor
+
+  method vfunc fd =
+    let fd' = elim_dead_code fd in
+    ChangeTo(fd')
+
+end
+
+let dce f =
+  if !debug then ignore(E.log "DCE: starting dead code elimination\n");
+  visitCilFile (new deadCodeElimClass) f
diff --git a/cil/src/ext/dominators.ml b/cil/src/ext/dominators.ml
new file mode 100755
index 000000000..d838d23f8
--- /dev/null
+++ b/cil/src/ext/dominators.ml
@@ -0,0 +1,241 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** Compute dominator information for the statements in a function *)
+open Cil
+open Pretty
+module E = Errormsg
+module H = Hashtbl 
+module U = Util
+module IH = Inthash
+
+module DF = Dataflow
+
+let debug = false
+
+(* For each statement we maintain a set of statements that dominate it *)
+module BS = Set.Make(struct 
+                        type t = Cil.stmt
+                        let compare v1 v2 = Pervasives.compare v1.sid v2.sid
+                     end)
+
+
+
+
+(** Customization module for dominators *)
+module DT = struct
+  let name = "dom"
+
+  let debug = ref debug 
+
+  type t = BS.t
+
+   (** For each statement in a function we keep the set of dominator blocks. 
+    * Indexed by statement id *)
+  let stmtStartData: t IH.t = IH.create 17
+
+  let copy (d: t) = d
+
+  let pretty () (d: t) = 
+    dprintf "{%a}" 
+      (docList (fun s -> dprintf "%d" s.sid))
+      (BS.elements d)
+
+  let computeFirstPredecessor (s: stmt) (d: BS.t) : BS.t = 
+    (* Make sure we add this block to the set *)
+    BS.add s d
+
+  let combinePredecessors (s: stmt) ~(old: BS.t) (d: BS.t) : BS.t option = 
+    (* First, add this block to the data from the predecessor *)
+    let d' = BS.add s d in
+    if BS.subset old d' then 
+      None
+    else
+      Some (BS.inter old d')
+
+  let doInstr (i: instr) (d: t) = DF.Default
+
+  let doStmt (s: stmt) (d: t) = DF.SDefault
+  
+  let doGuard condition _ = DF.GDefault
+
+
+  let filterStmt _ = true
+end
+
+
+
+module Dom = DF.ForwardsDataFlow(DT)
+
+let getStmtDominators (data: BS.t IH.t) (s: stmt) : BS.t = 
+  try IH.find data s.sid
+  with Not_found -> BS.empty (* Not reachable *)
+  
+
+let getIdom (idomInfo: stmt option IH.t) (s: stmt) = 
+  try IH.find idomInfo s.sid
+  with Not_found -> 
+    E.s (E.bug "Immediate dominator information not set for statement %d" 
+           s.sid)
+
+(** Check whether one block dominates another. This assumes that the "idom" 
+ * field has been computed. *)
+let rec dominates (idomInfo: stmt option IH.t) (s1: stmt) (s2: stmt) = 
+  s1 == s2 || 
+  (let s2idom = getIdom idomInfo s2 in
+  match s2idom with 
+    None -> false
+  | Some s2idom -> dominates idomInfo s1 s2idom)
+    
+
+
+
+let computeIDom (f: fundec) : stmt option IH.t = 
+  (* We must prepare the CFG info first *)
+  prepareCFG f;
+  computeCFGInfo f false;
+
+  IH.clear DT.stmtStartData;
+  let idomData: stmt option IH.t = IH.create 13 in
+
+  let _ = 
+    match f.sbody.bstmts with 
+      [] -> () (* function has no body *)
+    | start :: _ -> begin
+        (* We start with only the start block *)
+        IH.add DT.stmtStartData start.sid (BS.singleton start);
+        
+        Dom.compute [start];
+        
+        (* Dump the dominators information *)
+         if debug then 
+           List.iter
+             (fun s -> 
+               let sdoms = getStmtDominators DT.stmtStartData s in
+               if not (BS.mem s sdoms) then begin
+                 (* It can be that the block is not reachable *)
+                 if s.preds <> [] then 
+                   E.s (E.bug "Statement %d is not in its list of dominators"
+                          s.sid);
+               end;
+               ignore (E.log "Dominators for %d: %a\n" s.sid
+                         DT.pretty (BS.remove s sdoms)))
+             f.sallstmts;
+        
+        (* Now fill the immediate dominators for all nodes *)
+        let rec fillOneIdom (s: stmt) = 
+          try 
+            ignore (IH.find idomData s.sid)
+              (* Already set *)
+          with Not_found -> begin
+            (* Get the dominators *)
+            let sdoms = getStmtDominators DT.stmtStartData s in 
+            (* Fill the idom for the dominators first *)
+            let idom = 
+              BS.fold 
+                (fun d (sofar: stmt option) -> 
+                  if d.sid = s.sid then 
+                    sofar (* Ignore the block itself *)
+                  else begin
+                    (* fill the idom information recursively *)
+                    fillOneIdom d;
+                    match sofar with 
+                      None -> Some d
+                    | Some sofar' ->
+                        (* See if d is dominated by sofar. We know that the 
+                         * idom information has been computed for both sofar 
+                         * and for d*)
+                        if dominates idomData sofar' d then 
+                          Some d
+                        else
+                          sofar
+                  end)
+                sdoms
+                None
+            in
+            IH.replace idomData s.sid idom
+          end
+        in
+        (* Scan all blocks and compute the idom *)
+        List.iter fillOneIdom f.sallstmts
+    end
+  in
+  idomData
+
+
+
+(** Compute the start of the natural loops. For each start, keep a list of 
+ * origin of a back edge. The loop consists of the loop start and all 
+ * predecessors of the origins of back edges, up to and including the loop 
+ * start *)
+let findNaturalLoops (f: fundec) 
+                     (idomData: stmt option IH.t) : (stmt * stmt list) list = 
+  let loops = 
+    List.fold_left
+      (fun acc b -> 
+        (* Iterate over all successors, and see if they are among the 
+         * dominators for this block *)
+        List.fold_left
+          (fun acc s -> 
+            if dominates idomData s b then 
+              (* s is the start of a natural loop *)
+              let rec addNaturalLoop = function
+                  [] -> [(s, [b])]
+                | (s', backs) :: rest when s'.sid = s.sid -> 
+                    (s', b :: backs) :: rest
+                | l :: rest -> l :: addNaturalLoop rest
+              in
+              addNaturalLoop acc
+            else
+              acc)
+          acc
+          b.succs)
+      []
+      f.sallstmts 
+  in
+  
+  if debug then 
+    ignore (E.log "Natural loops:\n%a\n"
+              (docList ~sep:line
+                 (fun (s, backs) -> 
+                   dprintf "    Start: %d, backs:%a"
+                     s.sid
+                     (docList (fun b -> num b.sid))
+                     backs))
+              loops);
+  
+  loops
diff --git a/cil/src/ext/dominators.mli b/cil/src/ext/dominators.mli
new file mode 100755
index 000000000..0abf82e94
--- /dev/null
+++ b/cil/src/ext/dominators.mli
@@ -0,0 +1,29 @@
+
+
+(** Compute dominators using data flow analysis *)
+(** Author: George Necula   
+      5/28/2004 
+ **)
+
+(** Invoke on a code after filling in the CFG info and it computes the 
+ * immediate dominator information. We map each statement to its immediate 
+ * dominator (None for the start statement, and for the unreachable 
+ * statements). *)
+val computeIDom: Cil.fundec -> Cil.stmt option Inthash.t
+
+
+(** This is like Inthash.find but gives an error if the information is 
+ * Not_found *)
+val getIdom:  Cil.stmt option Inthash.t -> Cil.stmt -> Cil.stmt option
+
+(** Check whether one statement dominates another. *)
+val dominates: Cil.stmt option Inthash.t -> Cil.stmt -> Cil.stmt -> bool
+
+
+(** Compute the start of the natural loops. This assumes that the "idom" 
+ * field has been computed. For each start, keep a list of origin of a back 
+ * edge. The loop consists of the loop start and all predecessors of the 
+ * origins of back edges, up to and including the loop start *)
+val findNaturalLoops: Cil.fundec -> 
+                      Cil.stmt option Inthash.t -> 
+                      (Cil.stmt * Cil.stmt list) list
diff --git a/cil/src/ext/epicenter.ml b/cil/src/ext/epicenter.ml
new file mode 100644
index 000000000..a8045e855
--- /dev/null
+++ b/cil/src/ext/epicenter.ml
@@ -0,0 +1,114 @@
+(* epicenter.ml *)
+(* code for epicenter.mli *)
+
+(* module maintainer: scott *)
+(* see copyright at end of this file *)
+
+open Callgraph
+open Cil
+open Trace
+open Pretty
+module H = Hashtbl
+module IH = Inthash
+
+let sliceFile (f:file) (epicenter:string) (maxHops:int) : unit =
+  (* compute the static call graph *)
+  let graph:callgraph = (computeGraph f) in
+
+  (* will accumulate here the set of names of functions already seen *)
+  let seen: (string, unit) H.t = (H.create 117) in
+
+  (* when removing "unused" symbols, keep all seen functions *)
+  let isRoot : global -> bool = function
+    | GFun ({svar = {vname = vname}}, _) ->
+	H.mem seen vname
+    | _ ->
+	false
+  in
+
+  (* recursive depth-first search through the call graph, finding
+   * all nodes within 'hops' hops of 'node' and marking them to
+   * to be retained *)
+  let rec dfs (node:callnode) (hops:int) : unit =
+    (* only recurse if we haven't already marked this node *)
+    if not (H.mem seen (nodeName node.cnInfo)) then
+      begin
+        (* add this node *)
+	H.add seen (nodeName node.cnInfo) ();
+	trace "epicenter" (dprintf "will keep %s\n" (nodeName node.cnInfo));
+	
+        (* if we cannot do any more hops, stop *)
+	if (hops > 0) then
+
+          (* recurse on all the node's callers and callees *)
+	  let recurse _ (adjacent:callnode) : unit =
+	    (dfs adjacent (hops - 1)) 
+          in
+	  IH.iter recurse node.cnCallees;
+	  IH.iter recurse node.cnCallers
+      end
+  in
+  dfs (Hashtbl.find graph epicenter) maxHops;
+
+  (* finally, throw away anything we haven't decided to keep *)
+  Cilutil.sliceGlobal := true;
+  Rmtmps.removeUnusedTemps ~isRoot:isRoot f
+
+let doEpicenter = ref false
+let epicenterName = ref ""
+let epicenterHops = ref 0
+
+let feature : featureDescr = 
+  { fd_name = "epicenter";
+    fd_enabled = doEpicenter;
+    fd_description = "remove all functions except those within some number " ^
+                     "of hops (in the call graph) from a given function";
+    fd_extraopt = 
+    [
+    ("--epicenter-name", 
+     Arg.String (fun s -> epicenterName := s),
+               "<name>: do an epicenter slice starting from function <name>");
+    ("--epicenter-hops", Arg.Int (fun n -> epicenterHops := n),
+     "<n>: specify max # of hops for epicenter slice");
+    ];
+
+    fd_doit =
+    (fun f -> 
+      sliceFile f !epicenterName !epicenterHops);
+
+    fd_post_check = true;
+  } 
+
+
+(*
+ *
+ * Copyright (c) 2001-2002 by
+ *  George C. Necula	necula@cs.berkeley.edu
+ *  Scott McPeak        smcpeak@cs.berkeley.edu
+ *  Wes Weimer          weimer@cs.berkeley.edu
+ *  Ben Liblit          liblit@cs.berkeley.edu
+ *
+ * All rights reserved.  Permission to use, copy, modify and distribute
+ * this software for research purposes only is hereby granted,
+ * provided that the following conditions are met:
+ * 1. XSRedistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the authors may not be used to endorse or promote products
+ * derived from  this software without specific prior written permission.
+ *
+ * DISCLAIMER:
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/heap.ml b/cil/src/ext/heap.ml
new file mode 100644
index 000000000..10f48a045
--- /dev/null
+++ b/cil/src/ext/heap.ml
@@ -0,0 +1,112 @@
+(* See copyright notice at the end of the file *)
+
+(* The type of a heap (priority queue): keys are integers, data values
+ * are whatever you like *)
+type ('a) t = {
+          elements  : (int * ('a option)) array ;
+  mutable size      : int ; (* current number of elements *)
+          capacity  : int ; (* max number of elements *)
+} 
+
+let create size = {
+  elements = Array.create (size+1) (max_int,None) ;
+  size = 0 ;
+  capacity = size ; 
+} 
+
+let clear heap = heap.size <- 0  
+
+let is_full heap = (heap.size = heap.capacity) 
+
+let is_empty heap = (heap.size = 0) 
+
+let insert heap prio elt = begin
+  if is_full heap then begin
+    raise (Invalid_argument "Heap.insert")
+  end ; 
+  heap.size <- heap.size + 1 ;
+  let i = ref heap.size in
+  while ( fst heap.elements.(!i / 2) < prio ) do
+    heap.elements.(!i) <- heap.elements.(!i / 2) ;
+    i := (!i / 2)
+  done ;
+  heap.elements.(!i) <- (prio,Some(elt))
+  end
+
+let examine_max heap = 
+  if is_empty heap then begin
+    raise (Invalid_argument "Heap.examine_max")
+  end ; 
+  match heap.elements.(1) with
+    p,Some(elt) -> p,elt
+  | p,None -> failwith "Heap.examine_max" 
+
+let extract_max heap = begin
+  if is_empty heap then begin
+    raise (Invalid_argument "Heap.extract_max")
+  end ; 
+  let max = heap.elements.(1) in
+  let last = heap.elements.(heap.size) in
+  heap.size <- heap.size - 1 ; 
+  let i = ref 1 in
+  let break = ref false in 
+  while (!i * 2 <= heap.size) && not !break do
+    let child = ref (!i * 2) in
+
+    (* find smaller child *)
+    if (!child <> heap.size && 
+        fst heap.elements.(!child+1) > fst heap.elements.(!child)) then begin
+        incr child 
+    end ; 
+
+    (* percolate one level *) 
+    if (fst last < fst heap.elements.(!child)) then begin
+      heap.elements.(!i) <- heap.elements.(!child) ; 
+      i := !child 
+    end else begin
+      break := true 
+    end
+  done ; 
+  heap.elements.(!i) <- last ;
+  match max with 
+    p,Some(elt) -> p,elt
+  | p,None -> failwith "Heap.examine_min" 
+  end
+
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/heapify.ml b/cil/src/ext/heapify.ml
new file mode 100644
index 000000000..a583181e7
--- /dev/null
+++ b/cil/src/ext/heapify.ml
@@ -0,0 +1,250 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* 
+ * Heapify: a program transform that looks over functions, finds those
+ * that have local (stack) variables that contain arrays, puts all such
+ * local variables into a single heap allocated structure, changes all
+ * accesses to such variables into accesses to fields of that structure
+ * and frees the structure on return. 
+ *)
+open Cil
+
+(* utilities that should be in Cil.ml *)
+(* sfg: this function appears to never be called *)
+let mkSimpleField ci fn ft fl =
+  { fcomp = ci ; fname = fn ; ftype = ft ; fbitfield = None ; fattr = [];
+    floc = fl }
+
+
+(* actual Heapify begins *)
+
+let heapifyNonArrays = ref false
+
+(* Does this local var contain an array? *)
+let rec containsArray (t:typ) : bool =  (* does this type contain an array? *)
+  match unrollType t with
+    TArray _ -> true
+  | TComp(ci, _) -> (* look at the types of the fields *)
+      List.exists (fun fi -> containsArray fi.ftype) ci.cfields
+  | _ -> 
+    (* Ignore other types, including TInt and TPtr.  We don't care whether
+       there are arrays in the base types of pointers; only about whether
+       this local variable itself needs to be moved to the heap. *)
+   false
+
+
+class heapifyModifyVisitor big_struct big_struct_fields varlist free 
+    (currentFunction: fundec) = object(self)
+  inherit nopCilVisitor  (* visit lvalues and statements *)
+  method vlval l = match l with (* should we change this one? *)
+    Var(vi),vi_offset when List.mem_assoc vi varlist -> (* check list *)
+      let i = List.assoc vi varlist in (* find field offset *)
+      let big_struct_field = List.nth big_struct_fields i in
+      let new_lval = Mem(Lval(big_struct, NoOffset)),
+	Field(big_struct_field,vi_offset) in (* rewrite the lvalue *)
+      ChangeDoChildrenPost(new_lval, (fun l -> l))
+  | _ -> DoChildren (* ignore other lvalues *)
+  method vstmt s = match s.skind with (* also rewrite the return *)
+    Return(None,loc) -> 
+      let free_instr = Call(None,free,[Lval(big_struct,NoOffset)],loc) in
+      self#queueInstr [free_instr]; (* insert free_instr before the return *)
+      DoChildren
+  | Return(Some exp ,loc) ->
+      (* exp may depend on big_struct, so evaluate it before calling free. 
+       * This becomes:  tmp = exp; free(big_struct); return tmp; *)
+      let exp_new = visitCilExpr (self :> cilVisitor) exp in
+      let ret_tmp = makeTempVar currentFunction (typeOf exp_new) in
+      let eval_ret_instr = Set(var ret_tmp, exp_new, loc) in
+      let free_instr = Call(None,free,[Lval(big_struct,NoOffset)],loc) in
+      (* insert the instructions before the return *)
+      self#queueInstr [eval_ret_instr; free_instr];
+      s.skind <- (Return(Some(Lval(var ret_tmp)), loc));
+      DoChildren
+  | _ -> DoChildren (* ignore other statements *)
+end
+    
+class heapifyAnalyzeVisitor f alloc free = object 
+  inherit nopCilVisitor (* only look at function bodies *)
+  method vglob gl = match gl with
+    GFun(fundec,funloc) -> 
+      let counter = ref 0 in (* the number of local vars containing arrays *)
+      let varlist = ref [] in  (* a list of (var,id) pairs, in reverse order *)
+      List.iter (fun vi ->  
+         (* find all local vars with arrays.  If the user requests it,
+            we also look for non-array vars whose address is taken. *)
+        if (containsArray vi.vtype) || (vi.vaddrof && !heapifyNonArrays)
+        then begin
+          varlist := (vi,!counter) :: !varlist ; (* add it to the list *)
+          incr counter (* put the next such var in the next slot *)
+        end
+        ) fundec.slocals ; 
+      if (!varlist <> []) then begin (* some local vars contain arrays *)
+        let name = (fundec.svar.vname ^ "_heapify") in
+        let ci = mkCompInfo true name (* make a big structure *)
+	    (fun _ -> List.rev_map (* reverse the list to fix the order *)
+                (* each local var becomes a field *)
+		(fun (vi,i) -> vi.vname,vi.vtype,None,[],vi.vdecl) !varlist) [] in
+        let vi = makeLocalVar fundec name (TPtr(TComp(ci,[]),[])) in
+        let modify = new heapifyModifyVisitor (Var(vi)) ci.cfields
+	    !varlist free fundec in (* rewrite accesses to local vars *)
+        fundec.sbody <- visitCilBlock modify fundec.sbody ;
+        let alloc_stmt = mkStmt (* allocate the big struct on the heap *)
+            (Instr [Call(Some(Var(vi),NoOffset), alloc, 
+			 [SizeOf(TComp(ci,[]))],funloc)]) in
+        fundec.sbody.bstmts <- alloc_stmt :: fundec.sbody.bstmts ; 
+	fundec.slocals <- List.filter (fun vi -> (* remove local vars *)
+	  not (List.mem_assoc vi !varlist)) fundec.slocals ; 
+	let typedec = (GCompTag(ci,funloc)) in (* declare the big struct *)
+        ChangeTo([typedec ; GFun(fundec,funloc)])  (* done! *)
+      end else
+	DoChildren	(* ignore everything else *)
+  | _ -> DoChildren
+end
+    
+let heapify (f : file) (alloc : exp) (free : exp)  =
+  visitCilFile (new heapifyAnalyzeVisitor f alloc free) f;
+  f
+
+(* heapify code ends here *)
+
+let default_heapify (f : file) =
+  let alloc_fun = emptyFunction "malloc" in
+  let free_fun = emptyFunction "free" in
+  let alloc_exp = (Lval((Var(alloc_fun.svar)),NoOffset)) in
+  let free_exp = (Lval((Var(free_fun.svar)),NoOffset)) in
+  ignore (heapify f alloc_exp free_exp)
+    
+(* StackGuard clone *)
+
+class sgModifyVisitor restore_ra_stmt = object
+	inherit nopCilVisitor
+  method vstmt s = match s.skind with (* also rewrite the return *)
+    Return(_,loc) -> let new_block = mkBlock [restore_ra_stmt ; s] in 
+			ChangeTo(mkStmt (Block(new_block)))  
+	| _ -> DoChildren (* ignore other statements *)
+end
+
+class sgAnalyzeVisitor f push pop get_ra set_ra = object
+  inherit nopCilVisitor
+  method vfunc fundec = 
+    let needs_guarding = List.fold_left 
+	(fun acc vi -> acc || containsArray vi.vtype) 
+	false fundec.slocals in
+    if needs_guarding then begin
+      let ra_tmp = makeLocalVar fundec "return_address" voidPtrType in
+      let ra_exp = Lval(Var(ra_tmp),NoOffset) in 
+      let save_ra_stmt = mkStmt (* save the current return address *)
+	  (Instr [Call(Some(Var(ra_tmp),NoOffset), get_ra, [], locUnknown) ;
+		   Call(None, push, [ra_exp], locUnknown)]) in
+      let restore_ra_stmt = mkStmt (* restore the old return address *)
+	  (Instr [Call(Some(Var(ra_tmp),NoOffset), pop, [], locUnknown) ;
+		   Call(None, set_ra, [ra_exp], locUnknown)]) in
+      let modify = new sgModifyVisitor restore_ra_stmt in
+      fundec.sbody <- visitCilBlock modify fundec.sbody ;
+      fundec.sbody.bstmts <- save_ra_stmt :: fundec.sbody.bstmts ;
+      ChangeTo(fundec)  (* done! *)
+    end else DoChildren
+end
+          
+let stackguard (f : file) (push : exp) (pop : exp) 
+    (get_ra : exp) (set_ra : exp) = 
+  visitCilFileSameGlobals (new sgAnalyzeVisitor f push pop get_ra set_ra) f;
+  f
+    (* stackguard code ends *)
+    
+let default_stackguard (f : file) =
+  let expify fundec = Lval(Var(fundec.svar),NoOffset) in
+  let push = expify (emptyFunction "stackguard_push") in
+  let pop = expify (emptyFunction "stackguard_pop") in
+  let get_ra = expify (emptyFunction "stackguard_get_ra") in
+  let set_ra = expify (emptyFunction "stackguard_set_ra") in
+  let global_decl = 
+"extern void * stackguard_get_ra();
+extern void stackguard_set_ra(void *new_ra);
+/* You must provide an implementation for functions that get and set the
+ * return address. Such code is unfortunately architecture specific.
+ */
+struct stackguard_stack {
+  void * data;
+  struct stackguard_stack * next;
+} * stackguard_stack;
+
+void stackguard_push(void *ra) {
+  void * old = stackguard_stack;
+  stackguard_stack = (struct stackguard_stack *)
+    malloc(sizeof(stackguard_stack));
+  stackguard_stack->data = ra;
+  stackguard_stack->next = old;
+}
+
+void * stackguard_pop() {
+  void * ret = stackguard_stack->data;
+  void * next = stackguard_stack->next;
+  free(stackguard_stack);
+  stackguard_stack->next = next;
+  return ret;
+}" in
+    f.globals <- GText(global_decl) :: f.globals ;
+    ignore (stackguard f push pop get_ra set_ra )
+      
+      
+let feature1 : featureDescr = 
+  { fd_name = "stackGuard";
+    fd_enabled = Cilutil.doStackGuard;
+    fd_description = "instrument function calls and returns to maintain a separate stack for return addresses" ;
+    fd_extraopt = [];
+    fd_doit = (function (f: file) -> default_stackguard f);
+    fd_post_check = true;
+  } 
+let feature2 : featureDescr = 
+  { fd_name = "heapify";
+    fd_enabled = Cilutil.doHeapify;
+    fd_description = "move stack-allocated arrays to the heap" ;
+    fd_extraopt = [
+      "--heapifyAll", Arg.Set heapifyNonArrays,
+      "When using heapify, move all local vars whose address is taken, not just arrays.";
+    ];
+    fd_doit = (function (f: file) -> default_heapify f);
+    fd_post_check = true;
+  } 
+      
+
+
+
+
+
diff --git a/cil/src/ext/liveness.ml b/cil/src/ext/liveness.ml
new file mode 100644
index 000000000..72cd60732
--- /dev/null
+++ b/cil/src/ext/liveness.ml
@@ -0,0 +1,190 @@
+
+(* Calculate which variables are live at
+ * each statememnt.
+ *
+ *
+ *
+ *)
+
+open Cil
+open Pretty
+
+module DF = Dataflow
+module UD = Usedef
+module IH = Inthash
+module E = Errormsg
+
+let debug = ref false
+
+let live_label = ref ""
+let live_func = ref ""
+
+module VS = UD.VS
+
+let debug_print () vs = (VS.fold
+    (fun vi d -> 
+      d ++ text "name: " ++ text vi.vname
+	++ text " id: " ++ num vi.vid ++ text " ")
+    vs nil) ++ line
+
+let min_print () vs = (VS.fold
+    (fun vi d ->
+      d ++ text vi.vname
+	++ text "(" ++ d_type () vi.vtype ++ text ")"
+	++ text ",")
+    vs nil) ++ line
+
+let printer = ref debug_print
+
+module LiveFlow = struct
+  let name = "Liveness"
+  let debug = debug
+  type t = VS.t
+
+  let pretty () vs =
+    let fn = !printer in
+    fn () vs
+    
+  let stmtStartData = IH.create 32
+
+  let combineStmtStartData (stm:stmt) ~(old:t) (now:t) =
+    if not(VS.compare old now = 0)
+    then Some(VS.union old now)
+    else None
+
+  let combineSuccessors = VS.union
+
+  let doStmt stmt =
+    if !debug then ignore(E.log "looking at: %a\n" d_stmt stmt);
+    match stmt.succs with
+      [] -> let u,d = UD.computeUseDefStmtKind stmt.skind in
+      if !debug then ignore(E.log "doStmt: no succs %d\n" stmt.sid);
+      DF.Done u
+    | _ ->
+	let handle_stm vs = match stmt.skind with
+	  Instr _ -> vs
+	| s -> let u, d = UD.computeUseDefStmtKind s in
+	  VS.union u (VS.diff vs d)
+	in
+	DF.Post handle_stm
+
+  let doInstr i vs =
+    let transform vs' =
+      let u,d = UD.computeUseDefInstr i in
+      VS.union u (VS.diff vs' d)
+    in
+    DF.Post transform
+
+  let filterStmt stm1 stm2 = true
+
+end
+
+module L = DF.BackwardsDataFlow(LiveFlow)
+
+let sink_stmts = ref []
+class sinkFinderClass = object(self)
+  inherit nopCilVisitor
+
+  method vstmt s = match s.succs with
+    [] -> (sink_stmts := s :: (!sink_stmts);
+	   DoChildren)
+  | _ -> DoChildren
+
+end
+
+(* gives list of return statements from a function *)
+(* fundec -> stm list *)
+let find_sinks fdec =
+  sink_stmts := [];
+  ignore(visitCilFunction (new sinkFinderClass) fdec);
+  !sink_stmts
+
+(* XXX: This does not compute the best ordering to
+ * give to the work-list algorithm.
+ *)
+let all_stmts = ref []
+class nullAdderClass = object(self)
+  inherit nopCilVisitor
+
+  method vstmt s =
+    all_stmts := s :: (!all_stmts);
+    IH.add LiveFlow.stmtStartData s.sid VS.empty;
+    DoChildren
+
+end
+
+let null_adder fdec =
+  ignore(visitCilFunction (new nullAdderClass) fdec);
+  !all_stmts
+
+let computeLiveness fdec =
+  IH.clear LiveFlow.stmtStartData;
+  UD.onlyNoOffsetsAreDefs := false;
+  all_stmts := [];
+  let a = null_adder fdec in
+  L.compute a
+
+let print_everything () =
+  let d = IH.fold (fun i vs d -> 
+    d ++ num i ++ text ": " ++ LiveFlow.pretty () vs) 
+      LiveFlow.stmtStartData nil in
+  ignore(printf "%t" (fun () -> d))
+
+let match_label lbl = match lbl with
+  Label(str,_,b) ->
+    if !debug then ignore(E.log "Liveness: label seen: %s\n" str);
+    (*b && *)(String.compare str (!live_label) = 0)
+| _ -> false
+
+class doFeatureClass = object(self)
+  inherit nopCilVisitor
+
+  method vfunc fd =
+    if String.compare fd.svar.vname (!live_func) = 0 then 
+      (Cfg.clearCFGinfo fd;
+       ignore(Cfg.cfgFun fd);
+       computeLiveness fd;
+       if String.compare (!live_label) "" = 0 then
+	 (printer := min_print;
+	  print_everything();
+	  SkipChildren)
+       else DoChildren)
+    else SkipChildren
+
+  method vstmt s =
+    if List.exists match_label s.labels then try
+      let vs = IH.find LiveFlow.stmtStartData s.sid in
+      (printer := min_print;
+       ignore(printf "%a" LiveFlow.pretty vs);
+       SkipChildren)
+    with Not_found -> 
+      if !debug then ignore(E.log "Liveness: stmt: %d not found\n" s.sid);
+      DoChildren
+    else 
+      (if List.length s.labels = 0 then
+	if !debug then ignore(E.log "Liveness: no label at sid=%d\n" s.sid);
+      DoChildren)
+
+end
+
+let do_live_feature (f:file) =
+  visitCilFile (new doFeatureClass) f
+
+let feature =
+  {
+   fd_name = "Liveness";
+   fd_enabled = ref false;
+   fd_description = "Spit out live variables at a label";
+   fd_extraopt = [
+   "--live_label",
+   Arg.String (fun s -> live_label := s),
+   "Output the variables live at this label";
+   "--live_func",
+   Arg.String (fun s -> live_func := s),
+   "Output the variables live at each statement in this function.";
+   "--live_debug",
+   Arg.Unit (fun n -> debug := true),
+   "Print lots of debugging info";];
+   fd_doit = do_live_feature;
+   fd_post_check = false
+ }
diff --git a/cil/src/ext/logcalls.ml b/cil/src/ext/logcalls.ml
new file mode 100644
index 000000000..0cdbc1532
--- /dev/null
+++ b/cil/src/ext/logcalls.ml
@@ -0,0 +1,268 @@
+(** See copyright notice at the end of this file *)
+
+(** Add printf before each function call *)
+
+open Pretty
+open Cil
+open Trace
+module E = Errormsg
+module H = Hashtbl
+
+let i = ref 0
+let name = ref ""
+
+(* Switches *)
+let printFunctionName = ref "printf"
+
+let addProto = ref false
+
+let printf: varinfo option ref = ref None
+let makePrintfFunction () : varinfo = 
+    match !printf with 
+      Some v -> v
+    | None -> begin 
+        let v = makeGlobalVar !printFunctionName 
+                     (TFun(voidType, Some [("format", charPtrType, [])],
+                             true, [])) in
+        printf := Some v;
+        addProto := true;
+        v
+    end
+
+let mkPrint (format: string) (args: exp list) : instr = 
+  let p: varinfo = makePrintfFunction () in 
+  Call(None, Lval(var p), (mkString format) :: args, !currentLoc)
+  
+
+let d_string (fmt : ('a,unit,doc,string) format4) : 'a = 
+  let f (d: doc) : string = 
+    Pretty.sprint 200 d
+  in
+  Pretty.gprintf f fmt 
+
+let currentFunc: string ref = ref ""
+
+class logCallsVisitorClass = object
+  inherit nopCilVisitor
+
+  (* Watch for a declaration for our printer *)
+  
+  method vinst i = begin
+    match i with
+    | Call(lo,e,al,l) ->
+        let pre = mkPrint (d_string "call %a\n" d_exp e) [] in
+        let post = mkPrint (d_string "return from %a\n" d_exp e) [] in
+(*
+      let str1 = prefix ^
+        (Pretty.sprint 800 ( Pretty.dprintf "Calling %a(%a)\n"
+          d_exp e
+          (docList ~sep:(chr ',' ++ break ) (fun arg ->
+            try
+              match unrollType (typeOf arg) with
+                  TInt _ | TEnum _ -> dprintf "%a = %%d" d_exp arg
+                | TFloat _ -> dprintf "%a = %%g" d_exp arg
+                | TVoid _ -> text "void"
+                | TComp _ -> text "comp"
+                | _ -> dprintf "%a = %%p" d_exp arg
+            with  _ -> dprintf "%a = %%p" d_exp arg)) al)) in
+      let log_args = List.filter (fun arg ->
+        match unrollType (typeOf arg) with
+          TVoid _ | TComp _ -> false
+        | _ -> true) al in
+      let str2 = prefix ^ (Pretty.sprint 800
+        ( Pretty.dprintf "Returned from %a\n" d_exp e)) in
+      let newinst str args = ((Call (None, Lval(var printfFun.svar),
+                                ( [ (* one ; *) mkString str ] @ args),
+                                locUnknown)) : instr )in
+      let ilist = ([ (newinst str1 log_args) ; i ; (newinst str2 []) ] : instr list) in
+ *)
+    ChangeTo [ pre; i; post ] 
+
+    | _ -> DoChildren
+  end
+  method vstmt (s : stmt) = begin
+    match s.skind with
+      Return _ -> 
+        let pre = mkPrint (d_string "exit %s\n" !currentFunc) [] in 
+        ChangeTo (mkStmt (Block (mkBlock [ mkStmtOneInstr pre; s ])))
+    | _ -> DoChildren
+
+(*
+(Some(e),l) ->
+      let str = prefix ^ Pretty.sprint 800 ( Pretty.dprintf
+        "Return(%%p) from %s\n" funstr ) in
+      let newinst = ((Call (None, Lval(var printfFun.svar),
+                                ( [ (* one ; *) mkString str ; e ]),
+                                locUnknown)) : instr )in
+      let new_stmt = mkStmtOneInstr newinst in
+      let slist = [ new_stmt ; s ] in
+      (ChangeTo(mkStmt(Block(mkBlock slist))))
+    | Return(None,l) ->
+      let str = prefix ^ (Pretty.sprint 800 ( Pretty.dprintf
+        "Return void from %s\n" funstr)) in
+      let newinst = ((Call (None, Lval(var printfFun.svar),
+                                ( [ (* one ; *) mkString str ]),
+                                locUnknown)) : instr )in
+      let new_stmt = mkStmtOneInstr newinst in
+      let slist = [ new_stmt ; s ] in
+      (ChangeTo(mkStmt(Block(mkBlock slist))))
+    | _ -> DoChildren
+*)
+  end
+end
+
+let logCallsVisitor = new logCallsVisitorClass
+
+
+let logCalls (f: file) : unit =
+
+  let doGlobal = function
+    | GVarDecl (v, _) when v.vname = !printFunctionName -> 
+          if !printf = None then
+             printf := Some v
+
+    | GFun (fdec, loc) ->
+        currentFunc := fdec.svar.vname;
+        (* do the body *)
+        ignore (visitCilFunction logCallsVisitor fdec);
+        (* Now add the entry instruction *)
+        let pre = mkPrint (d_string "enter %s\n" !currentFunc) [] in 
+        fdec.sbody <- 
+          mkBlock [ mkStmtOneInstr pre;
+                    mkStmt (Block fdec.sbody) ]
+(*
+	(* debugging 'anagram', it's really nice to be able to see the strings *)
+	(* inside fat pointers, even if it's a bit of a hassle and a hack here *)
+	let isFatCharPtr (cinfo:compinfo) =
+	  cinfo.cname="wildp_char" ||
+	  cinfo.cname="fseqp_char" ||
+	  cinfo.cname="seqp_char" in
+
+        (* Collect expressions that denote the actual arguments *)
+        let actargs =
+          (* make lvals out of args which pass test below *)
+          (List.map
+            (fun vi -> match unrollType vi.vtype with
+              | TComp(cinfo, _) when isFatCharPtr(cinfo) ->
+                  (* access the _p field for these *)
+                  (* luckily it's called "_p" in all three fat pointer variants *)
+                  Lval(Var(vi), Field(getCompField cinfo "_p", NoOffset))
+              | _ ->
+                  Lval(var vi))
+
+            (* decide which args to pass *)
+            (List.filter
+              (fun vi -> match unrollType vi.vtype with
+                | TPtr(TInt(k, _), _) when isCharType(k) ->
+                    !printPtrs || !printStrings
+                | TComp(cinfo, _) when isFatCharPtr(cinfo) ->
+                    !printStrings
+                | TVoid _ | TComp _ -> false
+                | TPtr _ | TArray _ | TFun _ -> !printPtrs
+                | _ -> true)
+              fdec.sformals)
+          ) in
+
+        (* make a format string for printing them *)
+        (* sm: expanded width to 200 because I want one per line *)
+        let formatstr = prefix ^ (Pretty.sprint 200
+          (dprintf "entering %s(%a)\n" fdec.svar.vname
+            (docList ~sep:(chr ',' ++ break)
+              (fun vi -> match unrollType vi.vtype with
+              | TInt _ | TEnum _ -> dprintf "%s = %%d" vi.vname
+              | TFloat _ -> dprintf "%s = %%g" vi.vname
+              | TVoid _ -> dprintf "%s = (void)" vi.vname
+              | TComp(cinfo, _) -> (
+                  if !printStrings && isFatCharPtr(cinfo) then
+                    dprintf "%s = \"%%s\"" vi.vname
+                  else
+                    dprintf "%s = (comp)" vi.vname
+                )
+              | TPtr(TInt(k, _), _) when isCharType(k) -> (
+                  if (!printStrings) then
+                    dprintf "%s = \"%%s\"" vi.vname
+                  else if (!printPtrs) then
+                    dprintf "%s = %%p" vi.vname
+                  else
+                    dprintf "%s = (str)" vi.vname
+                )
+              | TPtr _ | TArray _ | TFun _ -> (
+                  if (!printPtrs) then
+                    dprintf "%s = %%p" vi.vname
+                  else
+                    dprintf "%s = (ptr)" vi.vname
+                )
+              | _ -> dprintf "%s = (?type?)" vi.vname))
+            fdec.sformals)) in
+
+        i := 0 ;
+        name := fdec.svar.vname ;
+        if !allInsts then (
+          let thisVisitor = new verboseLogVisitor printfFun !name prefix in
+          fdec.sbody <- visitCilBlock thisVisitor fdec.sbody
+        );
+        fdec.sbody.bstmts <-
+              mkStmt (Instr [Call (None, Lval(var printfFun.svar),
+                                ( (* one :: *) mkString formatstr 
+                                   :: actargs),
+                                loc)]) :: fdec.sbody.bstmts
+ *)
+    | _ -> ()
+  in
+  Stats.time "logCalls" (iterGlobals f) doGlobal;
+  if !addProto then begin
+     let p = makePrintfFunction () in 
+     E.log "Adding prototype for call logging function %s\n" p.vname;
+     f.globals <- GVarDecl (p, locUnknown) :: f.globals
+  end  
+
+let feature : featureDescr = 
+  { fd_name = "logcalls";
+    fd_enabled = Cilutil.logCalls;
+    fd_description = "generation of code to log function calls";
+    fd_extraopt = [
+      ("--logcallprintf", Arg.String (fun s -> printFunctionName := s), 
+       "the name of the printf function to use");
+      ("--logcalladdproto", Arg.Unit (fun s -> addProto := true), 
+       "whether to add the prototype for the printf function")
+    ];
+    fd_doit = logCalls;
+    fd_post_check = true
+  } 
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/logcalls.mli b/cil/src/ext/logcalls.mli
new file mode 100644
index 000000000..22a1e96ad
--- /dev/null
+++ b/cil/src/ext/logcalls.mli
@@ -0,0 +1,41 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(* A simple CIL transformer that inserts calls to a runtime function to log 
+ * the call in each function *)
+val feature: Cil.featureDescr
diff --git a/cil/src/ext/logwrites.ml b/cil/src/ext/logwrites.ml
new file mode 100644
index 000000000..3afd0679e
--- /dev/null
+++ b/cil/src/ext/logwrites.ml
@@ -0,0 +1,139 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+open Pretty
+open Cil
+module E = Errormsg
+module H = Hashtbl
+
+(* David Park at Stanford points out that you cannot take the address of a
+ * bitfield in GCC. *)
+
+(* Returns true if the given lvalue offset ends in a bitfield access. *) 
+let rec is_bitfield lo = match lo with
+  | NoOffset -> false
+  | Field(fi,NoOffset) -> not (fi.fbitfield = None)
+  | Field(_,lo) -> is_bitfield lo
+  | Index(_,lo) -> is_bitfield lo 
+
+(* Return an expression that evaluates to the address of the given lvalue.
+ * For most lvalues, this is merely AddrOf(lv). However, for bitfields
+ * we do some offset gymnastics. 
+ *)
+let addr_of_lv (lh,lo) = 
+  if is_bitfield lo then begin
+    (* we figure out what the address would be without the final bitfield
+     * access, and then we add in the offset of the bitfield from the
+     * beginning of its enclosing comp *) 
+    let rec split_offset_and_bitfield lo = match lo with 
+      | NoOffset -> failwith "logwrites: impossible" 
+      | Field(fi,NoOffset) -> (NoOffset,fi)
+      | Field(e,lo) ->  let a,b = split_offset_and_bitfield lo in 
+                        ((Field(e,a)),b)
+      | Index(e,lo) ->  let a,b = split_offset_and_bitfield lo in
+                        ((Index(e,a)),b)
+    in 
+    let new_lv_offset, bf = split_offset_and_bitfield lo in
+    let new_lv = (lh, new_lv_offset) in 
+    let enclosing_type = TComp(bf.fcomp, []) in 
+    let bits_offset, bits_width = 
+      bitsOffset enclosing_type (Field(bf,NoOffset)) in
+    let bytes_offset = bits_offset / 8 in 
+    let lvPtr = mkCast ~e:(mkAddrOf (new_lv)) ~newt:(charPtrType) in
+    (BinOp(PlusPI, lvPtr, (integer bytes_offset), ulongType))
+  end else (AddrOf (lh,lo)) 
+
+class logWriteVisitor = object
+  inherit nopCilVisitor
+  (* Create a prototype for the logging function, but don't put it in the 
+   * file *)
+  val printfFun =   
+    let fdec = emptyFunction "syslog" in
+    fdec.svar.vtype <- TFun(intType, 
+                            Some [ ("prio", intType, []);
+                                   ("format", charConstPtrType, []) ], 
+                            true, []);
+    fdec
+
+  method vinst (i: instr) : instr list visitAction = 
+    match i with 
+      Set(lv, e, l) -> begin
+        (* Check if we need to log *)
+        match lv with 
+          (Var(v), off) when not v.vglob -> SkipChildren
+        | _ -> let str = Pretty.sprint 80 
+                (Pretty.dprintf "Write %%p to 0x%%08x at %%s:%%d (%a)\n" d_lval lv)
+              in 
+              ChangeTo 
+              [ Call((None), (Lval(Var(printfFun.svar),NoOffset)), 
+                     [ one ; 
+                       mkString str ; e ; addr_of_lv lv; 
+                       mkString l.file; 
+                       integer l.line], locUnknown);
+              i]
+      end 
+    | Call(Some lv, f, args, l) -> begin
+        (* Check if we need to log *)
+        match lv with 
+          (Var(v), off) when not v.vglob -> SkipChildren
+        | _ -> let str = Pretty.sprint 80 
+                (Pretty.dprintf "Write retval to 0x%%08x at %%s:%%d (%a)\n" d_lval lv)
+              in 
+              ChangeTo 
+              [ Call((None), (Lval(Var(printfFun.svar),NoOffset)), 
+                     [ one ; 
+                       mkString str ; AddrOf lv; 
+                       mkString l.file; 
+                       integer l.line], locUnknown);
+              i]
+      end 
+    | _ -> SkipChildren
+
+end
+
+let feature : featureDescr = 
+  { fd_name = "logwrites";
+    fd_enabled = Cilutil.logWrites;
+    fd_description = "generation of code to log memory writes";
+    fd_extraopt = [];
+    fd_doit = 
+    (function (f: file) -> 
+      let lwVisitor = new logWriteVisitor in
+      visitCilFileSameGlobals lwVisitor f);
+    fd_post_check = true;
+  } 
+
diff --git a/cil/src/ext/oneret.ml b/cil/src/ext/oneret.ml
new file mode 100644
index 000000000..b3ce4a10f
--- /dev/null
+++ b/cil/src/ext/oneret.ml
@@ -0,0 +1,187 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Make sure that there is exactly one Return statement in the whole body. 
+ * Replace all the other returns with Goto. This is convenient if you later 
+ * want to insert some finalizer code, since you have a precise place where 
+ * to put it *)
+open Cil
+open Pretty
+
+module E = Errormsg
+
+let dummyVisitor = new nopCilVisitor
+
+let oneret (f: Cil.fundec) : unit = 
+  let fname = f.svar.vname in
+  (* Get the return type *)
+  let retTyp = 
+    match f.svar.vtype with
+      TFun(rt, _, _, _) -> rt
+    | _ -> E.s (E.bug "Function %s does not have a function type\n" 
+                  f.svar.vname)
+  in
+  (* Does it return anything ? *)
+  let hasRet = match unrollType retTyp with TVoid _ -> false | _ -> true in
+
+  (* Memoize the return result variable. Use only if hasRet *)
+  let lastloc = ref locUnknown in 
+  let retVar : varinfo option ref = ref None in
+  let getRetVar (x: unit) : varinfo = 
+    match !retVar with
+      Some rv -> rv
+    | None -> begin
+        let rv = makeLocalVar f "__retres" retTyp in (* don't collide *)
+        retVar := Some rv;
+        rv
+    end
+  in
+  (* Remember if we have introduced goto's *)
+  let haveGoto = ref false in
+  (* Memoize the return statement *)
+  let retStmt : stmt ref = ref dummyStmt in
+  let getRetStmt (x: unit) : stmt = 
+    if !retStmt == dummyStmt then begin
+      (* Must create a statement *)
+      let rv = 
+        if hasRet then Some (Lval(Var (getRetVar ()), NoOffset)) else None
+      in
+      let sr = mkStmt (Return (rv, !lastloc)) in
+      retStmt := sr;
+      sr
+    end else
+      !retStmt
+  in
+  (* Now scan all the statements. Know if you are the main body of the 
+   * function and be prepared to add new statements at the end *)
+  let rec scanStmts (mainbody: bool) = function
+    | [] when mainbody -> (* We are at the end of the function. Now it is 
+                           * time to add the return statement *)
+        let rs = getRetStmt () in
+        if !haveGoto then
+          rs.labels <- (Label("return_label", !lastloc, false)) :: rs.labels;
+        [rs]
+
+    | [] -> []
+
+    | ({skind=Return (retval, l)} as s) :: rests -> 
+        currentLoc := l;
+(*
+        ignore (E.log "Fixing return(%a) at %a\n"
+                  insert
+                  (match retval with None -> text "None" 
+                  | Some e -> d_exp () e)
+                  d_loc l);
+*)
+        if hasRet && retval = None then 
+          E.s (error "Found return without value in function %s\n" fname);
+        if not hasRet && retval <> None then 
+          E.s (error "Found return in subroutine %s\n" fname);
+        (* Keep this statement because it might have labels. But change it to 
+         * an instruction that sets the return value (if any). *)
+        s.skind <- begin
+           match retval with 
+             Some rval -> Instr [Set((Var (getRetVar ()), NoOffset), rval, l)]
+           | None -> Instr []
+        end;
+        (* See if this is the last statement in function *)
+        if mainbody && rests == [] then
+          s :: scanStmts mainbody rests
+        else begin
+          (* Add a Goto *)
+          let sgref = ref (getRetStmt ()) in
+          let sg = mkStmt (Goto (sgref, l)) in
+          haveGoto := true;
+          s :: sg :: (scanStmts mainbody rests)
+        end
+
+    | ({skind=If(eb,t,e,l)} as s) :: rests -> 
+        currentLoc := l;
+        s.skind <- If(eb, scanBlock false t, scanBlock false e, l);
+        s :: scanStmts mainbody rests
+(*
+    | ({skind=Loop(b,l,lb1,lb2)} as s) :: rests -> 
+        currentLoc := l;
+        s.skind <- Loop(scanBlock false b, l,lb1,lb2);
+        s :: scanStmts mainbody rests
+*)
+    | ({skind=While(e,b,l)} as s) :: rests -> 
+        currentLoc := l;
+        s.skind <- While(e, scanBlock false b, l);
+        s :: scanStmts mainbody rests
+    | ({skind=DoWhile(e,b,l)} as s) :: rests -> 
+        currentLoc := l;
+        s.skind <- DoWhile(e, scanBlock false b, l);
+        s :: scanStmts mainbody rests
+    | ({skind=For(bInit,e,bIter,b,l)} as s) :: rests -> 
+        currentLoc := l;
+	s.skind <- For(scanBlock false bInit, e, scanBlock false bIter,
+		       scanBlock false b, l);
+        s :: scanStmts mainbody rests
+    | ({skind=Switch(e, b, cases, l)} as s) :: rests -> 
+        currentLoc := l;
+        s.skind <- Switch(e, scanBlock false b, cases, l);
+        s :: scanStmts mainbody rests
+    | ({skind=Block b} as s) :: rests -> 
+        s.skind <- Block (scanBlock false b);
+        s :: scanStmts mainbody rests
+    | ({skind=(Goto _ | Instr _ | Continue _ | Break _ 
+               | TryExcept _ | TryFinally _)} as s)
+      :: rests -> s :: scanStmts mainbody rests
+
+  and scanBlock (mainbody: bool) (b: block) = 
+    { bstmts = scanStmts mainbody b.bstmts; battrs = b.battrs; }
+
+  in
+  ignore (visitCilBlock dummyVisitor f.sbody) ; (* sets CurrentLoc *)
+  lastloc := !currentLoc ;  (* last location in the function *)
+  f.sbody <- scanBlock true f.sbody
+        
+      
+let feature : featureDescr = 
+  { fd_name = "oneRet";
+    fd_enabled = Cilutil.doOneRet;
+    fd_description = "make each function have at most one 'return'" ;
+    fd_extraopt = [];
+    fd_doit = (function (f: file) -> 
+      Cil.iterGlobals f (fun glob -> match glob with
+        Cil.GFun(fd,_) -> oneret fd; 
+      | _ -> ()));
+    fd_post_check = true;
+  } 
diff --git a/cil/src/ext/oneret.mli b/cil/src/ext/oneret.mli
new file mode 100644
index 000000000..f98ab4d14
--- /dev/null
+++ b/cil/src/ext/oneret.mli
@@ -0,0 +1,44 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(* Make sure that there is only one Return statement in the whole body. 
+ * Replace all the other returns with Goto. Make sure that there is a return 
+ * if the function is supposed to return something, and it is not declared to 
+ * not return. *)
+val oneret: Cil.fundec -> unit
+val feature : Cil.featureDescr 
diff --git a/cil/src/ext/partial.ml b/cil/src/ext/partial.ml
new file mode 100644
index 000000000..4beca3fc9
--- /dev/null
+++ b/cil/src/ext/partial.ml
@@ -0,0 +1,851 @@
+(* See copyright notice at the end of the file *)
+(*****************************************************************************
+ * Partial Evaluation & Constant Folding
+ *
+ * Soundness Assumptions:
+ * (1) Whole program analysis. You may call functions that are not defined
+ *     (e.g., library functions) but they may not call back. 
+ * (2) An undefined function may not return the address of a function whose
+ *     address is not already taken in the code I can see. 
+ * (3) A function pointer call may only call a function that has its
+ *     address visibly taken in the code I can see. 
+ *
+ * (More assumptions in the comments below)
+ *****************************************************************************)
+open Cil
+open Pretty
+
+(*****************************************************************************
+ * A generic signature for Alias Analysis information. Used to compute the
+ * call graph and do symbolic execution. 
+ ****************************************************************************)
+module type AliasInfo =
+  sig
+    val can_have_the_same_value : Cil.exp -> Cil.exp -> bool
+    val resolve_function_pointer : Cil.exp -> (Cil.fundec list)
+  end
+
+(*****************************************************************************
+ * A generic signature for Symbolic Execution execution algorithms. Such
+ * algorithms are used below to perform constant folding and dead-code
+ * elimination. You write a "basic-block" symex algorithm, we'll make it
+ * a whole-program CFG-pruner. 
+ ****************************************************************************)
+module type Symex = 
+  sig
+    type t (* the type of a symex algorithm state object *)
+    val empty : t                           (* all values unknown *)
+    val equal : t -> t -> bool              (* are these the same? *)
+    val assign : t -> Cil.lval -> Cil.exp  -> (Cil.exp * t) 
+      (* incorporate an assignment, return the RHS *)
+    val unassign : t -> Cil.lval -> t 
+      (* lose all information about the given lvalue: assume an 
+       * unknown external value has been assigned to it *)
+    val assembly : t -> Cil.instr -> t      (* handle ASM *)
+    val assume : t -> Cil.exp -> t          (* incorporate an assumption *) 
+    val evaluate : t -> Cil.exp -> Cil.exp  (* symbolic evaluation *)
+    val join : (t list) -> t                (* join a bunch of states *) 
+    val call : t -> Cil.fundec -> (Cil.exp list) -> (Cil.exp list * t)
+      (* we are calling the given function with the given actuals *)
+    val return : t -> Cil.fundec -> t
+      (* we are returning from the given function *)
+    val call_to_unknown_function : t -> t 
+      (* throw away information that may have been changed *) 
+    val debug : t -> unit
+  end
+
+(*****************************************************************************
+ * A generic signature for whole-progam call graphs. 
+ ****************************************************************************)
+module type CallGraph =
+  sig 
+    type t (* the type of a call graph *)
+    val compute : Cil.file -> t (* file for which we compute the graph *)
+    val can_call : t -> Cil.fundec -> (Cil.fundec list)
+    val can_be_called_by : t -> Cil.fundec -> (Cil.fundec list)
+    val fundec_of_varinfo : t -> Cil.varinfo -> Cil.fundec
+  end
+
+(*****************************************************************************
+ * My cheap-o Alias Analysis. Assume all expressions can have the same 
+ * value and any function with its address taken can be the target of
+ * any function pointer. 
+ *
+ * Soundness Assumptions:
+ * (1) Someone must call "find_all_functions_With_address_taken" before the
+ *     results are valid. This is already done in the code below.
+ ****************************************************************************)
+let all_functions_with_address_taken = ref [] 
+let find_all_functions_with_address_taken (f : Cil.file) =
+  iterGlobals f (fun g -> match g with
+    GFun(fd,_) -> if fd.svar.vaddrof then
+      all_functions_with_address_taken := fd :: 
+      !all_functions_with_address_taken
+  | _ -> ())  
+
+module EasyAlias =
+  struct
+    let can_have_the_same_value e1 e2 = true
+    let resolve_function_pointer e1 = !all_functions_with_address_taken
+  end
+
+(*****************************************************************************
+ * My particular method for computing the Call Graph. 
+ ****************************************************************************)
+module EasyCallGraph = functor (A : AliasInfo) -> 
+  struct
+    type callGraphNode = {
+              fd        : Cil.fundec ;
+      mutable calledBy  : Cil.fundec list ;
+      mutable calls     : Cil.fundec list ;
+    } 
+    type t = (Cil.varinfo, callGraphNode) Hashtbl.t 
+
+    let cgCreateNode cg fundec =
+      let newnode = { fd = fundec ; calledBy = [] ; calls = [] } in
+      Hashtbl.add cg fundec.svar newnode
+
+    let cgFindNode cg svar = Hashtbl.find cg svar 
+
+    let cgAddEdge cg caller callee = 
+      try 
+        let n1 = cgFindNode cg caller in
+        let n2 = cgFindNode cg callee in
+        n1.calls <- n2.fd :: n1.calls ;
+        n1.calledBy <- n1.fd :: n1.calledBy 
+      with _ -> () 
+
+    class callGraphVisitor cg = object
+      inherit nopCilVisitor 
+      val the_fun = ref None  
+
+      method vinst i = 
+        let _ = match i with
+          Call(_,Lval(Var(callee),NoOffset),_,_) -> begin
+            (* known function call *)
+            match !the_fun with
+              None -> failwith "callGraphVisitor: call outside of any function"
+            | Some(enclosing) -> cgAddEdge cg enclosing callee
+          end
+        | Call(_,e,_,_) -> begin 
+            (* unknown function call *)
+            match !the_fun with
+              None -> failwith "callGraphVisitor: call outside of any function"
+            | Some(enclosing) -> let lst = A.resolve_function_pointer e in 
+                List.iter (fun possible_target_fd ->
+                  cgAddEdge cg enclosing possible_target_fd.svar) lst
+          end
+        | _ -> () 
+        in SkipChildren 
+
+      method vfunc f = the_fun := Some(f.svar) ; DoChildren
+    end 
+
+    let compute (f : Cil.file) = 
+      let cg = Hashtbl.create 511 in 
+      iterGlobals f (fun g -> match g with
+          GFun(fd,_) -> cgCreateNode cg fd 
+        | _ -> ()
+      ) ; 
+      visitCilFileSameGlobals (new callGraphVisitor cg) f ;
+      cg
+
+    let can_call cg fd =
+      let n = cgFindNode cg fd.svar in n.calls
+    let can_be_called_by cg fd =
+      let n = cgFindNode cg fd.svar in n.calledBy
+    let fundec_of_varinfo cg vi = 
+      let n = cgFindNode cg vi in n.fd 
+  end (* END OF: module EasyCallGraph *)
+
+(*****************************************************************************
+ * Necula's Constant Folding Strategem (re-written to be applicative) 
+ *
+ * Soundness Assumptions:
+ * (1) Inline assembly does not affect constant folding. 
+ ****************************************************************************)
+module OrderedInt = 
+  struct 
+    type t = int
+    let compare = compare
+  end
+module IntMap = Map.Make(OrderedInt) 
+
+module NeculaFolding = functor (A : AliasInfo) ->
+  struct
+    (* Register file. Maps identifiers of local variables to expressions.
+     * We also remember if the expression depends on memory or depends on
+     * variables that depend on memory *)
+    type reg = {
+      rvi : varinfo ;
+      rval : exp ;
+      rmem : bool
+    } 
+    type t = reg IntMap.t 
+    let empty = IntMap.empty 
+    let equal t1 t2 = (compare t1 t2 = 0) (* use OCAML here *)
+    let dependsOnMem = ref false
+    (* Rewrite an expression based on the current register file *)
+    class rewriteExpClass (regFile : t) = object
+      inherit nopCilVisitor
+      method vexpr = function
+        | Lval (Var v, NoOffset) -> begin
+            try
+              let defined = (IntMap.find v.vid regFile) in
+              if (defined.rmem) then dependsOnMem := true;
+              (match defined.rval with
+              | Const(x) -> ChangeTo (defined.rval)
+              | _ -> DoChildren)
+            with Not_found -> DoChildren
+          end
+        | Lval (Mem _, _) -> dependsOnMem := true; DoChildren
+        | _ -> DoChildren
+    end
+    (* Rewrite an expression and return the new expression along with an 
+     * indication of whether it depends on memory *)
+    let rewriteExp r (e: exp) : exp * bool = 
+      dependsOnMem := false;
+      let e' = constFold true (visitCilExpr (new rewriteExpClass r) e) in
+      e', !dependsOnMem
+    let eval r e = 
+      let new_e, depends = rewriteExp r e in
+      new_e
+
+    let setMemory regFile = 
+      (* Get a list of all mappings that depend on memory *)
+      let depids = ref [] in
+      IntMap.iter (fun id v -> if v.rmem then depids := id :: !depids) regFile;
+      (* And remove them from the register file *)
+      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
+
+    let setRegister regFile (v: varinfo) ((e,b): exp * bool) = 
+      IntMap.add v.vid { rvi = v ; rval = e ; rmem = b; } regFile 
+
+    let resetRegister regFile (id: int) =
+      IntMap.remove id regFile 
+
+    class findLval lv contains = object
+      inherit nopCilVisitor 
+      method vlval l = 
+        if l = lv then 
+          (contains := true ; SkipChildren)
+        else
+          DoChildren
+    end 
+
+    let removeMappingsThatDependOn regFile l =
+      (* Get a list of all mappings that depend on l *)
+      let depids = ref [] in
+      IntMap.iter (fun id reg -> 
+        let found = ref false in 
+        ignore (visitCilExpr (new findLval l found) reg.rval) ;
+        if !found then 
+          depids := id :: !depids
+      )  regFile ; 
+      (* And remove them from the register file *)
+      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
+
+    let assign r l e = 
+      let (newe,b) = rewriteExp r e in
+      let r' = match l with
+        (Var v, NoOffset) -> 
+            let r'' = setRegister r v (newe,b) in 
+            removeMappingsThatDependOn r'' l 
+      | (Mem _, _) -> setMemory r
+      | _ -> r 
+      in newe, r' 
+
+    let unassign r l = 
+      let r' = match l with
+        (Var v, NoOffset) -> 
+            let r'' = resetRegister r v.vid in
+            removeMappingsThatDependOn r'' l 
+      | (Mem _, _) -> setMemory r
+      | _ -> r 
+      in r' 
+
+    let assembly r i = r (* no-op in Necula-world *)
+    let assume r e = r (* no-op in Necula-world *)
+
+    let evaluate r e = 
+      let (newe,_) = rewriteExp r e in
+      newe
+
+    (* Join two symex states *)  
+    let join2 (r1 : t) (r2 : t) = 
+      let keep = ref [] in 
+      IntMap.iter (fun id reg -> 
+        try 
+          let reg' = IntMap.find id r2 in
+          if reg'.rval = reg.rval && reg'.rmem = reg.rmem then 
+            keep := (id,reg) :: !keep 
+        with _ -> ()
+      ) r1 ;
+      List.fold_left (fun acc (id,v) ->
+        IntMap.add id v acc) (IntMap.empty) !keep
+
+    let join (lst : t list) = match lst with
+        [] -> failwith "empty list"
+    | r :: tl -> List.fold_left 
+                  (fun (acc : t) (elt : t) -> join2 acc elt) r tl 
+
+    let call r fd el = 
+      let new_arg_list = ref [] in 
+      let final_r = List.fold_left2 (fun r vi e -> 
+        let newe, r' = assign r ((Var(vi),NoOffset)) e in
+        new_arg_list := newe :: !new_arg_list ;
+        r'
+      ) r fd.sformals el in
+      (List.rev !new_arg_list), final_r
+
+    let return r fd =
+      let regFile = 
+        List.fold_left (fun r vi -> IntMap.remove vi.vid r) r fd.sformals
+      in 
+      (* Get a list of all globals *)
+      let depids = ref [] in
+      IntMap.iter (fun vid reg -> 
+        if reg.rvi.vglob || reg.rvi.vaddrof then depids := vid :: !depids 
+      )  regFile ; 
+      (* And remove them from the register file *)
+      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
+
+
+    let call_to_unknown_function r =
+      setMemory r 
+
+    let debug r = 
+      IntMap.iter (fun key reg -> 
+        ignore (Pretty.printf "%s <- %a (%b)@!" reg.rvi.vname d_exp reg.rval reg.rmem)
+      ) r 
+  end (* END OF: NeculaFolding *)
+
+(*****************************************************************************
+ * A transformation to make every function call end its statement. So
+ * { x=1; Foo(); y=1; } 
+ * becomes at least:
+ * { { x=1; Foo(); }
+ *   { y=1; } }
+ * But probably more like:
+ * { { x=1; } { Foo(); } { y=1; } }
+ ****************************************************************************)
+let rec contains_call il = match il with
+    [] -> false
+  | Call(_) :: tl -> true
+  | _ :: tl -> contains_call tl 
+
+class callBBVisitor = object
+  inherit nopCilVisitor 
+
+  method vstmt s =
+    match s.skind with
+      Instr(il) when contains_call il -> begin
+        let list_of_stmts = List.map (fun one_inst -> 
+          mkStmtOneInstr one_inst) il in
+        let block = mkBlock list_of_stmts in
+        ChangeDoChildrenPost(s, (fun _ -> 
+          s.skind <- Block(block) ;
+          s))
+      end
+    | _ -> DoChildren
+
+  method vvdec _ = SkipChildren
+  method vexpr _ = SkipChildren
+  method vlval _ = SkipChildren
+  method vtype _ = SkipChildren
+end 
+
+let calls_end_basic_blocks f =
+  let thisVisitor = new callBBVisitor in
+  visitCilFileSameGlobals thisVisitor f  
+
+(*****************************************************************************
+ * A transformation that gives each variable a unique identifier. 
+ ****************************************************************************)
+class vidVisitor = object
+  inherit nopCilVisitor 
+  val count = ref 0 
+
+  method vvdec vi = 
+    vi.vid <- !count ;
+    incr count ; SkipChildren
+end 
+
+let globally_unique_vids f =
+  let thisVisitor = new vidVisitor in
+  visitCilFileSameGlobals thisVisitor f  
+
+(*****************************************************************************
+ * The Weimeric Partial Evaluation Data-Flow Engine
+ *
+ * This functor performs flow-sensitive, context-insensitive whole-program
+ * data-flow analysis with an eye toward partial evaluation and constant
+ * folding. 
+ *
+ * Toposort the whole-program inter-procedural CFG to compute
+ *  (1) the number of actual predecessors for each statement
+ *  (2) the global toposort ordering
+ *
+ * Perform standard data-flow analysis (joins, etc) on the ICFG until you
+ * hit a fixed point. If this changed the structure of the ICFG (by
+ * removing an IF-branch or an empty function call), redo the whole thing.
+ *
+ * Soundness Assumptions:
+ * (1) A "call instruction" is the last thing in its statement.
+ *       Use "calls_end_basic_blocks" to get this. cil/src/main.ml does
+ *       this when you pass --makeCFG.
+ * (2) All variables have globally unique identifiers. 
+ *       Use "globally_unique_vids" to get this. cil/src/main.ml does 
+ *       this when you pass --makeCFG. 
+ * (3) This may not be a strict soundness requirement, but I wrote this
+ *       assuming that the input file has all switch/break/continue
+ *       statements removed. 
+ ****************************************************************************)
+module MakePartial =
+  functor (S : Symex) -> 
+  functor (C : CallGraph) -> 
+  functor (A : AliasInfo) -> 
+  struct
+
+    let debug = false 
+
+    (* We keep this information about every statement. Ideally this should
+     * be put in the stmt itself, but CIL doesn't give us space. *)
+    type sinfo = { (* statement info *)
+              incoming_state : (int, S.t) Hashtbl.t ;
+              (* mapping from stmt.sid to Symex.state *)
+              reachable_preds : (int, bool) Hashtbl.t ; 
+              (* basically a set of all of the stmt.sids that can really
+               * reach this statement *)
+      mutable last_used_state : S.t option ;
+              (* When we last did the Post() of this statement, what
+               * incoming state did we use? If our new incoming state is
+               * the same, we don't have to do it again. *)
+      mutable priority : int ; 
+              (* Whole-program toposort priority. High means "do me first".
+               * The first stmt in "main()" will have the highest priority.
+               *)
+    } 
+    let sinfo_ht = Hashtbl.create 511 
+    let clear_sinfo () = Hashtbl.clear sinfo_ht 
+
+    (* We construct sinfo nodes lazily: if you ask for one that isn't
+     * there, we build it. *)
+    let get_sinfo stmt = 
+      try
+        Hashtbl.find sinfo_ht stmt.sid
+      with _ ->
+        let new_sinfo = { incoming_state = Hashtbl.create 3 ;
+                          reachable_preds = Hashtbl.create 3 ; 
+                          last_used_state = None ; 
+                          priority = (-1) ; } in
+        Hashtbl.add sinfo_ht stmt.sid new_sinfo ;
+        new_sinfo 
+
+    (* Topological Sort is a DFS in which you assign a priority right as 
+     * you finished visiting the children. While we're there we compute
+     * the actual number of unique predecessors for each statement. The CIL
+     * information may be out of date because we keep changing the CFG by
+     * removing IFs and whatnot. *)
+    let toposort_counter = ref 1  
+    let add_edge s1 s2 =
+      let si2 = get_sinfo s2 in
+      Hashtbl.replace si2.reachable_preds s1.sid true 
+
+    let rec toposort c stmt = 
+      let si = get_sinfo stmt in 
+      if si.priority >= 0 then
+        () (* already visited! *)
+      else begin
+        si.priority <- 0 ; (* currently visiting *)
+        (* handle function calls in this basic block *) 
+        (match stmt.skind with
+          (Instr(il)) -> 
+            List.iter (fun i -> 
+              let fd_list = match i with
+                Call(_,Lval(Var(vi),NoOffset),_,_) -> 
+                  begin 
+                    try 
+                      let fd = C.fundec_of_varinfo c vi in
+                      [fd] 
+                    with e -> [] (* calling external function *)
+                  end 
+              | Call(_,e,_,_) -> 
+                  A.resolve_function_pointer e 
+              | _ -> []
+              in 
+              List.iter (fun fd -> 
+                if List.length fd.sbody.bstmts > 0 then 
+                  let fun_stmt = List.hd fd.sbody.bstmts in 
+                  add_edge stmt fun_stmt ; 
+                  toposort c fun_stmt 
+              ) fd_list 
+            ) il 
+        | _ -> ()); 
+        List.iter (fun succ -> 
+          add_edge stmt succ ; toposort c succ) stmt.succs ;
+        si.priority <- !toposort_counter ;
+        incr toposort_counter 
+      end
+
+    (* we set this to true whenever we eliminate an IF or otherwise 
+     * change the CFG *)
+    let changed_cfg = ref false 
+
+    (* Partially evaluate / constant fold a statement. Basically this just
+     * asks the Symex algorithm to evaluate the RHS in the current state
+     * and then compute a new state that incorporates the assignment. 
+     *
+     * However, we have special handling for ifs and calls. If we can
+     * evaluate an if predicate to a constant, we remove the if. 
+     *
+     * If we are going to make a call to a function with an empty body, we
+     * remove the function call. *)
+    let partial_stmt c state stmt handle_funcall = 
+      let result = match stmt.skind with
+        Instr(il) -> 
+          let state = ref state in 
+          let new_il = List.map (fun i -> 
+            if debug then begin 
+              ignore (Pretty.printf "Instr %a@!" d_instr i )
+            end ;
+            match i with
+            | Set(l,e,loc) -> 
+                let e', state' = S.assign !state l e in
+                state := state' ;
+                [Set(l,e',loc)]
+            | Call(lo,(Lval(Var(vi),NoOffset)),al,loc) -> 
+                let result = begin
+                  try 
+                    let fd = C.fundec_of_varinfo c vi in
+                    begin 
+                    match fd.sbody.bstmts with
+                      [] -> [] (* no point in making this call *)
+                    | hd :: tl -> 
+                        let al', state' = S.call !state fd al in
+                        handle_funcall stmt hd state' ;
+                        let state'' = S.return state' fd in 
+                        state := state'' ;
+                        [Call(lo,(Lval(Var(vi),NoOffset)),al',loc)]
+                    end
+                  with e ->
+                    let state'' = S.call_to_unknown_function !state in
+                    let al' = List.map (S.evaluate !state) al in 
+                    state := state'' ; 
+                    [Call(lo,(Lval(Var(vi),NoOffset)),al',loc)]
+                end in 
+                (* handle return value *)
+                begin 
+                  match lo with
+                    Some(lv) -> state := S.unassign !state lv 
+                  | _ -> () 
+                end ;
+                result
+            | Call(lo,f,al,loc) -> 
+                let al' = List.map (S.evaluate !state) al in 
+                state := S.call_to_unknown_function !state ;
+                (match lo with
+                  Some(lv) -> state := S.unassign !state lv
+                | None -> ()) ;
+                [Call(lo,f,al',loc)]
+            | Asm(_) -> state := S.assembly !state i ; [i] 
+          ) il in
+          stmt.skind <- Instr(List.flatten new_il) ;
+          if debug then begin 
+            ignore (Pretty.printf "New Stmt is %a@!" d_stmt stmt) ; 
+          end ;
+          !state
+
+      | If(e,b1,b2,loc) -> 
+          let e' = S.evaluate state e in 
+          (* Pretty.printf "%a evals to %a\n" d_exp e d_exp e' ; *)
+
+          (* helper function to remove an IF branch *)
+          let remove b remains = begin 
+            changed_cfg := true ; 
+            (match b.bstmts with
+            | [] -> ()
+            | hd :: tl -> 
+              stmt.succs <- List.filter (fun succ -> succ.sid <> hd.sid)
+                stmt.succs 
+            ) 
+          end in 
+
+          if (e' = one) then begin
+            if b2.bstmts = [] && b2.battrs = [] then begin
+              stmt.skind <- Block(b1) ;
+              match b1.bstmts with
+                [] -> failwith "partial: completely empty if" 
+              | hd :: tl -> stmt.succs <- [hd]
+            end else 
+              stmt.skind <- Block( 
+              { bstmts = 
+                [ mkStmt (Block(b1)) ;
+                  mkStmt (If(zero,b2,{bstmts=[];battrs=[];},loc)) ] ;
+                battrs = [] } ) ;
+            remove b2 b1 ;
+            state
+          end else if (e' = zero) then begin
+            if b1.bstmts = [] && b1.battrs = [] then begin
+              stmt.skind <- Block(b2) ;
+              match b2.bstmts with
+                [] -> failwith "partial: completely empty if" 
+              | hd :: tl -> stmt.succs <- [hd]
+            end else 
+            stmt.skind <- Block(
+            { bstmts = 
+              [ mkStmt (Block(b2)) ;
+                mkStmt (If(zero,b1,{bstmts=[];battrs=[];},loc)) ] ;
+              battrs = [] } ) ;
+            remove b1 b2 ; 
+            state
+          end else begin
+            stmt.skind <- If(e',b1,b2,loc) ;
+            state
+          end 
+
+      | Return(Some(e),loc) ->
+          let e' = S.evaluate state e in 
+          stmt.skind <- Return(Some(e'),loc) ;
+          state
+
+      | Block(b) ->
+          if debug && List.length stmt.succs > 1 then begin
+            ignore (Pretty.printf "(%a) has successors [%a]@!"
+              d_stmt stmt 
+              (docList ~sep:(chr '@') (d_stmt ()))
+              stmt.succs)
+          end ;
+          state
+
+      | _ -> state
+    in result
+
+    (* 
+     * This is the main conceptual entry-point for the partial evaluation 
+     * data-flow functor.
+     *)
+    let dataflow (file : Cil.file)         (* whole program *)
+                 (c : C.t)                 (* control-flow graph *)
+                 (initial_state : S.t)     (* any assumptions? *)
+                 (initial_stmt : Cil.stmt) (* entry point *) 
+    = begin
+      (* count the total number of statements in the program *)
+      let num_stmts = ref 1 in
+      iterGlobals file (fun g -> match g with
+        GFun(fd,_) -> begin
+          match fd.smaxstmtid with
+            Some(i) -> if i > !num_stmts then num_stmts := i 
+          | None -> () 
+          end
+      | _ -> () 
+      ) ;
+      (if debug then 
+      Printf.printf "Dataflow: at most %d statements in program\n" !num_stmts); 
+
+      (* create a priority queue in which to store statements *) 
+      let worklist = Heap.create !num_stmts in
+
+      let finished = ref false in
+      let passes = ref 0 in
+
+      (* add something to the work queue *)
+      let enqueue caller callee state = begin
+        let si = get_sinfo callee in 
+        Hashtbl.replace si.incoming_state caller.sid state ;
+        Heap.insert worklist si.priority callee
+      end in 
+
+      (* we will be finished when we complete a round of data-flow that
+       * does not change the ICFG *)
+      while not !finished do 
+        clear_sinfo () ; 
+        incr passes ; 
+
+        (* we must recompute the ordering and the predecessor information
+         * because we may have changed it by removing IFs *)
+        (if debug then Printf.printf "Dataflow: Topological Sorting & Reachability\n" );
+        toposort c initial_stmt ;  
+
+        let initial_si = get_sinfo initial_stmt in
+        Heap.insert worklist initial_si.priority initial_stmt ;
+
+        while not (Heap.is_empty worklist) do
+          let (p,s) = Heap.extract_max worklist in 
+          if debug then begin 
+            ignore (Pretty.printf "Working on stmt %d (%a) %a@!" 
+              s.sid 
+              (docList ~sep:(chr ',' ++ break) (fun s -> dprintf "%d" s.sid))
+              s.succs
+              d_stmt s) ; 
+            flush stdout ;
+          end ; 
+          let si = get_sinfo s in 
+
+          (* Even though this stmt is on the worklist, we may not have
+           * to do anything with it if the join of all of the incoming
+           * states is the same as the last state we used here. *) 
+          let must_recompute, incoming_state = 
+            begin
+              let list_of_incoming_states = ref [] in
+              Hashtbl.iter (fun true_pred_sid b -> 
+                let this_pred_state =
+                  try
+                    Hashtbl.find si.incoming_state true_pred_sid
+                  with _ -> 
+                    (* this occurs when we're evaluating a statement and we
+                     * have not yet evaluated all of its predecessors (the
+                     * first time we look at a loop head, say). We must be
+                     * conservative. We'll come back later with better
+                     * information (as we work toward the fix-point). *) 
+                    S.empty 
+                in
+                if debug then begin 
+                  Printf.printf " Incoming State from %d\n" true_pred_sid ;
+                  S.debug this_pred_state ; 
+                  flush stdout ; 
+                end ; 
+                list_of_incoming_states := this_pred_state ::
+                  !list_of_incoming_states 
+              ) si.reachable_preds ; 
+              let merged_incoming_state = 
+                if !list_of_incoming_states = [] then
+                  (* this occurs when we're looking at the first statement
+                   * in "main" -- it has no preds *) 
+                  initial_state
+                else 
+                  S.join !list_of_incoming_states 
+              in
+              if debug then begin 
+                Printf.printf " Merged State:\n" ;
+                S.debug merged_incoming_state ; 
+                flush stdout ; 
+              end ;
+              let must_recompute = match si.last_used_state with
+                None -> true
+              | Some(last) -> not (S.equal merged_incoming_state last)
+              in must_recompute, merged_incoming_state 
+            end 
+          in 
+          if must_recompute then begin
+            si.last_used_state <- Some(incoming_state) ; 
+            let outgoing_state = 
+              (* partially evaluate and optimize the statement *) 
+              partial_stmt c incoming_state s enqueue in
+            let fresh_succs = s.succs in 
+            (* touch every successor so that we will reconsider it *)
+            List.iter (fun succ ->
+              enqueue s succ outgoing_state 
+            ) fresh_succs ;
+          end else begin
+            if debug then begin 
+              Printf.printf "No need to recompute.\n" 
+            end 
+          end
+        done ;
+        (if debug then Printf.printf "Dataflow: Pass %d Complete\n" !passes) ;
+        if !changed_cfg then begin
+          (if debug then Printf.printf "Dataflow: Restarting (CFG Changed)\n") ;
+          changed_cfg := false 
+        end else 
+          finished := true 
+      done ;
+      (if debug then Printf.printf "Dataflow: Completed (%d passes)\n" !passes) 
+
+    end 
+    
+  let simplify file c fd (assumptions : (Cil.lval * Cil.exp) list) =
+    let starting_state = List.fold_left (fun s (l,e) ->
+      let e',s' = S.assign s l e in 
+      s'
+    ) S.empty assumptions in 
+    dataflow file c starting_state (List.hd fd.sbody.bstmts)
+
+  end
+
+
+(* 
+ * Currently our partial-eval optimizer is built out of basically nothing.  
+ * The alias analysis is fake, the call grpah is cheap, and we're using
+ * George's old basic-block symex. Still, it works. 
+ *)
+(* Don't you love Functor application? *)
+module BasicCallGraph = EasyCallGraph(EasyAlias)
+module BasicSymex = NeculaFolding(EasyAlias)
+module BasicPartial = MakePartial(BasicSymex)(BasicCallGraph)(EasyAlias)
+
+(*
+ * A very easy entry-point to partial evaluation/symbolic execution.
+ * You pass the Cil file and a list of assumptions (lvalue, exp pairs that 
+ * should be treated as assignments that occur before the program starts). 
+ *
+ * We partially evaluate and optimize starting from "main". The Cil.file
+ * is modified in place. 
+ *)
+let partial (f : Cil.file) (assumptions : (Cil.lval * Cil.exp) list) =
+  try 
+    find_all_functions_with_address_taken f ;
+    let c = BasicCallGraph.compute f in 
+    try 
+      iterGlobals f (fun g -> match g with
+        GFun(fd,_) when fd.svar.vname = "main" -> 
+          BasicPartial.simplify f c fd assumptions 
+      | _ -> ()) ;
+    with e -> begin
+      Printf.printf "Error in DataFlow: %s\n" (Printexc.to_string e) ;
+      raise e
+    end 
+  with e -> begin
+      Printf.printf "Error in Partial: %s\n" (Printexc.to_string e) ;
+      raise e
+    end 
+
+let feature : featureDescr = 
+  { fd_name = "partial";
+    fd_enabled = Cilutil.doPartial;
+    fd_description = "interprocedural partial evaluation and constant folding" ;
+    fd_extraopt = [];
+    fd_doit = (function (f: file) -> 
+      if not !Cilutil.makeCFG then begin
+        Errormsg.s (Errormsg.error "--dopartial: you must also specify --domakeCFG\n")
+      end ; 
+      partial f [] ) ;
+    fd_post_check = false;
+  } 
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
diff --git a/cil/src/ext/pta/golf.ml b/cil/src/ext/pta/golf.ml
new file mode 100644
index 000000000..5ea47ff1a
--- /dev/null
+++ b/cil/src/ext/pta/golf.ml
@@ -0,0 +1,1657 @@
+(*
+ *
+ * Copyright (c) 2001-2002,
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(***********************************************************************)
+(*                                                                     *)
+(* Exceptions                                                          *)
+(*                                                                     *)
+(***********************************************************************)
+
+exception Inconsistent (* raised if constraint system is inconsistent *)
+exception WellFormed   (* raised if types are not well-formed *)
+exception NoContents
+exception APFound      (* raised if an alias pair is found, a control
+                          flow exception *)
+
+
+module U = Uref
+module S = Setp
+module H = Hashtbl
+module Q = Queue
+
+
+(** Subtyping kinds *)
+type polarity =
+    Pos
+  | Neg
+  | Sub
+
+(** Path kinds, for CFL reachability *)
+type pkind =
+    Positive
+  | Negative
+  | Match
+  | Seed
+
+(** Context kinds -- open or closed *)
+type context =
+    Open
+  | Closed
+
+(* A configuration is a context (open or closed) coupled with a pair
+   of stamps representing a state in the cartesian product DFA. *)
+type configuration = context * int * int
+
+module ConfigHash =
+struct
+  type t = configuration
+  let equal t t' = t = t'
+  let hash t = Hashtbl.hash t
+end
+
+module CH = H.Make (ConfigHash)
+
+type config_map = unit CH.t
+
+(** Generic bounds *)
+type 'a bound = {index : int; info : 'a U.uref}
+
+(** For label paths. *)
+type 'a path = {
+  kind : pkind;
+  reached_global : bool;
+  head : 'a U.uref;
+  tail : 'a U.uref
+}
+
+module Bound =
+struct
+  type 'a t = 'a bound
+  let compare (x : 'a t) (y : 'a t) =
+    if U.equal (x.info, y.info) then x.index - y.index
+    else Pervasives.compare (U.deref x.info) (U.deref y.info)
+end
+
+module Path =
+struct
+  type 'a t = 'a path
+  let compare (x : 'a t) (y : 'a t) =
+    if U.equal (x.head, y.head) then
+      begin
+        if U.equal (x.tail, y.tail) then
+          begin
+            if x.reached_global = y.reached_global then
+              Pervasives.compare x.kind y.kind
+            else Pervasives.compare x.reached_global y.reached_global
+          end
+        else Pervasives.compare (U.deref x.tail) (U.deref y.tail)
+      end
+    else Pervasives.compare (U.deref x.head) (U.deref y.head)
+end
+
+module B = S.Make (Bound)
+
+module P = S.Make (Path)
+
+type 'a boundset = 'a B.t
+
+type 'a pathset = 'a P.t
+
+(** Constants, which identify elements in points-to sets *)
+(** jk : I'd prefer to make this an 'a constant and specialize it to varinfo
+    for use with the Cil frontend, but for now, this will do *)
+type constant = int * string * Cil.varinfo
+
+module Constant =
+struct
+  type t = constant
+  let compare (xid, _, _) (yid, _, _) = xid - yid
+end
+module C = Set.Make (Constant)
+
+(** Sets of constants. Set union is used when two labels containing
+  constant sets are unified *)
+type constantset = C.t
+
+type lblinfo = {
+  mutable l_name: string;
+  (** either empty or a singleton, the initial location for this label *)
+  loc : constantset;
+  (** Name of this label *)
+  l_stamp : int;
+  (** Unique integer for this label *)
+  mutable l_global : bool;
+  (** True if this location is globally accessible *)
+  mutable aliases: constantset;
+  (** Set of constants (tags) for checking aliases *)
+  mutable p_lbounds: lblinfo boundset;
+  (** Set of umatched (p) lower bounds *)
+  mutable n_lbounds: lblinfo boundset;
+  (** Set of unmatched (n) lower bounds *)
+  mutable p_ubounds: lblinfo boundset;
+  (** Set of umatched (p) upper bounds *)
+  mutable n_ubounds: lblinfo boundset;
+  (** Set of unmatched (n) upper bounds *)
+  mutable m_lbounds: lblinfo boundset;
+  (** Set of matched (m) lower bounds *)
+  mutable m_ubounds: lblinfo boundset;
+  (** Set of matched (m) upper bounds *)
+
+  mutable m_upath: lblinfo pathset;
+  mutable m_lpath: lblinfo pathset;
+  mutable n_upath: lblinfo pathset;
+  mutable n_lpath: lblinfo pathset;
+  mutable p_upath: lblinfo pathset;
+  mutable p_lpath: lblinfo pathset;
+
+  mutable l_seeded : bool;
+  mutable l_ret : bool;
+  mutable l_param : bool;
+}
+
+(** Constructor labels *)
+and label = lblinfo U.uref
+
+(** The type of lvalues. *)
+type lvalue = {
+  l: label;
+  contents: tau
+}
+
+and vinfo = {
+  v_stamp : int;
+  v_name : string;
+
+  mutable v_hole : (int,unit) H.t;
+  mutable v_global : bool;
+  mutable v_mlbs : tinfo boundset;
+  mutable v_mubs : tinfo boundset;
+  mutable v_plbs : tinfo boundset;
+  mutable v_pubs : tinfo boundset;
+  mutable v_nlbs : tinfo boundset;
+  mutable v_nubs : tinfo boundset
+}
+
+and rinfo = {
+  r_stamp : int;
+  rl : label;
+  points_to : tau;
+  mutable r_global: bool;
+}
+
+and finfo = {
+  f_stamp : int;
+  fl : label;
+  ret : tau;
+  mutable args : tau list;
+  mutable f_global : bool;
+}
+
+and pinfo = {
+  p_stamp : int;
+  ptr : tau;
+  lam : tau;
+  mutable p_global : bool;
+}
+
+and tinfo = Var of vinfo
+            | Ref of rinfo
+            | Fun of finfo
+            | Pair of pinfo
+
+and tau = tinfo U.uref
+
+type tconstraint = Unification of tau * tau
+                   | Leq of tau * (int * polarity) * tau
+
+
+(** Association lists, used for printing recursive types. The first element
+  is a type that has been visited. The second element is the string
+  representation of that type (so far). If the string option is set, then
+  this type occurs within itself, and is associated with the recursive var
+  name stored in the option. When walking a type, add it to an association
+  list.
+
+  Example : suppose we have the constraint 'a = ref('a). The type is unified
+  via cyclic unification, and would loop infinitely if we attempted to print
+  it. What we want to do is print the type u rv. ref(rv). This is accomplished
+  in the following manner:
+
+  -- ref('a) is visited. It is not in the association list, so it is added
+  and the string "ref(" is stored in the second element. We recurse to print
+  the first argument of the constructor.
+
+  -- In the recursive call, we see that 'a (or ref('a)) is already in the
+  association list, so the type is recursive. We check the string option,
+  which is None, meaning that this is the first recurrence of the type. We
+  create a new recursive variable, rv and set the string option to 'rv. Next,
+  we prepend u rv. to the string representation we have seen before, "ref(",
+  and return "rv" as the string representation of this type.
+
+  -- The string so far is "u rv.ref(". The recursive call returns, and we
+  complete the type by printing the result of the call, "rv", and ")"
+
+  In a type where the recursive variable appears twice, e.g. 'a = pair('a,'a),
+  the second time we hit 'a, the string option will be set, so we know to
+  reuse the same recursive variable name.
+*)
+type association = tau * string ref * string option ref
+
+module PathHash =
+struct
+  type t = int list
+  let equal t t' = t = t'
+  let hash t = Hashtbl.hash t
+end
+
+module PH = H.Make (PathHash)
+
+(***********************************************************************)
+(*                                                                     *)
+(* Global Variables                                                    *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Print the instantiations constraints. *)
+let print_constraints : bool ref = ref false
+
+(** If true, print all constraints (including induced) and show
+    additional debug output. *)
+let debug = ref false
+
+(** Just debug all the constraints (including induced) *)
+let debug_constraints = ref false
+
+(** Debug smart alias queries *)
+let debug_aliases = ref false
+
+let smart_aliases = ref false
+
+(** If true, make the flow step a no-op *)
+let no_flow = ref false
+
+(** If true, disable subtyping (unification at all levels) *)
+let no_sub = ref false
+
+(** If true, treat indexed edges as regular subtyping *)
+let analyze_mono = ref true
+
+(** A list of equality constraints. *)
+let eq_worklist : tconstraint Q.t = Q.create ()
+
+(** A list of leq constraints. *)
+let leq_worklist : tconstraint Q.t = Q.create ()
+
+let path_worklist : (lblinfo path) Q.t = Q.create ()
+
+let path_hash : (lblinfo path) PH.t = PH.create 32
+
+(** A count of the constraints introduced from the AST. Used for debugging. *)
+let toplev_count = ref 0
+
+(** A hashtable containing stamp pairs of labels that must be aliased. *)
+let cached_aliases : (int * int,unit) H.t = H.create 64
+
+(** A hashtable mapping pairs of tau's to their join node. *)
+let join_cache : (int * int, tau) H.t = H.create 64
+
+(***********************************************************************)
+(*                                                                     *)
+(* Utility Functions                                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+let find = U.deref
+
+let die s =
+  Printf.printf "*******\nAssertion failed: %s\n*******\n" s;
+  assert false
+
+let fresh_appsite : (unit -> int) =
+  let appsite_index = ref 0 in
+    fun () ->
+      incr appsite_index;
+      !appsite_index
+
+(** Generate a unique integer. *)
+let fresh_index : (unit -> int) =
+  let counter = ref 0 in
+    fun () ->
+      incr counter;
+      !counter
+
+let fresh_stamp : (unit -> int) =
+  let stamp = ref 0 in
+    fun () ->
+      incr stamp;
+      !stamp
+
+(** Return a unique integer representation of a tau *)
+let get_stamp (t : tau) : int =
+  match find t with
+      Var v -> v.v_stamp
+    | Ref r -> r.r_stamp
+    | Pair p -> p.p_stamp
+    | Fun f -> f.f_stamp
+
+(** Negate a polarity. *)
+let negate (p : polarity) : polarity =
+  match p with
+      Pos -> Neg
+    | Neg -> Pos
+    | Sub -> die "negate"
+
+(** Consistency checks for inferred types *)
+let pair_or_var (t : tau) =
+  match find t with
+      Pair _ -> true
+    | Var _ -> true
+    | _ -> false
+
+let ref_or_var (t : tau) =
+  match find t with
+      Ref _ -> true
+    | Var _ -> true
+    | _ -> false
+
+let fun_or_var (t : tau) =
+  match find t with
+      Fun _ -> true
+    | Var _ -> true
+    |  _ -> false
+
+
+
+(** Apply [f] structurally down [t]. Guaranteed to terminate, even if [t]
+    is recursive *)
+let iter_tau f t =
+  let visited : (int,tau) H.t = H.create 4 in
+  let rec iter_tau' t =
+    if H.mem visited (get_stamp t) then () else
+      begin
+        f t;
+        H.add visited (get_stamp t) t;
+        match U.deref t with
+            Pair p ->
+              iter_tau' p.ptr;
+              iter_tau' p.lam
+          | Fun f ->
+              List.iter iter_tau' (f.args);
+              iter_tau' f.ret
+          | Ref r -> iter_tau' r.points_to
+          | _ -> ()
+      end
+  in
+    iter_tau' t
+
+(* Extract a label's bounds according to [positive] and [upper]. *)
+let get_bounds (p :polarity ) (upper : bool) (l : label) : lblinfo boundset =
+  let li = find l in
+    match p with
+        Pos -> if upper then li.p_ubounds else li.p_lbounds
+      | Neg -> if upper then li.n_ubounds else li.n_lbounds
+      | Sub -> if upper then li.m_ubounds else li.m_lbounds
+
+let equal_tau (t : tau) (t' : tau) =
+  get_stamp t = get_stamp t'
+
+let get_label_stamp (l : label) : int =
+  (find l).l_stamp
+
+(** Return true if [t] is global (treated monomorphically) *)
+let get_global (t : tau) : bool =
+  match find t with
+      Var v -> v.v_global
+    | Ref r -> r.r_global
+    | Pair p -> p.p_global
+    | Fun f -> f.f_global
+
+let is_ret_label l = (find l).l_ret  || (find l).l_global (* todo - check *)
+
+let is_param_label l = (find l).l_param || (find l).l_global
+
+let is_global_label l = (find l).l_global
+
+let is_seeded_label l = (find l).l_seeded
+
+let set_global_label (l : label) (b : bool) : unit =
+  assert ((not (is_global_label l)) || b);
+  (U.deref l).l_global <- b
+
+(** Aliases for set_global *)
+let global_tau = get_global
+
+
+(** Get_global for lvalues *)
+let global_lvalue lv = get_global lv.contents
+
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Printing Functions                                                  *)
+(*                                                                     *)
+(***********************************************************************)
+
+let string_of_configuration (c, i, i') =
+  let context = match c with
+      Open -> "O"
+    | Closed -> "C"
+  in
+    Printf.sprintf "(%s,%d,%d)" context i i'
+
+let string_of_polarity p =
+  match p with
+      Pos -> "+"
+    | Neg -> "-"
+    | Sub -> "M"
+
+(** Convert a label to a string, short representation *)
+let string_of_label (l : label) : string =
+  "\"" ^ (find l).l_name ^ "\""
+
+(** Return true if the element [e] is present in the association list,
+    according to uref equality *)
+let rec assoc_list_mem (e : tau) (l : association list) =
+  match l with
+    | [] -> None
+    | (h, s, so) :: t ->
+        if U.equal (h,e) then Some (s, so) else assoc_list_mem e t
+
+(** Given a tau, create a unique recursive variable name. This should always
+    return the same name for a given tau *)
+let fresh_recvar_name (t : tau) : string =
+  match find t with
+      Pair p -> "rvp" ^ string_of_int p.p_stamp
+    | Ref r -> "rvr" ^ string_of_int r.r_stamp
+    | Fun f -> "rvf" ^ string_of_int f.f_stamp
+    | _ -> die "fresh_recvar_name"
+
+
+(** Return a string representation of a tau, using association lists. *)
+let string_of_tau (t : tau) : string =
+  let tau_map : association list ref = ref [] in
+  let rec string_of_tau' t =
+    match assoc_list_mem t !tau_map with
+        Some (s, so) -> (* recursive type. see if a var name has been set *)
+          begin
+            match !so with
+                None ->
+                  let rv = fresh_recvar_name t in
+                    s := "u " ^ rv ^ "." ^ !s;
+                    so := Some rv;
+                    rv
+              | Some rv -> rv
+          end
+      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
+          let s = ref ""
+          and so : string option ref = ref None in
+            tau_map := (t, s, so) :: !tau_map;
+            begin
+              match find t with
+                  Var v -> s := v.v_name;
+                | Pair p ->
+                    assert (ref_or_var p.ptr);
+                    assert (fun_or_var p.lam);
+                    s := "{";
+                    s := !s ^ string_of_tau' p.ptr;
+                    s := !s ^ ",";
+                    s := !s ^ string_of_tau' p.lam;
+                    s := !s ^"}"
+                | Ref r ->
+                    assert (pair_or_var r.points_to);
+                    s := "ref(|";
+                    s := !s ^ string_of_label r.rl;
+                    s := !s ^ "|,";
+                    s := !s ^ string_of_tau' r.points_to;
+                    s := !s ^ ")"
+                | Fun f ->
+                    assert (pair_or_var f.ret);
+                    let rec string_of_args = function
+                        h :: [] ->
+                          assert (pair_or_var h);
+                          s := !s ^ string_of_tau' h
+                      | h :: t ->
+                          assert (pair_or_var h);
+                          s := !s ^ string_of_tau' h ^ ",";
+                          string_of_args t
+                      | [] -> ()
+                    in
+                      s := "fun(|";
+                      s := !s ^ string_of_label f.fl;
+                      s := !s ^ "|,";
+                      s := !s ^ "<";
+                      if List.length f.args > 0 then string_of_args f.args
+                      else s := !s ^ "void";
+                      s := !s ^">,";
+                      s := !s ^ string_of_tau' f.ret;
+                      s := !s ^ ")"
+            end;
+            tau_map := List.tl !tau_map;
+            !s
+  in
+    string_of_tau' t
+
+(** Convert an lvalue to a string *)
+let rec string_of_lvalue (lv : lvalue) : string =
+  let contents = string_of_tau lv.contents
+  and l = string_of_label lv.l in
+    assert (pair_or_var lv.contents); (* do a consistency check *)
+    Printf.sprintf "[%s]^(%s)" contents l
+
+let print_path (p : lblinfo path) : unit =
+  let string_of_pkind = function
+      Positive -> "p"
+    | Negative -> "n"
+    | Match -> "m"
+    | Seed -> "s"
+  in
+    Printf.printf
+      "%s --%s--> %s (%d) : "
+      (string_of_label p.head)
+      (string_of_pkind p.kind)
+      (string_of_label p.tail)
+      (PathHash.hash p)
+
+(** Print a list of tau elements, comma separated *)
+let rec print_tau_list (l : tau list) : unit =
+  let rec print_t_strings = function
+      h :: [] -> print_endline h
+    | h :: t ->
+        print_string h;
+        print_string ", ";
+        print_t_strings t
+    | [] -> ()
+  in
+    print_t_strings (List.map string_of_tau l)
+
+let print_constraint (c : tconstraint) =
+  match c with
+      Unification (t, t') ->
+        let lhs = string_of_tau t
+        and rhs = string_of_tau t' in
+          Printf.printf "%s == %s\n" lhs rhs
+    | Leq (t, (i, p), t') ->
+        let lhs = string_of_tau t
+        and rhs = string_of_tau t' in
+          Printf.printf "%s <={%d,%s} %s\n" lhs i (string_of_polarity p) rhs
+
+(***********************************************************************)
+(*                                                                     *)
+(* Type Operations -- these do not create any constraints              *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Create an lvalue with label [lbl] and tau contents [t]. *)
+let make_lval (lbl, t : label * tau) : lvalue =
+  {l = lbl; contents = t}
+
+let make_label_int (is_global : bool) (name :string) (vio : Cil.varinfo option) : label =
+  let locc =
+    match vio with
+        Some vi -> C.add (fresh_index (), name, vi) C.empty
+      | None -> C.empty
+  in
+    U.uref {
+      l_name = name;
+      l_global = is_global;
+      l_stamp = fresh_stamp ();
+      loc = locc;
+      aliases = locc;
+      p_ubounds = B.empty;
+      p_lbounds = B.empty;
+      n_ubounds = B.empty;
+      n_lbounds = B.empty;
+      m_ubounds = B.empty;
+      m_lbounds = B.empty;
+      m_upath = P.empty;
+      m_lpath = P.empty;
+      n_upath = P.empty;
+      n_lpath = P.empty;
+      p_upath = P.empty;
+      p_lpath = P.empty;
+      l_seeded = false;
+      l_ret = false;
+      l_param = false
+    }
+
+(** Create a new label with name [name]. Also adds a fresh constant
+    with name [name] to this label's aliases set. *)
+let make_label (is_global : bool) (name : string) (vio : Cil.varinfo option) : label =
+  make_label_int is_global name vio
+
+(** Create a new label with an unspecified name and an empty alias set. *)
+let fresh_label (is_global : bool) : label =
+  let index = fresh_index () in
+    make_label_int is_global ("l_" ^ string_of_int index) None
+
+(** Create a fresh bound (edge in the constraint graph). *)
+let make_bound (i, a : int * label) : lblinfo bound =
+  {index = i; info = a}
+
+let make_tau_bound (i, a : int * tau) : tinfo bound =
+  {index = i; info = a}
+
+(** Create a fresh named variable with name '[name]. *)
+let make_var (b: bool) (name : string) : tau =
+  U.uref (Var {v_name = ("'" ^ name);
+               v_hole = H.create 8;
+               v_stamp = fresh_index ();
+               v_global = b;
+               v_mlbs = B.empty;
+               v_mubs = B.empty;
+               v_plbs = B.empty;
+               v_pubs = B.empty;
+               v_nlbs = B.empty;
+               v_nubs = B.empty})
+
+(** Create a fresh unnamed variable (name will be 'fv). *)
+let fresh_var (is_global : bool) : tau =
+  make_var is_global ("fv" ^ string_of_int (fresh_index ()))
+
+(** Create a fresh unnamed variable (name will be 'fi). *)
+let fresh_var_i (is_global : bool) : tau =
+  make_var is_global ("fi" ^ string_of_int (fresh_index()))
+
+(** Create a Fun constructor. *)
+let make_fun (lbl, a, r : label * (tau list) * tau) : tau =
+  U.uref (Fun {fl = lbl;
+               f_stamp = fresh_index ();
+               f_global = false;
+               args = a;
+               ret = r })
+
+(** Create a Ref constructor. *)
+let make_ref (lbl,pt : label * tau) : tau =
+  U.uref (Ref {rl = lbl;
+               r_stamp = fresh_index ();
+               r_global = false;
+               points_to = pt})
+
+(** Create a Pair constructor. *)
+let make_pair (p,f : tau * tau) : tau =
+  U.uref (Pair {ptr = p;
+                p_stamp = fresh_index ();
+                p_global = false;
+                lam = f})
+
+(** Copy the toplevel constructor of [t], putting fresh variables in each
+    argement of the constructor. *)
+let copy_toplevel (t : tau) : tau =
+  match find t with
+      Pair _ -> make_pair (fresh_var_i false, fresh_var_i false)
+    | Ref  _ -> make_ref (fresh_label false, fresh_var_i false)
+    | Fun  f ->
+        let fresh_fn = fun _ -> fresh_var_i false in
+          make_fun (fresh_label false,
+                    List.map fresh_fn f.args, fresh_var_i false)
+    | _ -> die "copy_toplevel"
+
+
+let has_same_structure (t : tau) (t' : tau) =
+  match find t, find t' with
+      Pair _, Pair _ -> true
+    | Ref _, Ref _ -> true
+    | Fun _, Fun _ -> true
+    | Var _, Var _ -> true
+    | _ -> false
+
+
+let pad_args (f, f' : finfo * finfo) : unit =
+  let padding = ref ((List.length f.args) - (List.length f'.args))
+  in
+    if !padding == 0 then ()
+    else
+      let to_pad =
+        if !padding > 0 then f' else (padding := -(!padding); f)
+      in
+        for i = 1 to !padding do
+          to_pad.args <- to_pad.args @ [fresh_var false]
+        done
+
+
+let pad_args2 (fi, tlr : finfo * tau list ref) : unit =
+  let padding = ref (List.length fi.args - List.length !tlr)
+  in
+    if !padding == 0 then ()
+    else
+      if !padding > 0 then
+        for i = 1 to !padding do
+          tlr := !tlr @ [fresh_var false]
+        done
+      else
+        begin
+          padding := -(!padding);
+          for i = 1 to !padding do
+            fi.args <- fi.args @ [fresh_var false]
+          done
+        end
+
+(***********************************************************************)
+(*                                                                     *)
+(* Constraint Generation/ Resolution                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+
+(** Make the type a global type *)
+let set_global (t : tau) (b : bool) : unit =
+  let set_global_down t =
+    match find t with
+        Var v -> v.v_global <- true
+      | Ref r -> set_global_label r.rl true
+      | Fun f -> set_global_label f.fl true
+      | _ -> ()
+  in
+    if !debug && b then Printf.printf "Set global: %s\n" (string_of_tau t);
+    assert ((not (get_global t)) || b);
+    if b then iter_tau set_global_down t;
+    match find t with
+        Var v -> v.v_global <- b
+      | Ref r -> r.r_global <- b
+      | Pair p -> p.p_global <- b
+      | Fun f -> f.f_global <- b
+
+
+let rec unify_int (t, t' : tau * tau) : unit =
+  if equal_tau t t' then ()
+  else
+    let ti, ti' = find t, find t' in
+      U.unify combine (t, t');
+      match ti, ti' with
+          Var v, Var v' ->
+            set_global t' (v.v_global || get_global t');
+            merge_vholes (v, v');
+            merge_vlbs (v, v');
+            merge_vubs (v, v')
+        | Var v, _ ->
+            set_global t' (v.v_global || get_global t');
+            trigger_vhole v t';
+            notify_vlbs t v;
+            notify_vubs t v
+        | _, Var v ->
+            set_global t (v.v_global || get_global t);
+            trigger_vhole v t;
+            notify_vlbs t' v;
+            notify_vubs t' v
+        | Ref r, Ref r' ->
+            set_global t (r.r_global || r'.r_global);
+            unify_ref (r, r')
+        | Fun f, Fun f' ->
+            set_global t (f.f_global || f'.f_global);
+            unify_fun (f, f')
+        | Pair p, Pair p' -> ()
+        | _ -> raise Inconsistent
+and notify_vlbs (t : tau) (vi : vinfo) : unit =
+  let notify p bounds =
+    List.iter
+      (fun b ->
+         add_constraint (Unification (b.info,copy_toplevel t));
+         add_constraint (Leq (b.info, (b.index, p), t)))
+      bounds
+  in
+    notify Sub (B.elements vi.v_mlbs);
+    notify Pos (B.elements vi.v_plbs);
+    notify Neg (B.elements vi.v_nlbs)
+and notify_vubs (t : tau) (vi : vinfo) : unit =
+  let notify p bounds =
+    List.iter
+      (fun b ->
+         add_constraint (Unification (b.info,copy_toplevel t));
+         add_constraint (Leq (t, (b.index, p), b.info)))
+      bounds
+  in
+    notify Sub (B.elements vi.v_mubs);
+    notify Pos (B.elements vi.v_pubs);
+    notify Neg (B.elements vi.v_nubs)
+and unify_ref (ri,ri' : rinfo * rinfo) : unit =
+  add_constraint (Unification (ri.points_to, ri'.points_to))
+and unify_fun (fi, fi' : finfo * finfo) : unit =
+  let rec union_args  = function
+      _, [] -> false
+    | [], _ -> true
+    | h :: t, h' :: t' ->
+        add_constraint (Unification (h, h'));
+        union_args(t, t')
+  in
+    unify_label(fi.fl, fi'.fl);
+    add_constraint (Unification (fi.ret, fi'.ret));
+    if union_args (fi.args, fi'.args) then fi.args <- fi'.args;
+and unify_label (l, l' : label * label) : unit =
+  let pick_name (li, li' : lblinfo * lblinfo) =
+    if String.length li.l_name > 1 && String.sub (li.l_name) 0 2 = "l_" then
+      li.l_name <- li'.l_name
+    else ()
+  in
+  let combine_label (li, li' : lblinfo *lblinfo) : lblinfo =
+    let rm_self b = not (li.l_stamp = get_label_stamp b.info)
+    in
+      pick_name (li, li');
+      li.l_global <- li.l_global || li'.l_global;
+      li.aliases <- C.union li.aliases li'.aliases;
+      li.p_ubounds <- B.union li.p_ubounds li'.p_ubounds;
+      li.p_lbounds <- B.union li.p_lbounds li'.p_lbounds;
+      li.n_ubounds <- B.union li.n_ubounds li'.n_ubounds;
+      li.n_lbounds <- B.union li.n_lbounds li'.n_lbounds;
+      li.m_ubounds <- B.union li.m_ubounds (B.filter rm_self li'.m_ubounds);
+      li.m_lbounds <- B.union li.m_lbounds (B.filter rm_self li'.m_lbounds);
+      li.m_upath <- P.union li.m_upath li'.m_upath;
+      li.m_lpath<- P.union li.m_lpath li'.m_lpath;
+      li.n_upath <- P.union li.n_upath li'.n_upath;
+      li.n_lpath <- P.union li.n_lpath li'.n_lpath;
+      li.p_upath <- P.union li.p_upath li'.p_upath;
+      li.p_lpath <- P.union li.p_lpath li'.p_lpath;
+      li.l_seeded <- li.l_seeded || li'.l_seeded;
+      li.l_ret <- li.l_ret || li'.l_ret;
+      li.l_param <- li.l_param || li'.l_param;
+      li
+  in
+    if !debug_constraints then
+       Printf.printf "%s == %s\n" (string_of_label l) (string_of_label l');
+    U.unify combine_label (l, l')
+and merge_vholes (vi, vi' : vinfo * vinfo) : unit =
+  H.iter
+    (fun i -> fun _ -> H.replace vi'.v_hole i ())
+    vi.v_hole
+and merge_vlbs (vi, vi' : vinfo * vinfo) : unit =
+  vi'.v_mlbs <- B.union vi.v_mlbs vi'.v_mlbs;
+  vi'.v_plbs <- B.union vi.v_plbs vi'.v_plbs;
+  vi'.v_nlbs <- B.union vi.v_nlbs vi'.v_nlbs
+and merge_vubs (vi, vi' : vinfo * vinfo) : unit =
+  vi'.v_mubs <- B.union vi.v_mubs vi'.v_mubs;
+  vi'.v_pubs <- B.union vi.v_pubs vi'.v_pubs;
+  vi'.v_nubs <- B.union vi.v_nubs vi'.v_nubs
+and trigger_vhole (vi : vinfo) (t : tau) =
+  let add_self_loops (t : tau) : unit =
+    match find t with
+        Var v ->
+          H.iter
+            (fun i -> fun _ -> H.replace v.v_hole i ())
+            vi.v_hole
+      | Ref r ->
+          H.iter
+            (fun i -> fun _ ->
+               leq_label (r.rl, (i, Pos), r.rl);
+               leq_label (r.rl, (i, Neg), r.rl))
+            vi.v_hole
+      | Fun f ->
+          H.iter
+            (fun i -> fun _ ->
+               leq_label (f.fl, (i, Pos), f.fl);
+               leq_label (f.fl, (i, Neg), f.fl))
+            vi.v_hole
+      | _ -> ()
+  in
+    iter_tau add_self_loops t
+(** Pick the representative info for two tinfo's. This function prefers the
+  first argument when both arguments are the same structure, but when
+  one type is a structure and the other is a var, it picks the structure.
+  All other actions (e.g., updating the info) is done in unify_int *)
+and combine (ti, ti' : tinfo * tinfo) : tinfo =
+  match ti, ti' with
+      Var _, _ -> ti'
+    | _, _ -> ti
+and leq_int (t, (i, p), t') : unit =
+  if equal_tau t t' then ()
+  else
+    let ti, ti' = find t, find t' in
+      match ti, ti' with
+          Var v, Var v' ->
+            begin
+              match p with
+                  Pos ->
+                    v.v_pubs <- B.add (make_tau_bound (i, t')) v.v_pubs;
+                    v'.v_plbs <- B.add (make_tau_bound (i, t)) v'.v_plbs
+                | Neg ->
+                    v.v_nubs <- B.add (make_tau_bound (i, t')) v.v_nubs;
+                    v'.v_nlbs <- B.add (make_tau_bound (i, t)) v'.v_nlbs
+                | Sub ->
+                    v.v_mubs <- B.add (make_tau_bound (i, t')) v.v_mubs;
+                    v'.v_mlbs <- B.add (make_tau_bound (i, t)) v'.v_mlbs
+            end
+        | Var v, _ ->
+            add_constraint (Unification (t, copy_toplevel t'));
+            add_constraint (Leq (t, (i, p), t'))
+        | _, Var v ->
+            add_constraint (Unification (t', copy_toplevel t));
+            add_constraint (Leq (t, (i, p), t'))
+        | Ref r, Ref r' -> leq_ref (r, (i, p), r')
+        | Fun f, Fun f' -> add_constraint (Unification (t, t'))
+        | Pair pr, Pair pr' ->
+            add_constraint (Leq (pr.ptr, (i, p), pr'.ptr));
+            add_constraint (Leq (pr.lam, (i, p), pr'.lam))
+        | _ -> raise Inconsistent
+and leq_ref (ri, (i, p), ri') : unit =
+  let add_self_loops (t : tau) : unit =
+    match find t with
+        Var v -> H.replace v.v_hole i ()
+      | Ref r ->
+          leq_label (r.rl, (i, Pos), r.rl);
+          leq_label (r.rl, (i, Neg), r.rl)
+      | Fun f ->
+          leq_label (f.fl, (i, Pos), f.fl);
+          leq_label (f.fl, (i, Neg), f.fl)
+      | _ -> ()
+  in
+    iter_tau add_self_loops ri.points_to;
+    add_constraint (Unification (ri.points_to, ri'.points_to));
+    leq_label(ri.rl, (i, p), ri'.rl)
+and leq_label (l,(i, p), l') : unit =
+  if !debug_constraints then
+    Printf.printf
+      "%s <={%d,%s} %s\n"
+      (string_of_label l) i (string_of_polarity p) (string_of_label l');
+  let li, li' = find l, find l' in
+    match p with
+        Pos ->
+          li.l_ret <- true;
+          li.p_ubounds <- B.add (make_bound (i, l')) li.p_ubounds;
+          li'.p_lbounds <- B.add (make_bound (i, l)) li'.p_lbounds
+      | Neg ->
+          li'.l_param <- true;
+          li.n_ubounds <- B.add (make_bound (i, l')) li.n_ubounds;
+          li'.n_lbounds <- B.add (make_bound (i, l)) li'.n_lbounds
+      | Sub ->
+          if U.equal (l, l') then ()
+          else
+            begin
+              li.m_ubounds <- B.add (make_bound(0, l')) li.m_ubounds;
+              li'.m_lbounds <- B.add (make_bound(0, l)) li'.m_lbounds
+            end
+and add_constraint_int (c : tconstraint) (toplev : bool) =
+  if !debug_constraints && toplev then
+    begin
+      Printf.printf "%d:>" !toplev_count;
+      print_constraint c;
+      incr toplev_count
+    end
+  else
+    if !debug_constraints then print_constraint c else ();
+  begin
+    match c with
+        Unification _ -> Q.add c eq_worklist
+      | Leq _ -> Q.add c leq_worklist
+  end;
+  solve_constraints ()
+and add_constraint (c : tconstraint) =
+  add_constraint_int c false
+and add_toplev_constraint (c : tconstraint) =
+  if !print_constraints && not !debug_constraints then
+    begin
+      Printf.printf "%d:>" !toplev_count;
+      incr toplev_count;
+      print_constraint c
+    end
+  else ();
+  add_constraint_int c true
+and fetch_constraint () : tconstraint option =
+  try Some (Q.take eq_worklist)
+  with Q.Empty -> (try Some (Q.take leq_worklist)
+                   with Q.Empty -> None)
+(** The main solver loop. *)
+and solve_constraints () : unit =
+  match fetch_constraint () with
+      Some c ->
+        begin
+          match c with
+              Unification (t, t') -> unify_int (t, t')
+            | Leq (t, (i, p), t') ->
+                if !no_sub then unify_int (t, t')
+                else
+                  if !analyze_mono then leq_int (t, (0, Sub), t')
+                  else leq_int (t, (i, p), t')
+        end;
+        solve_constraints ()
+    | None -> ()
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Interface Functions                                                 *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Return the contents of the lvalue. *)
+let rvalue (lv : lvalue) : tau =
+  lv.contents
+
+(** Dereference the rvalue. If it does not have enough structure to support
+  the operation, then the correct structure is added via new unification
+  constraints. *)
+let rec deref (t : tau) : lvalue =
+  match U.deref t with
+      Pair p ->
+        begin
+          match U.deref p.ptr with
+              Var _ ->
+                let is_global = global_tau p.ptr in
+                let points_to = fresh_var is_global in
+                let l = fresh_label is_global in
+                let r = make_ref (l, points_to)
+                in
+                  add_toplev_constraint (Unification (p.ptr, r));
+                  make_lval (l, points_to)
+            | Ref r -> make_lval (r.rl, r.points_to)
+            | _ -> raise WellFormed
+        end
+    | Var v ->
+        let is_global = global_tau t in
+          add_toplev_constraint
+            (Unification (t, make_pair (fresh_var is_global,
+                                        fresh_var is_global)));
+          deref t
+    | _ -> raise WellFormed
+
+(** Form the union of [t] and [t'], if it doesn't exist already. *)
+let join (t : tau) (t' : tau) : tau =
+  try H.find join_cache (get_stamp t, get_stamp t')
+  with Not_found ->
+    let t'' = fresh_var false in
+      add_toplev_constraint (Leq (t, (0, Sub), t''));
+      add_toplev_constraint (Leq (t', (0, Sub), t''));
+      H.add join_cache (get_stamp t, get_stamp t') t'';
+      t''
+
+(** Form the union of a list [tl], expected to be the initializers of some
+  structure or array type. *)
+let join_inits (tl : tau list) : tau =
+  let t' = fresh_var false in
+    List.iter
+      (fun t -> add_toplev_constraint (Leq (t, (0, Sub), t')))
+      tl;
+    t'
+
+(** Take the address of an lvalue. Does not add constraints. *)
+let address (lv  : lvalue) : tau =
+  make_pair (make_ref (lv.l, lv.contents), fresh_var false)
+
+(** For this version of golf, instantiation is handled at [apply] *)
+let instantiate (lv : lvalue) (i : int) : lvalue =
+  lv
+
+(** Constraint generated from assigning [t] to [lv]. *)
+let assign (lv : lvalue) (t : tau) : unit =
+  add_toplev_constraint (Leq (t, (0, Sub), lv.contents))
+
+let assign_ret (i : int) (lv : lvalue) (t : tau) : unit =
+  add_toplev_constraint (Leq (t, (i, Pos), lv.contents))
+
+(** Project out the first (ref) component or a pair. If the argument [t] has
+  no discovered structure, raise NoContents. *)
+let proj_ref (t : tau) : tau =
+  match U.deref t with
+      Pair p -> p.ptr
+    | Var v -> raise NoContents
+    | _ ->  raise WellFormed
+
+(* Project out the second (fun) component of a pair. If the argument [t] has
+   no discovered structure, create it on the fly by adding constraints. *)
+let proj_fun (t : tau) : tau =
+  match U.deref t with
+      Pair p -> p.lam
+    | Var v ->
+        let p, f = fresh_var false, fresh_var false in
+          add_toplev_constraint (Unification (t, make_pair(p, f)));
+          f
+    | _ -> raise WellFormed
+
+let get_args (t : tau) : tau list =
+  match U.deref t with
+      Fun f -> f.args
+    | _ -> raise WellFormed
+
+let get_finfo (t : tau) : finfo =
+  match U.deref t with
+      Fun f -> f
+    | _ -> raise WellFormed
+
+(** Function type [t] is applied to the arguments [actuals]. Unifies the
+  actuals with the formals of [t]. If no functions have been discovered for
+  [t] yet, create a fresh one and unify it with t. The result is the return
+  value of the function plus the index of this application site. *)
+let apply (t : tau) (al : tau list) : (tau * int) =
+  let i = fresh_appsite () in
+  let f = proj_fun t in
+  let actuals = ref al in
+  let fi,ret =
+    match U.deref f with
+        Fun fi -> fi, fi.ret
+      | Var v ->
+          let new_l, new_ret, new_args =
+            fresh_label false, fresh_var false,
+            List.map (function _ -> fresh_var false) !actuals
+          in
+          let new_fun = make_fun (new_l, new_args, new_ret) in
+            add_toplev_constraint (Unification (new_fun, f));
+            (get_finfo new_fun, new_ret)
+      | _ -> raise WellFormed
+  in
+    pad_args2 (fi, actuals);
+    List.iter2
+      (fun actual -> fun formal ->
+         add_toplev_constraint (Leq (actual,(i, Neg), formal)))
+      !actuals fi.args;
+    (ret, i)
+
+(** Create a new function type with name [name], list of formal arguments
+  [formals], and return value [ret]. Adds no constraints. *)
+let make_function (name : string) (formals : lvalue list) (ret : tau) : tau =
+  let f = make_fun (make_label false name None,
+                    List.map (fun x -> rvalue x) formals,
+                    ret)
+  in
+    make_pair (fresh_var false, f)
+
+(** Create an lvalue. If [is_global] is true, the lvalue will be treated
+    monomorphically. *)
+let make_lvalue (is_global : bool) (name : string) (vio : Cil.varinfo option) : lvalue =
+  if !debug && is_global then
+    Printf.printf "Making global lvalue : %s\n" name
+  else ();
+  make_lval (make_label is_global name vio, make_var is_global name)
+
+(** Create a fresh non-global named variable. *)
+let make_fresh (name : string) : tau =
+  make_var false name
+
+(** The default type for constants. *)
+let bottom () : tau =
+  make_var false "bottom"
+
+(** Unify the result of a function with its return value. *)
+let return (t : tau) (t' : tau) =
+  add_toplev_constraint (Leq (t', (0, Sub), t))
+
+(***********************************************************************)
+(*                                                                     *)
+(* Query/Extract Solutions                                             *)
+(*                                                                     *)
+(***********************************************************************)
+
+let make_summary = leq_label
+
+let path_signature k l l' b : int list =
+  let ksig =
+    match k with
+        Positive -> 1
+      | Negative -> 2
+      | _ -> 3
+  in
+    [ksig;
+     get_label_stamp l;
+     get_label_stamp l';
+     if b then 1 else 0]
+
+let make_path (k, l, l', b) =
+  let psig = path_signature k l l' b in
+    if PH.mem path_hash psig then ()
+    else
+      let new_path = {kind = k; head = l; tail = l'; reached_global = b}
+      and li, li' = find l, find l' in
+        PH.add path_hash psig new_path;
+        Q.add new_path path_worklist;
+        begin
+          match k with
+              Positive ->
+                li.p_upath <- P.add new_path li.p_upath;
+                li'.p_lpath <- P.add new_path li'.p_lpath
+            | Negative ->
+                li.n_upath <- P.add new_path li.n_upath;
+                li'.n_lpath <- P.add new_path li'.n_lpath
+            | _ ->
+                li.m_upath <- P.add new_path li.m_upath;
+                li'.m_lpath <- P.add new_path li'.m_lpath
+        end;
+        if !debug then
+          begin
+            print_string "Discovered path : ";
+            print_path new_path;
+            print_newline ()
+          end
+
+let backwards_tabulate (l : label) : unit =
+  let rec loop () =
+    let rule1 p =
+      if !debug then print_endline "rule1";
+      B.iter
+        (fun lb ->
+           make_path (Match, lb.info, p.tail,
+                      p.reached_global || is_global_label p.head))
+        (find p.head).m_lbounds
+    and rule2 p =
+      if !debug then print_endline "rule2";
+      B.iter
+        (fun lb ->
+           make_path (Negative, lb.info, p.tail,
+                      p.reached_global || is_global_label p.head))
+        (find p.head).n_lbounds
+    and rule2m p =
+      if !debug then print_endline "rule2m";
+      B.iter
+        (fun lb ->
+           make_path (Match, lb.info, p.tail,
+                      p.reached_global || is_global_label p.head))
+        (find p.head).n_lbounds
+    and rule3 p =
+      if !debug then print_endline "rule3";
+      B.iter
+        (fun lb ->
+           make_path (Positive, lb.info, p.tail,
+                      p.reached_global || is_global_label p.head))
+        (find p.head).p_lbounds
+    and rule4 p =
+      if !debug then print_endline "rule4";
+      B.iter
+        (fun lb ->
+           make_path(Negative, lb.info, p.tail,
+                     p.reached_global || is_global_label p.head))
+        (find p.head).m_lbounds
+    and rule5 p =
+      if !debug then print_endline "rule5";
+      B.iter
+        (fun lb ->
+           make_path (Positive, lb.info, p.tail,
+                      p.reached_global || is_global_label p.head))
+        (find p.head).m_lbounds
+    and rule6 p =
+      if !debug then print_endline "rule6";
+      B.iter
+        (fun lb ->
+           if is_seeded_label lb.info then ()
+           else
+             begin
+               (find lb.info).l_seeded <- true; (* set seeded *)
+               make_path (Seed, lb.info, lb.info,
+                          is_global_label lb.info)
+             end)
+        (find p.head).p_lbounds
+    and rule7 p =
+      if !debug then print_endline "rule7";
+      if not (is_ret_label p.tail && is_param_label p.head) then ()
+      else
+        B.iter
+          (fun lb ->
+             B.iter
+               (fun ub ->
+                  if lb.index = ub.index then
+                    begin
+                      if !debug then
+                        Printf.printf "New summary : %s %s\n"
+                          (string_of_label lb.info)
+                          (string_of_label ub.info);
+                      make_summary (lb.info, (0, Sub), ub.info);
+                      (* rules 1, 4, and 5 *)
+                      P.iter
+                        (fun ubp -> (* rule 1 *)
+                           make_path (Match, lb.info, ubp.tail,
+                                      ubp.reached_global))
+                        (find ub.info).m_upath;
+                      P.iter
+                        (fun ubp -> (* rule 4 *)
+                           make_path (Negative, lb.info, ubp.tail,
+                                      ubp.reached_global))
+                        (find ub.info).n_upath;
+                      P.iter
+                        (fun ubp -> (* rule 5 *)
+                           make_path (Positive, lb.info, ubp.tail,
+                                      ubp.reached_global))
+                        (find ub.info).p_upath
+                    end)
+               (find p.tail).p_ubounds)
+          (find p.head).n_lbounds
+    in
+    let matched_backward_rules p =
+      rule1 p;
+      if p.reached_global then rule2m p else rule2 p;
+      rule3 p;
+      rule6 p;
+      rule7 p
+    and negative_backward_rules p =
+      rule2 p;
+      rule3 p;
+      rule4 p;
+      rule6 p;
+      rule7 p
+    and positive_backward_rules p =
+      rule3 p;
+      rule5 p;
+      rule6 p;
+      rule7 p
+    in (* loop *)
+      if Q.is_empty path_worklist then ()
+      else
+        let p = Q.take path_worklist in
+          if !debug then
+            begin
+              print_string "Processing path: ";
+              print_path p;
+              print_newline ()
+            end;
+          begin
+            match p.kind with
+                Positive ->
+                  if is_global_label p.tail then matched_backward_rules p
+                  else positive_backward_rules p
+              | Negative -> negative_backward_rules p
+              | _ -> matched_backward_rules p
+          end;
+          loop ()
+  in (* backwards_tabulate *)
+    if !debug then
+      begin
+        Printf.printf "Tabulating for %s..." (string_of_label l);
+        if is_global_label l then print_string "(global)";
+        print_newline ()
+      end;
+    make_path (Seed, l, l, is_global_label l);
+    loop ()
+
+let collect_ptsets (l : label) : constantset = (* todo -- cache aliases *)
+  let li = find l
+  and collect init s =
+    P.fold (fun x a -> C.union a (find x.head).aliases) s init
+  in
+    backwards_tabulate l;
+    collect (collect (collect li.aliases li.m_lpath) li.n_lpath) li.p_lpath
+
+let extract_ptlabel (lv : lvalue) : label option =
+  try
+    match find (proj_ref lv.contents) with
+        Var v -> None
+      | Ref r ->  Some r.rl;
+      | _ -> raise WellFormed
+  with NoContents -> None
+
+let points_to_aux (t : tau) : constant list =
+  try
+    match find (proj_ref t) with
+        Var v -> []
+      | Ref r -> C.elements (collect_ptsets r.rl)
+      | _ -> raise WellFormed
+  with NoContents -> []
+
+let points_to_names (lv : lvalue) : string list =
+  List.map (fun (_, str, _) -> str) (points_to_aux lv.contents)
+
+let points_to (lv : lvalue) : Cil.varinfo list =
+  let rec get_vinfos l : Cil.varinfo list = match l with
+    | (_, _, h) :: t -> h :: get_vinfos t
+    | [] -> []
+  in
+    get_vinfos (points_to_aux lv.contents)
+
+let epoints_to (t : tau) : Cil.varinfo list =
+  let rec get_vinfos l : Cil.varinfo list = match l with
+    | (_, _, h) :: t -> h :: get_vinfos t
+    | [] -> []
+  in
+    get_vinfos (points_to_aux t)
+
+let smart_alias_query (l : label) (l' : label) : bool =
+  (* Set of dead configurations *)
+  let dead_configs : config_map = CH.create 16 in
+    (* the set of discovered configurations *)
+  let discovered : config_map = CH.create 16 in
+  let rec filter_match (i : int) =
+    B.filter (fun (b : lblinfo bound) -> i = b.index)
+  in
+  let rec simulate c l l' =
+    let config = (c, get_label_stamp l, get_label_stamp l') in
+      if U.equal (l, l') then
+        begin
+          if !debug then
+            Printf.printf
+              "%s and %s are aliased\n"
+              (string_of_label l)
+              (string_of_label l');
+          raise APFound
+        end
+      else if CH.mem discovered config then ()
+      else
+        begin
+          if !debug_aliases then
+            Printf.printf
+              "Exploring configuration %s\n"
+              (string_of_configuration config);
+          CH.add discovered config ();
+          B.iter
+            (fun lb -> simulate c lb.info l')
+            (get_bounds Sub false l); (* epsilon closure of l *)
+          B.iter
+            (fun lb -> simulate c l lb.info)
+            (get_bounds Sub false l'); (* epsilon closure of l' *)
+          B.iter
+            (fun lb ->
+               let matching =
+                 filter_match lb.index (get_bounds Pos false l')
+               in
+                 B.iter
+                   (fun b -> simulate Closed lb.info b.info)
+                   matching;
+                 if is_global_label l' then (* positive self-loops on l' *)
+                   simulate Closed lb.info l')
+            (get_bounds Pos false l); (* positive transitions on l *)
+          if is_global_label l then
+            B.iter
+              (fun lb -> simulate Closed l lb.info)
+              (get_bounds Pos false l'); (* positive self-loops on l *)
+          begin
+            match c with  (* negative transitions on l, only if Open *)
+                Open ->
+                  B.iter
+                    (fun lb ->
+                       let matching =
+                         filter_match lb.index (get_bounds Neg false l')
+                       in
+                         B.iter
+                           (fun b -> simulate Open lb.info b.info)
+                           matching ;
+                         if is_global_label l' then (* neg self-loops on l' *)
+                           simulate Open lb.info l')
+                    (get_bounds Neg false l);
+                  if is_global_label l then
+                    B.iter
+                      (fun lb -> simulate Open l lb.info)
+                      (get_bounds Neg false l') (* negative self-loops on l *)
+              | _ -> ()
+          end;
+          (* if we got this far, then the configuration was not used *)
+          CH.add dead_configs config ();
+        end
+  in
+    try
+      begin
+        if H.mem cached_aliases (get_label_stamp l, get_label_stamp l') then
+          true
+        else
+          begin
+            simulate Open l l';
+            if !debug then
+              Printf.printf
+                "%s and %s are NOT aliased\n"
+                (string_of_label l)
+                (string_of_label l');
+            false
+          end
+      end
+    with APFound ->
+      CH.iter
+        (fun config -> fun _ ->
+           if not (CH.mem dead_configs config) then
+             H.add
+               cached_aliases
+               (get_label_stamp l, get_label_stamp l')
+               ())
+        discovered;
+      true
+
+(** todo : uses naive alias query for now *)
+let may_alias (t1 : tau) (t2 : tau) : bool =
+  try
+    let l1 =
+      match find (proj_ref t1) with
+          Ref r -> r.rl
+        | Var v -> raise NoContents
+        | _ -> raise WellFormed
+    and l2 =
+      match find (proj_ref t2) with
+          Ref r -> r.rl
+        | Var v -> raise NoContents
+        | _ -> raise WellFormed
+    in
+      not (C.is_empty (C.inter (collect_ptsets l1) (collect_ptsets l2)))
+  with NoContents -> false
+
+let alias_query (b : bool) (lvl : lvalue list) : int * int =
+  let naive_count = ref 0 in
+  let smart_count = ref 0 in
+  let lbls = List.map extract_ptlabel lvl in (* label option list *)
+  let ptsets =
+    List.map
+      (function
+           Some l -> collect_ptsets l
+         | None -> C.empty)
+      lbls in
+  let record_alias s lo s' lo' =
+    match lo, lo' with
+        Some l, Some l' ->
+          if !debug_aliases then
+            Printf.printf
+              "Checking whether %s and %s are aliased...\n"
+              (string_of_label l)
+              (string_of_label l');
+          if C.is_empty (C.inter s s') then ()
+          else
+            begin
+              incr naive_count;
+              if !smart_aliases && smart_alias_query l l' then
+                incr smart_count
+            end
+      | _ -> ()
+  in
+  let rec check_alias sets labels =
+    match sets,labels with
+        s :: st, l :: lt ->
+          List.iter2 (record_alias s l) ptsets lbls;
+          check_alias st lt
+      | [], [] -> ()
+      | _ -> die "check_alias"
+  in
+    check_alias ptsets lbls;
+    (!naive_count, !smart_count)
+
+let alias_frequency (lvl : (lvalue * bool) list) : int * int =
+  let extract_lbl (lv, b : lvalue * bool) = (lv.l, b) in
+  let naive_count = ref 0 in
+  let smart_count = ref 0 in
+  let lbls = List.map extract_lbl lvl in
+  let ptsets =
+    List.map
+      (fun (lbl, b) ->
+         if b then (find lbl).loc (* symbol access *)
+         else collect_ptsets lbl)
+      lbls in
+  let record_alias s (l, b) s' (l', b') =
+    if !debug_aliases then
+      Printf.printf
+        "Checking whether %s and %s are aliased...\n"
+        (string_of_label l)
+        (string_of_label l');
+    if C.is_empty (C.inter s s') then ()
+    else
+      begin
+        if !debug_aliases then
+          Printf.printf
+            "%s and %s are aliased naively...\n"
+            (string_of_label l)
+            (string_of_label l');
+        incr naive_count;
+        if !smart_aliases then
+          if b || b' || smart_alias_query l l' then incr smart_count
+          else
+            Printf.printf
+              "%s and %s are not aliased by smart queries...\n"
+              (string_of_label l)
+              (string_of_label l');
+      end
+  in
+  let rec check_alias sets labels =
+    match sets, labels with
+        s :: st, l :: lt ->
+          List.iter2 (record_alias s l) ptsets lbls;
+          check_alias st lt
+      | [], [] -> ()
+      | _ -> die "check_alias"
+  in
+    check_alias ptsets lbls;
+    (!naive_count, !smart_count)
+
+
+(** an interface for extracting abstract locations from this analysis *)
+
+type absloc = label
+
+let absloc_of_lvalue (l : lvalue) : absloc = l.l
+let absloc_eq (a1, a2) = smart_alias_query a1 a2
+let absloc_print_name = ref true
+let d_absloc () (p : absloc) =
+  let a = find p in
+    if !absloc_print_name then Pretty.dprintf "%s" a.l_name
+    else Pretty.dprintf "%d" a.l_stamp
+
+let phonyAddrOf (lv : lvalue) : lvalue =
+  make_lval (fresh_label true, address lv)
+
+(* transitive closure of points to, starting from l *)
+let rec tauPointsTo (l : tau) : absloc list =
+  match find l with
+      Var _ -> []
+    | Ref r -> r.rl :: tauPointsTo r.points_to
+    | _ -> []
+
+let rec absloc_points_to (l : lvalue) : absloc list =
+  tauPointsTo l.contents
+
+
+(** The following definitions are only introduced for the
+    compatability with Olf. *)
+
+exception UnknownLocation
+
+let finished_constraints () = ()
+let apply_undefined (_ : tau list) = (fresh_var true, 0)
+let assign_undefined (_ : lvalue) = ()
+
+let absloc_epoints_to = tauPointsTo
diff --git a/cil/src/ext/pta/golf.mli b/cil/src/ext/pta/golf.mli
new file mode 100644
index 000000000..569855c59
--- /dev/null
+++ b/cil/src/ext/pta/golf.mli
@@ -0,0 +1,83 @@
+(*
+ *
+ * Copyright (c) 2001-2002,
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+type lvalue
+type tau
+type absloc
+
+(* only for compatability with Olf *)
+exception UnknownLocation
+
+val debug : bool ref
+val debug_constraints : bool ref
+val debug_aliases : bool ref
+val smart_aliases : bool ref
+val finished_constraints : unit -> unit (* only for compatability with Olf *)
+val print_constraints : bool ref
+val no_flow : bool ref
+val no_sub : bool ref
+val analyze_mono : bool ref
+val solve_constraints : unit -> unit
+val rvalue : lvalue -> tau
+val deref : tau -> lvalue
+val join : tau -> tau -> tau
+val join_inits : tau list -> tau
+val address : lvalue -> tau
+val instantiate : lvalue -> int -> lvalue
+val assign : lvalue -> tau -> unit
+val assign_ret : int -> lvalue -> tau -> unit
+val apply : tau -> tau list -> (tau * int)
+val apply_undefined : tau list -> (tau * int) (* only for compatability with Olf *)
+val assign_undefined : lvalue -> unit (* only for compatability with Olf *)
+val make_function :  string -> lvalue list -> tau -> tau
+val make_lvalue : bool -> string -> (Cil.varinfo option) -> lvalue
+val bottom : unit -> tau
+val return : tau -> tau -> unit
+val make_fresh : string -> tau
+val points_to_names : lvalue -> string list
+val points_to : lvalue -> Cil.varinfo list
+val epoints_to : tau -> Cil.varinfo list
+val string_of_lvalue : lvalue -> string
+val global_lvalue : lvalue -> bool
+val alias_query : bool -> lvalue list -> int * int
+val alias_frequency : (lvalue * bool) list -> int * int
+
+val may_alias : tau -> tau -> bool
+
+val absloc_points_to : lvalue -> absloc list
+val absloc_epoints_to : tau -> absloc list
+val absloc_of_lvalue : lvalue -> absloc
+val absloc_eq : (absloc * absloc) -> bool
+val d_absloc : unit -> absloc -> Pretty.doc
+val phonyAddrOf : lvalue -> lvalue
diff --git a/cil/src/ext/pta/olf.ml b/cil/src/ext/pta/olf.ml
new file mode 100644
index 000000000..0d7700287
--- /dev/null
+++ b/cil/src/ext/pta/olf.ml
@@ -0,0 +1,1108 @@
+(*
+ *
+ * Copyright (c) 2001-2002,
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(***********************************************************************)
+(*                                                                     *)
+(* Exceptions                                                          *)
+(*                                                                     *)
+(***********************************************************************)
+
+exception Inconsistent (* raised if constraint system is inconsistent *)
+exception WellFormed   (* raised if types are not well-formed *)
+exception NoContents
+exception APFound      (* raised if an alias pair is found, a control
+                          flow exception *)
+exception ReachedTop   (* raised if top (from an undefined function)
+                          flows to a c_absloc during the flow step *)
+exception UnknownLocation
+
+let solve_constraints () = () (* only for compatability with Golf *)
+
+open Cil
+
+module U = Uref
+module S = Setp
+module H = Hashtbl
+module Q = Queue
+
+(** Generic bounds *)
+type 'a bound = {info : 'a U.uref}
+
+module Bound =
+struct
+  type 'a t = 'a bound
+  let compare (x : 'a t) (y : 'a t) =
+    Pervasives.compare (U.deref x.info) (U.deref y.info)
+end
+
+module B = S.Make (Bound)
+
+type 'a boundset = 'a B.t
+
+(** Abslocs, which identify elements in points-to sets *)
+(** jk : I'd prefer to make this an 'a absloc and specialize it to
+    varinfo for use with the Cil frontend, but for now, this will do *)
+type absloc = int * string * Cil.varinfo option
+
+module Absloc =
+struct
+  type t = absloc
+  let compare (xid, _, _) (yid, _, _) = xid - yid
+end
+
+module C = Set.Make (Absloc)
+
+(** Sets of abslocs. Set union is used when two c_abslocs containing
+    absloc sets are unified *)
+type abslocset = C.t
+
+let d_absloc () (a: absloc) : Pretty.doc =
+  let i,s,_ = a in
+  Pretty.dprintf "<%d, %s>" i s
+
+type c_abslocinfo = {
+  mutable l_name: string;   (** name of the location *)
+  loc : absloc;
+  l_stamp : int;
+  mutable l_top : bool;
+  mutable aliases : abslocset;
+  mutable lbounds : c_abslocinfo boundset;
+  mutable ubounds : c_abslocinfo boundset;
+  mutable flow_computed : bool
+}
+and c_absloc = c_abslocinfo U.uref
+
+(** The type of lvalues. *)
+type lvalue = {
+  l: c_absloc;
+  contents: tau
+}
+and vinfo = {
+  v_stamp : int;
+  v_name : string;
+  mutable v_top : bool;
+  mutable v_lbounds : tinfo boundset;
+  mutable v_ubounds : tinfo boundset
+}
+and rinfo = {
+  r_stamp : int;
+  rl : c_absloc;
+  points_to : tau
+}
+and finfo = {
+  f_stamp : int;
+  fl : c_absloc;
+  ret : tau;
+  mutable args : tau list
+}
+and pinfo = {
+  p_stamp : int;
+  ptr : tau;
+  lam : tau
+}
+and tinfo =
+    Var of vinfo
+  | Ref of rinfo
+  | Fun of finfo
+  | Pair of pinfo
+and tau = tinfo U.uref
+
+type tconstraint =
+    Unification of tau * tau
+  | Leq of tau * tau
+
+(** Association lists, used for printing recursive types. The first
+    element is a type that has been visited. The second element is the
+    string representation of that type (so far). If the string option is
+    set, then this type occurs within itself, and is associated with the
+    recursive var name stored in the option. When walking a type, add it
+    to an association list.
+
+    Example: suppose we have the constraint 'a = ref('a). The type is
+    unified via cyclic unification, and would loop infinitely if we
+    attempted to print it. What we want to do is print the type u
+    rv. ref(rv). This is accomplished in the following manner:
+
+    -- ref('a) is visited. It is not in the association list, so it is
+    added and the string "ref(" is stored in the second element. We
+    recurse to print the first argument of the constructor.
+
+    -- In the recursive call, we see that 'a (or ref('a)) is already
+    in the association list, so the type is recursive. We check the
+    string option, which is None, meaning that this is the first
+    recurrence of the type. We create a new recursive variable, rv and
+    set the string option to 'rv. Next, we prepend u rv. to the string
+    representation we have seen before, "ref(", and return "rv" as the
+    string representation of this type.
+
+    -- The string so far is "u rv.ref(". The recursive call returns,
+    and we complete the type by printing the result of the call, "rv",
+    and ")"
+
+    In a type where the recursive variable appears twice, e.g. 'a =
+    pair('a,'a), the second time we hit 'a, the string option will be
+    set, so we know to reuse the same recursive variable name.
+*)
+type association = tau * string ref * string option ref
+
+(** The current state of the solver engine either adding more
+    constraints, or finished adding constraints and querying graph *)
+type state =
+    AddingConstraints
+  | FinishedConstraints
+
+(***********************************************************************)
+(*                                                                     *)
+(* Global Variables                                                    *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** A count of the constraints introduced from the AST. Used for
+    debugging. *)
+let toplev_count = ref 0
+
+let solver_state : state ref = ref AddingConstraints
+
+(** Print the instantiations constraints. *)
+let print_constraints : bool ref = ref false
+
+(** If true, print all constraints (including induced) and show
+    additional debug output. *)
+let debug = ref false
+
+(** Just debug all the constraints (including induced) *)
+let debug_constraints = ref false
+
+(** Debug the flow step *)
+let debug_flow_step = ref false
+
+(** Compatibility with GOLF *)
+let debug_aliases = ref false
+let smart_aliases = ref false
+let no_flow = ref false
+let analyze_mono = ref false
+
+(** If true, disable subtyping (unification at all levels) *)
+let no_sub = ref false
+
+(** A list of equality constraints. *)
+let eq_worklist : tconstraint Q.t = Q.create ()
+
+(** A list of leq constraints. *)
+let leq_worklist : tconstraint Q.t = Q.create ()
+
+(** A hashtable containing stamp pairs of c_abslocs that must be aliased. *)
+let cached_aliases : (int * int, unit) H.t = H.create 64
+
+(** A hashtable mapping pairs of tau's to their join node. *)
+let join_cache : (int * int, tau) H.t = H.create 64
+
+(** *)
+let label_prefix = "l_"
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Utility Functions                                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+let starts_with s p =
+  let n = String.length p in
+    if String.length s < n then false
+    else String.sub s 0 n = p
+
+
+let die s =
+  Printf.printf "*******\nAssertion failed: %s\n*******\n" s;
+  assert false
+
+let insist b s =
+  if not b then die s else ()
+
+
+let can_add_constraints () =
+  !solver_state = AddingConstraints
+
+let can_query_graph () =
+  !solver_state = FinishedConstraints
+
+let finished_constraints () =
+  insist (!solver_state = AddingConstraints) "inconsistent states";
+  solver_state := FinishedConstraints
+
+let find = U.deref
+
+(** return the prefix of the list up to and including the first
+    element satisfying p. if no element satisfies p, return the empty
+    list *)
+let rec keep_until p l =
+  match l with
+      [] -> []
+    | x :: xs -> if p x then [x] else x :: keep_until p xs
+
+
+(** Generate a unique integer. *)
+let fresh_index : (unit -> int) =
+  let counter = ref 0 in
+    fun () ->
+      incr counter;
+      !counter
+
+let fresh_stamp : (unit -> int) =
+  let stamp = ref 0 in
+    fun () ->
+      incr stamp;
+      !stamp
+
+(** Return a unique integer representation of a tau *)
+let get_stamp (t : tau) : int =
+  match find t with
+      Var v -> v.v_stamp
+    | Ref r -> r.r_stamp
+    | Pair p -> p.p_stamp
+    | Fun f -> f.f_stamp
+
+(** Consistency checks for inferred types *)
+let  pair_or_var (t : tau) =
+  match find t with
+      Pair _ -> true
+    | Var _ -> true
+    | _ -> false
+
+let ref_or_var (t : tau) =
+   match find t with
+       Ref _ -> true
+     | Var _ -> true
+     | _ -> false
+
+let fun_or_var (t : tau) =
+  match find t with
+      Fun _ -> true
+    | Var _ -> true
+    |  _ -> false
+
+
+(** Apply [f] structurally down [t]. Guaranteed to terminate, even if [t]
+    is recursive *)
+let iter_tau f t =
+  let visited : (int, tau) H.t = H.create 4 in
+  let rec iter_tau' t =
+    if H.mem visited (get_stamp t) then () else
+      begin
+        f t;
+        H.add visited (get_stamp t) t;
+        match find t with
+            Pair p ->
+              iter_tau' p.ptr;
+              iter_tau' p.lam
+          | Fun f ->
+              List.iter iter_tau' f.args;
+              iter_tau' f.ret;
+          | Ref r -> iter_tau' r.points_to
+          | _ -> ()
+      end
+  in
+    iter_tau' t
+
+let equal_absloc = function
+    (i, _, _), (i', _, _) -> i = i'
+
+let equal_c_absloc l l' =
+  (find l).l_stamp = (find l').l_stamp
+
+let equal_tau (t : tau) (t' : tau) =
+  get_stamp t = get_stamp t'
+
+let top_c_absloc l =
+  (find l).l_top
+
+let get_flow_computed l =
+  (find l).flow_computed
+
+let set_flow_computed l =
+  (find l).flow_computed <- true
+
+let rec top_tau (t : tau) =
+  match find t with
+      Pair p -> top_tau p.ptr || top_tau p.lam
+    | Ref r -> top_c_absloc r.rl
+    | Fun f -> top_c_absloc f.fl
+    | Var v -> v.v_top
+
+let get_c_absloc_stamp (l : c_absloc) : int =
+  (find l).l_stamp
+
+let set_top_c_absloc (l : c_absloc) (b: bool) : unit =
+  (find l).l_top <- b
+
+let get_aliases (l : c_absloc) =
+  if top_c_absloc l then raise ReachedTop
+  else (find l).aliases
+
+(***********************************************************************)
+(*                                                                     *)
+(* Printing Functions                                                  *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Convert a c_absloc to a string, short representation *)
+let string_of_c_absloc (l : c_absloc) : string =
+  "\"" ^
+    (find l).l_name ^
+    if top_c_absloc l then "(top)" else "" ^
+      "\""
+
+(** Return true if the element [e] is present in the association list,
+    according to uref equality *)
+let rec assoc_list_mem (e : tau) (l : association list) =
+  match l with
+      [] -> None
+    | (h, s, so) :: t ->
+        if U.equal (h, e) then Some (s, so)
+        else assoc_list_mem e t
+
+(** Given a tau, create a unique recursive variable name. This should
+    always return the same name for a given tau *)
+let fresh_recvar_name (t : tau) : string =
+  match find t with
+      Pair p -> "rvp" ^ string_of_int p.p_stamp
+    | Ref r -> "rvr" ^ string_of_int r.r_stamp
+    | Fun f -> "rvf" ^ string_of_int f.f_stamp
+    | _ -> die "fresh_recvar_name"
+
+
+(** Return a string representation of a tau, using association lists. *)
+let string_of_tau (t : tau) : string =
+  let tau_map : association list ref = ref [] in
+  let rec string_of_tau' t =
+    match assoc_list_mem t !tau_map with
+        Some (s, so) -> (* recursive type. see if a var name has been set *)
+          begin
+            match !so with
+                None ->
+                  let rv = fresh_recvar_name t in
+                    s := "u " ^ rv ^ "." ^ !s;
+                    so := Some rv;
+                    rv
+              | Some rv -> rv
+          end
+      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
+          let s = ref ""
+          and so : string option ref = ref None in
+            tau_map := (t, s, so) :: !tau_map;
+            begin
+              match find t with
+                  Var v -> s := v.v_name
+                | Pair p ->
+                    insist (ref_or_var p.ptr) "wellformed";
+                    insist (fun_or_var p.lam) "wellformed";
+                    s := "{";
+                    s := !s ^ string_of_tau' p.ptr;
+                    s := !s ^ ",";
+                    s := !s ^ string_of_tau' p.lam;
+                    s := !s ^ "}"
+                | Ref r ->
+                    insist (pair_or_var r.points_to) "wellformed";
+                    s := "ref(|";
+                    s := !s ^ string_of_c_absloc r.rl;
+                    s := !s ^ "|,";
+                    s := !s ^ string_of_tau' r.points_to;
+                    s := !s ^ ")"
+                | Fun f ->
+                    let rec string_of_args = function
+                        [] -> ()
+                      | h :: [] ->
+                          insist (pair_or_var h) "wellformed";
+                          s := !s ^ string_of_tau' h
+                      | h :: t ->
+                          insist (pair_or_var h) "wellformed";
+                          s := !s ^ string_of_tau' h ^ ",";
+                          string_of_args t
+                    in
+                      insist (pair_or_var f.ret) "wellformed";
+                      s := "fun(|";
+                      s := !s ^ string_of_c_absloc f.fl;
+                      s := !s ^ "|,";
+                      s := !s ^ "<";
+                      if List.length f.args > 0 then string_of_args f.args
+                      else s := !s ^ "void";
+                      s := !s ^ ">,";
+                      s := !s ^ string_of_tau' f.ret;
+                      s := !s ^ ")"
+            end;
+            tau_map := List.tl !tau_map;
+            !s
+  in
+    string_of_tau' t
+
+(** Convert an lvalue to a string *)
+let rec string_of_lvalue (lv : lvalue) : string =
+  let contents = string_of_tau lv.contents
+  and l = string_of_c_absloc lv.l
+  in
+    insist (pair_or_var lv.contents) "inconsistency at string_of_lvalue";
+    (* do a consistency check *)
+    Printf.sprintf "[%s]^(%s)" contents l
+
+(** Print a list of tau elements, comma separated *)
+let rec print_tau_list (l : tau list) : unit =
+  let rec print_t_strings = function
+      [] -> ()
+    | h :: [] -> print_endline h
+    | h :: t ->
+        print_string h;
+        print_string ", ";
+        print_t_strings t
+  in
+    print_t_strings (List.map string_of_tau l)
+
+let print_constraint (c : tconstraint) =
+  match c with
+      Unification (t, t') ->
+        let lhs = string_of_tau t in
+        let rhs = string_of_tau t' in
+          Printf.printf "%s == %s\n" lhs rhs
+    | Leq (t, t') ->
+        let lhs = string_of_tau t in
+        let rhs = string_of_tau t' in
+          Printf.printf "%s <= %s\n" lhs  rhs
+
+(***********************************************************************)
+(*                                                                     *)
+(* Type Operations -- these do not create any constraints              *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Create an lvalue with c_absloc [lbl] and tau contents [t]. *)
+let make_lval (loc, t : c_absloc * tau) : lvalue =
+  {l = loc; contents = t}
+
+let make_c_absloc_int (is_top : bool) (name : string) (vio : Cil.varinfo option) : c_absloc =
+  let my_absloc = (fresh_index (), name, vio) in
+  let locc = C.add my_absloc C.empty
+  in
+    U.uref {
+      l_name = name;
+      l_top = is_top;
+      l_stamp = fresh_stamp ();
+      loc = my_absloc;
+      aliases = locc;
+      ubounds = B.empty;
+      lbounds = B.empty;
+      flow_computed = false
+    }
+
+(** Create a new c_absloc with name [name]. Also adds a fresh absloc
+    with name [name] to this c_absloc's aliases set. *)
+let make_c_absloc (is_top : bool) (name : string) (vio : Cil.varinfo option) =
+  make_c_absloc_int is_top name vio
+
+let fresh_c_absloc (is_top : bool) : c_absloc =
+  let index = fresh_index () in
+    make_c_absloc_int is_top (label_prefix ^ string_of_int index) None
+
+(** Create a fresh bound (edge in the constraint graph). *)
+let make_bound (a : c_absloc) : c_abslocinfo bound =
+  {info = a}
+
+let make_tau_bound (t : tau) : tinfo bound =
+  {info = t}
+
+(** Create a fresh named variable with name '[name]. *)
+let make_var (is_top : bool) (name : string) : tau =
+  U.uref (Var {v_name = ("'" ^ name);
+               v_top = is_top;
+               v_stamp = fresh_index ();
+               v_lbounds = B.empty;
+               v_ubounds = B.empty})
+
+let fresh_var  (is_top : bool) : tau =
+  make_var is_top ("fi" ^ string_of_int (fresh_index ()))
+
+(** Create a fresh unnamed variable (name will be 'fi). *)
+let fresh_var_i (is_top : bool) : tau =
+  make_var is_top ("fi" ^ string_of_int (fresh_index ()))
+
+(** Create a Fun constructor. *)
+let make_fun (lbl, a, r : c_absloc * (tau list) * tau) : tau =
+  U.uref (Fun {fl = lbl;
+               f_stamp = fresh_index ();
+               args = a;
+               ret = r})
+
+(** Create a Ref constructor. *)
+let make_ref (lbl, pt : c_absloc * tau) : tau =
+  U.uref (Ref {rl = lbl;
+               r_stamp = fresh_index ();
+               points_to = pt})
+
+(** Create a Pair constructor. *)
+let make_pair (p, f : tau * tau) : tau =
+  U.uref (Pair {ptr = p;
+                p_stamp = fresh_index ();
+                lam = f})
+
+(** Copy the toplevel constructor of [t], putting fresh variables in each
+    argement of the constructor. *)
+let copy_toplevel (t : tau) : tau =
+  match find t with
+      Pair _ -> make_pair (fresh_var_i false, fresh_var_i false)
+    | Ref  _ -> make_ref (fresh_c_absloc false, fresh_var_i false)
+    | Fun f ->
+        make_fun (fresh_c_absloc false,
+                  List.map (fun _ -> fresh_var_i false) f.args,
+                  fresh_var_i false)
+    | _ -> die "copy_toplevel"
+
+let has_same_structure (t : tau) (t' : tau) =
+  match find t, find t' with
+      Pair _, Pair _ -> true
+    | Ref _, Ref _ -> true
+    | Fun _, Fun _ -> true
+    | Var _, Var _ -> true
+    | _ -> false
+
+let pad_args (fi, tlr : finfo * tau list ref) : unit =
+  let padding = List.length fi.args - List.length !tlr
+  in
+    if padding == 0 then ()
+    else
+      if padding > 0 then
+        for i = 1 to padding do
+          tlr := !tlr @ [fresh_var false]
+        done
+      else
+        for i = 1 to -padding do
+          fi.args <- fi.args @ [fresh_var false]
+        done
+
+(***********************************************************************)
+(*                                                                     *)
+(* Constraint Generation/ Resolution                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+let set_top (b : bool) (t : tau) : unit =
+  let set_top_down t =
+    match find t with
+        Var v -> v.v_top <- b
+      | Ref r -> set_top_c_absloc r.rl b
+      | Fun f -> set_top_c_absloc f.fl b
+      | Pair p -> ()
+  in
+    iter_tau set_top_down t
+
+let rec unify_int (t, t' : tau * tau) : unit =
+  if equal_tau t t' then ()
+  else
+    let ti, ti' = find t, find t' in
+      U.unify combine (t, t');
+      match ti, ti' with
+          Var v, Var v' ->
+            set_top (v.v_top || v'.v_top) t';
+            merge_v_lbounds (v, v');
+            merge_v_ubounds (v, v')
+        | Var v, _ ->
+            set_top (v.v_top || top_tau t') t';
+            notify_vlbounds t v;
+            notify_vubounds t v
+        | _, Var v ->
+            set_top (v.v_top || top_tau t) t;
+            notify_vlbounds t' v;
+            notify_vubounds t' v
+        | Ref r, Ref r' -> unify_ref (r, r')
+        | Fun f, Fun f' -> unify_fun (f, f')
+        | Pair p, Pair p' -> unify_pair (p, p')
+        | _ -> raise Inconsistent
+and notify_vlbounds (t : tau) (vi : vinfo) : unit =
+  let notify bounds =
+    List.iter
+      (fun b ->
+         add_constraint (Unification (b.info, copy_toplevel t));
+         add_constraint (Leq (b.info, t)))
+      bounds
+  in
+    notify (B.elements vi.v_lbounds)
+and notify_vubounds (t : tau) (vi : vinfo) : unit =
+  let notify bounds =
+    List.iter
+      (fun b ->
+         add_constraint (Unification (b.info, copy_toplevel t));
+         add_constraint (Leq (t, b.info)))
+      bounds
+  in
+    notify (B.elements vi.v_ubounds)
+and unify_ref (ri, ri' : rinfo * rinfo) : unit =
+  unify_c_abslocs (ri.rl, ri'.rl);
+  add_constraint (Unification (ri.points_to, ri'.points_to))
+and unify_fun (fi, fi' : finfo * finfo) : unit =
+  let rec union_args  = function
+      _, [] -> false
+    | [], _ -> true
+    | h :: t, h' :: t' ->
+        add_constraint (Unification (h, h'));
+        union_args(t, t')
+  in
+    unify_c_abslocs (fi.fl, fi'.fl);
+    add_constraint (Unification (fi.ret, fi'.ret));
+    if union_args (fi.args, fi'.args) then fi.args <- fi'.args
+and unify_pair (pi, pi' : pinfo * pinfo) : unit =
+  add_constraint (Unification (pi.ptr, pi'.ptr));
+  add_constraint (Unification (pi.lam, pi'.lam))
+and unify_c_abslocs (l, l' : c_absloc * c_absloc) : unit =
+  let pick_name (li, li' : c_abslocinfo * c_abslocinfo) =
+    if starts_with li.l_name label_prefix then li.l_name <- li'.l_name
+    else () in
+  let combine_c_absloc (li, li' : c_abslocinfo * c_abslocinfo) : c_abslocinfo =
+    pick_name (li, li');
+    li.l_top <- li.l_top || li'.l_top;
+    li.aliases <- C.union li.aliases li'.aliases;
+    li.ubounds <- B.union li.ubounds li'.ubounds;
+    li.lbounds <- B.union li.lbounds li'.lbounds;
+    li
+  in
+    if !debug_constraints then
+      Printf.printf
+        "%s == %s\n"
+        (string_of_c_absloc l)
+        (string_of_c_absloc l');
+    U.unify combine_c_absloc (l, l')
+and merge_v_lbounds (vi, vi' : vinfo * vinfo) : unit =
+  vi'.v_lbounds <- B.union vi.v_lbounds vi'.v_lbounds;
+and merge_v_ubounds (vi, vi' : vinfo * vinfo) : unit =
+  vi'.v_ubounds <- B.union vi.v_ubounds vi'.v_ubounds;
+(** Pick the representative info for two tinfo's. This function
+    prefers the first argument when both arguments are the same
+    structure, but when one type is a structure and the other is a
+    var, it picks the structure.  All other actions (e.g., updating
+    the info) is done in unify_int *)
+and combine (ti, ti' : tinfo * tinfo) : tinfo =
+  match ti, ti' with
+      Var _, _ -> ti'
+    | _, _ -> ti
+and leq_int (t, t') : unit =
+  if equal_tau t t' then ()
+  else
+    let ti, ti' = find t, find t' in
+      match ti, ti' with
+          Var v, Var v' ->
+            v.v_ubounds <- B.add (make_tau_bound t') v.v_ubounds;
+            v'.v_lbounds <- B.add (make_tau_bound t) v'.v_lbounds
+        | Var v, _ ->
+            add_constraint (Unification (t, copy_toplevel t'));
+            add_constraint (Leq (t, t'))
+        | _, Var v ->
+            add_constraint (Unification (t', copy_toplevel t));
+            add_constraint (Leq (t, t'))
+        | Ref r, Ref r' -> leq_ref (r, r')
+        | Fun f, Fun f' ->
+            (* TODO: check, why not do subtyping here? *)
+            add_constraint (Unification (t, t'))
+        | Pair pr, Pair pr' ->
+            add_constraint (Leq (pr.ptr, pr'.ptr));
+            add_constraint (Leq (pr.lam, pr'.lam))
+        | _ -> raise Inconsistent
+and leq_ref (ri, ri') : unit =
+  leq_c_absloc (ri.rl, ri'.rl);
+  add_constraint (Unification (ri.points_to, ri'.points_to))
+and leq_c_absloc (l, l') : unit =
+  let li, li' = find l, find l' in
+    if !debug_constraints then
+      Printf.printf
+        "%s <= %s\n"
+        (string_of_c_absloc l)
+        (string_of_c_absloc l');
+    if U.equal (l, l') then ()
+    else
+      begin
+        li.ubounds <- B.add (make_bound l') li.ubounds;
+        li'.lbounds <- B.add (make_bound l) li'.lbounds
+      end
+and add_constraint_int (c : tconstraint) (toplev : bool) =
+  if !debug_constraints && toplev then
+    begin
+      Printf.printf "%d:>" !toplev_count;
+      print_constraint c;
+      incr toplev_count
+    end
+  else
+    if !debug_constraints then print_constraint c else ();
+  insist (can_add_constraints ()) 
+    "can't add constraints after compute_results is called";
+  begin
+    match c with
+        Unification _ -> Q.add c eq_worklist
+      | Leq _ -> Q.add c leq_worklist
+  end;
+  solve_constraints () (* solve online *)
+and add_constraint (c : tconstraint) =
+  add_constraint_int c false
+and add_toplev_constraint (c : tconstraint) =
+  if !print_constraints && not !debug_constraints then
+    begin
+      Printf.printf "%d:>" !toplev_count;
+      incr toplev_count;
+      print_constraint c
+    end
+  else ();
+  add_constraint_int c true
+and fetch_constraint () : tconstraint option =
+  try Some (Q.take eq_worklist)
+  with Q.Empty ->
+    begin
+      try Some (Q.take leq_worklist)
+      with Q.Empty -> None
+    end
+(** The main solver loop. *)
+and solve_constraints () : unit =
+  match fetch_constraint () with
+      None -> ()
+    | Some c ->
+        begin
+          match c with
+              Unification (t, t') -> unify_int (t, t')
+            | Leq (t, t') ->
+                if !no_sub then unify_int (t, t')
+                else leq_int (t, t')
+        end;
+        solve_constraints ()
+
+(***********************************************************************)
+(*                                                                     *)
+(* Interface Functions                                                 *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Return the contents of the lvalue. *)
+let rvalue (lv : lvalue) : tau =
+  lv.contents
+
+(** Dereference the rvalue. If it does not have enough structure to
+    support the operation, then the correct structure is added via new
+    unification constraints. *)
+let rec deref (t : tau) : lvalue =
+  match find t with
+      Pair p ->
+        begin
+          match find p.ptr with
+            | Var _ ->
+                let is_top = top_tau p.ptr in
+                let points_to = fresh_var is_top in
+                let l = fresh_c_absloc is_top in
+                let r = make_ref (l, points_to)
+                in
+                  add_toplev_constraint (Unification (p.ptr, r));
+                  make_lval (l, points_to)
+            | Ref r -> make_lval (r.rl, r.points_to)
+            | _ -> raise WellFormed
+        end
+    | Var v ->
+        let is_top = top_tau t in
+          add_toplev_constraint
+            (Unification (t, make_pair (fresh_var is_top, fresh_var is_top)));
+          deref t
+    | _ -> raise WellFormed
+
+
+(** Form the union of [t] and [t'], if it doesn't exist already. *)
+let join (t : tau) (t' : tau) : tau =
+  let s, s' = get_stamp t, get_stamp t' in
+    try H.find join_cache (s, s')
+    with Not_found ->
+      let t'' = fresh_var false in
+        add_toplev_constraint (Leq (t, t''));
+        add_toplev_constraint (Leq (t', t''));
+        H.add join_cache (s, s') t'';
+        t''
+
+(** Form the union of a list [tl], expected to be the initializers of some
+  structure or array type. *)
+let join_inits (tl : tau list) : tau =
+  let t' = fresh_var false in
+    List.iter (function t -> add_toplev_constraint (Leq (t, t'))) tl;
+    t'
+
+(** Take the address of an lvalue. Does not add constraints. *)
+let address (lv  : lvalue) : tau =
+  make_pair (make_ref (lv.l, lv.contents), fresh_var false )
+
+(** No instantiation in this analysis *)
+let instantiate (lv : lvalue) (i : int) : lvalue =
+  lv
+
+(** Constraint generated from assigning [t] to [lv]. *)
+let assign (lv : lvalue) (t : tau) : unit =
+  add_toplev_constraint (Leq (t, lv.contents))
+
+let assign_ret (i : int) (lv : lvalue) (t : tau) : unit =
+  add_toplev_constraint (Leq (t, lv.contents))
+
+(** Project out the first (ref) component or a pair. If the argument
+    [t] has no discovered structure, raise NoContents. *)
+let proj_ref (t : tau) : tau =
+  match find t with
+      Pair p -> p.ptr
+    | Var v -> raise NoContents
+    | _ ->  raise WellFormed
+
+(* Project out the second (fun) component of a pair. If the argument
+   [t] has no discovered structure, create it on the fly by adding
+   constraints. *)
+let proj_fun (t : tau) : tau =
+  match find t with
+      Pair p -> p.lam
+    | Var v ->
+        let p, f = fresh_var false, fresh_var false in
+          add_toplev_constraint (Unification (t, make_pair (p, f)));
+          f
+    | _ -> raise WellFormed
+
+let get_args (t : tau) : tau list =
+  match find t with
+      Fun f -> f.args
+    | _ -> raise WellFormed
+
+let get_finfo (t : tau) : finfo =
+  match find t with
+      Fun f -> f
+    | _ -> raise WellFormed
+
+(** Function type [t] is applied to the arguments [actuals]. Unifies
+    the actuals with the formals of [t]. If no functions have been
+    discovered for [t] yet, create a fresh one and unify it with
+    t. The result is the return value of the function plus the index
+    of this application site.
+
+    For this analysis, the application site is always 0 *)
+let apply (t : tau) (al : tau list) : (tau * int) =
+  let f = proj_fun t in
+  let actuals = ref al in
+  let fi, ret =
+    match find f with
+        Fun fi -> fi, fi.ret
+      | Var v ->
+          let new_l, new_ret, new_args =
+            fresh_c_absloc false,
+            fresh_var false,
+            List.map (function _ -> fresh_var false) !actuals
+          in
+          let new_fun = make_fun (new_l, new_args, new_ret) in
+            add_toplev_constraint (Unification (new_fun, f));
+            (get_finfo new_fun, new_ret)
+      | _ -> raise WellFormed
+  in
+    pad_args (fi, actuals);
+    List.iter2
+      (fun actual -> fun formal ->
+         add_toplev_constraint (Leq (actual, formal)))
+      !actuals fi.args;
+    (ret, 0)
+
+let make_undefined_lvalue () =
+  make_lval (make_c_absloc false "undefined" None,
+             make_var true "undefined")
+
+let make_undefined_rvalue () =
+  make_var true "undefined"
+
+let assign_undefined (lv : lvalue) : unit =
+  assign lv (make_undefined_rvalue ())
+
+let apply_undefined (al : tau list) : (tau * int) =
+    List.iter
+      (fun actual ->  assign (make_undefined_lvalue ()) actual)
+      al;
+   (fresh_var true, 0)
+
+(** Create a new function type with name [name], list of formal
+    arguments [formals], and return value [ret]. Adds no constraints. *)
+let make_function (name : string) (formals : lvalue list) (ret : tau) : tau =
+  let f = make_fun (make_c_absloc false name None,
+                    List.map (fun x -> rvalue x) formals,
+                    ret)
+  in
+    make_pair (fresh_var false, f)
+
+(** Create an lvalue. *)
+let make_lvalue (b : bool ) (name : string) (vio : Cil.varinfo option) =
+  make_lval (make_c_absloc false name vio,
+             make_var false name)
+
+(** Create a fresh named variable. *)
+let make_fresh (name : string) : tau =
+  make_var false name
+
+(** The default type for abslocs. *)
+let bottom () : tau =
+  make_var false "bottom"
+
+(** Unify the result of a function with its return value. *)
+let return (t : tau) (t' : tau) =
+  add_toplev_constraint (Leq (t', t))
+
+(***********************************************************************)
+(*                                                                     *)
+(* Query/Extract Solutions                                             *)
+(*                                                                     *)
+(***********************************************************************)
+
+module IntHash = Hashtbl.Make (struct
+                                 type t = int
+                                 let equal x y = x = y
+                                 let hash x = x
+                               end)
+
+(** todo : reached_top !! *)
+let collect_ptset_fast (l : c_absloc) : abslocset =
+  let onpath : unit IntHash.t = IntHash.create 101 in
+  let path : c_absloc list ref = ref [] in
+  let compute_path (i : int) =
+    keep_until (fun l -> i = get_c_absloc_stamp l) !path in
+  let collapse_cycle (cycle : c_absloc list) =
+    match cycle with
+        l :: ls ->
+          List.iter (fun l' -> unify_c_abslocs (l, l')) ls;
+          C.empty
+      | [] -> die "collapse cycle" in
+  let rec flow_step (l : c_absloc) : abslocset =
+    let stamp = get_c_absloc_stamp l in
+      if IntHash.mem onpath stamp then (* already seen *)
+        collapse_cycle (compute_path stamp)
+      else
+        let li = find l in
+          IntHash.add onpath stamp ();
+          path := l :: !path;
+          B.iter
+            (fun lb -> li.aliases <- C.union li.aliases (flow_step lb.info))
+            li.lbounds;
+          path := List.tl !path;
+          IntHash.remove onpath stamp;
+          li.aliases
+  in
+    insist (can_query_graph ()) "collect_ptset_fast can't query graph";
+    if get_flow_computed l then get_aliases l
+    else
+      begin
+        set_flow_computed l;
+        flow_step l
+      end
+
+(** this is a quadratic flow step. keep it for debugging the fast
+    version above. *)
+let collect_ptset_slow (l : c_absloc) : abslocset =
+  let onpath : unit IntHash.t = IntHash.create 101 in
+  let rec flow_step (l : c_absloc) : abslocset =
+    if top_c_absloc l then raise ReachedTop
+    else
+      let stamp = get_c_absloc_stamp l in
+        if IntHash.mem onpath stamp then C.empty
+        else
+          let li = find l in
+            IntHash.add onpath stamp ();
+            B.iter
+              (fun lb -> li.aliases <- C.union li.aliases (flow_step lb.info))
+              li.lbounds;
+            li.aliases
+  in
+    insist (can_query_graph ()) "collect_ptset_slow can't query graph";
+    if get_flow_computed l then get_aliases l
+    else
+      begin
+        set_flow_computed l;
+        flow_step l
+      end
+
+let collect_ptset =
+  collect_ptset_slow
+  (* if !debug_flow_step then collect_ptset_slow
+     else collect_ptset_fast *)
+
+let may_alias (t1 : tau) (t2 : tau) : bool =
+  let get_l (t : tau) : c_absloc =
+    match find (proj_ref t) with
+        Ref r -> r.rl
+      | Var v -> raise NoContents
+      | _ ->  raise WellFormed
+  in
+    try
+      let l1 = get_l t1
+      and l2 = get_l t2 in
+        equal_c_absloc l1 l2 ||
+          not (C.is_empty (C.inter (collect_ptset l1) (collect_ptset l2)))
+    with
+        NoContents -> false
+      | ReachedTop -> raise UnknownLocation
+
+let points_to_aux (t : tau) : absloc list =
+  try
+    match find (proj_ref t) with
+        Var v -> []
+      | Ref r -> C.elements (collect_ptset r.rl)
+      | _ -> raise WellFormed
+  with
+      NoContents -> []
+    | ReachedTop -> raise UnknownLocation
+
+let points_to (lv : lvalue) : Cil.varinfo list =
+  let rec get_vinfos l : Cil.varinfo list =
+    match l with
+        [] -> []
+      | (_, _, Some h) :: t -> h :: get_vinfos t
+      | (_, _, None) :: t -> get_vinfos t
+  in
+    get_vinfos (points_to_aux lv.contents)
+
+let epoints_to (t : tau) : Cil.varinfo list =
+  let rec get_vinfos l : Cil.varinfo list = match l with
+      [] -> []
+    | (_, _, Some h) :: t -> h :: get_vinfos t
+    | (_, _, None) :: t -> get_vinfos t
+  in
+    get_vinfos (points_to_aux t)
+
+let points_to_names (lv : lvalue) : string list =
+  List.map (fun v -> v.vname) (points_to lv)
+
+let absloc_points_to (lv : lvalue) : absloc list =
+  points_to_aux lv.contents
+
+let absloc_epoints_to (t : tau) : absloc list =
+  points_to_aux t
+
+let absloc_of_lvalue (lv : lvalue) : absloc =
+  (find lv.l).loc
+
+let absloc_eq = equal_absloc
diff --git a/cil/src/ext/pta/olf.mli b/cil/src/ext/pta/olf.mli
new file mode 100644
index 000000000..437948250
--- /dev/null
+++ b/cil/src/ext/pta/olf.mli
@@ -0,0 +1,80 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+type lvalue
+type tau
+type absloc
+
+(** Raised if a pointer flows to an undefined function.
+  We assume that such a function can have any effect on the pointer's contents
+*)
+exception UnknownLocation
+
+val debug : bool ref
+val debug_constraints : bool ref
+val debug_aliases : bool ref
+val smart_aliases : bool ref
+val finished_constraints : unit -> unit
+val print_constraints : bool ref
+val no_flow : bool ref
+val no_sub : bool ref
+val analyze_mono : bool ref
+val solve_constraints : unit -> unit (* only for compatability with Golf *)
+val rvalue : lvalue -> tau
+val deref : tau -> lvalue
+val join : tau -> tau -> tau
+val join_inits : tau list -> tau
+val address : lvalue -> tau
+val instantiate : lvalue -> int -> lvalue
+val assign : lvalue -> tau -> unit
+val assign_ret : int -> lvalue -> tau -> unit
+val apply : tau -> tau list -> (tau * int)
+val apply_undefined : tau list -> (tau * int)
+val assign_undefined : lvalue -> unit
+val make_function :  string -> lvalue list -> tau -> tau
+val make_lvalue : bool -> string -> (Cil.varinfo option) -> lvalue
+val bottom : unit -> tau
+val return : tau -> tau -> unit
+val make_fresh : string -> tau
+val points_to_names : lvalue -> string list
+val points_to : lvalue -> Cil.varinfo list
+val epoints_to : tau -> Cil.varinfo list   
+val string_of_lvalue : lvalue -> string
+val may_alias : tau -> tau -> bool
+
+val absloc_points_to : lvalue -> absloc list
+val absloc_epoints_to : tau -> absloc list
+val absloc_of_lvalue : lvalue -> absloc 
+val absloc_eq : (absloc * absloc) -> bool
+val d_absloc : unit -> absloc -> Pretty.doc
diff --git a/cil/src/ext/pta/ptranal.ml b/cil/src/ext/pta/ptranal.ml
new file mode 100644
index 000000000..c91bda81f
--- /dev/null
+++ b/cil/src/ext/pta/ptranal.ml
@@ -0,0 +1,597 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002,
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+exception Bad_return
+exception Bad_function
+
+
+open Cil
+
+module H = Hashtbl
+
+module A = Olf
+exception UnknownLocation = A.UnknownLocation
+
+type access = A.lvalue * bool
+
+type access_map = (lval, access) H.t
+
+(** a mapping from varinfo's back to fundecs *)
+module VarInfoKey =
+struct
+  type t = varinfo
+  let compare v1 v2 = v1.vid - v2.vid
+end
+
+module F = Map.Make (VarInfoKey)
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Global Variables                                                    *)
+(*                                                                     *)
+(***********************************************************************)
+
+let model_strings = ref false
+let print_constraints = A.print_constraints
+let debug_constraints = A.debug_constraints
+let debug_aliases = A.debug_aliases
+let smart_aliases = A.smart_aliases
+let debug = A.debug
+let analyze_mono = A.analyze_mono
+let no_flow = A.no_flow
+let no_sub = A.no_sub
+let fun_ptrs_as_funs = ref false
+let show_progress = ref false
+let debug_may_aliases = ref false
+
+let found_undefined = ref false
+
+let conservative_undefineds = ref false
+
+let current_fundec : fundec option ref = ref None
+
+let fun_access_map : (fundec, access_map) H.t = H.create 64
+
+(* A mapping from varinfos to fundecs *)
+let fun_varinfo_map = ref F.empty
+
+let current_ret : A.tau option ref = ref None
+
+let lvalue_hash : (varinfo,A.lvalue) H.t = H.create 64
+
+let expressions : (exp,A.tau) H.t = H.create 64
+
+let lvalues : (lval,A.lvalue) H.t = H.create 64
+
+let fresh_index : (unit -> int) =
+  let count = ref 0 in
+    fun () ->
+      incr count;
+      !count
+
+let alloc_names = [
+  "malloc";
+  "calloc";
+  "realloc";
+  "xmalloc";
+  "__builtin_alloca";
+  "alloca";
+  "kmalloc"
+]
+
+let all_globals : varinfo list ref = ref []
+let all_functions : fundec list ref = ref []
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Utility Functions                                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+let is_undefined_fun = function
+    Lval (lh, o) ->
+      if isFunctionType (typeOfLval (lh, o))  then
+        match lh with
+            Var v -> v.vstorage = Extern
+          | _ -> false
+      else false
+  | _ -> false
+
+let is_alloc_fun = function
+    Lval (lh, o) ->
+      if isFunctionType (typeOfLval (lh, o)) then
+        match lh with
+            Var v -> List.mem v.vname alloc_names
+          | _ -> false
+      else false
+  | _ -> false
+
+let next_alloc = function
+    Lval (Var v, o) ->
+      let name = Printf.sprintf "%s@%d" v.vname (fresh_index ())
+      in
+        A.address (A.make_lvalue false name (Some v)) (* check *)
+  | _ -> raise Bad_return
+
+let is_effect_free_fun = function
+    Lval (lh, o) when isFunctionType (typeOfLval (lh, o)) ->
+      begin
+        match lh with
+            Var v ->
+              begin
+                try ("CHECK_" = String.sub v.vname 0 6)
+                with Invalid_argument _ -> false
+              end
+          | _ -> false
+      end
+  | _ -> false
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* AST Traversal Functions                                             *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* should do nothing, might need to worry about Index case *)
+(* let analyzeOffset (o : offset ) : A.tau = A.bottom () *)
+
+let analyze_var_decl (v : varinfo ) : A.lvalue =
+  try H.find lvalue_hash v
+  with Not_found ->
+    let lv = A.make_lvalue false v.vname (Some v)
+    in
+      H.add lvalue_hash v lv;
+      lv
+
+let isFunPtrType (t : typ) : bool =
+  match t with
+      TPtr (t, _) -> isFunctionType t
+    | _ -> false
+
+let rec analyze_lval (lv : lval ) : A.lvalue =
+  let find_access (l : A.lvalue) (is_var : bool) : A.lvalue =
+    match !current_fundec with
+        None -> l
+      | Some f ->
+          let accesses = H.find fun_access_map f in
+            if H.mem accesses lv then l
+            else
+              begin
+                H.add accesses lv (l, is_var);
+                l
+              end in
+  let result =
+    match lv with
+        Var v, _ -> (* instantiate every syntactic occurrence of a function *)
+          let alv =
+            if isFunctionType (typeOfLval lv) then
+              A.instantiate (analyze_var_decl v) (fresh_index ())
+            else analyze_var_decl v
+          in
+            find_access alv true
+      | Mem e, _ ->
+          (* assert (not (isFunctionType(typeOf(e))) ); *)
+          let alv =
+            if !fun_ptrs_as_funs && isFunPtrType (typeOf e) then
+              analyze_expr_as_lval e
+            else A.deref (analyze_expr e)
+          in
+            find_access alv false
+  in
+    H.replace lvalues lv result;
+    result
+and analyze_expr_as_lval (e : exp) : A.lvalue =
+  match e with
+      Lval l ->  analyze_lval l
+    | _ -> assert false (* todo -- other kinds of expressions? *)
+and analyze_expr (e : exp ) : A.tau =
+  let result =
+    match e with
+        Const (CStr s) ->
+          if !model_strings then
+            A.address (A.make_lvalue
+                         false
+                         s
+                         (Some (makeVarinfo false s charConstPtrType)))
+          else A.bottom ()
+      | Const c -> A.bottom ()
+      | Lval l -> A.rvalue (analyze_lval l)
+      | SizeOf _ -> A.bottom ()
+      | SizeOfStr _ -> A.bottom ()
+      | AlignOf _ -> A.bottom ()
+      | UnOp (op, e, t) -> analyze_expr e
+      | BinOp (op, e, e', t) -> A.join (analyze_expr e) (analyze_expr e')
+      | CastE (t, e) -> analyze_expr e
+      | AddrOf l ->
+          if !fun_ptrs_as_funs && isFunctionType (typeOfLval l) then
+            A.rvalue (analyze_lval l)
+          else A.address (analyze_lval l)
+      | StartOf l -> A.address (analyze_lval l)
+      | AlignOfE _ -> A.bottom ()
+      | SizeOfE _ -> A.bottom ()
+ in
+  H.add expressions e result;
+  result
+
+
+(* check *)
+let rec analyze_init (i : init ) : A.tau =
+  match i with
+      SingleInit e -> analyze_expr e
+    | CompoundInit (t, oi) ->
+        A.join_inits (List.map (function (_, i) -> analyze_init i) oi)
+
+let analyze_instr (i : instr ) : unit =
+  match i with
+      Set (lval, rhs, l) ->
+        A.assign (analyze_lval lval) (analyze_expr rhs)
+    | Call (res, fexpr, actuals, l) ->
+        if not (isFunctionType (typeOf fexpr)) then
+          () (* todo : is this a varargs? *)
+        else if is_alloc_fun fexpr then
+          begin
+            if !debug then print_string "Found allocation function...\n";
+            match res with
+                Some r -> A.assign (analyze_lval r) (next_alloc fexpr)
+              | None -> ()
+          end
+        else if is_effect_free_fun fexpr then
+          List.iter (fun e -> ignore (analyze_expr e)) actuals
+        else (* todo : check to see if the thing is an undefined function *)
+          let fnres, site =
+            if is_undefined_fun fexpr & !conservative_undefineds then
+              A.apply_undefined (List.map analyze_expr actuals)
+            else
+              A.apply (analyze_expr fexpr) (List.map analyze_expr actuals)
+          in
+            begin
+              match res with
+                  Some r ->
+                    begin
+                      A.assign_ret site (analyze_lval r) fnres;
+                      found_undefined := true;
+                    end
+                | None -> ()
+            end
+    | Asm _ -> ()
+
+let rec analyze_stmt (s : stmt ) : unit =
+  match s.skind with
+      Instr il -> List.iter analyze_instr il
+    | Return (eo, l) ->
+        begin
+          match eo with
+              Some e ->
+                begin
+                  match !current_ret with
+                      Some ret -> A.return ret (analyze_expr e)
+                    | None -> raise Bad_return
+                end
+            | None -> ()
+        end
+    | Goto (s', l) -> () (* analyze_stmt(!s') *)
+    | If (e, b, b', l) ->
+        (* ignore the expression e; expressions can't be side-effecting *)
+        analyze_block b;
+        analyze_block b'
+    | Switch (e, b, sl, l) ->
+        analyze_block b;
+        List.iter analyze_stmt sl
+(*
+    | Loop (b, l, _, _) -> analyze_block b
+*)
+    | While (_, b, _) -> analyze_block b
+    | DoWhile (_, b, _) -> analyze_block b
+    | For (bInit, _, bIter, b, _) ->
+	analyze_block bInit;
+	analyze_block bIter;
+	analyze_block b
+    | Block b -> analyze_block b
+    | TryFinally (b, h, _) ->
+        analyze_block b;
+        analyze_block h
+    | TryExcept (b, (il, _), h, _) ->
+        analyze_block b;
+        List.iter analyze_instr il;
+        analyze_block h
+    | Break l -> ()
+    | Continue l -> ()
+
+
+and analyze_block (b : block ) : unit =
+  List.iter analyze_stmt b.bstmts
+
+let analyze_function (f : fundec ) : unit =
+  let oldlv = analyze_var_decl f.svar in
+  let ret = A.make_fresh (f.svar.vname ^ "_ret") in
+  let formals = List.map analyze_var_decl f.sformals in
+  let newf = A.make_function f.svar.vname formals ret in
+    if !show_progress then
+      Printf.printf "Analyzing function %s\n" f.svar.vname;
+    fun_varinfo_map := F.add f.svar f (!fun_varinfo_map);
+    current_fundec := Some f;
+    H.add fun_access_map f (H.create 8);
+    A.assign oldlv newf;
+    current_ret := Some ret;
+    analyze_block f.sbody
+
+let analyze_global (g : global ) : unit =
+  match g with
+      GVarDecl (v, l) -> () (* ignore (analyze_var_decl(v)) -- no need *)
+    | GVar (v, init, l) ->
+        all_globals := v :: !all_globals;
+        begin
+          match init.init with
+              Some i -> A.assign (analyze_var_decl v) (analyze_init i)
+            | None -> ignore (analyze_var_decl v)
+        end
+    | GFun (f, l) ->
+        all_functions := f :: !all_functions;
+        analyze_function f
+    | _ -> ()
+
+let analyze_file (f : file) : unit =
+  iterGlobals f analyze_global
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* High-level Query Interface                                          *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* Same as analyze_expr, but no constraints. *)
+let rec traverse_expr (e : exp) : A.tau =
+  H.find expressions e
+
+and traverse_expr_as_lval (e : exp) : A.lvalue =
+  match e with
+    | Lval l -> traverse_lval l
+    | _ -> assert false (* todo -- other kinds of expressions? *)
+
+and traverse_lval (lv : lval ) : A.lvalue =
+  H.find lvalues lv
+
+let may_alias (e1 : exp) (e2 : exp) : bool =
+  let tau1,tau2 = traverse_expr e1, traverse_expr e2 in
+  let result = A.may_alias tau1 tau2 in
+    if !debug_may_aliases then
+      begin
+        let doc1 = d_exp () e1 in
+        let doc2 = d_exp () e2 in
+        let s1 = Pretty.sprint ~width:30 doc1 in
+        let s2 = Pretty.sprint ~width:30 doc2 in
+          Printf.printf
+            "%s and %s may alias? %s\n"
+            s1
+            s2
+            (if result then "yes" else "no")
+      end;
+    result
+
+let resolve_lval (lv : lval) : varinfo list =
+  A.points_to (traverse_lval lv)
+
+let resolve_exp (e : exp) : varinfo list =
+  A.epoints_to (traverse_expr e)
+
+let resolve_funptr (e : exp) : fundec list =
+  let varinfos = A.epoints_to (traverse_expr e) in
+    List.fold_left
+      (fun fdecs -> fun vinf ->
+         try F.find vinf !fun_varinfo_map :: fdecs
+         with Not_found -> fdecs)
+      []
+      varinfos
+
+let count_hash_elts h =
+  let result = ref 0 in
+    H.iter (fun _ -> fun _ -> incr result) lvalue_hash;
+    !result
+
+let compute_may_aliases (b : bool) : unit =
+  let rec compute_may_aliases_aux (exps : exp list) =
+    match exps with
+        [] -> ()
+      | h :: t ->
+          ignore (List.map (may_alias h) t);
+          compute_may_aliases_aux t
+  and exprs : exp list ref = ref [] in
+    H.iter (fun e -> fun _ -> exprs := e :: !exprs) expressions;
+    compute_may_aliases_aux !exprs
+
+
+let compute_results (show_sets : bool) : unit =
+  let total_pointed_to = ref 0
+  and total_lvalues = H.length lvalue_hash
+  and counted_lvalues = ref 0
+  and lval_elts : (string * (string list)) list ref = ref [] in
+  let print_result (name, set) =
+    let rec print_set s =
+      match s with
+          [] -> ()
+        | h :: [] -> print_string h
+        | h :: t ->
+            print_string (h ^ ", ");
+            print_set t
+    and ptsize = List.length set in
+      total_pointed_to := !total_pointed_to + ptsize;
+      if ptsize > 0 then
+        begin
+          print_string (name ^ "(" ^ (string_of_int ptsize) ^ ") -> ");
+          print_set set;
+          print_newline ()
+        end
+  in
+  (* Make the most pessimistic assumptions about globals if an
+     undefined function is present. Such a function can write to every
+     global variable *)
+  let hose_globals () : unit =
+    List.iter
+      (fun vd -> A.assign_undefined (analyze_var_decl vd))
+      !all_globals
+  in
+  let show_progress_fn (counted : int ref) (total : int) : unit =
+    incr counted;
+    if !show_progress then
+      Printf.printf "Computed flow for %d of %d sets\n" !counted total
+  in
+    if !conservative_undefineds && !found_undefined then hose_globals ();
+    A.finished_constraints ();
+    if show_sets then
+      begin
+        print_endline "Computing points-to sets...";
+        Hashtbl.iter
+          (fun vinf -> fun lv ->
+             show_progress_fn counted_lvalues total_lvalues;
+             try lval_elts := (vinf.vname, A.points_to_names lv) :: !lval_elts
+             with A.UnknownLocation -> ())
+          lvalue_hash;
+        List.iter print_result !lval_elts;
+        Printf.printf
+          "Total number of things pointed to: %d\n"
+          !total_pointed_to
+      end;
+    if !debug_may_aliases then
+      begin
+        Printf.printf "Printing may alias relationships\n";
+        compute_may_aliases true
+      end
+
+let print_types () : unit =
+  print_string "Printing inferred types of lvalues...\n";
+  Hashtbl.iter
+    (fun vi -> fun lv ->
+       Printf.printf "%s : %s\n" vi.vname (A.string_of_lvalue lv))
+    lvalue_hash
+
+
+
+(** Alias queries. For each function, gather sets of locals, formals, and
+    globals. Do n^2 work for each of these functions, reporting whether or not
+    each pair of values is aliased. Aliasing is determined by taking points-to
+    set intersections.
+*)
+let compute_aliases = compute_may_aliases
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Abstract Location Interface                                         *)
+(*                                                                     *)
+(***********************************************************************)
+
+type absloc = A.absloc
+
+let rec lvalue_of_varinfo (vi : varinfo) : A.lvalue =
+  H.find lvalue_hash vi
+
+let lvalue_of_lval = traverse_lval
+let tau_of_expr = traverse_expr
+
+(** return an abstract location for a varinfo, resp. lval *)
+let absloc_of_varinfo vi =
+  A.absloc_of_lvalue (lvalue_of_varinfo vi)
+
+let absloc_of_lval lv =
+  A.absloc_of_lvalue (lvalue_of_lval lv)
+
+let absloc_e_points_to e =
+  A.absloc_epoints_to (tau_of_expr e)
+
+let absloc_lval_aliases lv =
+  A.absloc_points_to (lvalue_of_lval lv)
+
+(* all abslocs that e transitively points to *)
+let absloc_e_transitive_points_to (e : Cil.exp) : absloc list =
+  let rec lv_trans_ptsto (worklist : varinfo list) (acc : varinfo list) : absloc list =
+    match worklist with
+        [] -> List.map absloc_of_varinfo acc
+      | vi :: wklst'' ->
+          if List.mem vi acc then lv_trans_ptsto wklst'' acc
+          else
+            lv_trans_ptsto
+              (List.rev_append
+                 (A.points_to (lvalue_of_varinfo vi))
+                 wklst'')
+              (vi :: acc)
+  in
+    lv_trans_ptsto (A.epoints_to (tau_of_expr e)) []
+
+let absloc_eq a b = A.absloc_eq (a, b)
+
+let d_absloc: unit -> absloc -> Pretty.doc = A.d_absloc
+
+
+let ptrAnalysis = ref false
+let ptrResults = ref false
+let ptrTypes = ref false
+
+
+
+(** Turn this into a CIL feature *)
+let feature : featureDescr = {
+  fd_name = "ptranal";
+  fd_enabled = ptrAnalysis;
+  fd_description = "alias analysis";
+  fd_extraopt = [
+    ("--ptr_may_aliases",
+     Arg.Unit (fun _ -> debug_may_aliases := true),
+     "Print out results of may alias queries");
+    ("--ptr_unify", Arg.Unit (fun _ -> no_sub := true),
+     "Make the alias analysis unification-based");
+    ("--ptr_model_strings", Arg.Unit (fun _ -> model_strings := true),
+     "Make the alias analysis model string constants");
+    ("--ptr_conservative",
+     Arg.Unit (fun _ -> conservative_undefineds := true),
+     "Treat undefineds conservatively in alias analysis");
+    ("--ptr_results", Arg.Unit (fun _ -> ptrResults := true),
+     "print the results of the alias analysis");
+    ("--ptr_mono", Arg.Unit (fun _ -> analyze_mono := true),
+     "run alias analysis monomorphically");
+    ("--ptr_types",Arg.Unit (fun _ -> ptrTypes := true),
+     "print inferred points-to analysis types")
+  ];
+  fd_doit = (function (f: file) ->
+               analyze_file f;
+               compute_results !ptrResults;
+               if !ptrTypes then print_types ());
+  fd_post_check = false (* No changes *)
+}
diff --git a/cil/src/ext/pta/ptranal.mli b/cil/src/ext/pta/ptranal.mli
new file mode 100644
index 000000000..36eb7a546
--- /dev/null
+++ b/cil/src/ext/pta/ptranal.mli
@@ -0,0 +1,156 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(***********************************************************************)
+(*                                                                     *)
+(* Flags                                                               *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Print extra debugging info *)
+val debug : bool ref
+
+(** Debug constraints (print all constraints) *)
+val debug_constraints : bool ref
+
+(** Debug smart alias queries *)
+val debug_aliases : bool ref
+
+(** Debug may alias queries *)
+val debug_may_aliases : bool ref
+
+val smart_aliases : bool ref
+
+(** Print out the top level constraints *)
+val print_constraints : bool ref
+
+(** Make the analysis monomorphic *)
+val analyze_mono : bool ref
+
+(** Disable subtyping *)
+val no_sub : bool ref
+
+(** Make the flow step a no-op *)
+val no_flow : bool ref 
+
+(** Show the progress of the flow step *)
+val show_progress : bool ref 
+
+(** Treat undefined functions conservatively *)
+val conservative_undefineds : bool ref
+
+(***********************************************************************)
+(*                                                                     *)
+(* Building the Points-to Graph                                        *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Analyze a file *)
+val analyze_file : Cil.file -> unit
+
+(** Print the type of each lvalue in the program *)
+val print_types : unit -> unit
+
+(***********************************************************************)
+(*                                                                     *)
+(* High-level Query Interface                                          *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** If undefined functions are analyzed conservatively, any of the 
+  high-level queries may raise this exception *)
+exception UnknownLocation
+
+val may_alias : Cil.exp -> Cil.exp -> bool
+
+val resolve_lval : Cil.lval -> (Cil.varinfo list)
+
+val resolve_exp : Cil.exp -> (Cil.varinfo list)
+
+val resolve_funptr : Cil.exp -> (Cil.fundec list)
+
+(***********************************************************************)
+(*                                                                     *)
+(* Low-level Query Interface                                           *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** type for abstract locations *)
+type absloc 
+
+(** Give an abstract location for a varinfo *)
+val absloc_of_varinfo : Cil.varinfo -> absloc
+
+(** Give an abstract location for an Cil lvalue *)
+val absloc_of_lval : Cil.lval -> absloc
+
+(** may the two abstract locations be aliased? *)
+val absloc_eq : absloc -> absloc -> bool
+
+val absloc_e_points_to  : Cil.exp -> absloc list
+val absloc_e_transitive_points_to : Cil.exp -> absloc list 
+
+val absloc_lval_aliases : Cil.lval -> absloc list
+
+(** Print a string representing an absloc, for debugging. *)
+val d_absloc : unit -> absloc -> Pretty.doc
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Printing results                                                    *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Compute points to sets for variables. If true is passed, print the sets. *)
+val compute_results : bool -> unit
+
+(*
+
+Deprecated these. -- jk
+
+(** Compute alias relationships. If true is passed, print all alias pairs. *)
+ val compute_aliases : bool -> unit
+
+(** Compute alias frequncy *)
+val compute_alias_frequency : unit -> unit
+
+
+*)
+
+val compute_aliases : bool  -> unit
+
+
+val feature: Cil.featureDescr
diff --git a/cil/src/ext/pta/setp.ml b/cil/src/ext/pta/setp.ml
new file mode 100644
index 000000000..a39b97226
--- /dev/null
+++ b/cil/src/ext/pta/setp.ml
@@ -0,0 +1,342 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(***********************************************************************)
+(*                                                                     *)
+(*                           Objective Caml                            *)
+(*                                                                     *)
+(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
+(*                                                                     *)
+(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed    *)
+(*  under the terms of the GNU Library General Public License, with    *)
+(*  the special exception on linking described in file ../LICENSE.     *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* $Id: setp.ml,v 1.3 2003-02-19 19:26:31 jkodumal Exp $ *)
+
+(* Sets over ordered types *)
+
+module type PolyOrderedType =
+  sig
+    type 'a t
+    val compare: 'a t -> 'a t -> int
+  end
+
+module type S =
+  sig
+    type 'a elt
+    type 'a t
+    val empty: 'a t
+    val is_empty: 'a t -> bool
+    val mem: 'a elt -> 'a t -> bool
+    val add: 'a elt -> 'a t -> 'a t
+    val singleton: 'a elt -> 'a t
+    val remove: 'a elt -> 'a t -> 'a t
+    val union: 'a t -> 'a t -> 'a t
+    val inter: 'a t -> 'a t -> 'a t
+    val diff: 'a t -> 'a t -> 'a t
+    val compare: 'a t -> 'a t -> int
+    val equal: 'a t -> 'a t -> bool
+    val subset: 'a t -> 'a t -> bool
+    val iter: ('a elt -> unit) -> 'a t -> unit
+    val fold: ('a elt -> 'b -> 'b) -> 'a t -> 'b -> 'b
+    val for_all: ('a elt -> bool) -> 'a t -> bool
+    val exists: ('a elt -> bool) -> 'a t -> bool
+    val filter: ('a elt -> bool) -> 'a t -> 'a t
+    val partition: ('a elt -> bool) -> 'a t -> 'a t * 'a t
+    val cardinal: 'a t -> int
+    val elements: 'a t -> 'a elt list
+    val min_elt: 'a t -> 'a elt
+    val max_elt: 'a t -> 'a elt
+    val choose: 'a t -> 'a elt
+  end
+
+module Make(Ord: PolyOrderedType) =
+  struct
+    type 'a elt = 'a Ord.t
+    type 'a t = Empty | Node of 'a t * 'a elt * 'a t * int
+
+    (* Sets are represented by balanced binary trees (the heights of the
+       children differ by at most 2 *)
+
+    let height = function
+        Empty -> 0
+      | Node(_, _, _, h) -> h
+
+    (* Creates a new node with left son l, value x and right son r.
+       l and r must be balanced and | height l - height r | <= 2.
+       Inline expansion of height for better speed. *)
+
+    let create l x r =
+      let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h in
+      let hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
+      Node(l, x, r, (if hl >= hr then hl + 1 else hr + 1))
+
+    (* Same as create, but performs one step of rebalancing if necessary.
+       Assumes l and r balanced.
+       Inline expansion of create for better speed in the most frequent case
+       where no rebalancing is required. *)
+
+    let bal l x r =
+      let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h in
+      let hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
+      if hl > hr + 2 then begin
+        match l with
+          Empty -> invalid_arg "Set.bal"
+        | Node(ll, lv, lr, _) ->
+            if height ll >= height lr then
+              create ll lv (create lr x r)
+            else begin
+              match lr with
+                Empty -> invalid_arg "Set.bal"
+              | Node(lrl, lrv, lrr, _)->
+                  create (create ll lv lrl) lrv (create lrr x r)
+            end
+      end else if hr > hl + 2 then begin
+        match r with
+          Empty -> invalid_arg "Set.bal"
+        | Node(rl, rv, rr, _) ->
+            if height rr >= height rl then
+              create (create l x rl) rv rr
+            else begin
+              match rl with
+                Empty -> invalid_arg "Set.bal"
+              | Node(rll, rlv, rlr, _) ->
+                  create (create l x rll) rlv (create rlr rv rr)
+            end
+      end else
+        Node(l, x, r, (if hl >= hr then hl + 1 else hr + 1))
+
+    (* Same as bal, but repeat rebalancing until the final result
+       is balanced. *)
+
+    let rec join l x r =
+      match bal l x r with
+        Empty -> invalid_arg "Set.join"
+      | Node(l', x', r', _) as t' ->
+          let d = height l' - height r' in
+          if d < -2 || d > 2 then join l' x' r' else t'
+
+    (* Merge two trees l and r into one.
+       All elements of l must precede the elements of r.
+       Assumes | height l - height r | <= 2. *)
+
+    let rec merge t1 t2 =
+      match (t1, t2) with
+        (Empty, t) -> t
+      | (t, Empty) -> t
+      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
+          bal l1 v1 (bal (merge r1 l2) v2 r2)
+
+    (* Same as merge, but does not assume anything about l and r. *)
+
+    let rec concat t1 t2 =
+      match (t1, t2) with
+        (Empty, t) -> t
+      | (t, Empty) -> t
+      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
+          join l1 v1 (join (concat r1 l2) v2 r2)
+
+    (* Splitting *)
+
+    let rec split x = function
+        Empty ->
+          (Empty, None, Empty)
+      | Node(l, v, r, _) ->
+          let c = Ord.compare x v in
+          if c = 0 then (l, Some v, r)
+          else if c < 0 then
+            let (ll, vl, rl) = split x l in (ll, vl, join rl v r)
+          else
+            let (lr, vr, rr) = split x r in (join l v lr, vr, rr)
+
+    (* Implementation of the set operations *)
+
+    let empty = Empty
+
+    let is_empty = function Empty -> true | _ -> false
+
+    let rec mem x = function
+        Empty -> false
+      | Node(l, v, r, _) ->
+          let c = Ord.compare x v in
+          c = 0 || mem x (if c < 0 then l else r)
+
+    let rec add x = function
+        Empty -> Node(Empty, x, Empty, 1)
+      | Node(l, v, r, _) as t ->
+          let c = Ord.compare x v in
+          if c = 0 then t else
+          if c < 0 then bal (add x l) v r else bal l v (add x r)
+
+    let singleton x = Node(Empty, x, Empty, 1)
+
+    let rec remove x = function
+        Empty -> Empty
+      | Node(l, v, r, _) ->
+          let c = Ord.compare x v in
+          if c = 0 then merge l r else
+          if c < 0 then bal (remove x l) v r else bal l v (remove x r)
+
+    let rec union s1 s2 =
+      match (s1, s2) with
+        (Empty, t2) -> t2
+      | (t1, Empty) -> t1
+      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
+          if h1 >= h2 then
+            if h2 = 1 then add v2 s1 else begin
+              let (l2, _, r2) = split v1 s2 in
+              join (union l1 l2) v1 (union r1 r2)
+            end
+          else
+            if h1 = 1 then add v1 s2 else begin
+              let (l1, _, r1) = split v2 s1 in
+              join (union l1 l2) v2 (union r1 r2)
+            end
+
+    let rec inter s1 s2 =
+      match (s1, s2) with
+        (Empty, t2) -> Empty
+      | (t1, Empty) -> Empty
+      | (Node(l1, v1, r1, _), t2) ->
+          match split v1 t2 with
+            (l2, None, r2) ->
+              concat (inter l1 l2) (inter r1 r2)
+          | (l2, Some _, r2) ->
+              join (inter l1 l2) v1 (inter r1 r2)
+
+    let rec diff s1 s2 =
+      match (s1, s2) with
+        (Empty, t2) -> Empty
+      | (t1, Empty) -> t1
+      | (Node(l1, v1, r1, _), t2) ->
+          match split v1 t2 with
+            (l2, None, r2) ->
+              join (diff l1 l2) v1 (diff r1 r2)
+          | (l2, Some _, r2) ->
+              concat (diff l1 l2) (diff r1 r2)
+
+    let rec compare_aux l1 l2 =
+        match (l1, l2) with
+        ([], []) -> 0
+      | ([], _)  -> -1
+      | (_, []) -> 1
+      | (Empty :: t1, Empty :: t2) ->
+          compare_aux t1 t2
+      | (Node(Empty, v1, r1, _) :: t1, Node(Empty, v2, r2, _) :: t2) ->
+          let c = Ord.compare v1 v2 in
+          if c <> 0 then c else compare_aux (r1::t1) (r2::t2)
+      | (Node(l1, v1, r1, _) :: t1, t2) ->
+          compare_aux (l1 :: Node(Empty, v1, r1, 0) :: t1) t2
+      | (t1, Node(l2, v2, r2, _) :: t2) ->
+          compare_aux t1 (l2 :: Node(Empty, v2, r2, 0) :: t2)
+
+    let compare s1 s2 =
+      compare_aux [s1] [s2]
+
+    let equal s1 s2 =
+      compare s1 s2 = 0
+
+    let rec subset s1 s2 =
+      match (s1, s2) with
+        Empty, _ ->
+          true
+      | _, Empty ->
+          false
+      | Node (l1, v1, r1, _), (Node (l2, v2, r2, _) as t2) ->
+          let c = Ord.compare v1 v2 in
+          if c = 0 then
+            subset l1 l2 && subset r1 r2
+          else if c < 0 then
+            subset (Node (l1, v1, Empty, 0)) l2 && subset r1 t2
+          else
+            subset (Node (Empty, v1, r1, 0)) r2 && subset l1 t2
+
+    let rec iter f = function
+        Empty -> ()
+      | Node(l, v, r, _) -> iter f l; f v; iter f r
+
+    let rec fold f s accu =
+      match s with
+        Empty -> accu
+      | Node(l, v, r, _) -> fold f l (f v (fold f r accu))
+
+    let rec for_all p = function
+        Empty -> true
+      | Node(l, v, r, _) -> p v && for_all p l && for_all p r
+
+    let rec exists p = function
+        Empty -> false
+      | Node(l, v, r, _) -> p v || exists p l || exists p r
+
+    let filter p s =
+      let rec filt accu = function
+        | Empty -> accu
+        | Node(l, v, r, _) ->
+            filt (filt (if p v then add v accu else accu) l) r in
+      filt Empty s
+
+    let partition p s =
+      let rec part (t, f as accu) = function
+        | Empty -> accu
+        | Node(l, v, r, _) ->
+            part (part (if p v then (add v t, f) else (t, add v f)) l) r in
+      part (Empty, Empty) s
+
+    let rec cardinal = function
+        Empty -> 0
+      | Node(l, v, r, _) -> cardinal l + 1 + cardinal r
+
+    let rec elements_aux accu = function
+        Empty -> accu
+      | Node(l, v, r, _) -> elements_aux (v :: elements_aux accu r) l
+
+    let elements s =
+      elements_aux [] s
+
+    let rec min_elt = function
+        Empty -> raise Not_found
+      | Node(Empty, v, r, _) -> v
+      | Node(l, v, r, _) -> min_elt l
+
+    let rec max_elt = function
+        Empty -> raise Not_found
+      | Node(l, v, Empty, _) -> v
+      | Node(l, v, r, _) -> max_elt r
+
+    let choose = min_elt
+
+  end
diff --git a/cil/src/ext/pta/setp.mli b/cil/src/ext/pta/setp.mli
new file mode 100644
index 000000000..a3b30313c
--- /dev/null
+++ b/cil/src/ext/pta/setp.mli
@@ -0,0 +1,180 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(***********************************************************************)
+(*                                                                     *)
+(*                           Objective Caml                            *)
+(*                                                                     *)
+(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
+(*                                                                     *)
+(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed    *)
+(*  under the terms of the GNU Library General Public License, with    *)
+(*  the special exception on linking described in file ../LICENSE.     *)
+(*                                                                     *)
+(***********************************************************************)
+
+(* $Id: setp.mli,v 1.3 2003-02-19 19:26:31 jkodumal Exp $ *)
+
+(** Sets over ordered types.
+
+   This module implements the set data structure, given a total ordering
+   function over the set elements. All operations over sets
+   are purely applicative (no side-effects).
+   The implementation uses balanced binary trees, and is therefore
+   reasonably efficient: insertion and membership take time
+   logarithmic in the size of the set, for instance. 
+*)
+
+module type PolyOrderedType = 
+  sig
+    type 'a t
+      (** The type of the set elements. *)
+    val compare :  'a t -> 'a t -> int
+      (** A total ordering function over the set elements.
+          This is a two-argument function [f] such that
+          [f e1 e2] is zero if the elements [e1] and [e2] are equal,
+          [f e1 e2] is strictly negative if [e1] is smaller than [e2],
+          and [f e1 e2] is strictly positive if [e1] is greater than [e2].
+          Example: a suitable ordering function is
+          the generic structural comparison function {!Pervasives.compare}. *)
+  end
+(** Input signature of the functor {!Set.Make}. *)
+
+module type S =
+  sig
+    type 'a elt
+    (** The type of the set elements. *)
+
+    type 'a t
+    (** The type of sets. *)
+
+    val empty: 'a t
+    (** The empty set. *)
+
+    val is_empty: 'a t -> bool
+    (** Test whether a set is empty or not. *)
+
+    val mem: 'a elt -> 'a t -> bool
+      (** [mem x s] tests whether [x] belongs to the set [s]. *)
+
+    val add: 'a elt -> 'a t -> 'a t
+    (** [add x s] returns a set containing all elements of [s],
+       plus [x]. If [x] was already in [s], [s] is returned unchanged. *)
+
+    val singleton: 'a elt -> 'a t
+    (** [singleton x] returns the one-element set containing only [x]. *)
+
+    val remove: 'a elt -> 'a t -> 'a t
+    (** [remove x s] returns a set containing all elements of [s],
+       except [x]. If [x] was not in [s], [s] is returned unchanged. *)
+
+    val union: 'a t -> 'a t -> 'a t
+    (** Set union. *)
+
+    val inter: 'a t -> 'a t -> 'a t
+    (** Set interseection. *)
+
+    (** Set difference. *)
+    val diff: 'a t -> 'a t -> 'a t
+
+    val compare: 'a t -> 'a t -> int
+    (** Total ordering between sets. Can be used as the ordering function
+       for doing sets of sets. *)
+
+    val equal: 'a t -> 'a t -> bool
+    (** [equal s1 s2] tests whether the sets [s1] and [s2] are
+       equal, that is, contain equal elements. *)
+
+    val subset: 'a t -> 'a t -> bool
+    (** [subset s1 s2] tests whether the set [s1] is a subset of
+       the set [s2]. *)
+
+    val iter: ('a elt -> unit) -> 'a t -> unit
+    (** [iter f s] applies [f] in turn to all elements of [s].
+       The order in which the elements of [s] are presented to [f]
+       is unspecified. *)
+
+    val fold: ('a elt -> 'b -> 'b) -> 'a t -> 'b -> 'b
+    (** [fold f s a] computes [(f xN ... (f x2 (f x1 a))...)],
+       where [x1 ... xN] are the elements of [s].
+       The order in which elements of [s] are presented to [f] is
+       unspecified. *)
+
+    val for_all: ('a elt -> bool) -> 'a t -> bool
+    (** [for_all p s] checks if all elements of the set
+       satisfy the predicate [p]. *)
+
+    val exists: ('a elt -> bool) -> 'a t -> bool
+    (** [exists p s] checks if at least one element of
+       the set satisfies the predicate [p]. *)
+        
+    val filter: ('a elt -> bool) -> 'a t -> 'a t
+    (** [filter p s] returns the set of all elements in [s]
+       that satisfy predicate [p]. *)
+
+    val partition: ('a elt -> bool) -> 'a t -> 'a t * 'a t
+    (** [partition p s] returns a pair of sets [(s1, s2)], where
+       [s1] is the set of all the elements of [s] that satisfy the
+       predicate [p], and [s2] is the set of all the elements of
+       [s] that do not satisfy [p]. *)
+
+    val cardinal: 'a t -> int
+    (** Return the number of elements of a set. *)
+
+    val elements: 'a t -> 'a elt list
+    (** Return the list of all elements of the given set.
+       The returned list is sorted in increasing order with respect
+       to the ordering [Ord.compare], where [Ord] is the argument
+       given to {!Set.Make}. *)
+
+    val min_elt: 'a t -> 'a elt
+    (** Return the smallest element of the given set
+       (with respect to the [Ord.compare] ordering), or raise
+       [Not_found] if the set is empty. *)
+
+    val max_elt: 'a t -> 'a elt
+    (** Same as {!Set.S.min_elt}, but returns the largest element of the
+       given set. *)
+
+    val choose: 'a t -> 'a elt
+    (** Return one element of the given set, or raise [Not_found] if
+       the set is empty. Which element is chosen is unspecified,
+       but equal elements will be chosen for equal sets. *)
+  end
+(** Output signature of the functor {!Set.Make}. *)
+
+module Make (Ord : PolyOrderedType) : S with type 'a elt = 'a Ord.t
+(** Functor building an implementation of the set structure
+   given a totally ordered type. *)
diff --git a/cil/src/ext/pta/steensgaard.ml b/cil/src/ext/pta/steensgaard.ml
new file mode 100644
index 000000000..636869347
--- /dev/null
+++ b/cil/src/ext/pta/steensgaard.ml
@@ -0,0 +1,1417 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(***********************************************************************)
+(*                                                                     *)
+(*                                                                     *)
+(* This file is currently unused by CIL.  It is included in the        *)
+(*   distribution for reference only.                                  *)
+(*                                                                     *)
+(*                                                                     *)
+(***********************************************************************)
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Type Declarations                                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+exception Inconsistent of string
+exception Bad_cache
+exception No_contents
+exception Bad_proj
+exception Bad_type_copy
+exception Instantiation_cycle
+
+module U = Uref
+module S = Setp
+module H = Hashtbl
+module Q = Queue
+
+(** Polarity kinds-- positive, negative, or nonpolar. *)
+type polarity = Pos 
+		| Neg 
+		| Non
+
+(** Label bounds. The polymorphic type is a hack for recursive modules *)  
+type 'a bound = {index : int; info : 'a} 
+
+(** The 'a type may in general contain urefs, which makes Pervasives.compare
+  incorrect. However, the bounds will always be correct because if two tau's
+  get unified, their cached instantiations will be re-entered into the 
+  worklist, ensuring that any labels find the new bounds *)
+module Bound =
+struct 
+  type 'a t = 'a bound
+  let compare (x : 'a t) (y : 'a t) = 
+    Pervasives.compare x y
+end
+
+module B = S.Make(Bound)
+
+type 'a boundset = 'a B.t
+
+(** Constants, which identify elements in points-to sets *)
+type constant = int * string
+
+module Constant =
+struct
+  type t = constant
+
+  let compare ((xid,_) : t) ((yid,_) : t) =
+    Pervasives.compare xid yid
+end
+
+module C = Set.Make(Constant)
+
+(** Sets of constants. Set union is used when two labels containing 
+  constant sets are unified *)
+type constantset = C.t
+
+type lblinfo = {
+  mutable l_name: string;
+  (** Name of this label *)
+  mutable aliases: constantset;
+  (** Set of constants (tags) for checking aliases *)
+  p_bounds: label boundset U.uref; 
+  (** Set of umatched (p) lower bounds *)
+  n_bounds: label boundset U.uref; 
+  (** Set of unmatched (n) lower bounds *)
+  mutable p_cached: bool;
+  (** Flag indicating whether all reachable p edges have been locally cached *)
+  mutable n_cached: bool;
+  (** Flag indicating whether all reachable n edges have been locally cached *)
+  mutable on_path: bool;
+  (** For cycle detection during reachability queries *)
+}
+
+(** Constructor labels *)
+and label = lblinfo U.uref 
+
+(** The type of lvalues. *)
+type lvalue = {
+  l: label; 
+  contents: tau
+}
+
+(** Data for variables. *)
+and vinfo = {
+  v_name: string; 
+  mutable v_global: bool; 
+  v_cache: cache
+} 
+
+(** Data for ref constructors.  *)
+and rinfo = {
+  rl: label; 
+  mutable r_global: bool; 
+  points_to: tau; 
+  r_cache: cache
+}
+
+(** Data for fun constructors. *)
+and finfo = {
+  fl: label; 
+  mutable f_global: bool; 
+  args: tau list ref; 
+  ret: tau; 
+  f_cache: cache
+}
+
+(* Data for pairs. Note there is no label. *)
+and pinfo = {
+  mutable p_global: bool; 
+  ptr: tau; 
+  lam: tau; 
+  p_cache: cache
+}
+
+(** Type constructors discovered by type inference *)
+and tinfo = Wild
+            | Var of vinfo
+	    | Ref of rinfo
+	    | Fun of finfo
+	    | Pair of pinfo 
+ 
+(** The top-level points-to type. *)
+and tau = tinfo U.uref
+
+(** The instantiation constraint cache. The index is used as a key. *)
+and cache = (int,polarity * tau) H.t
+
+(* Type of semi-unification constraints *)
+type su_constraint = Instantiation of tau * (int * polarity) * tau
+		     | Unification of tau * tau
+
+(** Association lists, used for printing recursive types. The first element 
+  is a type that has been visited. The second element is the string
+  representation of that type (so far). If the string option is set, then 
+  this type occurs within itself, and is associated with the recursive var
+  name stored in the option. When walking a type, add it to an association 
+  list. 
+
+  Example : suppose we have the constraint 'a = ref('a). The type is unified
+  via cyclic unification, and would loop infinitely if we attempted to print
+  it. What we want to do is print the type u rv. ref(rv). This is accomplished
+  in the following manner:
+  
+  -- ref('a) is visited. It is not in the association list, so it is added
+  and the string "ref(" is stored in the second element. We recurse to print
+  the first argument of the constructor.
+
+  -- In the recursive call, we see that 'a (or ref('a)) is already in the
+  association list, so the type is recursive. We check the string option,
+  which is None, meaning that this is the first recurrence of the type. We
+  create a new recursive variable, rv and set the string option to 'rv. Next,
+  we prepend u rv. to the string representation we have seen before, "ref(",
+  and return "rv" as the string representation of this type.
+
+  -- The string so far is "u rv.ref(". The recursive call returns, and we
+  complete the type by printing the result of the call, "rv", and ")"
+
+  In a type where the recursive variable appears twice, e.g. 'a = pair('a,'a),
+  the second time we hit 'a, the string option will be set, so we know to 
+  reuse the same recursive variable name.
+*)
+type association = tau * string ref * string option ref
+  
+(***********************************************************************)
+(*                                                                     *)
+(* Global Variables                                                    *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Print the instantiations constraints (loops with cyclic structures). *)
+let print_constraints : bool ref = ref false
+
+(** Solve constraints as they are introduced. If this is false, constraints
+  are solved in batch fashion at calls to solveConstraints. *)
+let solve_online : bool ref = ref true
+
+(** If true, print all constraints (including induced) and show additional 
+ debug output. *)
+let debug = ref false			       
+let debug_constraints = debug
+
+(** If true, print out extra verbose debug information (including contents
+  of label sets *)
+let verbose_debug = ref false
+
+
+(** If true, make the flow step a no-op *)
+let no_flow = ref false
+
+let no_sub = ref false
+
+(** If true, do not add instantiation constraints *)
+let analyze_mono = ref false
+
+(** A counter for generating unique integers. *)
+let counter : int ref = ref 0
+
+(** A list of equality constraints. *)
+let eq_worklist : su_constraint Q.t = Q.create()
+
+(** A list of instantiation constraints. *)
+let inst_worklist : su_constraint Q.t = Q.create()
+
+(***********************************************************************)
+(*                                                                     *)
+(* Utility Functions                                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Consistency check for inferred types *)
+let  pair_or_var (t : tau) = 
+  match (U.deref t) with
+    | Pair _ -> true
+    | Var _ -> true
+    | _ -> false
+
+let ref_or_var (t : tau) =
+   match (U.deref t) with
+     | Ref _ -> true
+     | Var _ -> true
+     | _ -> false
+
+let fun_or_var (t : tau) =
+  match (U.deref t) with
+    | Fun _ -> true
+    | Var _ -> true
+    |  _ -> false
+
+(** Generate a unique integer. *)
+let fresh_index () : int = 
+  incr counter; 
+  !counter
+
+(** Negate a polarity. *)
+let negate (p : polarity) : polarity =
+  match p with
+    | Pos -> Neg
+    | Neg -> Pos
+    | Non -> Non
+
+(** Compute the least-upper-bounds of two polarities. *)
+let lub (p,p' : polarity * polarity) : polarity = 
+  match p with
+    | Pos -> 
+	begin
+	  match p' with 
+	    | Pos -> Pos
+	    | _ -> Non
+	end
+    | Neg -> 
+	begin
+	  match p' with
+	    | Neg -> Neg 
+	    | _ -> Non
+	end
+    | Non -> Non
+
+(** Extract the cache from a type *)
+let get_cache (t : tau) : cache =
+  match U.deref t with 
+    | Wild -> raise Bad_cache
+    | Var v -> v.v_cache
+    | Ref r -> r.r_cache
+    | Pair p -> p.p_cache
+    | Fun f -> f.f_cache
+
+(** Determine whether or not a type is global *)
+let get_global (t : tau) : bool = 
+  match U.deref t with
+    |  Wild -> false
+    | Var v -> v.v_global
+    | Ref r -> r.r_global
+    | Pair p -> p.p_global
+    | Fun f -> f.f_global
+
+(** Return true if a type is monomorphic (global). *)
+let global_tau = get_global
+
+let global_lvalue lv = get_global lv.contents
+
+(** Return true if e is a member of l (according to uref equality) *)
+let rec ulist_mem e l =
+  match l with
+    | [] -> false
+    | h :: t -> if (U.equal(h,e)) then true else ulist_mem e t 
+
+(** Convert a polarity to a string *)
+let string_of_polarity p = 
+    match p with 
+      | Pos -> "+"
+      | Neg -> "-"
+      | Non -> "T"
+
+(** Convert a label to a string, short representation *)
+let string_of_label2 (l : label) : string = 
+  "\"" ^ (U.deref l).l_name ^ "\""
+
+(** Convert a label to a string, long representation *)
+let string_of_label (l : label ) : string =
+  let rec constset_to_string = function
+    | (_,s) :: [] -> s
+    | (_,s) :: t -> s ^ "," ^ (constset_to_string t)
+    | [] -> ""
+  in
+  let aliases = constset_to_string (C.elements ((U.deref l).aliases))
+  in
+    if ( (aliases = "") || (not !verbose_debug))
+    then string_of_label2 l 
+    else aliases
+
+(** Return true if the element [e] is present in the association list *)
+let rec assoc_list_mem (e : tau) (l : association list) =
+  match l with
+    | [] -> None
+    | (h,s,so) :: t -> 
+	if (U.equal(h,e)) then (Some (s,so)) else assoc_list_mem e t
+	
+(** Given a tau, create a unique recursive variable name. This should always
+  return the same name for a given tau *)
+let fresh_recvar_name (t : tau) : string =	    
+  match U.deref t with
+    | Pair p -> "rvp" ^ string_of_int((Hashtbl.hash p)) 
+    | Ref r -> "rvr" ^ string_of_int((Hashtbl.hash r)) 
+    | Fun f -> "rvf" ^ string_of_int((Hashtbl.hash f))
+    | _ -> raise (Inconsistent ("recvar_name"))
+
+(** Return a string representation of a tau, using association lists. *)
+let string_of_tau (t : tau ) : string = 
+  let tau_map : association list ref = ref [] in
+  let rec string_of_tau' t = 
+    match (assoc_list_mem t (!tau_map)) with
+      | Some (s,so) -> (* recursive type. see if a var name has been set *)
+	  begin
+	    match (!so) with
+	      | None ->
+		  begin
+		    let rv = fresh_recvar_name(t) in
+		      s := "u " ^ rv ^ "." ^ (!s);
+		      so := Some (rv);
+		      rv
+		  end
+	      | Some rv -> rv
+	  end
+      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
+	  let s = ref "" in
+	  let so : string option ref = ref None in
+	    begin
+	      tau_map := (t,s,so) :: (!tau_map);
+
+	      (match (U.deref t) with
+		| Wild -> s := "_"; 
+		| Var v -> s := v.v_name;
+		| Pair p -> 
+		    begin
+		      assert (ref_or_var(p.ptr));
+		      assert (fun_or_var(p.lam));
+		      s := "{";
+		      s := (!s) ^ (string_of_tau' p.ptr);
+		      s := (!s) ^ ",";
+		      s := (!s) ^ (string_of_tau' p.lam);
+		      s := (!s) ^"}"
+		
+		    end
+		| Ref r ->
+		    begin
+		      assert(pair_or_var(r.points_to));
+		      s := "ref(|";
+		      s := (!s) ^ (string_of_label r.rl);
+		      s := (!s) ^ "|,";
+		      s := (!s) ^ (string_of_tau' r.points_to);
+		      s := (!s) ^ ")"
+		    
+		    end
+		| Fun f ->
+		    begin
+		      assert(pair_or_var(f.ret));
+		      let rec string_of_args = function
+			| h :: [] ->
+			    begin
+			      assert(pair_or_var(h));
+			      s := (!s) ^ (string_of_tau' h)
+			    end
+			| h :: t -> 
+			    begin
+			      assert(pair_or_var(h));
+			      s := (!s) ^ (string_of_tau' h) ^ ",";
+			      string_of_args t
+			    end
+			| [] -> ()
+		      in
+			s := "fun(|";
+			s := (!s) ^ (string_of_label f.fl);
+			s := (!s) ^ "|,";
+			s := (!s) ^ "<";
+			if (List.length !(f.args) > 0) 
+			then
+			  string_of_args !(f.args)
+			else
+			  s := (!s) ^ "void";
+			s := (!s) ^">,";
+			s := (!s) ^ (string_of_tau' f.ret);
+			s := (!s) ^ ")"
+		    end);
+	      tau_map := List.tl (!tau_map);
+	      !s
+	    end
+  in
+    string_of_tau' t
+
+(** Convert an lvalue to a string *)	
+let rec string_of_lvalue (lv : lvalue) : string =
+  let contents = (string_of_tau(lv.contents)) in
+  let l = (string_of_label lv.l) in
+    assert(pair_or_var(lv.contents));
+    Printf.sprintf "[%s]^(%s)" contents l
+	      
+(** Print a list of tau elements, comma separated *)
+let rec print_tau_list (l : tau list) : unit = 
+  let t_strings = List.map string_of_tau l in
+  let rec print_t_strings = function
+    | h :: [] -> print_string h; print_newline();
+    | h :: t -> print_string h; print_string ", "; print_t_strings t
+    | [] -> ()
+  in
+    print_t_strings t_strings
+
+(** Print a constraint. *)
+let print_constraint (c : su_constraint) = 
+  match c with 
+    | Unification (t,t') -> 
+	let lhs = string_of_tau t in
+	let rhs = string_of_tau t' in 
+	  Printf.printf "%s == %s\n" lhs rhs
+    | Instantiation (t,(i,p),t') ->
+	let lhs = string_of_tau t in
+	let rhs = string_of_tau t' in
+	let index = string_of_int i in
+	let pol = string_of_polarity p in
+	  Printf.printf "%s <={%s,%s} %s\n" lhs index pol rhs
+
+(* If [positive] is true, return the p-edge bounds, otherwise, return
+   the n-edge bounds. *)    
+let get_bounds (positive : bool) (l : label) : label boundset U.uref =
+  if (positive) then
+    (U.deref l).p_bounds
+  else
+    (U.deref l).n_bounds
+
+(** Used for cycle detection during the flow step. Returns true if the
+ label [l] is found on the current path. *)
+let on_path (l : label) : bool =
+  (U.deref l).on_path
+
+(** Used for cycle detection during the flow step. Identifies [l] as being
+  on/off the current path. *) 
+let set_on_path (l : label) (b : bool) : unit =
+  (U.deref l).on_path <- b
+
+(** Make the type a global type *)
+let set_global (t : tau) (b : bool) : bool =
+  if (!debug && b) 
+  then 
+    Printf.printf "Setting a new global : %s\n" (string_of_tau t);
+  begin
+    assert ( (not (get_global(t)) ) || b );
+    (match U.deref t with
+       | Wild -> ()
+       | Var v -> v.v_global <- b
+       | Ref r -> r.r_global <- b
+       | Pair p -> p.p_global <- b
+       | Fun f -> f.f_global <- b);
+    b
+  end
+
+(** Return a label's bounds as a string *)
+let string_of_bounds (is_pos : bool) (l : label) : string =
+  let bounds = 
+    if (is_pos) then
+      U.deref ((U.deref l).p_bounds)
+    else
+      U.deref ((U.deref l).n_bounds)
+  in
+    B.fold (fun b -> fun res -> res ^ (string_of_label2 b.info) ^ " "
+	   ) bounds ""
+    
+(***********************************************************************)
+(*                                                                     *)
+(* Type Operations -- these do not create any constraints              *)
+(*                                                                     *)
+(***********************************************************************)
+
+let wild_val = U.uref Wild
+
+(** The wild (don't care) value. *)
+let wild () : tau =
+  wild_val
+
+(** Create an lvalue with label [lbl] and tau contents [t]. *)
+let make_lval (lbl,t : label * tau) : lvalue = 
+  {l = lbl; contents = t}
+
+(** Create a new label with name [name]. Also adds a fresh constant
+ with name [name] to this label's aliases set. *)  
+let make_label (name : string) : label =
+  U.uref {
+    l_name = name;
+    aliases = (C.add (fresh_index(),name) C.empty); 
+    p_bounds = U.uref (B.empty); 
+    n_bounds = U.uref (B.empty);
+    p_cached = false;
+    n_cached = false;
+    on_path = false
+ }
+
+(** Create a new label with an unspecified name and an empty alias set. *) 
+let fresh_label () : label =
+  U.uref {
+    l_name = "l_" ^ (string_of_int (fresh_index()));
+    aliases = (C.empty); 
+    p_bounds = U.uref (B.empty); 
+    n_bounds = U.uref (B.empty);
+    p_cached = false;
+    n_cached = false;
+    on_path = false
+ }
+
+(** Create a fresh bound. *)
+let make_bound (i,a : int * 'a) : 'a bound = 
+  {index = i; info = a }
+
+(** Create a fresh named variable with name '[name]. *)
+let make_var (b: bool) (name : string) : tau =
+   U.uref (Var {v_name = ("'" ^name); 
+		v_global = b; 
+		v_cache = H.create 4})
+
+(** Create a fresh unnamed variable (name will be 'fv). *)
+let fresh_var () : tau =
+  make_var false ("fv" ^ (string_of_int (fresh_index())) )
+
+(** Create a fresh unnamed variable (name will be 'fi). *)
+let fresh_var_i () : tau = 
+ make_var false ("fi" ^ (string_of_int (fresh_index())) )
+
+(** Create a Fun constructor. *)
+let make_fun (lbl,a,r : label * (tau list) * tau) : tau =
+  U.uref (Fun {fl = lbl ; 
+	       f_global = false; 
+	       args = ref a; 
+	       ret = r;
+	       f_cache = H.create 4})
+
+(** Create a Ref constructor. *)
+let make_ref (lbl,pt : label * tau) : tau =
+  U.uref (Ref {rl = lbl ; 
+	       r_global = false; 
+	       points_to = pt; 
+	       r_cache = H.create 4})
+
+(** Create a Pair constructor. *)
+let make_pair (p,f : tau * tau) : tau =
+  U.uref (Pair {ptr = p; 
+		p_global = false;
+		lam = f; 
+		p_cache = H.create 4})
+
+(** Copy the toplevel constructor of [t], putting fresh variables in each
+  argement of the constructor. *)
+let copy_toplevel (t : tau) : tau = 
+  match U.deref t with
+    | Pair _ -> 
+	make_pair (fresh_var_i(), fresh_var_i())
+    | Ref  _ -> 
+	make_ref (fresh_label(),fresh_var_i())
+    | Fun  f -> 
+	let fresh_fn = fun _ -> fresh_var_i()
+	in
+	  make_fun (fresh_label(), List.map fresh_fn !(f.args) , fresh_var_i())
+    | _ -> raise Bad_type_copy
+
+let pad_args (l,l' : (tau list ref) * (tau list ref)) : unit =
+  let padding = ref ((List.length (!l)) - (List.length (!l')))
+  in
+    if (!padding == 0) then ()
+    else 
+      let to_pad = 
+	if (!padding > 0) then l' else (padding := -(!padding);l)
+      in
+	for i = 1 to (!padding)  do
+	  to_pad := (!to_pad) @ [fresh_var()]
+	done
+
+(***********************************************************************)
+(*                                                                     *)
+(* Constraint Generation/ Resolution                                   *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Returns true if the constraint has no effect, i.e. either the left-hand
+  side or the right-hand side is wild. *)
+let wild_constraint (t,t' : tau * tau) : bool = 
+  let ti,ti' = U.deref t, U.deref t' in
+    match ti,ti' with
+      | Wild, _ -> true
+      | _, Wild -> true
+      | _ -> false
+
+exception Cycle_found
+
+(** Cycle detection between instantiations. Returns true if there is a cycle
+  from t to t' *)
+let exists_cycle (t,t' : tau * tau) : bool =
+  let visited : tau list ref = ref [] in
+  let rec exists_cycle' t =
+    if (ulist_mem t (!visited))
+    then
+      begin (*
+	print_string "Instantiation cycle found :";
+	print_tau_list (!visited);
+	print_newline();
+	print_string (string_of_tau t);
+	print_newline(); *)
+	(* raise Instantiation_cycle *) 
+	(* visited := List.tl (!visited) *) (* check *)
+      end
+    else
+      begin
+	visited := t :: (!visited);
+	if (U.equal(t,t')) 
+	then raise Cycle_found
+	else
+	  H.iter (fun _ -> fun (_,t'') -> 
+		    if (U.equal (t,t'')) then () 
+		    else
+		      ignore (exists_cycle' t'')
+		 ) (get_cache t) ;
+	visited := List.tl (!visited)
+      end
+  in
+    try
+      exists_cycle' t;
+      false
+    with
+      | Cycle_found -> true
+	
+exception Subterm
+  
+(** Returns true if [t'] is a proper subterm of [t] *)
+let proper_subterm (t,t') = 
+  let visited : tau list ref = ref [] in
+  let rec proper_subterm' t = 
+    if (ulist_mem t (!visited)) 
+    then () (* recursive type *)
+    else
+      if (U.equal (t,t'))
+      then raise Subterm
+      else
+	begin
+	  visited := t :: (!visited);
+	  (
+	    match (U.deref t) with
+	      | Wild -> ()
+	      | Var _ -> ()
+	      | Ref r ->
+		  proper_subterm' r.points_to
+	      | Pair p ->
+		  proper_subterm' p.ptr;
+		  proper_subterm' p.lam
+	      | Fun f ->
+		  proper_subterm' f.ret;
+		  List.iter (proper_subterm') !(f.args)
+	  );
+	  visited := List.tl (!visited)
+	  end
+  in
+    try
+      if (U.equal(t,t')) then false 
+      else
+	begin
+	  proper_subterm' t;
+	  false
+	end
+    with
+      | Subterm -> true
+
+(** The extended occurs check. Search for a cycle of instantiations from [t]
+  to [t']. If such a cycle exists, check to see that [t'] is a proper subterm
+  of [t]. If it is, then return true *)
+let eoc (t,t') : bool =
+  if (exists_cycle(t,t') && proper_subterm(t,t'))
+  then
+    begin
+      if (!debug)
+      then
+	Printf.printf "Occurs check : %s occurs within %s\n" (string_of_tau t')
+	  (string_of_tau t)
+      else 
+	();
+      true 
+    end
+  else
+   false
+  
+(** Resolve an instantiation constraint *)
+let rec instantiate_int (t,(i,p),t' : tau * (int * polarity) * tau) =
+  if  ( wild_constraint(t,t') || (not (store(t,(i,p),t'))) || 
+	U.equal(t,t') )
+  then ()
+  else 
+    let ti,ti' = U.deref t, U.deref t' in
+      match ti,ti' with 
+	| Ref r, Ref r' -> 
+	    instantiate_ref(r,(i,p),r')
+	| Fun f, Fun f' -> 
+	    instantiate_fun(f,(i,p),f')
+	| Pair pr, Pair pr' ->
+	    begin
+	      add_constraint_int (Instantiation (pr.ptr,(i,p),pr'.ptr));
+	      add_constraint_int (Instantiation (pr.lam,(i,p),pr'.lam))
+	    end
+	| Var v, _ -> ()
+	| _,Var v' -> 
+	    if eoc(t,t')
+	    then 
+	      add_constraint_int (Unification (t,t'))
+	    else
+	      begin
+		unstore(t,i);
+		add_constraint_int (Unification ((copy_toplevel t),t'));
+		add_constraint_int (Instantiation (t,(i,p),t')) 
+	      end
+	| _ -> raise (Inconsistent("instantiate"))
+
+(** Apply instantiations to the ref's label, and structurally down the type.
+  Contents of ref constructors are instantiated with polarity Non. *)
+and instantiate_ref (ri,(i,p),ri') : unit =
+  add_constraint_int (Instantiation(ri.points_to,(i,Non),ri'.points_to));
+  instantiate_label (ri.rl,(i,p),ri'.rl)
+
+(** Apply instantiations to the fun's label, and structurally down the type. 
+   Flip the polarity for the function's args. If the lengths of the argument
+   lists don't match, extend the shorter list as necessary.  *)
+and instantiate_fun (fi,(i,p),fi') : unit =
+    pad_args (fi.args, fi'.args);
+    assert(List.length !(fi.args) == List.length !(fi'.args));
+    add_constraint_int (Instantiation (fi.ret,(i,p),fi'.ret));
+    List.iter2 (fun t ->fun t' -> 
+		  add_constraint_int (Instantiation(t,(i,negate p),t'))) 
+      !(fi.args) !(fi'.args);
+    instantiate_label (fi.fl,(i,p),fi'.fl)
+
+(** Instantiate a label. Update the label's bounds with new flow edges. 
+ *)
+and instantiate_label (l,(i,p),l' : label * (int * polarity) * label) : unit =
+  if (!debug) then
+    Printf.printf "%s <= {%d,%s} %s\n" (string_of_label l) i 
+      (string_of_polarity p) (string_of_label l');
+  let li,li' = U.deref l, U.deref l' in
+    match p with
+      | Pos ->
+	  U.update (li'.p_bounds, 
+		    B.add(make_bound (i,l)) (U.deref li'.p_bounds)
+		   )
+      | Neg -> 
+	  U.update (li.n_bounds, 
+		    B.add(make_bound (i,l')) (U.deref li.n_bounds)
+		   )
+      | Non ->
+	  begin
+	    U.update (li'.p_bounds, 
+		      B.add(make_bound (i,l)) (U.deref li'.p_bounds)
+		     );
+	    U.update (li.n_bounds, 
+		      B.add(make_bound (i,l')) (U.deref li.n_bounds)
+		     )
+	  end
+	     
+(** Resolve a unification constraint. Does the uref unification after grabbing
+  a copy of the information before the two infos are unified. The other 
+  interesting feature of this function is the way 'globalness' is propagated.
+  If a non-global is unified with a global, the non-global becomes global. 
+  If the ecr became global, there is a problem because none of its cached 
+  instantiations know that the type became monomorphic. In this case, they
+  must be re-inserted via merge-cache. Merge-cache always reinserts cached
+  instantiations from the non-ecr type, i.e. the type that was 'killed' by the
+  unification. *)
+and unify_int (t,t' : tau * tau) : unit = 
+  if (wild_constraint(t,t') || U.equal(t,t')) 
+  then ()
+  else 
+    let ti, ti' = U.deref t, U.deref t' in
+      begin
+	U.unify combine (t,t');
+	match ti,ti' with
+	  | Var v, _ -> 
+	      begin 
+		if (set_global t' (v.v_global || (get_global t')))
+		then (H.iter (merge_cache t') (get_cache t'))
+		else ();
+		H.iter (merge_cache t') v.v_cache
+	      end
+	  | _, Var v ->
+	      begin 
+		if (set_global t (v.v_global || (get_global t)))
+		then (H.iter (merge_cache t) (get_cache t))
+		else ();
+		H.iter (merge_cache t) v.v_cache
+	      end
+	  | Ref r, Ref r' -> 
+	      begin
+		if (set_global t (r.r_global || r'.r_global))
+		then (H.iter (merge_cache t) (get_cache t))
+		else ();
+		H.iter (merge_cache t) r'.r_cache;
+		unify_ref(r,r')
+	      end
+	  | Fun f, Fun f' -> 
+	      begin
+		if (set_global t (f.f_global || f'.f_global))
+		then (H.iter (merge_cache t) (get_cache t))
+		else (); 
+		H.iter (merge_cache t) f'.f_cache;
+		unify_fun (f,f');
+	      end
+	  | Pair p, Pair p' ->
+	      begin
+		if (set_global t (p.p_global || p'.p_global))
+		then (H.iter (merge_cache t) (get_cache t))
+		else (); 
+		H.iter (merge_cache t) p'.p_cache;
+		add_constraint_int (Unification (p.ptr,p'.ptr));
+		add_constraint_int (Unification (p.lam,p'.lam))
+	      end
+	  | _ -> raise (Inconsistent("unify"))
+      end
+
+(** Unify the ref's label, and apply unification structurally down the type. *)
+and unify_ref (ri,ri' : rinfo * rinfo) : unit =
+  add_constraint_int (Unification (ri.points_to,ri'.points_to));
+  unify_label(ri.rl,ri'.rl) 
+
+(** Unify the fun's label, and apply unification structurally down the type, 
+  at arguments and return value. When combining two lists of different lengths,
+  always choose the longer list for the representative. *)
+and unify_fun (li,li' : finfo * finfo) : unit = 
+  let rec union_args  = function
+    | _, [] -> false
+    | [], _ -> true
+    | h :: t, h' :: t' -> 
+	add_constraint_int (Unification (h,h')); union_args(t,t') 
+  in
+    begin
+      unify_label(li.fl,li'.fl);
+      add_constraint_int (Unification (li.ret,li'.ret));
+      if (union_args(!(li.args),!(li'.args))) 
+      then li.args := !(li'.args);
+    end
+
+(** Unify two labels, combining the set of constants denoting aliases. *)
+and unify_label (l,l' : label * label) : unit =
+  let pick_name (li,li' : lblinfo * lblinfo) = 
+    if ( (String.length li.l_name) > 1 && (String.sub (li.l_name) 0 2) = "l_") 
+    then 
+      li.l_name <- li'.l_name
+    else ()
+  in
+  let combine_label (li,li' : lblinfo *lblinfo) : lblinfo =
+    let p_bounds = U.deref (li.p_bounds) in
+    let p_bounds' = U.deref (li'.p_bounds) in
+    let n_bounds = U.deref (li.n_bounds) in
+    let n_bounds' = U.deref (li'.n_bounds) in 
+      begin
+	pick_name(li,li');
+	li.aliases <- C.union (li.aliases) (li'.aliases);
+	U.update (li.p_bounds, (B.union p_bounds p_bounds'));
+	U.update (li.n_bounds, (B.union n_bounds n_bounds'));
+	li
+    end
+  in(*
+    if (!debug) then
+      begin
+	Printf.printf "Unifying %s with %s...\n" 
+	  (string_of_label l) (string_of_label l');
+	Printf.printf "pbounds : %s\n" (string_of_bounds true l);
+	Printf.printf "nbounds : %s\n" (string_of_bounds false l);
+	Printf.printf "pbounds : %s\n" (string_of_bounds true l');
+	Printf.printf "nbounds : %s\n\n" (string_of_bounds false l')
+      end; *)
+    U.unify combine_label (l,l')
+    (* if (!debug) then
+      begin
+	Printf.printf "pbounds : %s\n" (string_of_bounds true l);
+	Printf.printf "nbounds : %s\n" (string_of_bounds false l)
+      end *)
+
+(** Re-assert a cached instantiation constraint, since the old type was 
+  killed by a unification *)
+and merge_cache (rep : tau) (i : int) (p,t' : polarity * tau) : unit =
+  add_constraint_int (Instantiation (rep,(i,p),t'))
+      
+(** Pick the representative info for two tinfo's. This function prefers the
+  first argument when both arguments are the same structure, but when
+  one type is a structure and the other is a var, it picks the structure. *)
+and combine (ti,ti' : tinfo * tinfo) : tinfo = 
+  match ti,ti' with
+    | Var _, _ -> ti'
+    | _,_ -> ti 
+
+(** Add a new constraint induced by other constraints. *)
+and add_constraint_int (c : su_constraint) =
+  if (!print_constraints && !debug) then print_constraint c else (); 
+  begin
+    match c with
+      | Instantiation _ ->
+	  Q.add c inst_worklist
+      | Unification _ ->
+	  Q.add c eq_worklist
+  end;
+  if (!debug) then solve_constraints() else ()
+  
+(** Add a new constraint introduced through this module's interface (a 
+  top-level constraint). *)
+and add_constraint (c : su_constraint) =
+  begin
+    add_constraint_int (c);
+    if (!print_constraints && not (!debug)) then print_constraint c else (); 
+    if (!solve_online) then solve_constraints() else ()
+  end
+
+
+(* Fetch constraints, preferring equalities. *)
+and fetch_constraint () : su_constraint option =
+  if (Q.length eq_worklist > 0)
+  then 
+    Some (Q.take eq_worklist)
+  else if (Q.length inst_worklist > 0)
+  then
+    Some (Q.take inst_worklist)
+  else
+    None 
+
+(** Returns the target of a cached instantiation, if it exists. *)
+and target (t,i,p : tau * int * polarity) : (polarity * tau) option =
+  let cache = get_cache t in
+    if (global_tau t) then Some (Non,t) 
+    else
+      try
+	Some (H.find cache i)
+      with 
+	| Not_found -> None
+	  
+(** Caches a new instantiation, or applies well-formedness. *)
+and store ( t,(i,p),t' : tau * (int * polarity) * tau) : bool =
+  let cache = get_cache t in
+    match target(t,i,p) with
+      | Some (p'',t'') ->
+	  if (U.equal (t',t'') && (lub(p,p'') = p''))
+	  then
+	      false
+	  else
+	    begin
+	      add_constraint_int (Unification (t',t''));
+	      H.replace cache i (lub(p,p''),t'');
+	      (* add a new forced instantiation as well *)
+	      if (lub(p,p'') = p'') 
+	      then ()
+	      else
+		begin
+		  unstore(t,i);
+		  add_constraint_int (Instantiation (t,(i,lub(p,p'')),t''))
+		end;
+	      false 
+	    end
+      | None ->
+	  begin
+	    H.add cache i (p,t');
+	    true
+	  end
+
+(** Remove a cached instantiation. Used when type structure changes *)
+and unstore (t,i : tau * int) =
+let cache = get_cache t in
+  H.remove cache i
+
+(** The main solver loop. *)
+and solve_constraints () : unit = 
+  match fetch_constraint () with
+    | Some c ->
+	begin
+	  (match c with
+	     | Instantiation (t,(i,p),t') -> instantiate_int (t,(i,p),t')
+	     | Unification (t,t') -> unify_int (t,t')
+	  );
+	  solve_constraints()
+	end
+    | None -> ()
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Interface Functions                                                 *)
+(*                                                                     *)
+(***********************************************************************)
+    
+(** Return the contents of the lvalue. *)
+let rvalue (lv : lvalue) : tau = 
+  lv.contents
+
+(** Dereference the rvalue. If it does not have enough structure to support
+  the operation, then the correct structure is added via new unification
+  constraints. *)
+let rec deref (t : tau) : lvalue =
+  match U.deref t with 
+    | Pair p ->
+	(
+	  match U.deref (p.ptr) with
+	    | Var _ ->
+		begin 
+		 (* let points_to = make_pair(fresh_var(),fresh_var()) in *)
+		  let points_to = fresh_var() in 
+		  let l = fresh_label() in
+		  let r = make_ref(l,points_to)
+		  in
+		    add_constraint (Unification (p.ptr,r));
+		    make_lval(l, points_to)
+		end
+	    | Ref r -> make_lval(r.rl, r.points_to)
+	    | _ -> raise (Inconsistent("deref"))
+	)
+    | Var v -> 
+	begin
+	  add_constraint (Unification (t,make_pair(fresh_var(),fresh_var())));
+	  deref t
+	end
+    | _ -> raise (Inconsistent("deref -- no top level pair"))
+
+(** Form the union of [t] and [t']. *)
+let join (t : tau) (t' : tau) : tau = 
+  let t''  = fresh_var() in
+    add_constraint (Unification (t,t''));
+    add_constraint (Unification (t',t''));
+    t''
+
+(** Form the union of a list [tl], expected to be the initializers of some
+  structure or array type. *)
+let join_inits (tl : tau list) : tau = 
+  let t' = fresh_var() in
+    begin
+      List.iter (function t'' -> add_constraint (Unification(t',t''))) tl;
+      t'
+    end
+
+(** Take the address of an lvalue. Does not add constraints. *)
+let address (lv  : lvalue) : tau = 
+  make_pair (make_ref (lv.l, lv.contents), fresh_var() )
+    
+(** Instantiate a type with index i. By default, uses positive polarity. 
+ Adds an instantiation constraint. *)
+let instantiate (lv : lvalue) (i : int) : lvalue = 
+  if (!analyze_mono) then lv
+  else
+    begin
+      let l' = fresh_label () in
+      let t' = fresh_var_i () in
+	instantiate_label(lv.l,(i,Pos),l');
+	add_constraint (Instantiation (lv.contents,(i,Pos),t'));
+	make_lval(l',t') (* check -- fresh label ?? *)
+    end 
+    
+(** Constraint generated from assigning [t] to [lv]. *)
+let assign (lv : lvalue) (t : tau) : unit = 
+  add_constraint (Unification (lv.contents,t))
+    
+
+(** Project out the first (ref) component or a pair. If the argument [t] has
+  no discovered structure, raise No_contents. *)
+let proj_ref (t : tau) : tau = 
+  match U.deref t with
+    | Pair p -> p.ptr
+    | Var v -> raise No_contents
+    | _ -> raise Bad_proj
+
+(* Project out the second (fun) component of a pair. If the argument [t] has
+ no discovered structure, create it on the fly by adding constraints. *)
+let proj_fun (t : tau) : tau = 
+  match U.deref t with
+    | Pair p -> p.lam
+    | Var v -> 
+	let p,f = fresh_var(), fresh_var() in
+	  add_constraint (Unification (t,make_pair(p,f)));
+	  f
+    | _ -> raise Bad_proj
+
+let get_args (t : tau) : tau list ref =
+  match U.deref t with 
+    | Fun f -> f.args
+    | _ -> raise (Inconsistent("get_args"))
+
+(** Function type [t] is applied to the arguments [actuals]. Unifies the 
+  actuals with the formals of [t]. If no functions have been discovered for 
+  [t] yet, create a fresh one and unify it with t. The result is the return
+  value of the function. *)
+let apply (t : tau) (al : tau list) : tau = 
+  let f = proj_fun(t) in
+  let actuals = ref al in 
+  let formals,ret =
+    match U.deref f with
+      | Fun fi -> (fi.args),fi.ret
+      | Var v ->
+	  let new_l,new_ret,new_args = 
+	    fresh_label(), fresh_var (), 
+	    List.map (function _ -> fresh_var()) (!actuals) 
+	  in
+	  let new_fun = make_fun(new_l,new_args,new_ret) in
+	    add_constraint (Unification(new_fun,f));
+	    (get_args new_fun,new_ret)
+      | Ref _ -> raise (Inconsistent ("apply_ref"))
+      | Pair _ -> raise (Inconsistent ("apply_pair"))
+      | Wild -> raise (Inconsistent("apply_wild"))
+  in
+    pad_args(formals,actuals);
+    List.iter2 (fun actual -> fun formal -> 
+		  add_constraint (Unification (actual,formal))
+	       ) !actuals !formals;
+    ret 
+    
+(** Create a new function type with name [name], list of formal arguments 
+  [formals], and return value [ret]. Adds no constraints. *)
+let make_function (name : string) (formals : lvalue list) (ret : tau) : tau = 
+  let 
+    f = make_fun(make_label(name),List.map (fun x -> rvalue x) formals, ret) 
+  in
+    make_pair(fresh_var(),f)
+
+(** Create an lvalue. If [is_global] is true, the lvalue will be treated 
+    monomorphically. *)
+let make_lvalue (is_global : bool) (name : string) : lvalue = 
+  if (!debug && is_global) 
+  then 
+    Printf.printf "Making global lvalue : %s\n" name
+  else ();
+  make_lval(make_label(name), make_var is_global name)
+ 
+
+(** Create a fresh non-global named variable. *)
+let make_fresh (name : string) : tau =
+  make_var false (name)
+
+(** The default type for constants. *)
+let bottom () : tau = 
+  make_var false ("bottom")
+
+(** Unify the result of a function with its return value. *)
+let return (t : tau) (t' : tau) =
+  add_constraint (Unification (t,t'))
+
+
+(***********************************************************************)
+(*                                                                     *)
+(* Query/Extract Solutions                                             *)
+(*                                                                     *)
+(***********************************************************************)
+
+(** Unify the data stored in two label bounds. *)
+let combine_lbounds (s,s' : label boundset * label boundset) =
+  B.union s s'
+
+(** Truncates a list of urefs [l] to those elements up to and including the 
+  first occurence of the specified element [elt].  *)
+let truncate l elt = 
+  let keep = ref true in
+    List.filter 
+      (fun x -> 
+	 if (not (!keep)) 
+	 then 
+	     false
+	 else
+	   begin
+	     if  (U.equal(x,elt)) 
+	     then 
+	       keep := false
+	     else ();
+	     true
+	   end
+      ) l
+
+let debug_cycle_bounds is_pos c =
+  let rec debug_cycle_bounds' = function
+    | h :: [] -> 
+	Printf.printf "%s --> %s\n" (string_of_bounds is_pos h) 
+	(string_of_label2 h)
+    | h :: t ->
+	begin
+	  Printf.printf "%s --> %s\n" (string_of_bounds is_pos h)
+	    (string_of_label2 h);
+	  debug_cycle_bounds' t
+	end
+    | [] -> ()
+  in
+    debug_cycle_bounds' c
+
+(** For debugging, print a cycle of instantiations *)
+let debug_cycle (is_pos,c,l,p) =
+  let kind = if is_pos then "P" else "N" in
+  let rec string_of_cycle = function 
+    | h :: [] -> string_of_label2 h
+    | [] -> ""
+    | h :: t -> Printf.sprintf "%s,%s" (string_of_label2 h) (string_of_cycle t)
+  in
+    Printf.printf "Collapsing %s cycle around %s:\n" kind (string_of_label2 l);
+    Printf.printf "Elements are: %s\n" (string_of_cycle c);
+    Printf.printf "Per-element bounds:\n";
+    debug_cycle_bounds is_pos c;
+    Printf.printf "Full path is: %s" (string_of_cycle p);
+    print_newline()
+
+(** Compute pos or neg flow, depending on [is_pos]. Searches for cycles in the
+  instantiations (can these even occur?) and unifies either the positive or
+  negative edge sets for the labels on the cycle. Note that this does not 
+  ever unify the labels themselves. The return is the new bounds of the 
+  argument label *)
+let rec flow (is_pos : bool) (path : label list) (l : label) : label boundset =
+  let collapse_cycle () = 
+    let cycle = truncate path l in
+      debug_cycle (is_pos,cycle,l,path);
+      List.iter (fun x -> U.unify combine_lbounds 
+		   ((get_bounds is_pos x),get_bounds is_pos l)
+		) cycle
+  in
+    if (on_path l) 
+    then
+      begin
+	collapse_cycle (); 
+	(* set_on_path l false; *)
+	B.empty
+      end
+    else
+      if ( (is_pos && (U.deref l).p_cached) || 
+	   ( (not is_pos) && (U.deref l).n_cached) ) then
+	begin
+	  U.deref (get_bounds is_pos l)
+	end
+      else
+	begin
+	  let newbounds = ref B.empty in
+	  let base = get_bounds is_pos l in
+	    set_on_path l true;
+	    if (is_pos) then 
+	      (U.deref l).p_cached <- true 
+	    else 
+	      (U.deref l).n_cached <- true;
+	    B.iter 
+	      (fun x -> 
+		 if (U.equal(x.info,l)) then () 
+		 else
+		   (newbounds := 
+		    (B.union (!newbounds) (flow is_pos (l :: path) x.info)))
+	      ) (U.deref base); 
+	    set_on_path l false;
+	    U.update (base,(B.union (U.deref base) !newbounds));
+	    U.deref base
+	end
+	
+(** Compute and cache any positive flow. *)
+let pos_flow l : constantset  = 
+  let result = ref C.empty in 
+    begin
+      ignore (flow true [] l);
+      B.iter (fun x -> result := C.union (!result) (U.deref(x.info)).aliases )
+	(U.deref (get_bounds true l)); 
+      !result
+    end
+    
+(** Compute and cache any negative flow. *)
+let neg_flow l : constantset =
+  let result = ref C.empty in
+    begin
+      ignore (flow false [] l); 
+      B.iter (fun x -> result := C.union (!result) (U.deref(x.info)).aliases )
+	(U.deref (get_bounds false l));
+      !result
+    end
+    
+(** Compute and cache any pos-neg flow. Assumes that both pos_flow and
+  neg_flow have been computed for the label [l]. *)
+let pos_neg_flow(l : label) : constantset  =
+  let result = ref C.empty in
+    begin
+      B.iter (fun x -> result := C.union (!result) (pos_flow x.info))
+	(U.deref (get_bounds false l));
+      !result
+    end
+
+(** Compute a points-to set by computing positive, then negative, then
+  positive-negative flow for a label. *)
+let points_to_int (lv : lvalue) : constantset =
+  let visited_caches : cache list ref  = ref [] in
+  let rec points_to_tau (t : tau) : constantset =
+    try 
+      begin
+	match U.deref (proj_ref t) with
+	  | Var v -> C.empty
+	  | Ref r ->
+	      begin
+		let pos = pos_flow r.rl in
+		let neg = neg_flow r.rl in
+		let interproc = C.union (pos_neg_flow r.rl) (C.union pos neg)
+		in
+		  C.union ((U.deref(r.rl)).aliases) interproc
+	      end
+	  | _ -> raise (Inconsistent ("points_to"))
+      end
+    with
+      | No_contents ->
+	  begin
+	    match (U.deref t) with
+	      | Var v -> rebuild_flow v.v_cache
+	      | _ -> raise (Inconsistent ("points_to"))
+	  end
+  and rebuild_flow (c : cache) : constantset = 
+    if (List.mem c (!visited_caches) ) (* cyclic instantiations *)
+    then
+      begin
+	(* visited_caches := List.tl (!visited_caches); *) (* check *)
+	C.empty
+      end
+    else
+      begin
+	visited_caches :=  c :: (!visited_caches);
+	let result = ref (C.empty) in
+	  H.iter (fun _ -> fun(p,t) -> 
+		    match p with 
+		      | Pos -> () 
+		      | _ -> result := C.union (!result) (points_to_tau t)
+		 ) c;
+	  visited_caches := List.tl (!visited_caches);
+	  !result
+      end
+  in
+    if (!no_flow) then 
+      (U.deref lv.l).aliases
+    else 
+      points_to_tau (lv.contents)
+
+let points_to (lv : lvalue) : string list =
+  List.map snd (C.elements (points_to_int lv))
+
+let alias_query (a_progress : bool) (lv : lvalue list) : int * int = 
+  (0,0) (* todo *)
+(*
+  let a_count = ref 0 in
+  let ptsets = List.map points_to_int lv in
+  let total_sets = List.length ptsets in
+  let counted_sets = ref 0 in 
+  let record_alias s s' = 
+    if (C.is_empty (C.inter s s')) 
+    then ()
+    else (incr a_count)
+  in
+  let rec check_alias = function
+    | h :: t ->
+	begin
+	  List.iter (record_alias h) ptsets; 
+	  check_alias t 
+	end
+    | [] -> ()
+  in
+    check_alias ptsets;
+    !a_count
+*)
diff --git a/cil/src/ext/pta/steensgaard.mli b/cil/src/ext/pta/steensgaard.mli
new file mode 100644
index 000000000..f009e7e0b
--- /dev/null
+++ b/cil/src/ext/pta/steensgaard.mli
@@ -0,0 +1,71 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(***********************************************************************)
+(*                                                                     *)
+(*                                                                     *)
+(* This file is currently unused by CIL.  It is included in the        *)
+(*   distribution for reference only.                                  *)
+(*                                                                     *)
+(*                                                                     *)
+(***********************************************************************)
+
+type lvalue
+type tau
+val debug : bool ref
+val debug_constraints : bool ref
+val print_constraints : bool ref
+val no_flow : bool ref
+val no_sub : bool ref
+val analyze_mono : bool ref
+val solve_online : bool ref
+val solve_constraints : unit -> unit
+val rvalue : lvalue -> tau
+val deref : tau -> lvalue
+val join : tau -> tau -> tau
+val join_inits : tau list -> tau
+val address : lvalue -> tau
+val instantiate : lvalue -> int -> lvalue
+val assign : lvalue -> tau -> unit
+val apply : tau -> tau list -> tau
+val make_function :  string -> lvalue list -> tau -> tau
+val make_lvalue : bool -> string -> lvalue
+val bottom : unit -> tau
+val return : tau -> tau -> unit
+val make_fresh : string -> tau
+val points_to : lvalue -> string list    
+val string_of_lvalue : lvalue -> string
+val global_lvalue : lvalue -> bool
+val alias_query : bool -> lvalue list -> int * int
diff --git a/cil/src/ext/pta/uref.ml b/cil/src/ext/pta/uref.ml
new file mode 100644
index 000000000..53f36400c
--- /dev/null
+++ b/cil/src/ext/pta/uref.ml
@@ -0,0 +1,94 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+exception Bad_find
+
+type 'a urefC =
+    Ecr of 'a * int
+  | Link of 'a uref
+and 'a uref = 'a urefC ref
+
+let rec find p = 
+  match !p with
+    | Ecr _ -> p
+    | Link p' ->
+	let p'' = find p' 
+	in p := Link p''; p''
+
+let uref x = ref (Ecr(x,0))
+
+let equal (p,p') = (find p == find p')
+
+let deref p = 
+  match ! (find p) with 
+    | Ecr (x,_) -> x
+    | _ -> raise Bad_find
+
+let update (p,x) = 
+  let p' = find p 
+  in
+    match !p' with
+      | Ecr (_,rank) -> p' := Ecr(x,rank)
+      | _ -> raise Bad_find
+	  
+let unify f (p,q) = 
+  let p',q' = find p, find q in
+    match (!p',!q') with 
+      | (Ecr(px,pr),Ecr(qx,qr)) ->
+	let x = f(px,qx) in
+	  if (p' == q') then
+	    p' := Ecr(x,pr)
+	  else if pr == qr then
+	    (q' := Ecr(x,qr+1); p' := Link q')
+	  else if pr < qr then
+	    (q' := Ecr(x,qr); p' := Link q')
+	  else (* pr > qr *)
+	    (p' := Ecr(x,pr); q' := Link p')
+      | _ -> raise Bad_find
+	  
+let union (p,q) = 
+  let p',q' = find p, find q in
+    match (!p',!q') with 
+      | (Ecr(px,pr),Ecr(qx,qr)) ->
+	  if (p' == q') then 
+	    ()
+	  else if pr == qr then
+	    (q' := Ecr(qx, qr+1); p' := Link q')
+	  else if pr < qr then
+	    p' := Link q'
+	  else (* pr > qr *)
+	    q' := Link p'
+      | _ -> raise Bad_find
+	  
+
diff --git a/cil/src/ext/pta/uref.mli b/cil/src/ext/pta/uref.mli
new file mode 100644
index 000000000..1dee5036d
--- /dev/null
+++ b/cil/src/ext/pta/uref.mli
@@ -0,0 +1,65 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  John Kodumal        <jkodumal@eecs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+type 'a uref
+  
+(** Union-find with union by rank and path compression 
+  
+  This is an implementation of Tarjan's union-find data structure using 
+  generics. The interface is analagous to standard references, with the
+  addition of a union operation which makes two references indistinguishable.
+  
+*)
+  
+val uref: 'a -> 'a uref 
+  (** Create a new uref *)
+  
+val equal: 'a uref * 'a uref -> bool
+  (** Test whether two urefs share the same equivalence class *)
+  
+val deref: 'a uref -> 'a
+  (** Extract the contents of this reference *)
+  
+val update: 'a uref * 'a -> unit
+  (** Update the value stored in this reference *)
+  
+val unify: ('a * 'a -> 'a) -> 'a uref * 'a uref -> unit
+  (** [unify f (p,q)] unifies references [p] and [q], making them 
+    indistinguishable. The contents of the reference are the result of
+    [f] *)
+    
+val union: 'a uref * 'a uref -> unit
+  (** [unify (p,q)] unifies references [p] and [q], making them
+    indistinguishable. The contents of the reference are the contents of
+    one of the first or second arguments (unspecified) *)
diff --git a/cil/src/ext/reachingdefs.ml b/cil/src/ext/reachingdefs.ml
new file mode 100644
index 000000000..b6af37cbd
--- /dev/null
+++ b/cil/src/ext/reachingdefs.ml
@@ -0,0 +1,511 @@
+(* Calculate reaching definitions for each instruction.
+ * Determine when it is okay to replace some variables with
+ * expressions.
+ *
+ * After calling computeRDs on a fundec,
+ * ReachingDef.stmtStartData will contain a mapping from
+ * statement ids to data about which definitions reach each
+ * statement. ReachingDef.defIdStmtHash will contain a
+ * mapping from definition ids to the statement in which
+ * that definition takes place.
+ *
+ * instrRDs takes a list of instructions, and the
+ * definitions that reach the first instruction, and
+ * for each instruction figures out which definitions
+ * reach into or out of each instruction.
+ *
+ *)
+
+open Cil
+open Pretty
+
+module E = Errormsg
+module DF = Dataflow
+module UD = Usedef
+module IH = Inthash
+module U = Util
+module S = Stats
+
+let debug_fn = ref ""
+
+module IOS = 
+  Set.Make(struct
+    type t = int option
+    let compare io1 io2 =
+      match io1, io2 with
+	Some i1, Some i2 -> Pervasives.compare i1 i2
+      | Some i1, None -> 1
+      | None, Some i2 -> -1
+      | None, None -> 0
+  end)
+
+let debug = ref false
+
+(* return the intersection of
+   Inthashes ih1 and ih2 *)
+let ih_inter ih1 ih2 =
+  let ih' = IH.copy ih1 in
+  IH.iter (fun id vi ->
+    if not(IH.mem ih2 id) then
+      IH.remove ih' id else
+      ()) ih1;
+  ih'
+
+let ih_union ih1 ih2 =
+  let ih' = IH.copy ih1 in
+  IH.iter (fun id vi ->
+    if not(IH.mem ih' id) 
+    then IH.add ih' id vi
+    else ()) ih2;
+  ih'
+
+(* Lookup varinfo in iosh. If the set contains None
+   or is not a singleton, return None, otherwise
+   return Some of the singleton *)
+(* IOS.t IH.t -> varinfo -> int option *)
+let iosh_singleton_lookup iosh vi =
+  if IH.mem iosh vi.vid then
+    let ios = IH.find iosh vi.vid in
+    if not (IOS.cardinal ios = 1) then None
+    else IOS.choose ios
+  else None
+
+(* IOS.t IH.t -> varinfo -> IOS.t *)
+let iosh_lookup iosh vi =
+  if IH.mem iosh vi.vid
+  then Some(IH.find iosh vi.vid)
+  else None
+
+(* return Some(vid) if iosh contains defId.
+   return None otherwise *)
+(* IOS.t IH.t -> int -> int option *)
+let iosh_defId_find iosh defId =
+  (* int -> IOS.t -> int option -> int option*)
+  let get_vid vid ios io =
+    match io with
+      Some(i) -> Some(i)
+    | None -> 
+	let there = IOS.exists 
+	    (function None -> false
+	      | Some(i') -> defId = i') ios in
+	if there then Some(vid) else None
+  in
+  IH.fold get_vid iosh None
+
+(* The resulting iosh will contain the
+   union of the same entries from iosh1 and
+   iosh2. If iosh1 has an entry that iosh2
+   does not, then the result will contain
+   None in addition to the things from the
+   entry in iosh1. *)
+(* XXX this function is a performance bottleneck *)
+let iosh_combine iosh1 iosh2 =
+  let iosh' = IH.copy iosh1 in
+  IH.iter (fun id ios1 ->
+    try let ios2 = IH.find iosh2 id in
+    let newset = IOS.union ios1 ios2 in
+    IH.replace iosh' id newset;
+    with Not_found ->
+      let newset = IOS.add None ios1 in
+      IH.replace iosh' id newset) iosh1;
+  IH.iter (fun id ios2 ->
+    if not(IH.mem iosh1 id) then
+      let newset = IOS.add None ios2 in
+      IH.add iosh' id newset) iosh2;
+  iosh'
+
+
+(* determine if two IOS.t IH.t s are the same *)
+let iosh_equals iosh1 iosh2 =
+(*  if IH.length iosh1 = 0 && not(IH.length iosh2 = 0) ||
+  IH.length iosh2 = 0 && not(IH.length iosh1 = 0)*)
+  if not(IH.length iosh1 = IH.length iosh2)
+  then 
+    (if !debug then ignore(E.log "iosh_equals: length not same\n");
+    false)
+  else
+    IH.fold (fun vid ios b ->
+      if not b then b else
+      try let ios2 = IH.find iosh2 vid in
+      if not(IOS.compare ios ios2 = 0) then
+	(if !debug then ignore(E.log "iosh_equals: sets for vid %d not equal\n" vid);
+	 false)
+      else true
+      with Not_found ->
+	(if !debug then ignore(E.log "iosh_equals: vid %d not in iosh2\n" vid);
+	 false)) iosh1 true
+      
+(* replace an entire set with a singleton.
+   if nothing was there just add the singleton *)
+(* IOS.t IH.t -> int -> varinfo -> unit *)
+let iosh_replace iosh i vi =
+  if IH.mem iosh vi.vid then
+    let newset = IOS.singleton (Some i) in
+    IH.replace iosh vi.vid newset
+  else
+    let newset = IOS.singleton (Some i) in
+    IH.add iosh vi.vid newset
+
+(* remove definitions that are killed.
+   add definitions that are gend *)
+(* Takes the defs, the data, and a function for
+   obtaining the next def id *)
+(* VS.t -> IOS.t IH.t -> (unit->int) -> unit *)
+let proc_defs vs iosh f = 
+  let pd vi =
+    let newi = f() in
+    (*if !debug then
+      ignore (E.log "proc_defs: genning %d\n" newi);*)
+    iosh_replace iosh newi vi
+  in
+  UD.VS.iter pd vs
+
+let idMaker () start =
+  let counter = ref start in
+  fun () ->
+    let ret = !counter in
+    counter := !counter + 1;
+    ret
+
+(* given reaching definitions into a list of
+   instructions, figure out the definitions that
+   reach in/out of each instruction *)
+(* if out is true then calculate the definitions that
+   go out of each instruction, if it is false then
+   calculate the definitions reaching into each instruction *)
+(* instr list -> int -> (varinfo IH.t * int) -> bool -> (varinfo IH.t * int) list *)
+let iRDsHtbl = Hashtbl.create 128
+let instrRDs il sid (ivih, s, iosh) out =
+  if Hashtbl.mem iRDsHtbl (sid,out) then Hashtbl.find iRDsHtbl (sid,out) else
+
+(*   let print_instr i (_,s', iosh') = *)
+(*     let d = d_instr () i ++ line in *)
+(*     fprint stdout 80 d; *)
+(*     flush stdout *)
+(*   in *)
+
+  let proc_one hil i =
+    match hil with
+    | [] -> 
+	let _, defd = UD.computeUseDefInstr i in
+	if UD.VS.is_empty defd 
+	then ((*if !debug then print_instr i ((), s, iosh);*)
+	      [((), s, iosh)])
+	else 
+	  let iosh' = IH.copy iosh in
+	  proc_defs defd iosh' (idMaker () s);
+	  (*if !debug then
+	    print_instr i ((), s + UD.VS.cardinal defd, iosh');*)
+	  ((), s + UD.VS.cardinal defd, iosh')::hil
+    | (_, s', iosh')::hrst as l ->
+	let _, defd = UD.computeUseDefInstr i in
+	if UD.VS.is_empty defd 
+	then 
+	  ((*if !debug then
+	    print_instr i ((),s', iosh');*)
+	   ((), s', iosh')::l)
+	else let iosh'' = IH.copy iosh' in
+	proc_defs defd iosh'' (idMaker () s');
+	(*if !debug then
+	  print_instr i ((), s' + UD.VS.cardinal defd, iosh'');*)
+	((),s' + UD.VS.cardinal defd, iosh'')::l
+  in
+  let folded = List.fold_left proc_one [((),s,iosh)] il in
+  let foldedout = List.tl (List.rev folded) in
+  let foldednotout = List.rev (List.tl folded) in
+  Hashtbl.add iRDsHtbl (sid,true) foldedout;
+  Hashtbl.add iRDsHtbl (sid,false) foldednotout;
+  if out then foldedout else foldednotout
+    
+
+
+(* The right hand side of an assignment is either
+   a function call or an expression *)
+type rhs = RDExp of exp | RDCall of instr
+
+(* take the id number of a definition and return
+   the rhs of the definition if there is one.
+   Returns None if, for example, the definition is
+   caused by an assembly instruction *)
+(* stmt IH.t -> (()*int*IOS.t IH.t) IH.t -> int -> (rhs * int * IOS.t IH.t) option *)
+let rhsHtbl = IH.create 64 (* to avoid recomputation *)
+let getDefRhs didstmh stmdat defId =
+  if IH.mem rhsHtbl defId then IH.find rhsHtbl defId else
+  let stm =
+    try IH.find didstmh defId 
+    with Not_found -> E.s (E.error "getDefRhs: defId %d not found\n" defId) in
+  let (_,s,iosh) = 
+    try IH.find stmdat stm.sid
+    with Not_found -> E.s (E.error "getDefRhs: sid %d not found \n" stm.sid) in
+  match stm.skind with
+    Instr il ->
+      let ivihl = instrRDs il stm.sid ((),s,iosh) true in (* defs that reach out of each instr *)
+      let ivihl_in = instrRDs il stm.sid ((),s,iosh) false in (* defs that reach into each instr *)
+      let iihl = List.combine (List.combine il ivihl) ivihl_in in
+      (try let ((i,(_,_,diosh)),(_,_,iosh_in)) = List.find (fun ((i,(_,_,iosh')),_) ->
+	match S.time "iosh_defId_find" (iosh_defId_find iosh') defId with
+	  Some vid -> 
+	    (match i with
+	      Set((Var vi',NoOffset),_,_) -> vi'.vid = vid (* _ -> NoOffset *)
+	    | Call(Some(Var vi',NoOffset),_,_,_) -> vi'.vid = vid (* _ -> NoOffset *)
+	    | Call(None,_,_,_) -> false
+	    | Asm(_,_,sll,_,_,_) -> List.exists 
+		  (function (_,(Var vi',NoOffset)) -> vi'.vid = vid | _ -> false) sll
+	    | _ -> false)
+	| None -> false) iihl in
+      (match i with
+	Set((lh,_),e,_) ->
+	  (match lh with
+	    Var(vi') -> 
+	      (IH.add rhsHtbl defId (Some(RDExp(e),stm.sid,iosh_in));
+	       Some(RDExp(e), stm.sid, iosh_in))
+	  | _ -> E.s (E.error "Reaching Defs getDefRhs: right vi not first\n"))
+      | Call(lvo,e,el,_) -> 
+	  (IH.add rhsHtbl defId (Some(RDCall(i),stm.sid,iosh_in));
+	   Some(RDCall(i), stm.sid, iosh_in))
+      | Asm(a,sl,slvl,sel,sl',_) -> None) (* ? *)
+      with Not_found ->
+	(if !debug then ignore (E.log "getDefRhs: No instruction defines %d\n" defId);
+	 IH.add rhsHtbl defId None;
+	 None))
+  | _ -> E.s (E.error "getDefRhs: defining statement not an instruction list %d\n" defId)
+	(*None*)
+
+let prettyprint didstmh stmdat () (_,s,iosh) = text ""
+  (*seq line (fun (vid,ios) ->
+    num vid ++ text ": " ++
+      IOS.fold (fun io d -> match io with
+	None -> d ++ text "None "
+      | Some i ->
+	  let stm = IH.find didstmh i in
+	  match getDefRhs didstmh stmdat i with
+	    None -> d ++ num i
+	  | Some(RDExp(e),_,_) ->
+	      d ++ num i ++ text " " ++ (d_exp () e)
+	  | Some(RDCall(c),_,_) ->
+	      d ++ num i ++ text " " ++ (d_instr () c))
+      ios nil)
+    (IH.tolist iosh)*)
+
+module ReachingDef =
+  struct
+
+    let name = "Reaching Definitions"
+
+    let debug = debug
+
+    (* Should the analysis calculate may-reach
+       or must-reach *)
+    let mayReach = ref false
+
+ 
+    (* An integer that tells the id number of
+       the first definition *)
+    (* Also a hash from variable ids to a set of 
+       definition ids that reach this statement.
+       None means there is a path to this point on which
+       there is no definition of the variable *)
+    type t = (unit * int * IOS.t IH.t)
+
+    let copy (_, i, iosh) = ((), i, IH.copy iosh)
+
+    (* entries for starting statements must
+       be added before calling compute *)
+    let stmtStartData = IH.create 32
+
+    (* a mapping from definition ids to
+       the statement corresponding to that id *)
+    let defIdStmtHash = IH.create 32
+
+    (* mapping from statement ids to statements
+       for better performance of ok_to_replace *)
+    let sidStmtHash = IH.create 64
+
+    (* pretty printer *)
+    let pretty = prettyprint defIdStmtHash stmtStartData
+      
+
+    (* The first id to use when computeFirstPredecessor
+       is next called *)
+    let nextDefId = ref 0
+
+    (* Count the number of variable definitions in
+       a statement *)
+    let num_defs stm =
+      match stm.skind with
+	Instr(il) -> List.fold_left (fun s i ->
+	  let _, d = UD.computeUseDefInstr i in
+	  s + UD.VS.cardinal d) 0 il
+      | _ -> let _, d = UD.computeUseDefStmtKind stm.skind in
+	UD.VS.cardinal d
+
+    (* the first predecessor is just the data in along with
+       the id of the first definition of the statement,
+       which we get from nextDefId *)
+    let computeFirstPredecessor stm (_, s, iosh) =
+      let startDefId = max !nextDefId s in
+      let numds = num_defs stm in
+      let rec loop n =
+	if n < 0
+	then ()
+	else
+	  (if !debug then
+	    ignore (E.log "RD: defId %d -> stm %d\n" (startDefId + n) stm.sid);
+	   IH.add defIdStmtHash (startDefId + n) stm;
+	   loop (n-1))
+      in
+      loop (numds - 1);
+      nextDefId := startDefId + numds;
+      ((), startDefId, IH.copy iosh)
+
+     
+    let combinePredecessors (stm:stmt) ~(old:t) ((_, s, iosh):t) =
+      match old with (_, os, oiosh) ->
+	if S.time "iosh_equals" (iosh_equals oiosh) iosh then None else
+	Some((), os, S.time "iosh_combine" (iosh_combine oiosh) iosh)
+
+    (* return an action that removes things that
+       are redefinied and adds the generated defs *)
+    let doInstr inst (_, s, iosh) =
+      let transform (_, s', iosh') =
+	let _, defd = UD.computeUseDefInstr inst in
+	proc_defs defd iosh' (idMaker () s');
+	((), s' + UD.VS.cardinal defd, iosh')
+      in
+      DF.Post transform
+
+    (* all the work gets done at the instruction level *)
+    let doStmt stm (_, s, iosh) =
+      if not(IH.mem sidStmtHash stm.sid) then 
+	IH.add sidStmtHash stm.sid stm;
+      if !debug then ignore(E.log "RD: looking at %a\n" d_stmt stm);
+      DF.SDefault
+
+    let doGuard condition _ = DF.GDefault
+
+    let filterStmt stm = true
+
+end
+
+module RD = DF.ForwardsDataFlow(ReachingDef)
+
+(* map all variables in vil to a set containing
+   None in iosh *)
+(* IOS.t IH.t -> varinfo list -> () *)
+let iosh_none_fill iosh vil =
+  List.iter (fun vi -> 
+    IH.add iosh vi.vid (IOS.singleton None))
+    vil
+
+(* Computes the reaching definitions for a
+   function. *)
+(* Cil.fundec -> unit *)
+let computeRDs fdec =
+  try
+    if compare fdec.svar.vname (!debug_fn) = 0 then
+      (debug := true;
+       ignore (E.log "%s =\n%a\n" (!debug_fn) d_block fdec.sbody));
+    let bdy = fdec.sbody in
+    let slst = bdy.bstmts in
+    let _ = IH.clear ReachingDef.stmtStartData in
+    let _ = IH.clear ReachingDef.defIdStmtHash in
+    let _ = IH.clear rhsHtbl in
+    let _ = Hashtbl.clear iRDsHtbl in
+    let _ = ReachingDef.nextDefId := 0 in
+    let fst_stm = List.hd slst in
+    let fst_iosh = IH.create 32 in
+    let _ = UD.onlyNoOffsetsAreDefs := false in
+    (*let _ = iosh_none_fill fst_iosh fdec.sformals in*)
+    let _ = IH.add ReachingDef.stmtStartData fst_stm.sid ((), 0, fst_iosh) in
+    let _ = ReachingDef.computeFirstPredecessor fst_stm ((), 0, fst_iosh) in
+    if !debug then
+      ignore (E.log "computeRDs: fst_stm.sid=%d\n" fst_stm.sid);
+    RD.compute [fst_stm];
+    if compare fdec.svar.vname (!debug_fn) = 0 then
+      debug := false
+    (* now ReachingDef.stmtStartData has the reaching def data in it *)
+  with Failure "hd" -> if compare fdec.svar.vname (!debug_fn) = 0 then
+    debug := false
+
+(* return the definitions that reach the statement
+   with statement id sid *)
+let getRDs sid = 
+  try
+    Some (IH.find ReachingDef.stmtStartData sid)
+  with Not_found ->
+    None
+(*    E.s (E.error "getRDs: sid %d not found\n" sid) *)
+
+let getDefIdStmt defid =
+  try
+    Some(IH.find ReachingDef.defIdStmtHash defid)
+  with Not_found ->
+    None
+
+let getStmt sid =
+  try Some(IH.find ReachingDef.sidStmtHash sid)
+  with Not_found -> None
+
+(* Pretty print the reaching definition data for
+   a function *)
+let ppFdec fdec =
+  seq line (fun stm ->
+    let ivih = IH.find ReachingDef.stmtStartData stm.sid in
+    ReachingDef.pretty () ivih) fdec.sbody.bstmts
+
+
+(* If this class is extended with a visitor on expressions,
+   then the current rd data is available at each expression *)
+class rdVisitorClass = object (self)
+  inherit nopCilVisitor
+
+  (* the statement being worked on *)
+  val mutable sid = -1
+
+  (* if a list of instructions is being processed,
+     then this is the corresponding list of
+     reaching definitions *)
+  val mutable rd_dat_lst = []
+
+  (* these are the reaching defs for the current
+     instruction if there is one *)
+  val mutable cur_rd_dat = None
+
+  method vstmt stm =
+    sid <- stm.sid;
+    match getRDs sid with
+      None -> 
+	if !debug then ignore(E.log "rdVis: stm %d had no data\n" sid);
+	cur_rd_dat <- None;
+	DoChildren
+    | Some(_,s,iosh) ->
+	match stm.skind with
+	  Instr il ->
+	    if !debug then ignore(E.log "rdVis: visit il\n");
+	    rd_dat_lst <- instrRDs il stm.sid ((),s,iosh) false;
+	    DoChildren
+	| _ ->
+	    if !debug then ignore(E.log "rdVis: visit non-il\n");
+	    cur_rd_dat <- None;
+	    DoChildren
+
+  method vinst i =
+    if !debug then ignore(E.log "rdVis: before %a, rd_dat_lst is %d long\n" 
+			    d_instr i (List.length rd_dat_lst));
+    try
+      cur_rd_dat <- Some(List.hd rd_dat_lst);
+      rd_dat_lst <- List.tl rd_dat_lst;
+      DoChildren
+    with Failure "hd" -> 
+      if !debug then ignore(E.log "rdVis: il rd_dat_lst mismatch\n");
+      DoChildren
+
+  method get_cur_iosh () =
+    match cur_rd_dat with
+      None -> (match getRDs sid with
+	None -> None
+      | Some(_,_,iosh) -> Some iosh)
+    | Some(_,_,iosh) -> Some iosh
+
+end
+
diff --git a/cil/src/ext/sfi.ml b/cil/src/ext/sfi.ml
new file mode 100755
index 000000000..9886526cd
--- /dev/null
+++ b/cil/src/ext/sfi.ml
@@ -0,0 +1,337 @@
+(*
+ *
+ * Copyright (c) 2005, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** This is a module that inserts runtime checks for memory reads/writes and 
+ * allocations *)
+
+open Pretty
+open Cil
+module E = Errormsg
+module H = Hashtbl
+
+let doSfi = ref false
+let doSfiReads = ref false
+let doSfiWrites = ref true
+
+(* A number of functions to be skipped *)
+let skipFunctions : (string, unit) H.t = H.create 13
+let mustSfiFunction (f: fundec) : bool = 
+  not (H.mem skipFunctions f.svar.vname)
+
+(** Some functions are known to be allocators *)
+type dataLocation = 
+    InResult  (* Interesting data is in the return value *)
+  | InArg of int (* in the nth argument. Starts from 1. *)
+  | InArgTimesArg of int * int (* (for size) data is the product of two 
+                                * arguments *)
+  | PointedToByArg of int (* pointed to by nth argument *)
+
+(** Compute the data based on the location and the actual argument list *)
+let extractData (dl: dataLocation) (args: exp list) (res: lval option) : exp = 
+  let getArg (n: int) = 
+    try List.nth args (n - 1) (* Args are based at 1 *)
+    with _ -> E.s (E.bug "Cannot extract argument %d at %a" 
+                     n d_loc !currentLoc)
+  in
+  match dl with 
+    InResult -> begin
+      match res with 
+        None -> 
+          E.s (E.bug "Cannot extract InResult data (at %a)" d_loc !currentLoc)
+      | Some r -> Lval r
+    end
+  | InArg n -> getArg n
+  | InArgTimesArg (n1, n2) -> 
+      let a1 = getArg n1 in
+      let a2 = getArg n2 in 
+      BinOp(Mult, mkCast ~e:a1 ~newt:longType, 
+            mkCast ~e:a2 ~newt:longType, longType)
+  | PointedToByArg n -> 
+      let a = getArg n in 
+      Lval (mkMem a NoOffset)
+      
+
+
+(* for each allocator, where is the length and where is the result *)
+let allocators: (string, (dataLocation * dataLocation)) H.t = H.create 13
+let _ = 
+  H.add allocators "malloc" (InArg 1, InResult);
+  H.add allocators "calloc" (InArgTimesArg (1, 2), InResult);
+  H.add allocators "realloc" (InArg 2, InResult)
+
+(* for each deallocator, where is the data being deallocated *)
+let deallocators: (string, dataLocation) H.t = H.create 13
+let _= 
+  H.add deallocators "free" (InArg 1);
+  H.add deallocators "realloc" (InArg 1)
+  
+(* Returns true if the given lvalue offset ends in a bitfield access. *) 
+let rec is_bitfield lo = match lo with
+  | NoOffset -> false
+  | Field(fi,NoOffset) -> not (fi.fbitfield = None)
+  | Field(_,lo) -> is_bitfield lo
+  | Index(_,lo) -> is_bitfield lo 
+
+(* Return an expression that evaluates to the address of the given lvalue.
+ * For most lvalues, this is merely AddrOf(lv). However, for bitfields
+ * we do some offset gymnastics. 
+ *)
+let addr_of_lv (lv: lval) = 
+  let lh, lo = lv in 
+  if is_bitfield lo then begin
+    (* we figure out what the address would be without the final bitfield
+     * access, and then we add in the offset of the bitfield from the
+     * beginning of its enclosing comp *) 
+    let rec split_offset_and_bitfield lo = match lo with 
+      | NoOffset -> failwith "logwrites: impossible" 
+      | Field(fi,NoOffset) -> (NoOffset,fi)
+      | Field(e,lo) ->  let a,b = split_offset_and_bitfield lo in 
+                        ((Field(e,a)),b)
+      | Index(e,lo) ->  let a,b = split_offset_and_bitfield lo in
+                        ((Index(e,a)),b)
+    in 
+    let new_lv_offset, bf = split_offset_and_bitfield lo in
+    let new_lv = (lh, new_lv_offset) in 
+    let enclosing_type = TComp(bf.fcomp, []) in 
+    let bits_offset, bits_width = 
+      bitsOffset enclosing_type (Field(bf,NoOffset)) in
+    let bytes_offset = bits_offset / 8 in
+    let lvPtr = mkCast ~e:(mkAddrOf (new_lv)) ~newt:(charPtrType) in
+    (BinOp(PlusPI, lvPtr, (integer bytes_offset), ulongType))
+  end else 
+    (mkAddrOf (lh,lo)) 
+
+
+let mustLogLval (forwrite: bool) (lv: lval) : bool = 
+  match lv with
+    Var v, off -> (* Inside a variable. We assume the array offsets are fine *)
+      false
+  | Mem e, off -> 
+      if forwrite && not !doSfiWrites then 
+        false
+      else if not forwrite && not !doSfiReads then 
+        false
+
+      (* If this is an lval of function type, we do not log it *) 
+      else if isFunctionType (typeOfLval lv) then 
+        false
+      else 
+        true
+
+(* Create prototypes for the logging functions *)
+let mkProto (name: string) (args: (string * typ * attributes) list) = 
+  let fdec = emptyFunction name in
+  fdec.svar.vtype <- TFun(voidType, 
+                          Some args, false, []);
+  fdec
+  
+
+let logReads = mkProto "logRead" [ ("addr", voidPtrType, []);
+                                   ("what", charPtrType, []);
+                                   ("file", charPtrType, []);
+                                   ("line", intType, []) ]
+let callLogRead (lv: lval) = 
+  let what = Pretty.sprint 80 (d_lval () lv) in
+  Call(None, 
+       Lval(Var(logReads.svar),NoOffset), 
+       [ addr_of_lv lv; mkString what; mkString !currentLoc.file;
+         integer !currentLoc.line], !currentLoc )
+
+let logWrites = mkProto "logWrite" [ ("addr", voidPtrType, []);
+                                     ("what", charPtrType, []);
+                                     ("file", charPtrType, []);
+                                     ("line", intType, []) ]
+let callLogWrite (lv: lval) = 
+  let what = Pretty.sprint 80 (d_lval () lv) in
+  Call(None, 
+       Lval(Var(logWrites.svar), NoOffset), 
+       [ addr_of_lv lv; mkString what; mkString !currentLoc.file;
+         integer !currentLoc.line], !currentLoc )
+
+let logStackFrame  = mkProto "logStackFrame" [ ("func", charPtrType, []) ]
+let callLogStack (fname: string) = 
+  Call(None, 
+       Lval(Var(logStackFrame.svar), NoOffset), 
+       [ mkString fname; ], !currentLoc )
+
+let logAlloc = mkProto "logAlloc" [ ("addr", voidPtrType, []);
+                                    ("size", intType, []);
+                                    ("file", charPtrType, []);
+                                    ("line", intType, []) ]
+let callLogAlloc (szloc: dataLocation) 
+                 (resLoc: dataLocation) 
+                 (args: exp list) 
+                 (res: lval option) = 
+  let sz = extractData szloc args res in 
+  let res = extractData resLoc args res in 
+  Call(None, 
+       Lval(Var(logAlloc.svar), NoOffset), 
+       [ res; sz; mkString !currentLoc.file;
+         integer !currentLoc.line ], !currentLoc )
+    
+  
+let logFree = mkProto "logFree" [ ("addr", voidPtrType, []);
+                                  ("file", charPtrType, []);
+                                  ("line", intType, []) ]
+let callLogFree  (dataloc: dataLocation) 
+                 (args: exp list) 
+                 (res: lval option) = 
+  let data = extractData dataloc args res in 
+  Call(None, 
+       Lval(Var(logFree.svar), NoOffset), 
+       [ data; mkString !currentLoc.file;
+         integer !currentLoc.line ], !currentLoc )
+
+class sfiVisitorClass : Cil.cilVisitor = object (self)
+  inherit nopCilVisitor
+      
+  method vexpr (e: exp) : exp visitAction = 
+    match e with 
+      Lval lv when mustLogLval false lv -> (* A read *)
+        self#queueInstr [ callLogRead lv ];
+        DoChildren
+
+    | _ -> DoChildren
+        
+    
+  method vinst (i: instr) : instr list visitAction = 
+    match i with 
+      Set(lv, e, l) when mustLogLval true lv ->
+        self#queueInstr [ callLogWrite lv ];
+        DoChildren
+
+    | Call(lvo, f, args, l) -> 
+        (* Instrument the write *)
+        (match lvo with 
+          Some lv when mustLogLval true lv -> 
+            self#queueInstr [ callLogWrite lv ]
+        | _ -> ());
+        (* Do the expressions in the call, and then see if we need to 
+         * instrument the function call *)
+        ChangeDoChildrenPost
+          ([i], 
+           (fun il -> 
+             currentLoc := l;
+             match f with 
+               Lval (Var fv, NoOffset) -> begin 
+                 (* Is it an allocator? *)
+                 try 
+                   let szloc, resloc = H.find allocators fv.vname in
+                   il @ [callLogAlloc szloc resloc args lvo]
+                 with Not_found -> begin
+                   (* Is it a deallocator? *)
+                   try 
+                     let resloc = H.find deallocators fv.vname in 
+                     il @ [ callLogFree resloc args lvo ]
+                   with Not_found -> 
+                     il
+                 end
+               end
+             | _ -> il))
+
+    | _ -> DoChildren
+
+  method vfunc (fdec: fundec) = 
+    (* Instead a stack log at the start of a function *)
+    ChangeDoChildrenPost 
+      (fdec,
+       fun fdec -> 
+         fdec.sbody <- 
+           mkBlock 
+             [ mkStmtOneInstr (callLogStack fdec.svar.vname);
+               mkStmt (Block fdec.sbody) ];
+         fdec)
+      
+end
+
+let doit (f: file) =
+  let sfiVisitor = new sfiVisitorClass in
+  let compileLoc (l: location) = function
+      ACons("inres", []) -> InResult
+    | ACons("inarg", [AInt n]) -> InArg n
+    | ACons("inargxarg", [AInt n1; AInt n2]) -> InArgTimesArg (n1, n2)
+    | ACons("pointedby", [AInt n]) -> PointedToByArg n
+    | _ -> E.warn "Invalid location at %a" d_loc l;
+        InResult
+  in
+  iterGlobals f
+    (fun glob -> 
+      match glob with 
+        GFun(fdec, _) when mustSfiFunction fdec -> 
+          ignore (visitCilFunction sfiVisitor fdec)
+      | GPragma(Attr("sfiignore", al), l) -> 
+          List.iter 
+            (function AStr fn -> H.add skipFunctions fn ()
+              | _ -> E.warn "Invalid argument in \"sfiignore\" pragma at %a"
+                            d_loc l)
+            al
+
+      | GPragma(Attr("sfialloc", al), l) -> begin
+          match al with 
+            AStr fname :: locsz :: locres :: [] -> 
+              H.add allocators fname (compileLoc l locsz, compileLoc l locres)
+          | _ -> E.warn "Invalid sfialloc pragma at %a" d_loc l
+      end
+                
+      | GPragma(Attr("sfifree", al), l) -> begin
+          match al with 
+            AStr fname :: locwhat :: [] -> 
+              H.add deallocators fname (compileLoc l locwhat)
+          | _ -> E.warn "Invalid sfifree pragma at %a" d_loc l
+      end
+                
+
+      | _ -> ());
+  (* Now add the prototypes for the instrumentation functions *)
+  f.globals <-
+    GVarDecl (logReads.svar, locUnknown) ::
+    GVarDecl (logWrites.svar, locUnknown) ::
+    GVarDecl (logStackFrame.svar, locUnknown) ::
+    GVarDecl (logAlloc.svar, locUnknown) :: 
+    GVarDecl (logFree.svar, locUnknown) :: f.globals
+
+
+let feature : featureDescr = 
+  { fd_name = "sfi";
+    fd_enabled = doSfi;
+    fd_description = "instrument memory operations";
+    fd_extraopt = [
+    "--sfireads", Arg.Set doSfiReads, "SFI for reads";
+    "--sfiwrites", Arg.Set doSfiWrites, "SFI for writes";
+    ];
+    fd_doit = doit;
+    fd_post_check = true;
+  } 
+
diff --git a/cil/src/ext/simplemem.ml b/cil/src/ext/simplemem.ml
new file mode 100644
index 000000000..1b27815c3
--- /dev/null
+++ b/cil/src/ext/simplemem.ml
@@ -0,0 +1,132 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(*
+ * Simplemem: Transform a program so that all memory expressions are
+ * "simple". Introduce well-typed temporaries to hold intermediate values
+ * for expressions that would normally involve more than one memory
+ * reference. 
+ *
+ * If simplemem succeeds, each lvalue should contain only one Mem()
+ * constructor. 
+ *)
+open Cil
+
+(* current context: where should we put our temporaries? *)
+let thefunc = ref None 
+
+(* build up a list of assignments to temporary variables *)
+let assignment_list = ref []
+
+(* turn "int a[5][5]" into "int ** temp" *)
+let rec array_to_pointer tau = 
+  match unrollType tau with
+    TArray(dest,_,al) -> TPtr(array_to_pointer dest,al)
+  | _ -> tau
+
+(* create a temporary variable in the current function *)
+let make_temp tau = 
+  let tau = array_to_pointer tau in 
+  match !thefunc with
+    Some(fundec) -> makeTempVar fundec ~name:("mem_") tau
+  | None -> failwith "simplemem: temporary needed outside a function"
+
+(* separate loffsets into "scalar addition parts" and "memory parts" *)
+let rec separate_loffsets lo = 
+  match lo with
+    NoOffset -> NoOffset, NoOffset
+  | Field(fi,rest) -> 
+      let s,m = separate_loffsets rest in
+      Field(fi,s) , m
+  | Index(_) -> NoOffset, lo
+
+(* Recursively decompose the lvalue so that what is under a "Mem()"
+ * constructor is put into a temporary variable. *)
+let rec handle_lvalue (lb,lo) = 
+  let s,m = separate_loffsets lo in 
+  match lb with
+    Var(vi) -> 
+      handle_loffset (lb,s) m 
+  | Mem(Lval(Var(_),NoOffset)) ->
+			(* special case to avoid generating "tmp = ptr;" *)
+      handle_loffset (lb,s) m 
+  | Mem(e) -> 
+      begin
+        let new_vi = make_temp (typeOf e) in
+        assignment_list := (Set((Var(new_vi),NoOffset),e,!currentLoc)) 
+          :: !assignment_list ;
+        handle_loffset (Mem(Lval(Var(new_vi),NoOffset)),NoOffset) lo
+      end
+and handle_loffset lv lo = 
+  match lo with
+    NoOffset -> lv
+  | Field(f,o) -> handle_loffset (addOffsetLval (Field(f,NoOffset)) lv) o
+  | Index(exp,o) -> handle_loffset (addOffsetLval (Index(exp,NoOffset)) lv) o
+
+(* the transformation is implemented as a Visitor *)
+class simpleVisitor = object 
+  inherit nopCilVisitor
+
+  method vfunc fundec = (* we must record the current context *)
+    thefunc := Some(fundec) ;
+    DoChildren
+
+  method vlval lv = ChangeDoChildrenPost(lv,
+      (fun lv -> handle_lvalue lv))
+
+  method unqueueInstr () = 
+      let result = List.rev !assignment_list in
+      assignment_list := [] ;
+      result 
+end
+
+(* Main entry point: apply the transformation to a file *)
+let simplemem (f : file) =
+  try 
+    visitCilFileSameGlobals (new simpleVisitor) f;
+    f
+  with e -> Printf.printf "Exception in Simplemem.simplemem: %s\n"
+    (Printexc.to_string e) ; raise e
+
+let feature : featureDescr = 
+  { fd_name = "simpleMem";
+    fd_enabled = Cilutil.doSimpleMem;
+    fd_description = "simplify all memory expressions" ;
+    fd_extraopt = [];
+    fd_doit = (function (f: file) -> ignore (simplemem f)) ;
+    fd_post_check = true;
+  } 
diff --git a/cil/src/ext/simplify.ml b/cil/src/ext/simplify.ml
new file mode 100755
index 000000000..776d49163
--- /dev/null
+++ b/cil/src/ext/simplify.ml
@@ -0,0 +1,845 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Sumit Gulwani       <gulwani@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* This module simplifies the expressions in a program in the following ways:
+ 
+1. All expressions are either 
+
+ basic::=
+    Const _ 
+    Addrof(Var v, NoOffset)
+    StartOf(Var v, NoOffset)
+    Lval(Var v, off), where v is a variable whose address is not taken
+                      and off contains only "basic"
+
+ exp::=
+    basic
+    Lval(Mem basic, NoOffset)
+    BinOp(bop, basic, basic)
+    UnOp(uop, basic)
+    CastE(t, basic)
+   
+ lval ::= 
+    Mem basic, NoOffset
+    Var v, off, where v is a variable whose address is not taken and off
+                contains only "basic"
+
+ - all sizeof and alignof are turned into constants
+ - accesses to variables whose address is taken is turned into "Mem" accesses
+ - same for accesses to arrays
+ - all field and index computations are turned into address arithmetic, 
+   including bitfields.
+
+*)
+
+
+open Pretty
+open Cil
+module E = Errormsg
+module H = Hashtbl
+
+type taExp = exp (* Three address expression *)
+type bExp = exp  (* Basic expression *)
+
+let debug = true
+
+(* Whether to split structs *)
+let splitStructs = ref true
+
+let onlyVariableBasics = ref false
+let noStringConstantsBasics = ref false
+
+exception BitfieldAccess
+
+(* Turn an expression into a three address expression (and queue some 
+ * instructions in the process) *)
+let rec makeThreeAddress 
+    (setTemp: taExp -> bExp) (* Given an expression save it into a temp and 
+                              * return that temp *)
+    (e: exp) : taExp = 
+  match e with 
+    SizeOf _ | SizeOfE _ | AlignOf _ |  AlignOfE _ | SizeOfStr _ -> 
+      constFold true e
+  | Const _ -> e
+  | AddrOf (Var _, NoOffset) -> e
+  | Lval lv -> Lval (simplifyLval setTemp lv)
+  | BinOp(bo, e1, e2, tres) -> 
+      BinOp(bo, makeBasic setTemp e1, makeBasic setTemp e2, tres)
+  | UnOp(uo, e1, tres) -> 
+      UnOp(uo, makeBasic setTemp e1, tres)
+  | CastE(t, e) -> 
+      CastE(t, makeBasic setTemp e)
+  | AddrOf lv -> begin
+      match simplifyLval setTemp lv with 
+        Mem a, NoOffset -> a
+      | _ -> (* This is impossible, because we are taking the address 
+          * of v and simplifyLval should turn it into a Mem, except if the 
+          * sizeof has failed.  *)
+          E.s (bug "Simplify: makeThreeAddress for AddrOf(LV=%a, LVT=%a)"
+              d_lval lv d_type (typeOfLval lv))
+  end
+  | StartOf lv -> 
+      makeThreeAddress setTemp (AddrOf (addOffsetLval (Index(zero, NoOffset))
+                                          lv))
+
+(* Make a basic expression *)      
+and makeBasic (setTemp: taExp -> bExp) (e: exp) : bExp = 
+  let dump = false (* !currentLoc.line = 395 *) in
+  if dump then
+    ignore (E.log "makeBasic %a\n" d_plainexp e);
+  (* Make it a three address expression first *)
+  let e' = makeThreeAddress setTemp e in
+  if dump then 
+    ignore (E.log "   e'= %a\n" d_plainexp e);
+  (* See if it is a basic one *)
+  match e' with 
+  | Lval (Var _, _) -> e'
+  | Const _ | AddrOf (Var _, NoOffset) | StartOf (Var _, NoOffset) ->
+      if !onlyVariableBasics then setTemp e' else e'
+  | SizeOf _ | SizeOfE _ | AlignOf _ |  AlignOfE _ | SizeOfStr _ -> 
+      E.s (bug "Simplify: makeBasic found SizeOf: %a" d_exp e')
+
+   (* We cannot make a function to be Basic, unless it actually is a variable 
+    * already. If this is a function pointer the best we can do is to make 
+    * the address of the function basic *)
+  | Lval (Mem a, NoOffset) when isFunctionType (typeOf e') -> 
+      if dump then 
+        ignore (E.log "  a function type\n");
+      let a' = makeBasic setTemp a in
+      Lval (Mem a', NoOffset)
+
+  | _ -> setTemp e' (* Put it into a temporary otherwise *)
+
+
+and simplifyLval 
+    (setTemp: taExp -> bExp) 
+    (lv: lval) : lval = 
+  (* Add, watching for a zero *)
+  let add (e1: exp) (e2: exp) = 
+    if isZero e2 then e1 else BinOp(PlusA, e1, e2, !upointType) 
+  in
+  (* Convert an offset to an integer, and possibly a residual bitfield offset*)
+  let rec offsetToInt 
+      (t: typ) (* The type of the host *)
+      (off: offset) : exp * offset = 
+    match off with 
+      NoOffset -> zero, NoOffset
+    | Field(fi, off') -> begin
+        let start = 
+          try 
+            let start, _ = bitsOffset t (Field(fi, NoOffset)) in
+            start
+          with SizeOfError (whystr, t') -> 
+            E.s (E.bug "%a: Cannot compute sizeof: %s: %a"
+                   d_loc !currentLoc whystr d_type t')
+        in
+        if start land 7 <> 0 then begin
+          (* We have a bitfield *)
+          assert (off' = NoOffset);
+          zero, Field(fi, off')
+        end else begin
+          let next, restoff = offsetToInt fi.ftype off' in
+          add (integer (start / 8)) next,  restoff
+        end
+    end
+    | Index(ei, off') -> begin
+        let telem = match unrollType t with 
+          TArray(telem, _, _) -> telem
+        | _ -> E.s (bug "Simplify: simplifyLval: index on a non-array")
+        in
+        let next, restoff = offsetToInt telem off' in
+        add 
+          (BinOp(Mult, ei, SizeOf telem, !upointType)) 
+          next,
+        restoff
+    end
+  in
+  let tres = TPtr(typeOfLval lv, []) in
+  match lv with 
+    Mem a, off -> 
+      let offidx, restoff = offsetToInt (typeOfLval (Mem a, NoOffset)) off in
+      let a' = 
+        if offidx <> zero then 
+          add (mkCast a !upointType) offidx
+        else
+          a
+      in
+      let a' = makeBasic setTemp a' in
+      Mem (mkCast a' tres), restoff
+
+  | Var v, off when v.vaddrof -> (* We are taking this variable's address *)
+      let offidx, restoff = offsetToInt v.vtype off in
+      (* We cannot call makeBasic recursively here, so we must do it 
+       * ourselves *)
+      let a = mkAddrOrStartOf (Var v, NoOffset) in
+      let a' = 
+        if offidx = zero then a else 
+        add (mkCast a !upointType) (makeBasic setTemp offidx) 
+      in
+      let a' = setTemp a' in
+      Mem (mkCast a' tres), restoff
+
+  | Var v, off -> 
+      (Var v, simplifyOffset setTemp off)
+
+
+(* Simplify an offset and make sure it has only three address expressions in 
+ * indices *)
+and simplifyOffset (setTemp: taExp -> bExp) = function
+    NoOffset -> NoOffset
+  | Field(fi, off) -> Field(fi, simplifyOffset setTemp off)
+  | Index(ei, off) -> 
+      let ei' = makeBasic setTemp ei in
+      Index(ei', simplifyOffset setTemp off)
+
+
+
+
+(** This is a visitor that will turn all expressions into three address code *)
+class threeAddressVisitor (fi: fundec) = object (self)
+  inherit nopCilVisitor
+
+  method private makeTemp (e1: exp) : exp = 
+    let t = makeTempVar fi (typeOf e1) in
+    (* Add this instruction before the current statement *)
+    self#queueInstr [Set(var t, e1, !currentLoc)];
+    Lval(var t)
+
+      (* We'll ensure that this gets called only for top-level expressions 
+       * inside functions. We must turn them into three address code. *)
+  method vexpr (e: exp) = 
+    let e' = makeThreeAddress self#makeTemp e in
+    ChangeTo e'
+
+
+     (** We want the argument in calls to be simple variables *)
+  method vinst (i: instr) =
+    match i with 
+      Call (someo, f, args, loc) -> 
+        let someo' = 
+          match someo with 
+            Some lv -> Some (simplifyLval self#makeTemp lv)
+          | _ -> None
+        in
+        let f' = makeBasic self#makeTemp f in
+        let args' = List.map (makeBasic self#makeTemp) args in 
+        ChangeTo [ Call (someo', f', args', loc) ]
+  | _ -> DoChildren
+
+      (* This method will be called only on top-level "lvals" (those on the 
+       * left of assignments and function calls) *)
+  method vlval (lv: lval) = 
+    ChangeTo (simplifyLval self#makeTemp lv)
+end
+
+(********************
+  Next is an old version of the code that was splitting structs into 
+ * variables. It was not working on variables that are arguments or returns 
+ * of function calls. 
+(** This is a visitor that splits structured variables into separate 
+ * variables. *)
+let isStructType (t: typ): bool = 
+  match unrollType t with
+    TComp (ci, _)  -> ci.cstruct
+  | _ -> false
+
+(* Keep track of how we change the variables. For each variable id we keep a 
+ * hash table that maps an offset (a sequence of fieldinfo) into a 
+ * replacement variable. We also keep track of the splittable vars: those 
+ * with structure type but whose address is not take and which do not appear 
+ * as the argument to a Return *)
+let splittableVars: (int, unit) H.t = H.create 13
+let replacementVars: (int * offset, varinfo) H.t = H.create 13
+
+let findReplacement (fi: fundec) (v: varinfo) (off: offset) : varinfo = 
+  try
+    H.find replacementVars (v.vid, off)
+  with Not_found -> begin
+    let t = typeOfLval (Var v, off) in
+    (* make a name for this variable *)
+    let rec mkName = function
+      | Field(fi, off) -> "_" ^ fi.fname ^ mkName off
+      | _ -> ""
+    in
+    let v' = makeTempVar fi ~name:(v.vname ^ mkName off ^ "_") t in
+    H.add replacementVars (v.vid, off) v';
+    if debug then
+      ignore (E.log "Simplify: %s (%a) replace %a with %s\n"
+                fi.svar.vname
+                d_loc !currentLoc
+                d_lval (Var v, off)
+                v'.vname);
+    v'
+  end
+
+      (* Now separate the offset into a sequence of field accesses and the 
+      * rest of the offset *)
+let rec separateOffset (off: offset): offset * offset = 
+  match off with
+    NoOffset -> NoOffset, NoOffset
+  | Field(fi, off') when fi.fcomp.cstruct -> 
+      let off1, off2 = separateOffset off' in
+      Field(fi, off1), off2
+  | _ -> NoOffset, off
+
+
+class splitStructVisitor (fi: fundec) = object (self) 
+  inherit nopCilVisitor
+
+  method vlval (lv: lval) = 
+    match lv with 
+      Var v, off when H.mem splittableVars v.vid ->
+        (* The type of this lval better not be a struct *)
+        if isStructType (typeOfLval lv) then 
+          E.s (unimp "Simplify: found lval of struct type %a : %a\n"
+                 d_lval lv d_type (typeOfLval lv));
+        let off1, restoff = separateOffset off in
+        let lv' = 
+          if off1 <> NoOffset then begin
+            (* This is a splittable variable and we have an offset that makes 
+            * it a scalar. Find the replacement variable for this *)
+            let v' = findReplacement fi v off1 in
+            if restoff = NoOffset then 
+              Var v', NoOffset
+            else (* We have some more stuff. Use Mem *)
+              Mem (mkAddrOrStartOf (Var v', NoOffset)), restoff
+          end else begin (* off1 = NoOffset *)
+            if restoff = NoOffset then 
+              E.s (bug "Simplify: splitStructVisitor:lval")
+            else
+              simplifyLval 
+                (fun e1 -> 
+                  let t = makeTempVar fi (typeOf e1) in
+                  (* Add this instruction before the current statement *)
+                  self#queueInstr [Set(var t, e1, !currentLoc)];
+                  Lval(var t)) 
+                (Mem (mkAddrOrStartOf (Var v, NoOffset)), restoff)
+          end
+        in
+        ChangeTo lv'
+
+    | _ -> DoChildren
+
+  method vinst (i: instr) = 
+    (* Accumulate to the list of instructions a number of assignments of 
+     * non-splittable lvalues *)
+    let rec accAssignment (ci: compinfo) (dest: lval) (what: lval) 
+                         (acc: instr list) : instr list = 
+      List.fold_left
+        (fun acc f -> 
+          let dest' = addOffsetLval (Field(f, NoOffset)) dest in
+          let what' = addOffsetLval (Field(f, NoOffset)) what in
+          match unrollType f.ftype with 
+            TComp(ci, _) when ci.cstruct -> 
+              accAssignment ci dest' what' acc
+          | TArray _ -> (* We must copy the array *)
+              (Set((Mem (AddrOf dest'), NoOffset),
+                   Lval (Mem (AddrOf what'), NoOffset), !currentLoc)) :: acc
+          | _ -> (* If the type of f is not a struct then leave this alone *)
+              (Set(dest', Lval what', !currentLoc)) :: acc)
+        acc
+        ci.cfields
+    in
+    let doAssignment (ci: compinfo) (dest: lval) (what: lval) : instr list = 
+      let il' = accAssignment ci dest what [] in
+      List.concat (List.map (visitCilInstr (self :> cilVisitor)) il')
+    in
+    match i with 
+      Set(((Var v, off) as lv), what, _) when H.mem splittableVars v.vid ->
+        let off1, restoff = separateOffset off in
+        if restoff <> NoOffset then (* This means that we are only assigning 
+                                     * part of a replacement variable. Leave 
+                                     * this alone because the vlval will take 
+                                     * care of it *)
+          DoChildren
+        else begin
+          (* The type of the replacement has to be a structure *)
+          match unrollType (typeOfLval lv) with
+            TComp (ci, _) when ci.cstruct -> 
+              (* The assigned thing better be an lvalue *)
+              let whatlv = 
+                match what with 
+                  Lval lv -> lv
+                | _ -> E.s (unimp "Simplify: assigned struct is not lval")
+              in
+              ChangeTo (doAssignment ci (Var v, off) whatlv)
+              
+          | _ -> (* vlval will take care of it *)
+              DoChildren
+        end
+
+    | Set(dest, Lval (Var v, off), _) when H.mem splittableVars v.vid -> 
+        let off1, restoff = separateOffset off in
+        if restoff <> NoOffset then (* vlval will do this *)
+          DoChildren
+        else begin
+          (* The type of the replacement has to be a structure *)
+          match unrollType (typeOfLval dest) with
+            TComp (ci, _) when ci.cstruct -> 
+              ChangeTo (doAssignment ci dest (Var v, off))
+              
+          | _ -> (* vlval will take care of it *)
+              DoChildren
+        end
+          
+    | _ -> DoChildren
+        
+end
+*)
+
+(* Whether to split the arguments of functions *)
+let splitArguments = true
+
+(* Whether we try to do the splitting all in one pass. The advantage is that 
+ * it is faster and it generates nicer names *)
+let lu = locUnknown
+
+(* Go over the code and split some temporary variables of stucture type into 
+ * several separate variables. The hope is that the compiler will have an 
+ * easier time to do standard optimizations with the resulting scalars *)
+(* Unfortunately, implementing this turns out to be more complicated than I 
+ * thought *)
+
+(** Iterate over the fields of a structured type. Returns the empty list if 
+ * no splits. The offsets are in order in which they appear in the structure 
+ * type. Along with the offset we pass a string that identifies the 
+ * meta-component, and the type of that component. *)
+let rec foldRightStructFields
+    (doit: offset -> string -> typ -> 'a) (* Invoked on non-struct fields *)
+    (off: offset)
+    (post: 'a list) (** A suffix to what you compute *)
+    (fields: fieldinfo list) : 'a list = 
+  List.fold_right
+    (fun f post -> 
+      let off' = addOffset (Field(f, NoOffset)) off in 
+      match unrollType f.ftype with 
+        TComp (comp, _) when comp.cstruct -> (* struct type: recurse *)
+          foldRightStructFields doit off' post comp.cfields
+      | _ -> 
+          (doit off' f.fname f.ftype) :: post)
+    fields
+    post
+  
+
+let rec foldStructFields
+    (t: typ) 
+    (doit: offset -> string -> typ -> 'a) 
+    : 'a list = 
+  match unrollType t with 
+    TComp (comp, _) when comp.cstruct -> 
+      foldRightStructFields doit NoOffset [] comp.cfields
+  | _ -> []
+      
+      
+(* Map a variable name to a list of component variables, along with the 
+ * accessor offset. The fields are in the order in which they appear in the 
+ * structure. *)
+let newvars : (string, (offset * varinfo) list) H.t = H.create 13
+
+(* Split a variable and return the replacements, in the proper order. If this 
+ * variable is not split, then return just the variable. *)
+let splitOneVar (v: varinfo) 
+                (mknewvar: string -> typ -> varinfo) : varinfo list = 
+  try 
+    (* See if we have already split it *)
+    List.map snd (H.find newvars v.vname)
+  with Not_found -> begin
+    let vars: (offset * varinfo) list = 
+      foldStructFields v.vtype 
+        (fun off n t -> (* make a new one *)
+          let newname = v.vname ^ "_" ^ n in 
+          let v'= mknewvar newname t in
+          (off, v'))
+    in
+    if vars = [] then
+      [ v ]
+    else begin
+      (* Now remember the newly created vars *)
+      H.add newvars v.vname vars;
+      List.map snd vars (* Return just the vars *)
+    end
+  end
+
+
+(* A visitor that finds all locals that appear in a call or have their 
+ * address taken *)
+let dontSplitLocals : (string, bool) H.t = H.create 111
+class findVarsCantSplitClass : cilVisitor = object (self) 
+  inherit nopCilVisitor
+        
+        (* expressions, to see the address being taken *)
+  method vexpr (e: exp) : exp visitAction =
+    match e with 
+      AddrOf (Var v, NoOffset) -> 
+        H.add dontSplitLocals v.vname true; SkipChildren
+      (* See if we take the address of the "_ms" field in a variable *)
+    | _ -> DoChildren
+
+
+          (* variables involved in call instructions *)
+  method vinst (i: instr) : instr list visitAction = 
+    match i with 
+      Call (res, f, args, _) -> 
+        (match res with 
+          Some (Var v, NoOffset) -> H.add dontSplitLocals v.vname true
+        | _ -> ());
+        if not splitArguments then 
+          List.iter (fun a -> 
+            match a with
+              Lval (Var v, NoOffset) -> H.add dontSplitLocals v.vname true
+            | _ -> ()) args; 
+        (* Now continue the visit *)
+        DoChildren
+
+    | _ -> DoChildren
+
+          (* Variables used in return should not be split *)
+  method vstmt (s: stmt) : stmt visitAction = 
+    match s.skind with 
+      Return (Some (Lval (Var v, NoOffset)), _) -> 
+        H.add dontSplitLocals v.vname true; DoChildren
+    | Return (Some e, _) -> 
+        DoChildren
+    | _ -> DoChildren
+
+  method vtype t = SkipChildren
+
+end
+let findVarsCantSplit = new findVarsCantSplitClass
+
+let isVar lv =
+  match lv with 
+      (Var v, NoOffset) -> true
+    | _ -> false
+
+
+class splitVarVisitorClass(func:fundec option) : cilVisitor = object (self)
+  inherit nopCilVisitor
+
+  method private makeTemp (e1: exp) : exp = 
+    let fi:fundec = match func with
+        Some f -> f
+      | None -> 
+          E.s (bug "You can't create a temporary if you're not in a function.")
+    in
+    let t = makeTempVar fi (typeOf e1) in
+    (* Add this instruction before the current statement *)
+    self#queueInstr [Set(var t, e1, !currentLoc)];
+    Lval(var t)
+
+
+  (* We must process the function types *)
+  method vtype t = 
+    (* We invoke the visitor first and then we fix it *)
+    let postProcessFunType (t: typ) : typ = 
+      match t with 
+        TFun(rt, Some params, isva, a) -> 
+          let rec loopParams = function
+              [] -> []
+            | ((pn, pt, pa) :: rest) as params -> 
+                let rest' = loopParams rest in
+                let res: (string * typ * attributes) list = 
+                  foldStructFields pt
+                    (fun off n t -> 
+                      (* Careful with no-name parameters, or we end up with 
+                       * many parameters named _p ! *)
+                      ((if pn <> "" then pn ^ n else ""), t, pa)) 
+                in
+                if res = [] then (* Not a fat *)
+                  if rest' == rest then 
+                    params (* No change at all. Try not to reallocate so that 
+                            * the visitor does not allocate. *)
+                  else
+                    (pn, pt, pa) :: rest'
+                else (* Some change *)
+                  res @ rest'
+          in
+          let params' = loopParams params in
+          if params == params' then 
+            t
+          else
+            TFun(rt, Some params', isva, a)
+          
+      | t -> t
+    in
+    if splitArguments then 
+      ChangeDoChildrenPost(t, postProcessFunType)
+    else
+      SkipChildren
+
+      (* Whenever we see a variable with a field access we try to replace it 
+       * by its components *)
+  method vlval ((b, off) : lval) : lval visitAction = 
+    try
+      match b, off with
+        Var v, (Field _ as off) ->
+          (* See if this variable has some splits.Might throw Not_found *)
+          let splits = H.find newvars v.vname in
+          (* Now find among the splits one that matches this offset. And 
+           * return the remaining offset *)
+          let rec find = function
+              [] -> 
+                E.s (E.bug "Cannot find component %a of %s\n" 
+                       (d_offset nil) off v.vname)
+            | (splitoff, splitvar) :: restsplits -> 
+                let rec matches = function 
+                    Field(f1, rest1), Field(f2, rest2) 
+                      when f1.fname = f2.fname -> 
+                        matches (rest1, rest2)
+                  | off, NoOffset -> 
+                      (* We found a match *)
+                      (Var splitvar, off)
+                  | NoOffset, restoff -> 
+                      ignore (warn "Found aggregate lval %a\n" 
+                                d_lval (b, off));
+                      find restsplits
+
+                  | _, _ -> (* We did not match this one; go on *)
+                      find restsplits
+                in
+                matches (off, splitoff)
+          in
+          ChangeTo (find splits)
+      | _ -> DoChildren
+    with Not_found -> DoChildren
+
+        (* Sometimes we pass the variable as a whole to a function or we 
+         * assign it to something *)
+  method vinst (i: instr) : instr list visitAction = 
+    match i with
+      (* Split into several instructions and then do children inside
+       * the rhs.  Howver, v might appear in the rhs and if we
+       * duplicate the instruction we might get bad
+       * results. (e.g. test/small1/simplify_Structs2.c). So first copy
+       * the rhs to temp variables, then to v. 
+       *
+       * Optimization: if the rhs is a variable, skip the temporary vars.
+       * Either the rhs = lhs, in which case this is all a nop, or it's not, 
+       * in which case the rhs and lhs don't overlap.*)
+
+      Set ((Var v, NoOffset), Lval lv, l) when H.mem newvars v.vname -> begin
+        let needTemps = not (isVar lv) in
+        let vars4v = H.find newvars v.vname in
+        if vars4v = [] then E.s (errorLoc l "No fields in split struct");
+        ChangeTo 
+          (List.map 
+             (fun (off, newv) ->  
+                let lv' = 
+                  visitCilLval (self :> cilVisitor)
+                    (addOffsetLval off lv) in
+                (* makeTemp creates a temp var and puts (Lval lv') in it,
+                   before any instructions in this ChangeTo list are handled.*)
+                let lv_tmp = if needTemps then
+                               self#makeTemp (Lval lv') 
+                             else 
+                               (Lval lv')
+                in
+                Set((Var newv, NoOffset), lv_tmp, l))
+             vars4v)
+      end 
+ 
+      | Set (lv, Lval (Var v, NoOffset), l) when H.mem newvars v.vname -> begin
+          (* Split->NonSplit assignment.  no overlap between lhs and rhs 
+             is possible*)
+          let vars4v = H.find newvars v.vname in
+          if vars4v = [] then E.s (errorLoc l "No fields in split struct");
+          ChangeTo  
+            (List.map 
+               (fun (off, newv) -> 
+                  let lv' = 
+                    visitCilLval (self :> cilVisitor)
+                      (addOffsetLval off lv) in
+                  Set(lv', Lval (Var newv, NoOffset), l))
+               vars4v)
+        end 
+
+        (* Split all function arguments in calls *)
+      | Call (ret, f, args, l) when splitArguments ->
+          (* Visit the children first and then see if we must change the 
+           * arguments *)
+          let finishArgs = function
+              [Call (ret', f', args', l')] as i' -> 
+                let mustChange = ref false in
+                let newargs = 
+                  (* Look for opportunities to split arguments. If we can
+                   * split, we must split the original argument (in args).
+                   * Otherwise, we use the result of processing children
+                   * (in args'). *)
+                  List.fold_right2
+                    (fun a a' acc -> 
+                      match a with
+                        Lval (Var v, NoOffset) when H.mem newvars v.vname -> 
+                          begin
+                            mustChange := true;
+                            (List.map 
+                               (fun (_, newv) -> 
+                                 Lval (Var newv, NoOffset)) 
+                               (H.find newvars v.vname))
+                            @ acc
+                          end
+                      | Lval lv  -> begin
+                          let newargs = 
+                            foldStructFields (typeOfLval lv)
+                              (fun off n t ->
+                                 let lv' = addOffsetLval off lv in
+                                 Lval lv') in
+                          if newargs = [] then
+                            a' :: acc (* not a split var *)
+                          else begin
+                            mustChange := true;
+                            newargs @ acc
+                          end
+                        end
+                      | _ -> (* only lvals are split, right? *)
+                          a' :: acc)
+                    args args'
+                    []
+                in
+                if !mustChange then 
+                  [Call (ret', f', newargs, l')]
+                else
+                  i'
+            | _ -> E.s (E.bug "splitVarVisitorClass: expecting call")
+          in
+          ChangeDoChildrenPost ([i], finishArgs)
+
+      | _ -> DoChildren
+
+        
+  method vfunc (func: fundec) : fundec visitAction = 
+    H.clear newvars;
+    H.clear dontSplitLocals;
+    (* Visit the type of the function itself *)
+    if splitArguments then 
+      func.svar.vtype <- visitCilType (self :> cilVisitor) func.svar.vtype;
+
+    (* Go over the block and find the candidates *)
+    ignore (visitCilBlock findVarsCantSplit func.sbody);
+
+    (* Now go over the formals and create the splits *)
+    if splitArguments then begin
+      (* Split all formals because we will split all arguments in function 
+       * types *)
+      let newformals = 
+        List.fold_right 
+          (fun form acc -> 
+            (* Process the type first *)
+            form.vtype <- 
+               visitCilType (self : #cilVisitor :> cilVisitor) form.vtype;
+            let form' = 
+              splitOneVar form 
+                          (fun s t -> makeLocalVar func ~insert:false s t)
+            in
+            (* Now it is a good time to check if we actually can split this 
+             * one *)
+            if List.length form' > 1 &&
+               H.mem dontSplitLocals form.vname then
+              ignore (warn "boxsplit: can't split formal \"%s\" in %s. Make sure you never take the address of a formal.\n"
+                     form.vname func.svar.vname);
+            form' @ acc)
+          func.sformals [] 
+      in
+      (* Now make sure we fix the type.  *)
+      setFormals func newformals
+    end;
+    (* Now go over the locals and create the splits *)
+    List.iter 
+      (fun l ->
+        (* Process the type of the local *)
+        l.vtype <- visitCilType (self :> cilVisitor) l.vtype;
+        (* Now see if we must split it *)
+        if not (H.mem dontSplitLocals l.vname) then begin
+          ignore (splitOneVar l (fun s t -> makeTempVar func ~name:s t))
+        end) 
+      func.slocals;
+    (* Now visit the body and change references to these variables *)
+    ignore (visitCilBlock (self :> cilVisitor) func.sbody);
+    H.clear newvars;
+    H.clear dontSplitLocals;
+    SkipChildren  (* We are done with this function *)
+
+  (* Try to catch the occurrences of the variable in a sizeof expression *)
+  method vexpr (e: exp) = 
+    match e with 
+    | SizeOfE (Lval(Var v, NoOffset)) -> begin
+        try
+          let splits =  H.find newvars v.vname in
+          (* We cound here on no padding between the elements ! *)
+          ChangeTo
+            (List.fold_left
+               (fun acc (_, thisv) -> 
+                 BinOp(PlusA, SizeOfE(Lval(Var thisv, NoOffset)), 
+                       acc, uintType))
+               zero
+               splits)
+        with Not_found -> DoChildren
+    end
+    | _ -> DoChildren
+end
+
+let doGlobal = function 
+    GFun(fi, _) ->  
+      (* Visit the body and change all expressions into three address code *)
+      let v = new threeAddressVisitor fi in
+      fi.sbody <- visitCilBlock v fi.sbody;
+      if !splitStructs then begin
+        H.clear dontSplitLocals;
+        let splitVarVisitor = new splitVarVisitorClass (Some fi) in    
+        ignore (visitCilFunction splitVarVisitor fi);
+      end
+  | GVarDecl(vi, _) when isFunctionType vi.vtype ->
+      (* we might need to split the args/return value in the function type. *)
+      if !splitStructs then begin
+        H.clear dontSplitLocals;
+        let splitVarVisitor = new splitVarVisitorClass None in    
+        ignore (visitCilVarDecl splitVarVisitor vi);
+      end
+  | _ -> ()
+      
+let feature : featureDescr = 
+  { fd_name = "simplify";
+    fd_enabled = ref false;
+    fd_description = "compiles CIL to 3-address code";
+    fd_extraopt = [
+      ("--no-split-structs", Arg.Unit (fun _ -> splitStructs := false),
+                    "do not split structured variables"); 
+    ];
+    fd_doit = (function f -> iterGlobals f doGlobal);
+    fd_post_check = true;
+}
+
diff --git a/cil/src/ext/ssa.ml b/cil/src/ext/ssa.ml
new file mode 100644
index 000000000..942c92b64
--- /dev/null
+++ b/cil/src/ext/ssa.ml
@@ -0,0 +1,696 @@
+module B=Bitmap
+module E = Errormsg
+
+open Cil
+open Pretty
+
+let debug = false
+    
+(* Globalsread, Globalswritten should be closed under call graph *)
+
+module StringOrder = 
+  struct
+    type t = string
+    let compare s1 s2 = 
+      if s1 = s2 then 0 else
+      if s1 < s2 then -1 else 1
+  end
+  
+module StringSet = Set.Make (StringOrder)
+
+module IntOrder = 
+  struct
+    type t = int
+    let compare i1 i2 = 
+      if i1 = i2 then 0 else
+      if i1 < i2 then -1 else 1
+  end
+  
+module IntSet = Set.Make (IntOrder)
+
+
+type cfgInfo = {
+    name: string; (* The function name *)
+    start   : int;          
+    size    : int;    
+    blocks: cfgBlock array; (** Dominating blocks must come first *)
+    successors: int list array; (* block indices *)
+    predecessors: int list array;   
+    mutable nrRegs: int;
+    mutable regToVarinfo: varinfo array; (** Map register IDs to varinfo *)
+  } 
+
+(** A block corresponds to a statement *)
+and cfgBlock = { 
+    bstmt: Cil.stmt; 
+
+    (* We abstract the statement as a list of def/use instructions *)
+    instrlist: instruction list;
+    mutable livevars: (reg * int) list;  
+    (** For each variable ID that is live at the start of the block, the 
+     * block whose definition reaches this point. If that block is the same 
+     * as the current one, then the variable is a phi variable *)
+    mutable reachable: bool;
+  }
+  
+and instruction = (reg list * reg list) 
+  (* lhs variables, variables on rhs.  *)
+
+
+and reg = int
+
+type idomInfo = int array  (* immediate dominator *)
+
+and dfInfo = (int list) array  (* dominance frontier *)
+
+and oneSccInfo = {
+    nodes: int list;
+    headers: int list;
+    backEdges: (int*int) list;
+  } 
+
+and sccInfo = oneSccInfo list 
+
+(* Muchnick's Domin_Fast, 7.16 *)
+
+let compute_idom (flowgraph: cfgInfo): idomInfo = 
+  let start = flowgraph.start in
+  let size  = flowgraph.size in
+  let successors = flowgraph.successors in
+  let predecessors = flowgraph.predecessors in 
+  let n0 = size in (* a new node (not in the flowgraph) *)
+  let idom = Array.make size (-1) in (* Make an array of immediate dominators  *)
+  let nnodes  = size + 1 in
+  let nodeSet = B.init nnodes (fun i -> true) in
+  
+  let ndfs     = Array.create nnodes 0 in (* mapping from depth-first 
+                                         * number to nodes. DForder 
+                                         * starts at 1, with 0 used as 
+                                         * an invalid entry  *)
+  let parent   = Array.create nnodes 0 in (* the parent in depth-first 
+                                         * spanning tree  *) 
+
+      (* A semidominator of w is the node v with the minimal DForder such 
+       * that there is a path from v to w containing only nodes with the 
+       * DForder larger than w.  *)
+  let sdno     = Array.create nnodes 0 in (* depth-first number of 
+                                         * semidominator  *)
+  
+                                        (* The set of nodes whose 
+                                           * semidominator is ndfs(i) *)
+  let bucket   = Array.init nnodes (fun _ -> B.cloneEmpty nodeSet) in
+  
+       (* The functions link and eval maintain a forest within the 
+          * depth-first spanning tree. Ancestor is n0 is the node is a root in 
+          * the forest. Label(v) is the node in the ancestor chain with the 
+          * smallest depth-first number of its semidominator. Child and Size 
+          * are used to keep the trees in the forest balanced  *)
+  let ancestor = Array.create nnodes 0 in 
+  let label    = Array.create nnodes 0 in
+  let child    = Array.create nnodes 0 in
+  let size     = Array.create nnodes 0 in
+  
+  
+  let n = ref 0 in                  (* depth-first scan and numbering. 
+                                       * Initialize data structures. *)
+  ancestor.(n0) <- n0;
+  label.(n0)    <- n0;
+  let rec depthFirstSearchDom v =
+    incr n;
+  sdno.(v) <- !n;
+    ndfs.(!n) <- v; label.(v) <- v;
+    ancestor.(v) <- n0;             (* All nodes are roots initially *)
+    child.(v) <- n0; size.(v) <- 1;
+    List.iter 
+      (fun w ->
+	if sdno.(w) = 0 then begin 
+          parent.(w) <- v; depthFirstSearchDom w 
+	end)
+      successors.(v);
+  in
+       (* Determine the ancestor of v whose semidominator has the the minimal 
+          * DFnumber. In the process, compress the paths in the forest.  *)
+  let eval v =
+    let rec compress v =
+      if ancestor.(ancestor.(v)) <> n0 then
+	begin
+	  compress ancestor.(v);
+	  if sdno.(label.(ancestor.(v))) < sdno.(label.(v)) then
+	    label.(v) <- label.(ancestor.(v));
+	  ancestor.(v) <- ancestor.(ancestor.(v))
+      end
+    in
+    if ancestor.(v) = n0 then label.(v)
+    else begin
+      compress v;
+      if sdno.(label.(ancestor.(v))) >= sdno.(label.(v)) then
+	label.(v)
+      else label.(ancestor.(v))
+    end
+  in
+  
+  let link v w =
+    let s = ref w in
+    while sdno.(label.(w)) < sdno.(label.(child.(!s))) do
+      if size.(!s) + size.(child.(child.(!s))) >= 2* size.(child.(!s)) then
+	(ancestor.(child.(!s)) <- !s;
+	 child.(!s) <- child.(child.(!s)))
+      else
+	(size.(child.(!s)) <- size.(!s);
+	 ancestor.(!s) <- child.(!s); s := child.(!s));
+    done;
+    label.(!s) <- label.(w);
+    size.(v) <- size.(v) + size.(w);
+    if size.(v) < 2 * size.(w) then begin
+      let tmp = !s in
+      s :=  child.(v);
+      child.(v) <- tmp;
+    end;
+    while !s <> n0 do
+      ancestor.(!s) <- v;
+      s := child.(!s);
+    done;
+  in
+      (* Start now *)
+  depthFirstSearchDom start;
+  for i = !n downto 2 do
+    let w = ndfs.(i) in
+    List.iter (fun v ->
+      let u = eval v in
+      if sdno.(u) < sdno.(w) then sdno.(w) <- sdno.(u);)
+      predecessors.(w);
+    B.set bucket.(ndfs.(sdno.(w))) w true;
+    link parent.(w) w;
+    while not (B.empty bucket.(parent.(w))) do
+      let v =
+	match B.toList bucket.(parent.(w)) with
+	  x :: _ -> x
+	| [] -> ignore(print_string "Error in dominfast");0 in
+      B.set bucket.(parent.(w)) v false;
+      let u = eval v in
+      idom.(v) <- if sdno.(u) < sdno.(v) then u else parent.(w);
+    done;
+  done;
+  
+  for i=2 to !n do
+    let w = ndfs.(i) in
+    if idom.(w) <> ndfs.(sdno.(w)) then begin 
+      let newDom = idom.(idom.(w)) in
+      idom.(w) <- newDom;
+    end
+  done;
+  idom
+    
+    
+    
+    
+    
+let dominance_frontier (flowgraph: cfgInfo) : dfInfo = 
+  let idom = compute_idom flowgraph in
+  let size = flowgraph.size in
+  let children = Array.create size [] in 
+  for i = 0 to size - 1 do
+    if (idom.(i) != -1) then children.(idom.(i)) <- i :: children.(idom.(i));
+  done; 
+
+  let size  = flowgraph.size in
+  let start  = flowgraph.start in
+  let successors = flowgraph.successors in
+  
+  let df = Array.create size [] in
+                                        (* Compute the dominance frontier  *)
+  
+  let bottom = Array.make size true in  (* bottom of the dominator tree *)
+  for i = 0 to size - 1 do 
+    if (i != start) && idom.(i) <> -1 then bottom.(idom.(i)) <- false; 
+  done;
+
+  let processed = Array.make size false in (* to record the nodes added to work_list *) 
+  let workList = ref ([]) in (* to iterate in a bottom-up traversal of the dominator tree *)
+  for i = 0 to size - 1 do 
+    if (bottom.(i)) then workList := i :: !workList; 
+  done;
+  while (!workList != []) do
+    let x = List.hd !workList in
+    let update y = if idom.(y) <> x then df.(x) <- y::df.(x) in
+                                        (* compute local component *)
+    
+(* We use whichPred instead of whichSucc because ultimately this info is 
+ * needed by control dependence dag which is constructed from REVERSE 
+ * dominance frontier *)
+    List.iter (fun succ -> update succ) successors.(x);
+                                        (* add on up component *)
+    List.iter (fun z -> List.iter (fun y  -> update y) df.(z)) children.(x);
+    processed.(x) <- true;
+    workList := List.tl !workList;
+    if (x != start) then begin
+      let i = idom.(x) in
+      if i <> -1 && 
+         (List.for_all (fun child -> processed.(child)) children.(i)) then workList := i :: !workList; 
+    end;
+  done;
+  df
+    
+    
+(* Computes for each register, the set of nodes that need a phi definition 
+ * for the register *)
+    
+let add_phi_functions_info (flowgraph: cfgInfo) : unit = 
+  let df = dominance_frontier flowgraph in
+  let size  = flowgraph.size in
+  let nrRegs = flowgraph.nrRegs in 
+  
+
+  let defs = Array.init size (fun i -> B.init nrRegs (fun j -> false)) in 
+  for i = 0 to size-1 do 
+    List.iter 
+      (fun (lhs,rhs) ->
+        List.iter (fun (r: reg) -> B.set defs.(i) r true) lhs;
+      ) 
+      flowgraph.blocks.(i).instrlist
+  done;
+  let iterCount = ref 0 in
+  let hasAlready = Array.create size 0 in 
+  let work = Array.create size 0 in 
+  let w = ref ([]) in 
+  let dfPlus = Array.init nrRegs (
+    fun i -> 
+      let defIn = B.make size in
+      for j = 0 to size - 1 do 
+	if B.get defs.(j) i then B.set defIn j true
+      done;
+      let res = ref [] in 
+      incr iterCount;
+      B.iter (fun x -> work.(x) <- !iterCount; w := x :: !w;) defIn;
+      while (!w != []) do 
+	let x = List.hd !w in
+	w := List.tl !w;
+	List.iter (fun y -> 
+	  if (hasAlready.(y) < !iterCount) then begin
+	    res := y :: !res;
+	    hasAlready.(y) <- !iterCount;
+	    if (work.(y) < !iterCount) then begin
+	      work.(y) <- !iterCount;
+	      w := y :: !w;
+	    end;
+	  end;
+		  ) df.(x)
+      done;
+      (* res := List.filter (fun blkId -> B.get liveIn.(blkId) i) !res; *)
+      !res
+   ) in
+  let result = Array.create size ([]) in
+  for i = 0 to nrRegs - 1 do
+    List.iter (fun node -> result.(node) <- i::result.(node);) dfPlus.(i) 
+  done;
+(* result contains for each node, the list of variables that need phi 
+ * definition *)
+  for i = 0 to size-1 do
+    flowgraph.blocks.(i).livevars <- 
+      List.map (fun r -> (r, i)) result.(i);
+  done
+    
+  
+    
+(* add dominating definitions info *)
+    
+let add_dom_def_info (f: cfgInfo): unit = 
+  let blocks = f.blocks in
+  let start = f.start in
+  let size = f.size in
+  let nrRegs = f.nrRegs in
+
+  let idom = compute_idom f in
+  let children = Array.create size [] in 
+  for i = 0 to size - 1 do
+    if (idom.(i) != -1) then children.(idom.(i)) <- i :: children.(idom.(i));
+  done; 
+  
+  if debug then begin
+    ignore (E.log "Immediate dominators\n");
+    for i = 0 to size - 1 do 
+      ignore (E.log " block %d: idom=%d, children=%a\n"
+                i idom.(i)
+                (docList num) children.(i));
+    done
+  end;
+
+  (* For each variable, maintain a stack of blocks that define it. When you 
+   * process a block, the top of the stack is the closest dominator that 
+   * defines the variable *)
+  let s = Array.make nrRegs ([start]) in 
+  
+  (* Search top-down in the idom tree *)
+  let rec search (x: int): unit = (* x is a graph node *)
+    (* Push the current block for the phi variables *)
+    List.iter 
+      (fun ((r: reg), dr) -> 
+        if x = dr then s.(r) <- x::s.(r)) 
+      blocks.(x).livevars;
+
+    (* Clear livevars *)
+    blocks.(x).livevars <- [];
+    
+    (* Compute livevars *)
+    for i = 0 to nrRegs-1 do
+      match s.(i) with 
+      | [] -> assert false
+      | fst :: _ -> 
+          blocks.(x).livevars <- (i, fst) :: blocks.(x).livevars
+    done;
+
+
+    (* Update s for the children *)
+    List.iter 
+      (fun (lhs,rhs) ->
+	List.iter (fun (lreg: reg) -> s.(lreg) <- x::s.(lreg) ) lhs; 
+      ) 
+      blocks.(x).instrlist;
+    
+        
+    (* Go and do the children *)
+    List.iter search children.(x);
+    
+    (* Then we pop x, whenever it is on top of a stack *)
+    Array.iteri 
+      (fun i istack -> 
+        let rec dropX = function
+            [] -> []
+          |  x' :: rest when x = x' -> dropX rest
+          | l -> l
+        in
+        s.(i) <- dropX istack)
+      s;
+  in
+  search(start)
+  
+   
+
+let prune_cfg (f: cfgInfo): cfgInfo = 
+ let size = f.size in 
+ if size = 0 then f else
+ let reachable = Array.make size false in
+ let worklist = ref([f.start]) in
+ while (!worklist != []) do 
+   let h = List.hd !worklist in
+   worklist := List.tl !worklist;
+   reachable.(h) <- true;
+   List.iter (fun s -> if (reachable.(s) = false) then worklist := s::!worklist; 
+	     ) f.successors.(h);
+ done;
+(*
+ let dummyblock = {  bstmt = mkEmptyStmt ();
+                     instrlist = [];
+                     livevars = [] } 
+ in
+*)
+ let successors = Array.init size (fun i -> List.filter (fun s -> reachable.(s)) f.successors.(i)) in
+ let predecessors = Array.init size (fun i -> List.filter (fun s -> reachable.(s)) f.predecessors.(i)) in
+ Array.iteri (fun i b -> b.reachable <- reachable.(i)) f.blocks;
+ let result: cfgInfo = 
+        { name = f.name;
+          start = f.start;
+          size = f.size;
+          successors = successors;
+          predecessors = predecessors;
+          blocks = f.blocks;
+          nrRegs = f.nrRegs;
+          regToVarinfo = f.regToVarinfo;
+        }
+ in
+ result
+ 
+ 
+let add_ssa_info (f: cfgInfo): unit = 
+  let f = prune_cfg f in
+  let d_reg () (r: int) = 
+    dprintf "%s(%d)" f.regToVarinfo.(r).vname r
+  in
+  if debug then begin
+    ignore (E.log "Doing SSA for %s. Initial data:\n" f.name);
+    Array.iteri (fun i b -> 
+      ignore (E.log " block %d:\n    succs=@[%a@]\n    preds=@[%a@]\n   instr=@[%a@]\n"
+                i
+                (docList num) f.successors.(i)
+                (docList num) f.predecessors.(i)
+                (docList ~sep:line (fun (lhs, rhs) -> 
+                  dprintf "%a := @[%a@]"
+                    (docList (d_reg ())) lhs (docList (d_reg ())) rhs))
+                b.instrlist))
+      f.blocks;
+  end;
+
+  add_phi_functions_info f;
+  add_dom_def_info f;
+
+  if debug then begin
+    ignore (E.log "After SSA\n");
+    Array.iter (fun b -> 
+      ignore (E.log " block %d livevars: @[%a@]\n" 
+                b.bstmt.sid 
+                (docList (fun (i, fst) -> 
+                  dprintf "%a def at %d" d_reg i fst))
+                b.livevars))
+      f.blocks;
+  end
+
+
+let set2list s = 
+  let result = ref([]) in
+  IntSet.iter (fun element -> result := element::!result) s;
+  !result
+
+
+
+
+let preorderDAG (nrNodes: int) (successors: (int list) array): int list = 
+  let processed = Array.make nrNodes false in
+  let revResult = ref ([]) in
+  let predecessorsSet = Array.make nrNodes (IntSet.empty) in
+  for i = 0 to nrNodes -1 do 
+    List.iter (fun s -> predecessorsSet.(s) <- IntSet.add i predecessorsSet.(s)) successors.(i);
+  done;
+  let predecessors = Array.init nrNodes (fun i -> set2list predecessorsSet.(i)) in
+  let workList = ref([]) in
+  for i = 0 to nrNodes - 1 do
+    if (predecessors.(i) = []) then workList := i::!workList;
+  done;
+  while (!workList != []) do
+    let x = List.hd !workList in
+    workList := List.tl !workList;
+    revResult := x::!revResult;
+    processed.(x) <- true;
+    List.iter (fun s -> 
+      if (List.for_all (fun p -> processed.(p)) predecessors.(s)) then
+	workList := s::!workList;
+	      ) successors.(x);
+  done;
+  List.rev !revResult
+
+
+(* Muchnick Fig 7.12 *) 
+(* takes an SCC description as an input and returns prepares the appropriate SCC *)
+let preorder (nrNodes: int) (successors: (int list) array) (r: int): oneSccInfo = 
+  if debug then begin
+    ignore (E.log "Inside preorder \n");
+    for i = 0 to nrNodes - 1 do 
+      ignore (E.log "succ(%d) = %a" i (docList (fun i -> num i)) successors.(i)); 
+    done;
+  end;
+  let i = ref(0) in
+  let j = ref(0) in 
+  let pre = Array.make nrNodes (-1) in
+  let post = Array.make nrNodes (-1) in
+  let visit = Array.make nrNodes (false) in
+  let backEdges = ref ([]) in
+  let headers = ref(IntSet.empty) in
+  let rec depth_first_search_pp (x:int) =      
+    visit.(x) <- true; 
+    pre.(x) <- !j;
+    incr j;
+    List.iter (fun (y:int) -> 
+      if (not visit.(y)) then
+	(depth_first_search_pp y)
+      else 
+	if (post.(y) = -1) then begin
+          backEdges := (x,y)::!backEdges;
+	  headers := IntSet.add y !headers;
+	end;
+	      ) successors.(x);
+    post.(x) <- !i;
+    incr i;
+  in
+  depth_first_search_pp r;
+  let nodes = Array.make nrNodes (-1) in
+  for y = 0 to nrNodes - 1 do
+    if (pre.(y) != -1) then nodes.(pre.(y)) <- y;
+  done;
+  let nodeList = List.filter (fun i -> (i != -1)) (Array.to_list nodes) in
+  let result = { headers = set2list !headers; backEdges = !backEdges; nodes = nodeList; } in
+  result
+    
+
+exception Finished
+
+
+let strong_components (f: cfgInfo) (debug: bool) = 
+  let size = f.size in
+  let parent = Array.make size (-1) in
+  let color = Array.make size (-1) in
+  let finish = Array.make size (-1) in
+  let root = Array.make size (-1) in
+
+(* returns a list of SCC. Each SCC is a tuple of SCC root and SCC nodes *) 
+  let dfs (successors: (int list) array) (order: int array) = 
+    let time = ref(-1) in
+    let rec dfs_visit u = 
+      color.(u) <- 1;
+      incr time; 
+      (* d.(u) <- time; *)
+      List.iter (fun v ->
+	if color.(v) = 0 then (parent.(v) <- u; dfs_visit v) 
+		) successors.(u);
+      color.(u) <- 2;
+      incr time;
+      finish.(u) <- !time
+    in
+    for u = 0 to size - 1 do
+      color.(u) <- 0; (* white = 0, gray = 1, black = 2 *)
+      parent.(u) <- -1; (* nil = -1 *)
+      root.(u) <- 0; (* Is u a root? *)
+    done;
+    time := 0;
+    Array.iter (fun u -> 
+      if (color.(u) = 0) then begin 
+	root.(u) <- 1;
+	dfs_visit u;
+      end;
+	       ) order;
+  in
+
+  let simpleOrder = Array.init size (fun i -> i) in
+  dfs f.successors simpleOrder;
+  Array.sort (fun i j -> if (finish.(i) > finish.(j)) then -1 else 1) simpleOrder;
+  
+  dfs f.predecessors simpleOrder;
+(* SCCs have been computed. (The trees represented by non-null parent edges 
+ * represent the SCCS. We call the black nodes as the roots). Now put the 
+ * result in the ouput format *)
+  let allScc = ref([]) in
+  for u = 0 to size - 1 do 
+    if root.(u) = 1 then begin
+      let sccNodes = ref(IntSet.empty) in
+      let workList = ref([u]) in
+      while (!workList != []) do 
+	let h=List.hd !workList in
+	workList := List.tl !workList;
+	sccNodes := IntSet.add h !sccNodes;
+	List.iter (fun s -> if parent.(s)=h then workList := s::!workList;) f.predecessors.(h);
+      done;
+      allScc := (u,!sccNodes)::!allScc;
+      if (debug) then begin
+	ignore (E.log "Got an SCC with root %d and nodes %a" u (docList num) (set2list !sccNodes)); 
+      end;
+    end;
+  done;
+  !allScc
+      
+ 
+let stronglyConnectedComponents (f: cfgInfo) (debug: bool): sccInfo = 
+  let size = f.size in
+  if (debug) then begin
+    ignore (E.log "size = %d\n" size);
+    for i = 0 to size - 1 do 
+      ignore (E.log "Successors(%d): %a\n" i (docList (fun n -> num n)) f.successors.(i));
+    done;
+  end;
+
+  let allScc = strong_components f debug in
+  let all_sccArray = Array.of_list allScc in
+
+  if (debug) then begin 
+    ignore (E.log "Computed SCCs\n");
+    for i = 0 to (Array.length all_sccArray) - 1 do
+      ignore(E.log "SCC #%d: " i);
+      let (_,sccNodes) = all_sccArray.(i) in
+      IntSet.iter (fun i -> ignore(E.log "%d, " i)) sccNodes;
+      ignore(E.log "\n");
+    done;
+  end;
+  
+
+  (* Construct sccId: Node -> Scc Id *)
+  let sccId = Array.make size (-1) in
+  Array.iteri (fun i (r,sccNodes) -> 
+    IntSet.iter (fun n -> sccId.(n) <- i) sccNodes; 
+	      ) all_sccArray;
+  
+  if (debug) then begin 
+    ignore (E.log "\nComputed SCC IDs: ");
+    for i = 0 to size - 1 do 
+      ignore (E.log "SCCID(%d) = %d " i sccId.(i));
+    done;
+  end;
+  
+
+  (* Construct sccCFG *)
+  let nrScc = Array.length all_sccArray in
+  let successors = Array.make nrScc [] in
+  for x = 0 to nrScc - 1 do
+    successors.(x) <- 
+      let s = ref(IntSet.empty) in 
+      IntSet.iter (fun y ->
+	List.iter (fun z -> 
+	  let sy = sccId.(y) in
+	  let sz = sccId.(z) in
+	  if (not(sy = sz)) then begin 
+	    s := IntSet.add sz !s;
+	  end
+		  ) f.successors.(y) 
+		  ) (snd all_sccArray.(x));
+      set2list !s
+  done;
+ 
+  if (debug) then begin 
+    ignore (E.log "\nComputed SCC CFG, which should be a DAG:");
+    ignore (E.log "nrSccs = %d " nrScc);
+    for i = 0 to nrScc - 1 do  
+      ignore (E.log "successors(%d) = [%a] " i (docList (fun j -> num j)) successors.(i));
+    done;
+  end;
+  
+
+  (* Order SCCs. The graph is a DAG here *)
+  let sccorder = preorderDAG nrScc successors in
+
+  if (debug) then begin 
+    ignore (E.log "\nComputed SCC Preorder: ");
+    ignore (E.log "Nodes in Preorder = [%a]" (docList (fun i -> num i)) sccorder);
+  end;
+  
+  (* Order nodes of each SCC. The graph is a SCC here.*)
+  let scclist = List.map (fun i -> 
+    let successors = Array.create size [] in
+    for j = 0 to size - 1 do 
+      successors.(j) <- List.filter (fun x -> IntSet.mem x (snd all_sccArray.(i))) f.successors.(j);
+    done;
+    preorder f.size successors (fst all_sccArray.(i))  
+	   ) sccorder in
+  if (debug) then begin 
+    ignore (E.log "Computed Preorder for Nodes of each SCC\n");
+    List.iter (fun scc -> 
+      ignore (E.log "BackEdges = %a \n" 
+                (docList (fun (src,dest) -> dprintf "(%d,%d)" src dest))
+                scc.backEdges);) 
+      scclist;
+  end;
+  scclist
+
+
+
+
+    
+    
+    
+	
+    
diff --git a/cil/src/ext/ssa.mli b/cil/src/ext/ssa.mli
new file mode 100644
index 000000000..be244d811
--- /dev/null
+++ b/cil/src/ext/ssa.mli
@@ -0,0 +1,45 @@
+type cfgInfo = {
+    name: string; (* The function name *)
+    start   : int;          
+    size    : int;    
+    blocks: cfgBlock array; (** Dominating blocks must come first *)
+    successors: int list array; (* block indices *)
+    predecessors: int list array;   
+    mutable nrRegs: int;
+    mutable regToVarinfo: Cil.varinfo array; (** Map register IDs to varinfo *)
+  } 
+
+(** A block corresponds to a statement *)
+and cfgBlock = { 
+    bstmt: Cil.stmt;
+
+    (* We abstract the statement as a list of def/use instructions *)
+    instrlist: instruction list;
+    mutable livevars: (reg * int) list;  
+    (** For each variable ID that is live at the start of the block, the 
+     * block whose definition reaches this point. If that block is the same 
+     * as the current one, then the variable is a phi variable *)
+    mutable reachable: bool;
+  }
+  
+and instruction = (reg list * reg list) 
+  (* lhs variables, variables on rhs.  *)
+
+
+and reg = int
+
+type idomInfo = int array  (* immediate dominator *)
+
+and dfInfo = (int list) array  (* dominance frontier *)
+
+and oneSccInfo = {
+    nodes: int list;
+    headers: int list;
+    backEdges: (int*int) list;
+  } 
+
+and sccInfo = oneSccInfo list 
+
+val add_ssa_info: cfgInfo -> unit
+val stronglyConnectedComponents: cfgInfo -> bool -> sccInfo 
+val prune_cfg: cfgInfo -> cfgInfo
diff --git a/cil/src/ext/stackoverflow.ml b/cil/src/ext/stackoverflow.ml
new file mode 100644
index 000000000..da2c40183
--- /dev/null
+++ b/cil/src/ext/stackoverflow.ml
@@ -0,0 +1,246 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+module H = Hashtbl
+open Cil
+open Pretty
+module E = Errormsg
+
+let debug = false
+
+
+(* For each function we have a node *)
+type node = { name: string;
+              mutable scanned: bool;
+              mutable mustcheck: bool;
+              mutable succs: node list }
+(* We map names to nodes *)
+let functionNodes: (string, node) H.t = H.create 113 
+let getFunctionNode (n: string) : node = 
+  Util.memoize 
+    functionNodes
+    n
+    (fun _ -> { name = n; mustcheck = false; scanned = false; succs = [] })
+
+(** Dump the function call graph. Assume that there is a main *)
+let dumpGraph = true
+let dumpFunctionCallGraph () = 
+  H.iter (fun _ x -> x.scanned <- false) functionNodes;
+  let rec dumpOneNode (ind: int) (n: node) : unit = 
+    output_string !E.logChannel "\n";
+    for i = 0 to ind do 
+      output_string !E.logChannel "  "
+    done;
+    output_string !E.logChannel (n.name ^ " ");
+    if n.scanned then (* Already dumped *)
+      output_string !E.logChannel " <rec> "
+    else begin
+      n.scanned <- true;
+      List.iter (dumpOneNode (ind + 1)) n.succs
+    end
+  in
+  try
+    let main = H.find functionNodes "main" in
+    dumpOneNode 0 main
+  with Not_found -> begin
+    ignore (E.log 
+              "I would like to dump the function graph but there is no main");
+  end
+  
+(* We add a dummy function whose name is "@@functionPointer@@" that is called 
+ * at all invocations of function pointers and itself calls all functions 
+ * whose address is taken.  *)
+let functionPointerName = "@@functionPointer@@"
+
+let checkSomeFunctions = ref false
+
+let init () = 
+  H.clear functionNodes;
+  checkSomeFunctions := false
+
+
+let addCall (caller: string) (callee: string) = 
+  let callerNode = getFunctionNode caller in
+  let calleeNode = getFunctionNode callee in
+  if not (List.exists (fun n -> n.name = callee) callerNode.succs) then begin
+    if debug then
+      ignore (E.log "found call from %s to %s\n" caller callee);
+    callerNode.succs <- calleeNode :: callerNode.succs;
+  end;
+  ()
+
+
+class findCallsVisitor (host: string) : cilVisitor = object
+  inherit nopCilVisitor
+
+  method vinst i =
+    match i with
+    | Call(_,Lval(Var(vi),NoOffset),_,l) -> 
+        addCall host vi.vname;
+        SkipChildren
+
+    | Call(_,e,_,l) -> (* Calling a function pointer *)
+        addCall host functionPointerName;
+        SkipChildren
+
+    | _ -> SkipChildren (* No calls in other instructions *)
+
+  (* There are no calls in expressions and types *)          
+  method vexpr e = SkipChildren
+  method vtype t = SkipChildren
+
+end
+
+(* Now detect the cycles in the call graph. Do a depth first search of the 
+ * graph (stack is the list of nodes already visited in the current path). 
+ * Return true if we have found a cycle. *)
+let rec breakCycles (stack: node list) (n: node) : bool = 
+  if n.scanned then (* We have already scanned this node. There are no cycles 
+                     * going through this node *)
+    false
+  else if n.mustcheck then 
+    (* We are reaching a node that we already know we much check. Return with 
+     * no new cycles. *)
+    false
+  else if List.memq n stack then begin
+    (* We have found a cycle. Mark the node n to be checked and return *)
+    if debug then
+      ignore (E.log "Will place an overflow check in %s\n" n.name);
+    checkSomeFunctions := true;
+    n.mustcheck <- true;
+    n.scanned <- true;
+    true
+  end else begin
+    let res = List.exists (fun nd -> breakCycles (n :: stack) nd) n.succs in
+    n.scanned <- true;
+    if res && n.mustcheck then 
+      false
+    else
+      res
+  end
+let findCheckPlacement () = 
+  H.iter (fun _ nd -> 
+    if nd.name <> functionPointerName 
+       && not nd.scanned && not nd.mustcheck then begin
+         ignore (breakCycles [] nd)
+       end)
+    functionNodes
+
+let makeFunctionCallGraph (f: Cil.file) : unit = 
+  init ();
+  (* Scan the file and construct the control-flow graph *)
+  List.iter
+    (function
+        GFun(fdec, _) -> 
+          if fdec.svar.vaddrof then 
+            addCall functionPointerName fdec.svar.vname;
+          let vis = new findCallsVisitor fdec.svar.vname in
+          ignore (visitCilBlock vis fdec.sbody)
+
+      | _ -> ())
+    f.globals
+
+let makeAndDumpFunctionCallGraph (f: file) = 
+  makeFunctionCallGraph f;
+  dumpFunctionCallGraph ()
+
+
+let addCheck (f: Cil.file) : unit = 
+  makeFunctionCallGraph f;
+  findCheckPlacement ();
+  if !checkSomeFunctions then begin
+    (* Add a declaration for the stack threshhold variable. The program is 
+     * stopped when the stack top is less than this value. *)
+    let stackThreshholdVar = makeGlobalVar "___stack_threshhold" !upointType in
+    stackThreshholdVar.vstorage <- Extern;
+    (* And the initialization function *)
+    let computeStackThreshhold = 
+      makeGlobalVar "___compute_stack_threshhold" 
+        (TFun(!upointType, Some [], false, [])) in
+    computeStackThreshhold.vstorage <- Extern;
+    (* And the failure function *)
+    let stackOverflow = 
+      makeGlobalVar "___stack_overflow" 
+        (TFun(voidType, Some [], false, [])) in
+    stackOverflow.vstorage <- Extern;
+    f.globals <- 
+       GVar(stackThreshholdVar, {init=None}, locUnknown) ::
+       GVarDecl(computeStackThreshhold, locUnknown) ::
+       GVarDecl(stackOverflow, locUnknown) :: f.globals;
+    (* Now scan and instrument each function definition *)
+    List.iter
+      (function 
+          GFun(fdec, l) -> 
+            (* If this is main we must introduce the initialization of the 
+             * bottomOfStack *)
+            let nd = getFunctionNode fdec.svar.vname in
+            if fdec.svar.vname = "main" then begin
+              if nd.mustcheck then 
+                E.s (E.error "The \"main\" function is recursive!!");
+              let loc = makeLocalVar fdec "__a_local" intType in
+              loc.vaddrof <- true;
+              fdec.sbody <- 
+                 mkBlock
+                   [ mkStmtOneInstr
+                       (Call (Some(var stackThreshholdVar), 
+                              Lval(var computeStackThreshhold), [], l));
+                     mkStmt (Block fdec.sbody) ]
+            end else if nd.mustcheck then begin
+              let loc = makeLocalVar fdec "__a_local" intType in
+              loc.vaddrof <- true;
+              fdec.sbody <- 
+                 mkBlock
+                   [ mkStmt
+                       (If(BinOp(Le, 
+                                 CastE(!upointType, AddrOf (var loc)),
+                                 Lval(var stackThreshholdVar), intType),
+                           mkBlock [mkStmtOneInstr
+                                  (Call(None, Lval(var stackOverflow),
+                                        [], l))],
+                           mkBlock [],
+                           l));
+                     mkStmt (Block fdec.sbody) ]
+            end else
+              ()
+
+        | _ -> ())
+      f.globals;
+    ()
+  end
+
+
+
+
diff --git a/cil/src/ext/stackoverflow.mli b/cil/src/ext/stackoverflow.mli
new file mode 100644
index 000000000..6ec020075
--- /dev/null
+++ b/cil/src/ext/stackoverflow.mli
@@ -0,0 +1,43 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* This module inserts code to check for stack overflow. It saves the address 
+ * of the top of the stack in "main" and then it picks one function *)
+
+val addCheck: Cil.file -> unit
+
+val makeAndDumpFunctionCallGraph: Cil.file -> unit
diff --git a/cil/src/ext/usedef.ml b/cil/src/ext/usedef.ml
new file mode 100755
index 000000000..57f226aac
--- /dev/null
+++ b/cil/src/ext/usedef.ml
@@ -0,0 +1,188 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+
+open Cil
+open Pretty
+
+(** compute use/def information *)
+
+module VS = Set.Make (struct 
+                        type t = Cil.varinfo
+                        let compare v1 v2 = Pervasives.compare v1.vid v2.vid
+                      end)
+
+(** Set this global to how you want to handle function calls *)
+let getUseDefFunctionRef: (exp -> VS.t * VS.t) ref = 
+  ref (fun _ -> (VS.empty, VS.empty))
+
+(** Say if you want to consider a variable use *)
+let considerVariableUse: (varinfo -> bool) ref = 
+  ref (fun _ -> true)
+
+
+(** Say if you want to consider a variable def *)
+let considerVariableDef: (varinfo -> bool) ref = 
+  ref (fun _ -> true)
+
+(** Save if you want to consider a variable addrof as a use *)
+let considerVariableAddrOfAsUse: (varinfo -> bool) ref = 
+  ref (fun _ -> true)
+
+(* When this is true, only definitions of a variable without
+   an offset are counted as definitions. So:
+   a = 5; would be a definition, but
+   a[1] = 5; would not *)
+let onlyNoOffsetsAreDefs: bool ref = ref false
+
+let varUsed: VS.t ref = ref VS.empty
+let varDefs: VS.t ref = ref VS.empty
+
+class useDefVisitorClass : cilVisitor = object (self)
+  inherit nopCilVisitor
+      
+  (** this will be invoked on variable definitions only because we intercept 
+   * all uses of variables in expressions ! *)
+  method vvrbl (v: varinfo) = 
+    if (!considerVariableDef) v &&
+      not(!onlyNoOffsetsAreDefs) then 
+      varDefs := VS.add v !varDefs;
+    SkipChildren
+
+  (** If onlyNoOffsetsAreDefs is true, then we need to see the
+   *  varinfo in an lval along with the offset. Otherwise just
+   *  DoChildren *)
+  method vlval (l: lval) =
+    if !onlyNoOffsetsAreDefs then
+      match l with
+	(Var vi, NoOffset) ->
+	  if (!considerVariableDef) vi then
+	    varDefs := VS.add vi !varDefs;
+	  SkipChildren
+      | _ -> DoChildren
+    else DoChildren
+
+  method vexpr = function
+      Lval (Var v, off) -> 
+        ignore (visitCilOffset (self :> cilVisitor) off);
+        if (!considerVariableUse) v then
+          varUsed := VS.add v !varUsed;
+        SkipChildren (* So that we do not see the v *)
+
+    | AddrOf (Var v, off) 
+    | StartOf (Var v, off) -> 
+        ignore (visitCilOffset (self :> cilVisitor) off);
+        if (!considerVariableAddrOfAsUse) v then 
+          varUsed := VS.add v !varUsed;
+        SkipChildren
+
+    | _ -> DoChildren
+
+  (* For function calls, do the transitive variable read/defs *)
+  method vinst = function
+      Call (_, f, _, _) -> begin
+        (* we will call DoChildren to compute the use and def that appear in 
+         * this instruction. We also add in the stuff computed by 
+         * getUseDefFunctionRef *)
+        let use, def = !getUseDefFunctionRef f in
+        varUsed := VS.union !varUsed use;
+        varDefs := VS.union !varDefs def;
+        DoChildren;
+      end
+    | Asm(_,_,slvl,_,_,_) -> List.iter (fun (s,lv) ->
+	match lv with (Var v, off) ->
+	  if s.[0] = '+' then
+	    varUsed := VS.add v !varUsed;
+	| _ -> ()) slvl;
+	DoChildren
+    | _ -> DoChildren
+        
+end
+
+let useDefVisitor = new useDefVisitorClass 
+
+(** Compute the use information for an expression (accumulate to an existing 
+ * set) *)
+let computeUseExp ?(acc=VS.empty) (e: exp) : VS.t = 
+  varUsed := acc;
+  ignore (visitCilExpr useDefVisitor e);
+  !varUsed
+
+
+(** Compute the use/def information for an instruction *)
+let computeUseDefInstr ?(acc_used=VS.empty)
+                       ?(acc_defs=VS.empty) 
+                       (i: instr) : VS.t * VS.t = 
+  varUsed := acc_used;
+  varDefs := acc_defs;
+  ignore (visitCilInstr useDefVisitor i);
+  !varUsed, !varDefs
+
+
+(** Compute the use/def information for a statement kind. Do not descend into 
+ * the nested blocks. *)
+let computeUseDefStmtKind ?(acc_used=VS.empty)
+                          ?(acc_defs=VS.empty) 
+                          (sk: stmtkind) : VS.t * VS.t =
+  varUsed := acc_used;
+  varDefs := acc_defs;
+  let ve e = ignore (visitCilExpr useDefVisitor e) in 
+  let _ = 
+    match sk with 
+      Return (None, _) -> ()
+    | Return (Some e, _) -> ve e
+    | If (e, _, _, _) -> ve e
+    | Break _ | Goto _ | Continue _ -> ()
+(*
+    | Loop (_, _, _, _) -> ()
+*)
+    | While _ | DoWhile _ | For _ -> ()
+    | Switch (e, _, _, _) -> ve e
+    | Instr il -> 
+        List.iter (fun i -> ignore (visitCilInstr useDefVisitor i)) il
+    | TryExcept _ | TryFinally _ -> ()
+    | Block _ -> ()
+  in
+  !varUsed, !varDefs
+
+(* Compute the use/def information for a statement kind.
+   DO descend into nested blocks *)
+let rec computeDeepUseDefStmtKind ?(acc_used=VS.empty)
+                                  ?(acc_defs=VS.empty) 
+                                   (sk: stmtkind) : VS.t * VS.t =
+  let handle_block b =
+    List.fold_left (fun (u,d) s ->
+      let u',d' = computeDeepUseDefStmtKind s.skind in
+      (VS.union u u', VS.union d d')) (VS.empty, VS.empty)
+      b.bstmts
+  in
+  varUsed := acc_used;
+  varDefs := acc_defs;
+  let ve e = ignore (visitCilExpr useDefVisitor e) in  
+  match sk with 
+    Return (None, _) -> !varUsed, !varDefs
+  | Return (Some e, _) -> 
+      let _ = ve e in
+      !varUsed, !varDefs
+  | If (e, tb, fb, _) ->
+      let _ = ve e in
+      let u, d = !varUsed, !varDefs in
+      let u', d' = handle_block tb in
+      let u'', d'' = handle_block fb in
+      (VS.union (VS.union u u') u'', VS.union (VS.union d d') d'')
+  | Break _ | Goto _ | Continue _ -> !varUsed, !varDefs
+(*
+  | Loop (b, _, _, _) -> handle_block b
+*)
+  | While (_, b, _) -> handle_block b
+  | DoWhile (_, b, _) -> handle_block b
+  | For (_, _, _, b, _) -> handle_block b
+  | Switch (e, b, _, _) -> 
+      let _ = ve e in
+      let u, d = !varUsed, !varDefs in
+      let u', d' = handle_block b in
+      (VS.union u u', VS.union d d')
+  | Instr il -> 
+      List.iter (fun i -> ignore (visitCilInstr useDefVisitor i)) il;
+      !varUsed, !varDefs
+  | TryExcept _ | TryFinally _ -> !varUsed, !varDefs
+  | Block b -> handle_block b
diff --git a/cil/src/formatcil.ml b/cil/src/formatcil.ml
new file mode 100644
index 000000000..33bc749f8
--- /dev/null
+++ b/cil/src/formatcil.ml
@@ -0,0 +1,215 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+open Cil
+open Pretty
+open Trace      (* sm: 'trace' function *)
+module E = Errormsg
+module H = Hashtbl
+
+let noMemoize = ref false
+
+let expMemoTable :
+    (string, (((string * formatArg) list -> exp) * 
+               (exp -> formatArg list option))) H.t = H.create 23
+
+let typeMemoTable :
+    (string, (((string * formatArg) list -> typ) * 
+               (typ -> formatArg list option))) H.t = H.create 23
+
+let lvalMemoTable :
+    (string, (((string * formatArg) list -> lval) * 
+               (lval -> formatArg list option))) H.t = H.create 23
+
+let instrMemoTable :
+    (string, ((location -> (string * formatArg) list -> instr) * 
+               (instr -> formatArg list option))) H.t = H.create 23
+
+let stmtMemoTable :
+    (string, ((string -> typ -> varinfo) -> 
+              location -> 
+              (string * formatArg) list -> stmt)) H.t = H.create 23
+
+let stmtsMemoTable :
+    (string, ((string -> typ -> varinfo) -> 
+              location -> 
+              (string * formatArg) list -> stmt list)) H.t = H.create 23
+
+
+let doParse (prog: string) 
+            (theParser: (Lexing.lexbuf -> Formatparse.token) 
+                                          -> Lexing.lexbuf -> 'a)
+            (memoTable: (string, 'a) H.t) : 'a = 
+  try
+    if !noMemoize then raise Not_found else
+    H.find memoTable prog
+  with Not_found -> begin
+    let lexbuf = Formatlex.init prog in
+    try
+      Formatparse.initialize Formatlex.initial lexbuf;
+      let res = theParser Formatlex.initial lexbuf in
+      H.add memoTable prog res;
+      Formatlex.finish ();
+      res
+    with Parsing.Parse_error -> begin
+      Formatlex.finish ();
+      E.s (E.error "Parsing error: %s" prog)
+    end
+    | e -> begin
+        ignore (E.log "Caught %s while parsing\n" (Printexc.to_string e));
+        Formatlex.finish ();
+        raise e
+    end
+  end
+  
+
+let cExp (prog: string) : (string * formatArg) list -> exp = 
+  let cf = doParse prog Formatparse.expression expMemoTable in
+  (fst cf)
+
+let cLval (prog: string) : (string * formatArg) list -> lval = 
+  let cf = doParse prog Formatparse.lval lvalMemoTable in
+  (fst cf)
+
+let cType (prog: string) : (string * formatArg) list -> typ = 
+  let cf = doParse prog Formatparse.typename typeMemoTable in
+  (fst cf)
+
+let cInstr (prog: string) : location -> (string * formatArg) list -> instr = 
+  let cf = doParse prog Formatparse.instr instrMemoTable in
+  (fst cf)
+
+let cStmt (prog: string) : (string -> typ -> varinfo) -> 
+                           location -> (string * formatArg) list -> stmt = 
+  let cf = doParse prog Formatparse.stmt stmtMemoTable in
+  cf
+
+let cStmts (prog: string) : 
+    (string -> typ -> varinfo) -> 
+    location -> (string * formatArg) list -> stmt list = 
+  let cf = doParse prog Formatparse.stmt_list stmtsMemoTable in
+  cf
+
+
+
+(* Match an expression *)
+let dExp (prog: string) : exp -> formatArg list option = 
+  let df = doParse prog Formatparse.expression expMemoTable in
+  (snd df)
+
+(* Match an lvalue *)
+let dLval (prog: string) : lval -> formatArg list option = 
+  let df = doParse prog Formatparse.lval lvalMemoTable in
+  (snd df)
+
+
+(* Match a type *)
+let dType (prog: string) : typ -> formatArg list option = 
+  let df = doParse prog Formatparse.typename typeMemoTable in
+  (snd df)
+
+
+
+(* Match an instruction *)
+let dInstr (prog: string) : instr -> formatArg list option = 
+  let df = doParse prog Formatparse.instr instrMemoTable in
+  (snd df)
+
+
+let test () = 
+  (* Construct a dummy function *)
+  let func = emptyFunction "test_formatcil" in
+  (* Construct a few varinfo *)
+  let res = makeLocalVar func "res" (TPtr(intType, [])) in
+  let fptr = makeLocalVar func "fptr" 
+      (TPtr(TFun(intType, None, false, []), [])) in
+  (* Construct an instruction *)
+  let makeInstr () = 
+    Call(Some (var res), 
+         Lval (Mem (CastE(TPtr(TFun(TPtr(intType, []),
+                                    Some [ ("", intType, []);
+                                           ("a2", TPtr(intType, []), []);
+                                           ("a3", TPtr(TPtr(intType, []),
+                                                       []), []) ], 
+                                    false, []), []),
+                          Lval (var fptr))), 
+               NoOffset),
+         [  ], locUnknown) 
+  in
+  let times = 100000 in
+  (* Make the instruction the regular way *)
+  Stats.time "make instruction regular" 
+    (fun _ -> for i = 0 to times do ignore (makeInstr ()) done)
+    ();
+  (* Now make the instruction interpreted *)
+  noMemoize := true;
+  Stats.time "make instruction interpreted"
+    (fun _ -> for i = 0 to times do 
+      let _ = 
+        cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();"
+          locUnknown [ ("res", Fv res); 
+                       ("fptr", Fv fptr) ] 
+      in
+      ()
+    done)
+    ();
+  (* Now make the instruction interpreted with memoization *)
+  noMemoize := false;
+  Stats.time "make instruction interpreted memoized"
+    (fun _ -> for i = 0 to times do 
+      let _ = 
+        cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();"
+          locUnknown [ ("res", Fv res); ("fptr", Fv fptr) ] 
+      in
+      ()
+    done)
+    ();
+  (* Now make the instruction interpreted with partial application *)
+  let partInstr = 
+    cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();" in
+  Stats.time "make instruction interpreted partial"
+    (fun _ -> for i = 0 to times do 
+      let _ = 
+        partInstr
+          locUnknown [ ("res", Fv res); ("fptr", Fv fptr) ] 
+      in
+      ()
+    done)
+    ();
+    
+  ()
+  
+  
diff --git a/cil/src/formatcil.mli b/cil/src/formatcil.mli
new file mode 100644
index 000000000..d353c5eb0
--- /dev/null
+++ b/cil/src/formatcil.mli
@@ -0,0 +1,103 @@
+(* 
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(** {b An Interpreter for constructing CIL constructs} *)
+
+
+(** Constructs an expression based on the program and the list of arguments. 
+ * Each argument consists of a name followed by the actual data. This 
+ * argument will be placed instead of occurrences of "%v:name" in the pattern 
+ * (where the "v" is dependent on the type of the data). The parsing of the 
+ * string is memoized. * Only the first expression is parsed. *)
+val cExp: string -> (string * Cil.formatArg) list -> Cil.exp
+
+(** Constructs an lval based on the program and the list of arguments. 
+ * Only the first lvalue is parsed. 
+ * The parsing of the string is memoized. *)
+val cLval: string -> (string * Cil.formatArg) list -> Cil.lval
+
+(** Constructs a type based on the program and the list of arguments. 
+ * Only the first type is parsed. 
+ * The parsing of the string is memoized. *)
+val cType: string -> (string * Cil.formatArg) list -> Cil.typ
+
+
+(** Constructs an instruction based on the program and the list of arguments. 
+ * Only the first instruction is parsed. 
+ * The parsing of the string is memoized. *)
+val cInstr: string -> Cil.location -> 
+                      (string * Cil.formatArg) list -> Cil.instr
+
+(* Constructs a statement based on the program and the list of arguments. We 
+ * also pass a function that can be used to make new varinfo's for the 
+ * declared variables, and a location to be used for the statements. Only the 
+ * first statement is parsed. The parsing of the string is memoized. *)
+val cStmt: string -> 
+           (string -> Cil.typ -> Cil.varinfo) -> 
+           Cil.location -> (string * Cil.formatArg) list -> Cil.stmt
+
+(** Constructs a list of statements *)
+val cStmts: string -> 
+            (string -> Cil.typ -> Cil.varinfo) -> 
+            Cil.location -> (string * Cil.formatArg) list -> 
+            Cil.stmt list
+
+(** Deconstructs an expression based on the program. Produces an optional 
+ * list of format arguments. The parsing of the string is memoized. *)
+val dExp: string -> Cil.exp -> Cil.formatArg list option
+
+(** Deconstructs an lval based on the program. Produces an optional 
+ * list of format arguments. The parsing of the string is memoized. *)
+val dLval: string -> Cil.lval -> Cil.formatArg list option
+
+
+(** Deconstructs a type based on the program. Produces an optional list of 
+ * format arguments. The parsing of the string is memoized. *)
+val dType: string -> Cil.typ -> Cil.formatArg list option
+
+
+(** Deconstructs an instruction based on the program. Produces an optional 
+ * list of format arguments. The parsing of the string is memoized. *)
+val dInstr: string -> Cil.instr -> Cil.formatArg list option
+
+
+(** If set then will not memoize the parsed patterns *)
+val noMemoize: bool ref
+
+(** Just a testing function *)
+val test: unit -> unit
diff --git a/cil/src/formatlex.mll b/cil/src/formatlex.mll
new file mode 100644
index 000000000..584a060d5
--- /dev/null
+++ b/cil/src/formatlex.mll
@@ -0,0 +1,308 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(* A simple lexical analyzer for constructing CIL based on format strings *)
+{
+open Formatparse
+exception Eof
+exception InternalError of string
+module H = Hashtbl
+module E = Errormsg
+(*
+** Keyword hashtable
+*)
+let keywords = H.create 211
+
+(*
+** Useful primitives
+*)
+let scan_ident id = 
+  try H.find keywords id
+  with Not_found -> IDENT id  (* default to variable name *)
+
+(*
+** Buffer processor
+*)
+ 
+
+let init ~(prog: string) : Lexing.lexbuf =
+  H.clear keywords;
+  Lexerhack.currentPattern := prog;
+  List.iter 
+    (fun (key, token) -> H.add keywords key token)
+    [ ("const", CONST); ("__const", CONST); ("__const__", CONST);
+      ("static", STATIC);
+      ("extern", EXTERN);
+      ("long", LONG);
+      ("short", SHORT);
+      ("signed", SIGNED);
+      ("unsigned", UNSIGNED);
+      ("volatile", VOLATILE);
+      ("char", CHAR);
+      ("int", INT);
+      ("float", FLOAT);
+      ("double", DOUBLE);
+      ("void", VOID);
+      ("enum", ENUM);
+      ("struct", STRUCT);
+      ("typedef", TYPEDEF);
+      ("union", UNION);
+      ("break", BREAK);
+      ("continue", CONTINUE);
+      ("goto", GOTO); 
+      ("return", RETURN);
+      ("switch", SWITCH);
+      ("case", CASE); 
+      ("default", DEFAULT);
+      ("while", WHILE);  
+      ("do", DO);  
+      ("for", FOR);
+      ("if", IF);
+      ("else", ELSE);
+      ("__attribute__", ATTRIBUTE); ("__attribute", ATTRIBUTE);
+      ("__int64", INT64);
+      ("__builtin_va_arg", BUILTIN_VA_ARG);
+    ];
+  E.startParsingFromString prog
+
+let finish () = 
+  E.finishParsing ()
+
+(*** Error handling ***)
+let error msg =
+  E.parse_error msg 
+
+
+(*** escape character management ***)
+let scan_escape str =
+  match str with
+    "n" -> "\n"
+  | "r" -> "\r"
+  | "t" -> "\t"
+  | "b" -> "\b"
+  | "f" -> "\012"  (* ASCII code 12 *)
+  | "v" -> "\011"  (* ASCII code 11 *)
+  | "a" -> "\007"  (* ASCII code 7 *)
+  | "e" -> "\027"  (* ASCII code 27. This is a GCC extension *)
+  | _ -> str
+
+let get_value chr =
+  match chr with
+    '0'..'9' -> (Char.code chr) - (Char.code '0')
+  | 'a'..'z' -> (Char.code chr) - (Char.code 'a') + 10
+  | 'A'..'Z' -> (Char.code chr) - (Char.code 'A') + 10
+  | _ -> 0
+let scan_hex_escape str =
+  String.make 1 (Char.chr (
+		 (get_value (String.get str 0)) * 16
+		   + (get_value (String.get str 1))
+	           ))
+let scan_oct_escape str =
+  (* weimer: wide-character constants like L'\400' may be bigger than
+   * 256 (in fact, may be up to 511), so Char.chr cannot be used directly *)
+  let the_value = (get_value (String.get str 0)) * 64
+		   + (get_value (String.get str 1)) * 8
+		   + (get_value (String.get str 2)) in
+  if the_value < 256 then String.make 1 (Char.chr the_value )
+  else (String.make 1 (Char.chr (the_value / 256))) ^
+       (String.make 1 (Char.chr (the_value mod 256)))
+
+(* ISO standard locale-specific function to convert a wide character
+ * into a sequence of normal characters. Here we work on strings. 
+ * We convert L"Hi" to "H\000i\000" *)
+let wbtowc wstr =
+  let len = String.length wstr in 
+  let dest = String.make (len * 2) '\000' in 
+  for i = 0 to len-1 do 
+    dest.[i*2] <- wstr.[i] ;
+  done ;
+  dest
+
+(* This function converst the "Hi" in L"Hi" to { L'H', L'i', L'\0' } *)
+let wstr_to_warray wstr =
+  let len = String.length wstr in
+  let res = ref "{ " in
+  for i = 0 to len-1 do
+    res := !res ^ (Printf.sprintf "L'%c', " wstr.[i])
+  done ;
+  res := !res ^ "}" ;
+  !res
+
+let getArgName (l: Lexing.lexbuf) (prefixlen: int) =
+  let lexeme = Lexing.lexeme l in
+  let ll = String.length lexeme in
+  if  ll > prefixlen then 
+    String.sub lexeme (prefixlen + 1) (ll - prefixlen - 1)
+  else
+    ""
+}
+
+let decdigit = ['0'-'9']
+let octdigit = ['0'-'7']
+let hexdigit = ['0'-'9' 'a'-'f' 'A'-'F']
+let letter = ['a'- 'z' 'A'-'Z']
+
+let floatsuffix = ['f' 'F' 'l' 'L']
+
+let usuffix = ['u' 'U']
+let lsuffix = "l"|"L"|"ll"|"LL"
+let intsuffix = lsuffix | usuffix | usuffix lsuffix | lsuffix usuffix
+
+let intnum = decdigit+ intsuffix?
+let octnum = '0' octdigit+ intsuffix?
+let hexnum = '0' ['x' 'X'] hexdigit+ intsuffix?
+
+let exponent = ['e' 'E']['+' '-']? decdigit+
+let fraction  = '.' decdigit+
+let floatraw = (intnum? fraction)
+			|(intnum exponent)
+			|(intnum? fraction exponent)
+			|(intnum '.') 
+                        |(intnum '.' exponent) 
+let floatnum = floatraw floatsuffix?
+
+let ident = (letter|'_')(letter|decdigit|'_')* 
+let attribident = (letter|'_')(letter|decdigit|'_'|':')
+let blank = [' ' '\t' '\012' '\r']
+let escape = '\\' _
+let hex_escape = '\\' ['x' 'X'] hexdigit hexdigit
+let oct_escape = '\\' octdigit  octdigit octdigit
+
+
+(* The arguments are of the form %l:foo *)
+let argname = ':' ident
+
+rule initial =
+	parse 	blank			{ initial lexbuf}
+|               "/*"			{ let _ = comment lexbuf in 
+                                          initial lexbuf}
+|               "//"                    { endline lexbuf }
+|               "\n"                    { E.newline (); initial lexbuf}
+|		floatnum		{CST_FLOAT (Lexing.lexeme lexbuf)}
+|		hexnum			{CST_INT (Lexing.lexeme lexbuf)}
+|		octnum			{CST_INT (Lexing.lexeme lexbuf)}
+|		intnum			{CST_INT (Lexing.lexeme lexbuf)}
+
+|             "<<="                   {INF_INF_EQ}
+|             ">>="                   {SUP_SUP_EQ}
+|             "*="                    {STAR_EQ}
+|             "/="                    {SLASH_EQ}
+|             "&="                    {AND_EQ}
+|             "|="                    {PIPE_EQ}
+|             "^="                    {CIRC_EQ}
+|             "%="                    {PERCENT_EQ}
+
+
+|		"..."			{ELLIPSIS}
+|		"-="			{MINUS_EQ}
+|		"+="			{PLUS_EQ}
+|		"*="			{STAR_EQ}
+|		"<<"			{INF_INF}
+|		">>"			{SUP_SUP}
+| 		"=="			{EQ_EQ}
+| 		"!="			{EXCLAM_EQ}
+|		"<="			{INF_EQ}
+|		">="			{SUP_EQ}
+|		"="			{EQ}
+|		"<"			{INF}
+|		">"			{SUP}
+|		"++"			{PLUS_PLUS}
+|		"--"			{MINUS_MINUS}
+|		"->"			{ARROW}
+|		'+'			{PLUS}
+|		'-'			{MINUS}
+|		'*'			{STAR}
+|		'/'			{SLASH}
+|		'!'			{EXCLAM}
+|		'&'			{AND}
+|		'|'			{PIPE}
+|		'^'			{CIRC}
+|		'~'			{TILDE}
+|		'['			{LBRACKET}
+|		']'			{RBRACKET}
+|		'{'			{LBRACE}
+|		'}'			{RBRACE}
+|		'('			{LPAREN}
+|		')'			{RPAREN}
+|		';'			{SEMICOLON}
+|		','			{COMMA}
+|		'.'			{DOT}
+|               ':'                     {COLON}
+|               '?'                     {QUEST}
+|		"sizeof"		{SIZEOF}
+
+|               "%eo" argname           {ARG_eo (getArgName lexbuf 3) }
+|               "%e"  argname           {ARG_e  (getArgName lexbuf 2) }
+|               "%E"  argname           {ARG_E  (getArgName lexbuf 2) }
+|               "%u"  argname           {ARG_u  (getArgName lexbuf 2) }
+|               "%b"  argname           {ARG_b  (getArgName lexbuf 2) }
+|               "%t"  argname           {ARG_t  (getArgName lexbuf 2) }
+|               "%d"  argname           {ARG_d  (getArgName lexbuf 2) }
+|               "%lo" argname           {ARG_lo (getArgName lexbuf 3) }
+|               "%l"  argname           {ARG_l  (getArgName lexbuf 2) }
+|               "%i"  argname           {ARG_i  (getArgName lexbuf 2) }
+|               "%I"  argname           {ARG_I  (getArgName lexbuf 2) }
+|               "%o"  argname           {ARG_o  (getArgName lexbuf 2) }
+|               "%va" argname           {ARG_va (getArgName lexbuf 3) }
+|               "%v"  argname           {ARG_v  (getArgName lexbuf 2) }
+|               "%k"  argname           {ARG_k  (getArgName lexbuf 2) }
+|               "%f"  argname           {ARG_f  (getArgName lexbuf 2) }
+|               "%F"  argname           {ARG_F  (getArgName lexbuf 2) }
+|               "%p"  argname           {ARG_p  (getArgName lexbuf 2) }
+|               "%P"  argname           {ARG_P  (getArgName lexbuf 2) }
+|               "%s"  argname           {ARG_s  (getArgName lexbuf 2) }
+|               "%S"  argname           {ARG_S  (getArgName lexbuf 2) }
+|               "%g"  argname           {ARG_g  (getArgName lexbuf 2) }
+|               "%A"  argname           {ARG_A  (getArgName lexbuf 2) }
+|               "%c"  argname           {ARG_c  (getArgName lexbuf 2) } 
+
+|		'%'			{PERCENT}
+|		ident			{scan_ident (Lexing.lexeme lexbuf)}
+|		eof			{EOF}
+|		_			{E.parse_error 
+                                           "Formatlex: Invalid symbol"
+                                        }
+
+and comment =
+    parse 	
+      "*/"			        { () }
+|     '\n'                              { E.newline (); comment lexbuf }
+| 		_ 			{ comment lexbuf }
+
+
+and endline = parse 
+        '\n' 			{ E.newline (); initial lexbuf}
+|	_			{ endline lexbuf}
diff --git a/cil/src/formatparse.mly b/cil/src/formatparse.mly
new file mode 100644
index 000000000..75bdbb33e
--- /dev/null
+++ b/cil/src/formatparse.mly
@@ -0,0 +1,1455 @@
+/* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. */
+
+/*(* Parser for constructing CIL from format strings *)
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+*/
+%{
+open Cil
+open Pretty
+module E = Errormsg
+
+let parse_error msg : 'a =           (* sm: c++-mode highlight hack: -> ' <- *)
+  E.hadErrors := true;
+  E.parse_error
+    msg
+
+
+let getArg (argname: string) (args: (string * formatArg) list) = 
+  try 
+    snd (List.find (fun (n, a) -> n = argname) args)
+  with _ -> 
+    E.s (error "Pattern string %s does not have argument with name %s\n"
+           !Lexerhack.currentPattern argname)
+
+let wrongArgType (which: string) (expected: string) (found: formatArg) = 
+  E.s (bug "Expecting %s argument (%s) and found %a\n" 
+         expected which d_formatarg found)
+
+let doUnop (uo: unop) subexp = 
+  ((fun args -> 
+        let e = (fst subexp) args in
+        UnOp(uo, e, typeOf e)),
+
+   (fun e -> match e with 
+     UnOp(uo', e', _) when uo  = uo' -> (snd subexp) e' 
+   | _ -> None)) 
+
+let buildPlus e1 e2 : exp = 
+  let t1 = typeOf e1 in
+  if isPointerType t1 then 
+    BinOp(PlusPI, e1, e2, t1)
+  else 
+    BinOp(PlusA, e1, e2, t1)
+
+let buildMinus e1 e2 : exp = 
+  let t1 = typeOf e1 in
+  let t2 = typeOf e2 in
+  if isPointerType t1 then
+    if isPointerType t2 then
+      BinOp(MinusPP, e1, e2, intType)
+    else
+      BinOp(MinusPI, e1, e2, t1)
+  else
+    BinOp(MinusA, e1, e2, t1)
+
+let doBinop bop e1t e2t = 
+  ((fun args -> 
+    let e1 = (fst e1t) args in 
+    let e2 = (fst e2t) args in 
+    let t1 = typeOf e1 in
+    BinOp(bop, e1, e2, t1)),
+
+   (fun e -> match e with 
+     BinOp(bop', e1, e2, _) when bop' = bop -> begin
+       match (snd e1t) e1, (snd e2t) e2 with
+         Some m1, Some m2 -> Some (m1 @ m2)
+       | _, _ -> None
+     end
+   | _ -> None))
+
+(* Check the equivalence of two format lists *)
+let rec checkSameFormat (fl1: formatArg list) (fl2: formatArg list) = 
+  match fl1, fl2 with 
+    [], [] -> true
+  | h1::t1, h2::t2 -> begin
+      let rec checkOffsetEq o1 o2 = 
+        match o1, o2 with
+          NoOffset, NoOffset -> true
+        | Field(f1, o1'), Field(f2, o2') -> 
+            f1.fname = f2.fname && checkOffsetEq o1' o2'
+        | Index(e1, o1'), Index(e2, o2') -> 
+            checkOffsetEq o1' o2' && checkExpEq e1 e2
+        | _, _ -> false
+
+      and checkExpEq e1 e2 = 
+        match e1, e2 with 
+          Const(CInt64(n1, _, _)), Const(CInt64(n2, _, _)) -> n1 = n2
+        | Lval l1, Lval l2 -> checkLvalEq l1 l2
+        | UnOp(uo1, e1, _), UnOp(uo2, e2, _) -> 
+            uo1 = uo2 && checkExpEq e1 e2
+        | BinOp(bo1, e11, e12, _), BinOp(bo2, e21, e22, _) -> 
+            bo1 = bo2 && checkExpEq e11 e21 && checkExpEq e21 e22
+        | AddrOf l1, AddrOf l2 -> checkLvalEq l1 l2
+        | StartOf l1, StartOf l2 -> checkLvalEq l1 l2
+        | SizeOf t1, SizeOf t2 -> typeSig t1 = typeSig t2
+        | _, _ -> 
+            ignore (E.warn "checkSameFormat for Fe"); false
+
+      and checkLvalEq l1 l2 = 
+        match l1, l2 with
+          (Var v1, o1), (Var v2, o2) -> v1 == v2 && checkOffsetEq o1 o2
+        | (Mem e1, o1), (Mem e2, o2) -> 
+            checkOffsetEq o1 o2 && checkExpEq e1 e2
+        | _, _ -> false
+      in
+      let hdeq = 
+        match h1, h2 with 
+          Fv v1, Fv v2 -> v1 == v2
+        | Fd n1, Fd n2 -> n1 = n2
+        | Fe e1, Fe e2 -> checkExpEq e1 e2
+        | Fi i1, Fi i2 -> ignore (E.warn "checkSameFormat for Fi"); false
+        | Ft t1, Ft t2 -> typeSig t1 = typeSig t2
+        | Fl l1, Fl l2 -> checkLvalEq l1 l2
+        | Fo o1, Fo o2 -> checkOffsetEq o1 o2
+        | Fc c1, Fc c2 -> c1 == c2
+        | _, _ -> false
+      in
+      hdeq || checkSameFormat t1 t2
+  end
+  | _, _ -> false
+
+let matchBinopEq (bopeq: binop -> bool) lvt et = 
+  (fun i -> match i with 
+    Set (lv, BinOp(bop', Lval (lv'), e', _), l) when bopeq bop' -> begin
+      match lvt lv, lvt lv', et e' with 
+        Some m1, Some m1', Some m2 -> 
+          (* Must check that m1 and m2 are the same *)
+          if checkSameFormat m1 m1' then 
+            Some (m1 @ m2)
+          else
+            None
+      | _, _, _ -> None
+     end
+  | _ -> None)
+
+let doBinopEq bop lvt et = 
+  ((fun loc args -> 
+    let l = (fst lvt) args in
+    Set(l, BinOp(bop, (Lval l), (fst et) args, typeOfLval l), loc)),
+
+   matchBinopEq (fun bop' -> bop = bop') (snd lvt) (snd et))
+
+
+let getField (bt: typ) (fname: string) : fieldinfo = 
+  match unrollType bt with 
+    TComp(ci, _) -> begin
+      try
+        List.find (fun f -> fname = f.fname) ci.cfields
+      with Not_found -> 
+        E.s (bug "Cannot find field %s in %s\n" fname (compFullName ci))
+    end
+  | t -> E.s (bug "Trying to access field %s in non-struct\n" fname) 
+
+
+let matchIntType (ik: ikind) (t:typ) : formatArg list option = 
+  match unrollType t with 
+    TInt(ik', _) when ik = ik' -> Some []
+  | _ -> None
+
+let matchFloatType (fk: fkind) (t:typ) : formatArg list option = 
+  match unrollType t with 
+    TFloat(fk', _) when fk = fk' -> Some []
+  | _ -> None
+
+let doAttr (id: string) 
+           (aargs: (((string * formatArg) list -> attrparam list) * 
+                    (attrparam list -> formatArg list option)) option)
+    = 
+  let t = match aargs with 
+    Some t -> t
+  | None -> (fun _ -> []), 
+            (function [] -> Some [] | _ -> None)
+  in
+  ((fun args -> Attr (id, (fst t) args)), 
+   
+   (fun attrs -> 
+     (* Find the attributes with the same ID *)
+     List.fold_left 
+       (fun acc a -> 
+         match acc, a with 
+           Some _, _ -> acc (* We found one already *)
+         | None, Attr(id', args) when id = id' -> 
+             (* Now match the arguments *)
+             (snd t) args 
+         | None, _ -> acc)
+       None
+       attrs))
+
+
+type falist = formatArg list
+
+type maybeInit = 
+    NoInit
+  | InitExp of exp
+  | InitCall of lval * exp list
+
+%}
+
+%token <string> IDENT
+%token <string> CST_CHAR
+%token <string> CST_INT
+%token <string> CST_FLOAT
+%token <string> CST_STRING
+%token <string> CST_WSTRING
+%token <string> NAMED_TYPE
+
+%token EOF
+%token CHAR INT DOUBLE FLOAT VOID INT64 INT32
+%token ENUM STRUCT TYPEDEF UNION
+%token SIGNED UNSIGNED LONG SHORT
+%token VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER
+
+%token <string> ARG_e ARG_eo ARG_E ARG_u ARG_b ARG_t ARG_d ARG_lo ARG_l ARG_i
+%token <string> ARG_o ARG_va ARG_f ARG_F ARG_A ARG_v ARG_k ARG_c ARG_d
+%token <string> ARG_s ARG_p ARG_P ARG_I ARG_S ARG_g
+
+%token SIZEOF ALIGNOF
+
+%token EQ 
+%token ARROW DOT
+
+%token EQ_EQ EXCLAM_EQ INF SUP INF_EQ SUP_EQ
+%token MINUS_EQ PLUS_EQ STAR_EQ
+%token PLUS MINUS STAR SLASH PERCENT
+%token TILDE AND PIPE CIRC
+%token EXCLAM AND_AND PIPE_PIPE
+%token INF_INF SUP_SUP
+%token PLUS_PLUS MINUS_MINUS
+
+%token RPAREN LPAREN RBRACE LBRACE LBRACKET RBRACKET
+%token COLON SEMICOLON COMMA ELLIPSIS QUEST
+
+%token BREAK CONTINUE GOTO RETURN
+%token SWITCH CASE DEFAULT
+%token WHILE DO FOR
+%token IF THEN ELSE
+
+%token  PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
+%token  AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
+
+%token ATTRIBUTE INLINE ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__ LABEL__
+%token BUILTIN_VA_ARG BUILTIN_VA_LIST
+%token BLOCKATTRIBUTE
+%token DECLSPEC
+%token <string> MSASM MSATTR
+%token PRAGMA
+
+
+/* operator precedence */
+%nonassoc 	IF
+%nonassoc 	ELSE
+
+
+%left	COMMA
+
+ /*(* Set the following precedences higer than COMMA *)*/
+%nonassoc ARG_e ARG_d ARG_lo ARG_l ARG_i ARG_v ARG_I ARG_g
+%right	EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
+                AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
+%right	COLON
+%left	PIPE_PIPE
+%left	AND_AND
+%left   ARG_b
+%left	PIPE
+%left 	CIRC
+%left	AND
+%left	EQ_EQ EXCLAM_EQ
+%left	INF SUP INF_EQ SUP_EQ
+%left	INF_INF SUP_SUP
+%left	PLUS MINUS
+%left	STAR SLASH PERCENT CONST RESTRICT VOLATILE
+%right	ARG_u EXCLAM TILDE PLUS_PLUS MINUS_MINUS CAST RPAREN ADDROF SIZEOF ALIGNOF
+%left 	LBRACKET
+%left	DOT ARROW LPAREN LBRACE
+%nonassoc IDENT QUEST CST_INT
+
+%start initialize expression typename offset lval instr stmt stmt_list
+
+
+%type <unit> initialize
+%type <((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)> stmt
+%type <((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)> stmt_list
+
+%type <((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)> expression
+
+%type <((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)> constant
+
+%type <((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)> lval
+
+%type <((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)> typename
+
+%type <(Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)> type_spec
+
+%type <((string * Cil.formatArg) list -> (string * Cil.typ * Cil.attributes) list option * bool) * ((string * Cil.typ * Cil.attributes) list option * bool -> Cil.formatArg list option)> parameters
+
+
+%type <(Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)> instr
+
+%type <(Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)> offset
+
+
+%%
+
+
+initialize: 
+ /* empty */   {  }
+;
+
+/* (*** Expressions ***) */
+
+
+expression:
+|               ARG_e  {  (* Count arguments eagerly *) 
+                            let currentArg = $1 in 
+                            ((fun args ->
+                               match getArg currentArg args with 
+                                   Fe e -> e
+                                 | a -> wrongArgType currentArg 
+                                            "expression" a),
+
+                             (fun e -> Some [ Fe e ]))
+                         } 
+
+|        	constant { $1 }
+
+|               lval     %prec IDENT
+                        { ((fun args -> Lval ((fst $1) args)),
+
+                             (fun e -> match e with 
+                                Lval l -> (snd $1) l 
+                              | _ -> None))
+                         } 
+
+|		SIZEOF expression
+		        { ((fun args -> SizeOfE ((fst $2) args)),
+
+                           fun e -> match e with 
+                             SizeOfE e' -> (snd $2) e'
+                           | _ -> None)
+                        }
+
+|	 	SIZEOF LPAREN typename RPAREN
+                        { ((fun args -> SizeOf ((fst $3) args)),
+                          
+                           (fun e -> match e with 
+                              SizeOf t -> (snd $3) t
+                           |  _ -> None))
+                        }
+
+|		ALIGNOF expression
+		        { ((fun args -> AlignOfE ((fst $2) args)),
+
+                           (fun e -> match e with
+                             AlignOfE e' -> (snd $2) e' | _ -> None))
+                        }
+
+|	 	ALIGNOF LPAREN typename RPAREN
+		        { ((fun args -> AlignOf ((fst $3) args)),
+
+                           (fun e -> match e with
+                             AlignOf t' -> (snd $3) t' | _ -> None))
+                        } 
+
+|		PLUS expression
+		        { $2 }
+|		MINUS expression
+		        { doUnop Neg $2 }
+
+|		EXCLAM expression
+		        { doUnop LNot $2 }
+
+|		TILDE expression
+		        { doUnop BNot $2 }
+
+|               argu expression %prec ARG_u
+                        { ((fun args -> 
+                             let e = (fst $2) args in
+                             UnOp((fst $1) args, e, typeOf e)),
+
+                           (fun e -> match e with 
+                             UnOp(uo, e', _) -> begin
+                               match (snd $1) uo, (snd $2) e' with 
+                                 Some m1, Some m2 -> Some (m1 @ m2)
+                               | _ -> None
+                             end
+                           | _ -> None))
+                        } 
+                             
+                          
+|		AND expression				%prec ADDROF
+		        { ((fun args -> 
+                             match (fst $2) args with
+                                Lval l -> mkAddrOf l
+                              | _ -> E.s (bug "AddrOf applied to a non lval")),
+                          (fun e -> match e with 
+                            AddrOf l -> (snd $2) (Lval l)
+                          | e -> (snd $2) (Lval (mkMem e NoOffset))))
+                         }
+
+|               LPAREN expression RPAREN 
+                        { $2 }
+
+|		expression PLUS expression
+			{ ((fun args -> buildPlus ((fst $1) args) 
+                                                  ((fst $3) args)), 
+                          (fun e -> match e with 
+                            BinOp((PlusPI|PlusA), e1, e2, _) -> begin
+                              match (snd $1) e1, (snd $3) e2 with
+                                Some m1, Some m2 -> Some (m1 @ m2)
+                              | _, _ -> None
+                            end
+                          | _ -> None))
+                        } 
+
+|		expression MINUS expression
+                        { ((fun args -> buildMinus ((fst $1) args)
+                                                   ((fst $3) args)),
+
+                           (fun e -> match e with 
+                             BinOp((MinusPP|MinusPI|MinusA), e1, e2, _) -> 
+                               begin
+                                 match (snd $1) e1, (snd $3) e2 with
+                                   Some m1, Some m2 -> Some (m1 @ m2)
+                                 | _, _ -> None
+                               end
+                           | _ -> None))
+                        } 
+|               expression argb expression %prec ARG_b
+                        { ((fun args -> 
+                               let e1 = (fst $1) args in 
+                               let bop = (fst $2) args in
+                               let e2 = (fst $3) args in 
+                               let t1 = typeOf e1 in
+                               BinOp(bop, e1, e2, t1)),
+                           
+                           (fun e -> match e with 
+                             BinOp(bop, e1, e2, _) -> begin
+                               match (snd $1) e1,(snd $2) bop,(snd $3) e2 with
+                                 Some m1, Some m2, Some m3 -> 
+                                   Some (m1 @ m2 @ m3)
+                               | _, _, _ -> None
+                             end
+                           | _ -> None))
+                        } 
+
+|		expression STAR expression
+			{ doBinop Mult $1 $3 }
+|		expression SLASH expression
+			{ doBinop Div $1 $3 }
+|		expression PERCENT expression
+			{ doBinop Mod $1 $3 }
+|		expression  INF_INF expression
+			{ doBinop Shiftlt $1 $3 }
+|		expression  SUP_SUP expression
+			{ doBinop Shiftrt $1 $3 }
+|		expression AND expression
+			{ doBinop BAnd $1 $3 }
+|		expression PIPE expression
+			{ doBinop BOr $1 $3 }
+|		expression CIRC expression
+			{ doBinop BXor $1 $3 }
+|		expression EQ_EQ expression
+			{ doBinop Eq $1 $3 }
+|		expression EXCLAM_EQ expression
+			{ doBinop Ne $1 $3 }
+|		expression INF expression
+			{ doBinop Lt $1 $3 }
+|		expression SUP expression
+			{ doBinop Gt $1 $3 }
+|		expression INF_EQ expression
+			{ doBinop Le $1 $3 }
+|		expression SUP_EQ expression
+			{ doBinop Ge $1 $3 }
+
+|		LPAREN typename RPAREN expression
+		         { ((fun args -> 
+                              let t = (fst $2) args in
+                              let e = (fst $4) args in
+                              mkCast e t),
+                            
+                            (fun e -> 
+                              let t', e' = 
+                                match e with 
+                                  CastE (t', e') -> t', e'
+                                | _ -> typeOf e, e
+                              in
+                              match (snd $2) t', (snd $4 e') with
+                                Some m1, Some m2 -> Some (m1 @ m2)
+                              | _, _ -> None))
+                         } 
+;
+
+/*(* Separate the ARG_ to ensure that the counting of arguments is right *)*/
+argu :
+|   ARG_u              { let currentArg = $1 in
+                         ((fun args ->
+                           match getArg currentArg args with
+                             Fu uo -> uo
+                           | a -> wrongArgType currentArg "unnop" a),
+
+                          fun uo -> Some [ Fu uo ])
+                       } 
+;
+
+argb :
+|   ARG_b              { let currentArg = $1 in
+                         ((fun args ->
+                           match getArg currentArg args with
+                             Fb bo -> bo
+                           | a -> wrongArgType currentArg "binop" a),
+
+                          fun bo -> Some [ Fb bo ])
+                       } 
+;
+
+constant:
+|   ARG_d              { let currentArg = $1 in
+                           ((fun args ->
+                             match getArg currentArg args with
+                               Fd n -> integer n
+                              | a -> wrongArgType currentArg "integer" a),
+
+                            fun e -> match e with 
+                              Const(CInt64(n, _, _)) -> 
+                                Some [ Fd (Int64.to_int n) ]
+                            | _ -> None) 
+                         } 
+
+|   ARG_g             { let currentArg = $1 in
+                        ((fun args ->
+                             match getArg currentArg args with
+                               Fg s -> Const(CStr s)
+                              | a -> wrongArgType currentArg "string" a),
+
+                            fun e -> match e with 
+                              Const(CStr s) ->
+                                Some [ Fg s ]
+                            | _ -> None) 
+                         } 
+|   CST_INT              { let n = parseInt $1 in
+                           ((fun args -> n),
+
+                            (fun e -> match e, n with 
+                              Const(CInt64(e', _, _)), 
+                              Const(CInt64(n', _, _)) when e' = n' -> Some []
+                            | _ -> None))
+                         }
+;
+
+
+/*(***************** LVALUES *******************)*/
+lval: 
+|   ARG_l             { let currentArg = $1 in
+                           ((fun args -> 
+                                match getArg currentArg args with 
+                                  Fl l -> l
+                                | Fv v -> Var v, NoOffset
+                                | a -> wrongArgType currentArg "lval" a),
+
+                            fun l -> Some [ Fl l ])
+                         }
+
+|   argv offset       %prec ARG_v
+                         { ((fun args -> 
+                              let v = (fst $1) args in
+                               (Var v, (fst $2) v.vtype args)),
+
+                            (fun l -> match l with 
+                              Var vi, off -> begin
+                                match (snd $1) vi, (snd $2) off with 
+                                  Some m1, Some m2 -> Some (m1 @ m2)
+                                | _ -> None
+                              end
+                            | _ -> None))
+                         }
+
+|   STAR expression      { ((fun args -> mkMem ((fst $2) args) NoOffset),
+
+                           (fun l -> match l with 
+                              Mem e, NoOffset -> (snd $2) e
+                           | _, _ -> None))
+                         }
+
+|   expression ARROW IDENT offset 
+             { ((fun args -> 
+                   let e = (fst $1) args in
+                   let baset = 
+                     match unrollTypeDeep (typeOf e) with 
+                       TPtr (t, _) -> t
+                     | _ -> E.s (bug "Expecting a pointer for field %s\n" $3)
+                   in
+                   let fi = getField baset $3 in
+                   mkMem e (Field(fi, (fst $4) fi.ftype args))),
+
+                (fun l -> match l with 
+                   Mem e, Field(fi, off) when fi.fname = $3 -> begin
+                     match (snd $1) e, (snd $4) off with 
+                       Some m1, Some m2 -> Some (m1 @ m2)
+                     | _, _ -> None
+                   end
+                | _, _ -> None))
+             }
+
+|   LPAREN STAR expression RPAREN offset
+             { ((fun args -> 
+                 let e = (fst $3) args in
+                 let baset = 
+                   match unrollTypeDeep (typeOf e) with 
+                     TPtr (t, _) -> t
+                   | _ -> E.s (bug "Expecting a pointer\n")
+                 in
+                 mkMem e ((fst $5) baset args)),
+
+                (fun l -> match l with 
+                  Mem e, off -> begin
+                    match (snd $3) e, (snd $5 off) with 
+                      Some m1, Some m2 -> Some (m1 @ m2)
+                    | _, _ -> None
+                  end
+                | _, _ -> None))
+              }
+    ;
+
+argv :
+|   ARG_v              { let currentArg = $1 in
+                         ((fun args ->
+                           match getArg currentArg args with
+                             Fv v -> v
+                           | a -> wrongArgType currentArg "varinfo" a),
+
+                          fun v -> Some [ Fv v ])
+                       } 
+|  IDENT               { let currentArg = $1 in
+                         ((fun args -> 
+                           match getArg currentArg args with 
+                             Fv v -> v
+                           | a -> wrongArgType currentArg "varinfo" a),
+                         (fun v -> 
+                             E.s (bug "identifiers (%s) are not supported for deconstruction" currentArg)))
+                       } 
+;
+
+  
+/*(********** OFFSETS *************)*/
+offset: 
+|  ARG_o             { let currentArg = $1 in
+                            ((fun t args -> 
+                                match getArg currentArg args with 
+                                  Fo o -> o
+                                | a -> wrongArgType currentArg "offset" a),
+
+                              (fun off -> Some [ Fo off ]))
+                          }
+
+|  /* empty */            { ((fun t args -> NoOffset),
+
+                             (fun off -> match off with 
+                                NoOffset -> Some []
+                              | _ -> None))
+                          }
+
+|  DOT IDENT offset       { ((fun t args -> 
+                                let fi = getField t $2 in
+                                Field (fi, (fst $3) fi.ftype args)),
+
+                            (fun off -> match off with 
+                               Field (fi, off') when fi.fname = $2 -> 
+                                 (snd $3) off'
+                            | _ -> None))
+                          }
+
+|  LBRACKET expression RBRACKET offset
+                   { ((fun t args -> 
+                     let bt = 
+                       match unrollType t with 
+                         TArray(bt, _, _) -> bt 
+                       | _ -> E.s (error "Formatcil: expecting an array for index")
+                     in
+                     let e = (fst $2) args in 
+                     Index(e, (fst $4) bt args)),
+
+                    (fun off -> match off with 
+                      Index (e, off') -> begin
+                        match (snd $2) e, (snd $4) off with 
+                          Some m1, Some m2 -> Some (m1 @ m2)
+                        | _, _ -> None
+                      end
+                    | _ -> None))
+                    }
+;
+
+
+/*(************ TYPES **************)*/
+typename: one_formal  { ((fun args -> 
+                            let (_, ft, _) = (fst $1) args in
+                            ft),
+
+                         (fun t -> (snd $1) ("", t, [])))
+                      } 
+;
+
+one_formal: 
+/*(* Do not allow attributes for the name *)*/
+| type_spec attributes decl
+                   { ((fun args -> 
+                        let tal = (fst $2) args in
+                        let ts = (fst $1) tal args in
+                        let (fn, ft, _) = (fst $3) ts args in
+                        (fn, ft, [])),
+
+                      (fun (fn, ft, fa) -> 
+                         match (snd $3) (fn, ft) with 
+                           Some (restt, m3) -> begin
+                             match (snd $1) restt, 
+                                   (snd $2) (typeAttrs restt)with
+                               Some m1, Some m2 -> 
+                                 Some (m1 @ m2 @ m3)
+                             | _, _ -> None
+                           end
+                         | _ -> None))
+                   } 
+
+| ARG_f 
+                   { let currentArg = $1 in
+                     ((fun args -> 
+                         match getArg currentArg args with
+                          Ff (fn, ft, fa) -> (fn, ft, fa)
+                         | a  -> wrongArgType currentArg "formal" a),
+
+                      (fun (fn, ft, fa) -> Some [ Ff (fn, ft, fa) ]))
+                   } 
+;
+
+type_spec:  
+|   ARG_t       { let currentArg = $1 in
+                     ((fun al args -> 
+                       match getArg currentArg args with 
+                          Ft t -> typeAddAttributes al t
+                       | a -> wrongArgType currentArg "type" a),
+                      
+                      (fun t -> Some [ Ft t ]))
+                      }
+
+|   VOID            { ((fun al args -> TVoid al),
+
+                       (fun t -> match unrollType t with 
+                           TVoid _ -> Some []
+                         | _ -> None)) }
+
+|   ARG_k           { let currentArg = $1 in
+                      ((fun al args -> 
+                        match getArg currentArg args with 
+                          Fk ik -> TInt(ik, al)
+                        | a -> wrongArgType currentArg "ikind" a),
+
+                       (fun t -> match unrollType t with 
+                         TInt(ik, _) -> Some [ Fk ik ]
+                       | _ -> None))
+                    } 
+
+|   CHAR            { ((fun al args -> TInt(IChar, al)),
+                       (matchIntType IChar)) }
+|   UNSIGNED CHAR   { ((fun al args -> TInt(IUChar, al)), 
+                       matchIntType IUChar) }
+
+|   SHORT           { ((fun al args -> TInt(IShort, al)), 
+                       matchIntType IShort) }
+|   UNSIGNED SHORT  { ((fun al args -> TInt(IUShort, al)), 
+                       matchIntType IUShort) }
+
+|   INT             { ((fun al args -> TInt(IInt, al)), 
+                       matchIntType IInt) }
+|   UNSIGNED INT    { ((fun al args -> TInt(IUInt, al)), matchIntType IUInt) }
+
+|   LONG             { ((fun al args -> TInt(ILong, al)), 
+                        matchIntType ILong) }
+|   UNSIGNED LONG    { ((fun al args -> TInt(IULong, al)), 
+                        matchIntType IULong) }
+
+|   LONG LONG          { ((fun al args -> TInt(ILongLong, al)), 
+                          
+                          matchIntType ILongLong)
+                        }
+|   UNSIGNED LONG LONG    { ((fun al args -> TInt(IULongLong, al)),
+
+                             matchIntType IULongLong)
+                           }
+
+|   FLOAT           { ((fun al args -> TFloat(FFloat, al)),
+                       matchFloatType FFloat) 
+                    }
+|   DOUBLE          { ((fun al args -> TFloat(FDouble, al)),
+                       matchFloatType FDouble) }
+
+|   STRUCT ARG_c { let currentArg = $2 in
+                      ((fun al args -> 
+                         match getArg currentArg args with 
+                           Fc ci -> TComp(ci, al)
+                         | a -> wrongArgType currentArg "compinfo" a),
+
+                        (fun t -> match unrollType t with 
+                            TComp(ci, _) -> Some [ Fc ci ]
+                          | _ -> None))
+                    }
+|   UNION ARG_c { let currentArg = $2 in
+                     ((fun al args -> 
+                         match getArg currentArg args with 
+                           Fc ci -> TComp(ci, al)
+                         | a -> wrongArgType currentArg "compinfo" a),
+
+                        (fun t -> match unrollType t with 
+                            TComp(ci, _) -> Some [ Fc ci ]
+                          | _ -> None))
+
+                   }
+
+|   TYPEOF LPAREN expression RPAREN     
+                   { ((fun al args -> typeAddAttributes al 
+                                        (typeOf ((fst $3) args))),
+                    
+                      (fun t -> E.s (bug "Cannot match typeof(e)\n")))
+                   } 
+;
+
+decl: 
+|  STAR attributes decl  
+                    { ((fun ts args -> 
+                         let al = (fst $2) args in
+                         (fst $3) (TPtr(ts, al)) args),
+
+                       (fun (fn, ft) -> 
+                         match (snd $3) (fn, ft) with 
+                           Some (TPtr(bt, al), m2) -> begin
+                             match (snd $2) al with 
+                               Some m1 -> Some (bt, m1 @ m2)
+                             | _ -> None
+                           end
+                         | _ -> None))
+                    } 
+
+|  direct_decl  { $1 }
+;
+
+direct_decl: 
+|  /* empty */     { ((fun ts args -> ("", ts, [])),
+
+                      (* Match any name in this case *)
+                      (fun (fn, ft) -> 
+                         Some (unrollType ft, [])))
+                   }
+
+|  IDENT           { ((fun ts args -> ($1, ts, [])),
+
+                      (fun (fn, ft) -> 
+                        if fn = "" || fn = $1 then 
+                          Some (unrollType ft, []) 
+                        else 
+                          None))
+                   }
+
+|  LPAREN attributes decl RPAREN 
+                   { ((fun ts args -> 
+                          let al = (fst $2) args in
+                          (fst $3) (typeAddAttributes al ts) args),
+
+                      (fun (fn, ft) -> begin
+                        match (snd $3) (fn, ft) with
+                          Some (restt, m2) -> begin
+                            match (snd $2) (typeAttrs restt) with 
+                              Some m1 -> Some (restt, m1 @ m2)
+                            | _ -> None
+                          end
+                        | _ -> None
+                      end))
+                   } 
+
+|  direct_decl LBRACKET exp_opt RBRACKET
+                   { ((fun ts args -> 
+                        (fst $1) (TArray(ts, (fst $3) args, [])) args),
+
+                     (fun (fn, ft) -> 
+                       match (snd $1) (fn, ft) with 
+                         Some (TArray(bt, lo, _), m1) -> begin
+                           match (snd $3) lo with 
+                             Some m2 -> Some (unrollType bt, m1 @ m2)
+                           | _ -> None
+                         end 
+                       | _ -> None))
+                   }
+
+
+/*(* We use parentheses around the function to avoid conflicts *)*/
+|  LPAREN attributes decl RPAREN LPAREN parameters RPAREN 
+                   { ((fun ts args -> 
+                        let al = (fst $2) args in
+                        let pars, isva = (fst $6) args in
+                        (fst $3) (TFun(ts, pars, isva, al)) args),
+
+                      (fun (fn, ft) -> 
+                         match (snd $3) (fn, ft) with 
+                           Some (TFun(rt, args, isva, al), m1) -> begin
+                             match (snd $2) al, (snd $6) (args, isva) with 
+                               Some m2, Some m6 
+                               -> Some (unrollType rt, m1 @ m2 @ m6)
+                             | _ -> None
+                           end
+                         | _ -> None))
+                   }
+;
+
+parameters: 
+| /* empty */      { ((fun args -> (None, false)),
+
+                     (* Match any formals *)
+                      (fun (pars, isva) -> 
+                        match pars, isva with 
+                          (_, false) -> Some [] 
+                        | _ -> None))
+                   } 
+
+| parameters_ne    { ((fun args -> 
+                        let (pars : (string * typ * attributes) list), 
+                            (isva : bool) = (fst $1) args in
+                        (Some pars), isva),
+
+                     (function 
+                         ((Some pars), isva) -> (snd $1) (pars, isva)
+                       |  _ -> None))
+                   } 
+;
+parameters_ne: 
+| ELLIPSIS  
+                   { ((fun args -> ([], true)),
+
+                      (function 
+                          ([], true) -> Some [] 
+                        | _ -> None))
+                   }
+
+| ARG_va           { let currentArg = $1 in
+                     ((fun args -> 
+                       match getArg currentArg args with
+                         Fva isva -> ([], isva)
+                       | a -> wrongArgType currentArg "vararg" a),
+
+                     (function 
+                         ([], isva) -> Some [ Fva isva ] 
+                       | _ -> None))
+                   } 
+
+| ARG_F            { let currentArg = $1 in
+                     ((fun args -> 
+                       match getArg currentArg args with
+                        FF fl -> ( fl, false)
+                       | a  -> wrongArgType currentArg "formals" a),
+
+                      (function 
+                          (pars, false) -> Some [ FF pars ] 
+                        | _ -> None))
+                   } 
+
+| one_formal       { ((fun args -> ([(fst $1) args], false)),
+
+                     (function 
+                         ([ f ], false) -> (snd $1) f 
+                       | _ -> None))
+                   }
+
+
+| one_formal COMMA parameters_ne
+                   { ((fun args -> 
+                        let this = (fst $1) args in
+                        let (rest, isva) = (fst $3) args in
+                        (this :: rest, isva)),
+
+                      (function 
+                          ((f::rest, isva)) -> begin
+                            match (snd $1) f, (snd $3) (rest, isva) with 
+                              Some m1, Some m2 -> Some (m1 @ m2)
+                            | _, _ -> None
+                          end
+                        | _ -> None))
+                   } 
+;
+
+
+
+
+
+exp_opt: 
+   /* empty */     { ((fun args -> None),
+                      (* Match anything if the pattern does not have a len *)
+                      (fun _ -> Some [])) }
+
+|  expression      { ((fun args -> Some ((fst $1) args)),
+
+                      (fun lo -> match lo with
+                        Some e -> (snd $1) e
+                      | _ -> None))
+                   } 
+|  ARG_eo          { let currentArg = $1 in
+                     ((fun args ->
+                       match getArg currentArg args with
+                         Feo lo -> lo
+                       | a -> wrongArgType currentArg "exp_opt" a),
+
+                      fun lo -> Some [ Feo lo ])
+                   } 
+;
+
+
+
+attributes: 
+  /*(* Ignore other attributes *)*/
+  /* empty */     { ((fun args -> []), 
+                     (fun attrs -> Some [])) }
+          
+| ARG_A           { let currentArg = $1 in
+                    ((fun args -> 
+                        match getArg currentArg args with
+                          FA al -> al
+                        | a -> wrongArgType currentArg "attributes" a),
+
+                     (fun al -> Some [ FA al ]))
+                  } 
+                       
+| attribute attributes
+                  { ((fun args ->
+                       addAttribute ((fst $1) args) ((fst $2) args)),
+                     (* Pass all the attributes down *)
+                     (fun attrs ->
+                       match (snd $1) attrs, (snd $2) attrs with
+                         Some m1, Some m2 -> Some (m1 @ m2)
+                       | _, _ -> None))
+                  } 
+;
+
+attribute:
+|   CONST                               { doAttr "const" None }
+|   RESTRICT                            { doAttr "restrict" None }
+|   VOLATILE                            { doAttr "volatile" None }
+|   ATTRIBUTE LPAREN LPAREN attr RPAREN RPAREN	
+                                        { $4 }
+
+;
+
+  
+attr: 
+|   IDENT                                
+                          { doAttr $1 None }
+                                 
+|   IDENT LPAREN attr_args_ne RPAREN     
+                          { doAttr $1 (Some $3) }
+;
+
+attr_args_ne: 
+    attr_arg                     { ((fun args -> [ (fst $1) args ]),
+
+                                    (fun aargs -> match aargs with 
+                                      [ arg ] -> (snd $1) arg
+                                    | _ -> None))
+                                 } 
+|   attr_arg COMMA attr_args_ne  { ((fun args -> 
+                                      let this = (fst $1) args in
+                                      this :: ((fst $3) args)),
+
+                                    (fun aargs -> match aargs with 
+                                      h :: rest -> begin
+                                        match (snd $1) h, (snd $3) rest with
+                                          Some m1, Some m2 -> Some (m1 @ m2)
+                                        | _, _ -> None
+                                      end
+                                    | _ -> None))
+                                  } 
+|   ARG_P               { let currentArg = $1 in
+                          ((fun args -> 
+                            match getArg currentArg args with
+                              FP al -> al
+                            | a -> wrongArgType currentArg "attrparams" a),
+
+                           (fun al -> Some [ FP al ]))
+                        } 
+;
+
+attr_arg: 
+|   IDENT            { ((fun args -> ACons($1, [])),
+
+                        (fun aarg -> match aarg with 
+                            ACons(id, []) when id = $1 -> Some []
+                        | _ -> None))
+                     } 
+|   IDENT LPAREN attr_args_ne RPAREN   
+                     { ((fun args -> ACons($1, (fst $3) args)),
+
+                        (fun aarg -> match aarg with 
+                            ACons(id, args) when id = $1 -> 
+                              (snd $3) args
+                        | _ -> None))
+                     } 
+|   ARG_p            { let currentArg = $1 in
+                       ((fun args -> 
+                          match getArg currentArg args with
+                            Fp p -> p
+                          | a -> wrongArgType currentArg "attrparam" a),
+
+                        (fun ap -> Some [ Fp ap]))
+                     } 
+                          
+;
+
+/* (********** INSTRUCTIONS ***********) */
+instr: 
+|               ARG_i SEMICOLON
+                        { let currentArg = $1 in
+                          ((fun loc args -> 
+                                match getArg currentArg args with 
+                                  Fi i -> i
+                                | a -> wrongArgType currentArg "instr" a),
+
+                           (fun i -> Some [ Fi i]))
+                        }
+
+|		lval EQ expression SEMICOLON
+			{ ((fun loc args -> 
+                              Set((fst $1) args, (fst $3) args, loc)),
+
+                           (fun i -> match i with
+                             Set (lv, e, l) -> begin
+                               match (snd $1) lv, (snd $3) e with
+                                 Some m1, Some m2 -> Some (m1 @ m2)
+                               | _, _ -> None
+                             end
+                           | _ -> None))
+                        } 
+
+|		lval PLUS_EQ expression SEMICOLON
+			{ ((fun loc args -> 
+                              let l = (fst $1) args in
+                              Set(l, buildPlus (Lval l) ((fst $3) args), loc)),
+
+                           matchBinopEq 
+                             (fun bop -> bop = PlusPI || bop = PlusA)
+                             (snd $1) (snd $3)) 
+                        }
+
+|		lval MINUS_EQ expression SEMICOLON
+			{ ((fun loc args -> 
+                              let l = (fst $1) args in
+                              Set(l, 
+                                  buildMinus (Lval l) ((fst $3) args), loc)),
+
+                           matchBinopEq (fun bop -> bop = MinusA 
+                                               || bop = MinusPP 
+                                               || bop = MinusPI) 
+                                      (snd $1)  (snd $3)) 
+                        }
+|		lval STAR_EQ expression SEMICOLON
+			{ doBinopEq Mult $1 $3 }
+
+|		lval SLASH_EQ expression SEMICOLON
+			{ doBinopEq Div $1 $3 }
+
+|		lval PERCENT_EQ expression SEMICOLON
+			{ doBinopEq Mod $1 $3 }
+
+|		lval AND_EQ expression SEMICOLON
+			{ doBinopEq BAnd $1 $3 }
+
+|		lval PIPE_EQ expression SEMICOLON
+			{ doBinopEq BOr $1 $3 }
+
+|		lval CIRC_EQ expression SEMICOLON
+			{ doBinopEq BXor $1 $3 }
+
+|		lval INF_INF_EQ expression SEMICOLON
+			{ doBinopEq Shiftlt $1 $3 }
+
+|		lval SUP_SUP_EQ expression SEMICOLON
+			{ doBinopEq Shiftrt $1 $3 }
+
+/* (* Would be nice to be able to condense the next three rules but we get 
+ * into conflicts *)*/
+|		lval EQ lval LPAREN arguments RPAREN  SEMICOLON
+			{ ((fun loc args -> 
+                              Call(Some ((fst $1) args), Lval ((fst $3) args), 
+                                     (fst $5) args, loc)),
+
+                           (fun i -> match i with 
+                             Call(Some l, Lval f, args, loc) -> begin
+                               match (snd $1) l, (snd $3) f, (snd $5) args with
+                                 Some m1, Some m2, Some m3 -> 
+                                   Some (m1 @ m2 @ m3)
+                               | _, _, _ -> None
+                             end
+                           | _ -> None))
+                        }
+
+|		        lval LPAREN arguments RPAREN  SEMICOLON
+			{ ((fun loc args -> 
+                              Call(None, Lval ((fst $1) args), 
+                                     (fst $3) args, loc)), 
+
+                           (fun i -> match i with 
+                             Call(None, Lval f, args, loc) -> begin
+                               match (snd $1) f, (snd $3) args with
+                                 Some m1, Some m2 -> Some (m1 @ m2)
+                               | _, _ -> None
+                             end
+                           | _ -> None))
+                         }
+
+|                 arglo lval LPAREN arguments RPAREN  SEMICOLON
+		     { ((fun loc args -> 
+                       Call((fst $1) args, Lval ((fst $2) args), 
+                            (fst $4) args, loc)), 
+                        
+                        (fun i -> match i with 
+                          Call(lo, Lval f, args, loc) -> begin
+                            match (snd $1) lo, (snd $2) f, (snd $4) args with
+                              Some m1, Some m2, Some m3 -> 
+                                Some (m1 @ m2 @ m3)
+                            | _, _, _ -> None
+                          end
+                        | _ -> None))
+                     }
+;
+
+/* (* Separate this out to ensure that the counting or arguments is right *)*/
+arglo: 
+    ARG_lo               { let currentArg = $1 in
+                           ((fun args -> 
+                             let res = 
+                               match getArg currentArg args with
+                                 Flo x -> x
+                               | a -> wrongArgType currentArg "lval option" a
+                             in
+                             res),
+
+                            (fun lo -> Some [ Flo lo ]))
+                         } 
+;                              
+arguments: 
+    /* empty */   { ((fun args -> []), 
+
+                     (fun actuals -> match actuals with 
+                          [] -> Some []
+                         | _ -> None))
+                  }
+
+| arguments_ne    { $1 }
+;
+
+arguments_ne:
+  expression      { ((fun args -> [ (fst $1) args ]),
+
+                     (fun actuals -> match actuals with 
+                        [ h ] -> (snd $1) h
+                       | _ -> None))
+                  }
+
+| ARG_E           {  let currentArg = $1 in
+                     ((fun args -> 
+                         match getArg currentArg args with
+                           FE el -> el
+                          | a -> wrongArgType currentArg "arguments" a),
+
+                      (fun actuals -> Some [ FE actuals ]))
+                  } 
+
+| expression COMMA arguments_ne
+                  { ((fun args -> ((fst $1) args) :: ((fst $3) args)),
+
+                     (fun actuals -> match actuals with 
+                         h :: rest -> begin
+                           match (snd $1) h, (snd $3) rest with 
+                             Some m1, Some m2 -> Some (m1 @ m2)
+                           | _, _ -> None
+                         end
+                       | _ -> None))
+                  }
+;
+
+
+/*(******** STATEMENTS *********)*/
+stmt: 
+    IF LPAREN expression RPAREN stmt           %prec IF
+                  { (fun mkTemp loc args -> 
+                         mkStmt (If((fst $3) args, 
+                                    mkBlock [ $5 mkTemp loc args ],
+                                    mkBlock [], loc)))
+                  }
+|   IF LPAREN expression RPAREN stmt ELSE stmt 
+                  { (fun mkTemp loc args -> 
+                         mkStmt (If((fst $3) args, 
+                                    mkBlock [ $5 mkTemp loc args ],
+                                    mkBlock [ $7 mkTemp loc args], loc)))
+                  }
+|   RETURN exp_opt SEMICOLON  
+                  { (fun mkTemp loc args -> 
+                         mkStmt (Return((fst $2) args, loc))) 
+                  }
+|   BREAK SEMICOLON  
+                  { (fun mkTemp loc args -> 
+                         mkStmt (Break loc))
+                  }
+|   CONTINUE SEMICOLON 
+                  { (fun mkTemp loc args -> 
+                         mkStmt (Continue loc))
+                  }
+|   LBRACE stmt_list RBRACE  
+                  { (fun mkTemp loc args -> 
+                         let stmts = $2 mkTemp loc args in
+                         mkStmt (Block (mkBlock (stmts))))
+                  }
+|   WHILE LPAREN expression RPAREN stmt  
+                  { (fun mkTemp loc args -> 
+                        let e = (fst $3) args in
+                        let e = 
+                          if isPointerType(typeOf e) then 
+                            mkCast e !upointType
+                          else e
+                        in
+(*
+                        mkStmt 
+                          (Loop (mkBlock [ mkStmt 
+                                             (If(e,
+                                                 mkBlock [],
+                                                 mkBlock [ mkStmt 
+                                                             (Break loc) ],
+                                                 loc));
+                                           $5 mkTemp loc args ],
+                                 loc, None, None))
+*)
+			mkStmt
+			  (While (e, mkBlock [ $5 mkTemp loc args ], loc)))
+                   } 
+|   instr_list    { (fun mkTemp loc args -> 
+                       mkStmt (Instr ($1 loc args)))
+                  }
+|   ARG_s         { let currentArg = $1 in
+                    (fun mkTemp loc args -> 
+                       match getArg currentArg args with
+                         Fs s -> s
+                       | a -> wrongArgType currentArg "stmt" a) }
+;
+
+stmt_list: 
+    /* empty */  { (fun mkTemp loc args -> []) }
+
+|   ARG_S        { let currentArg = $1 in
+                   (fun mkTemp loc args -> 
+                       match getArg currentArg args with 
+                       | FS sl -> sl 
+                       | a -> wrongArgType currentArg "stmts" a)
+                 }
+|   stmt stmt_list  
+                 { (fun mkTemp loc args -> 
+                      let this = $1 mkTemp loc args in
+                      this :: ($2 mkTemp loc args))
+                 }
+/* (* We can also have a declaration *) */
+|   type_spec attributes decl maybe_init SEMICOLON stmt_list 
+                { (fun mkTemp loc args -> 
+                     let tal = (fst $2) args in
+                     let ts  = (fst $1) tal args in
+                     let (n, t, _) = (fst $3) ts args in
+                     let init = $4 args in
+                     (* Before we proceed we must create the variable *)
+                     let v = mkTemp n t in
+                     (* Now we parse the rest *)
+                     let rest = $6 mkTemp loc ((n, Fv v) :: args) in
+                     (* Now we add the initialization instruction to the 
+                      * front *)
+                     match init with 
+                       NoInit -> rest
+                     | InitExp e -> 
+                         mkStmtOneInstr (Set((Var v, NoOffset), e, loc)) 
+                         :: rest
+                     | InitCall (f, args) ->
+                         mkStmtOneInstr (Call(Some (Var v, NoOffset), 
+                                              Lval f, args, loc))
+                         :: rest
+
+                                                           )
+                 } 
+;
+
+instr_list:
+     /*(* Set this rule to very low precedence to ensure that we shift as 
+          many instructions as possible *)*/
+    instr   %prec COMMA 
+                 { (fun loc args -> [ ((fst $1) loc args) ]) }
+|   ARG_I        { let currentArg = $1 in
+                   (fun loc args -> 
+                       match getArg currentArg args with 
+                       | FI il -> il 
+                       | a -> wrongArgType currentArg "instrs" a)
+                 }
+|   instr instr_list 
+                 { (fun loc args -> 
+                      let this = (fst $1) loc args in
+                      this :: ($2 loc args))
+                 }
+;
+
+
+maybe_init:
+|                               { (fun args -> NoInit) }
+| EQ expression                 { (fun args -> InitExp ((fst $2) args)) }
+| EQ lval LPAREN arguments RPAREN 
+                                { (fun args -> 
+                                    InitCall((fst $2) args, (fst $4) args)) }
+;
+%%
+
+
+
+
+
+
+
diff --git a/cil/src/frontc/cabs.ml b/cil/src/frontc/cabs.ml
new file mode 100644
index 000000000..78ac02f44
--- /dev/null
+++ b/cil/src/frontc/cabs.ml
@@ -0,0 +1,396 @@
+(* 
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** This file was originally part of Hugues Casee's frontc 2.0, and has been 
+ * extensively changed since. 
+**
+** 1.0	3.22.99	Hugues Cassé	First version.
+** 2.0  George Necula 12/12/00: Many extensions
+ **)
+
+(*
+** Types
+*)
+
+type cabsloc = {
+ lineno : int;
+ filename: string;
+ byteno: int;
+}
+
+let cabslu = {lineno = -10; 
+	      filename = "cabs loc unknown"; 
+	      byteno = -10;}
+
+(* clexer puts comments here *)
+let commentsGA = GrowArray.make 100 (GrowArray.Elem(cabslu,"",false))
+
+type typeSpecifier = (* Merge all specifiers into one type *)
+    Tvoid                             (* Type specifier ISO 6.7.2 *)
+  | Tchar
+  | Tshort
+  | Tint
+  | Tlong
+  | Tint64
+  | Tfloat
+  | Tdouble
+  | Tsigned
+  | Tunsigned
+  | Tnamed of string
+  (* each of the following three kinds of specifiers contains a field 
+   * or item list iff it corresponds to a definition (as opposed to
+   * a forward declaration or simple reference to the type); they
+   * also have a list of __attribute__s that appeared between the
+   * keyword and the type name (definitions only) *)
+  | Tstruct of string * field_group list option * attribute list
+  | Tunion of string * field_group list option * attribute list
+  | Tenum of string * enum_item list option * attribute list
+  | TtypeofE of expression                      (* GCC __typeof__ *)
+  | TtypeofT of specifier * decl_type       (* GCC __typeof__ *)
+
+and storage =
+    NO_STORAGE | AUTO | STATIC | EXTERN | REGISTER
+
+and funspec = 
+    INLINE | VIRTUAL | EXPLICIT
+
+and cvspec =
+    CV_CONST | CV_VOLATILE | CV_RESTRICT
+
+(* Type specifier elements. These appear at the start of a declaration *)
+(* Everywhere they appear in this file, they appear as a 'spec_elem list', *)
+(* which is not interpreted by cabs -- rather, this "word soup" is passed *)
+(* on to the compiler.  Thus, we can represent e.g. 'int long float x' even *)
+(* though the compiler will of course choke. *)
+and spec_elem =
+    SpecTypedef          
+  | SpecCV of cvspec            (* const/volatile *)
+  | SpecAttr of attribute       (* __attribute__ *)
+  | SpecStorage of storage
+  | SpecInline
+  | SpecType of typeSpecifier
+  | SpecPattern of string       (* specifier pattern variable *)
+
+(* decided to go ahead and replace 'spec_elem list' with specifier *)
+and specifier = spec_elem list
+
+
+(* Declarator type. They modify the base type given in the specifier. Keep
+ * them in the order as they are printed (this means that the top level
+ * constructor for ARRAY and PTR is the inner-level in the meaning of the
+ * declared type) *)
+and decl_type =
+ | JUSTBASE                               (* Prints the declared name *)
+ | PARENTYPE of attribute list * decl_type * attribute list
+                                          (* Prints "(attrs1 decl attrs2)".
+                                           * attrs2 are attributes of the
+                                           * declared identifier and it is as
+                                           * if they appeared at the very end
+                                           * of the declarator. attrs1 can
+                                           * contain attributes for the
+                                           * identifier or attributes for the
+                                           * enclosing type.  *)
+ | ARRAY of decl_type * attribute list * expression
+                                          (* Prints "decl [ attrs exp ]".
+                                           * decl is never a PTR. *)
+ | PTR of attribute list * decl_type      (* Prints "* attrs decl" *)
+ | PROTO of decl_type * single_name list * bool 
+                                          (* Prints "decl (args[, ...])".
+                                           * decl is never a PTR.*)
+
+(* The base type and the storage are common to all names. Each name might
+ * contain type or storage modifiers *)
+(* e.g.: int x, y; *)
+and name_group = specifier * name list
+
+(* The optional expression is the bitfield *)
+and field_group = specifier * (name * expression option) list
+
+(* like name_group, except the declared variables are allowed to have initializers *)
+(* e.g.: int x=1, y=2; *)
+and init_name_group = specifier * init_name list
+
+(* The decl_type is in the order in which they are printed. Only the name of
+ * the declared identifier is pulled out. The attributes are those that are
+ * printed after the declarator *)
+(* e.g: in "int *x", "*x" is the declarator; "x" will be pulled out as *)
+(* the string, and decl_type will be PTR([], JUSTBASE) *)
+and name = string * decl_type * attribute list * cabsloc
+
+(* A variable declarator ("name") with an initializer *)
+and init_name = name * init_expression
+
+(* Single names are for declarations that cannot come in groups, like
+ * function parameters and functions *)
+and single_name = specifier * name
+
+
+and enum_item = string * expression * cabsloc
+
+(*
+** Declaration definition (at toplevel)
+*)
+and definition =
+   FUNDEF of single_name * block * cabsloc * cabsloc
+ | DECDEF of init_name_group * cabsloc        (* global variable(s), or function prototype *)
+ | TYPEDEF of name_group * cabsloc
+ | ONLYTYPEDEF of specifier * cabsloc
+ | GLOBASM of string * cabsloc
+ | PRAGMA of expression * cabsloc
+ | LINKAGE of string * cabsloc * definition list (* extern "C" { ... } *)
+ (* toplevel form transformer, from the first definition to the *)
+ (* second group of definitions *)
+ | TRANSFORMER of definition * definition list * cabsloc
+ (* expression transformer: source and destination *)
+ | EXPRTRANSFORMER of expression * expression * cabsloc
+
+
+(* the string is a file name, and then the list of toplevel forms *)
+and file = string * definition list
+
+
+(*
+** statements
+*)
+
+(* A block contains a list of local label declarations ( GCC's ({ __label__ 
+ * l1, l2; ... }) ) , a list of definitions and a list of statements  *)
+and block = 
+    { blabels: string list;
+      battrs: attribute list;
+      bstmts: statement list
+    } 
+
+(* GCC asm directives have lots of extra information to guide the optimizer *)
+and asm_details =
+    { aoutputs: (string * expression) list; (* constraints and expressions for outputs *)
+      ainputs: (string * expression) list; (* constraints and expressions for inputs *)
+      aclobbers: string list (* clobbered registers *)
+    }
+
+and statement =
+   NOP of cabsloc
+ | COMPUTATION of expression * cabsloc
+ | BLOCK of block * cabsloc
+ | SEQUENCE of statement * statement * cabsloc
+ | IF of expression * statement * statement * cabsloc
+ | WHILE of expression * statement * cabsloc
+ | DOWHILE of expression * statement * cabsloc
+ | FOR of for_clause * expression * expression * statement * cabsloc
+ | BREAK of cabsloc
+ | CONTINUE of cabsloc
+ | RETURN of expression * cabsloc
+ | SWITCH of expression * statement * cabsloc
+ | CASE of expression * statement * cabsloc
+ | CASERANGE of expression * expression * statement * cabsloc
+ | DEFAULT of statement * cabsloc
+ | LABEL of string * statement * cabsloc
+ | GOTO of string * cabsloc
+ | COMPGOTO of expression * cabsloc (* GCC's "goto *exp" *)
+ | DEFINITION of definition (*definition or declaration of a variable or type*)
+
+ | ASM of attribute list * (* typically only volatile and const *)
+          string list * (* template *)
+          asm_details option * (* extra details to guide GCC's optimizer *)
+          cabsloc
+
+   (** MS SEH *)
+ | TRY_EXCEPT of block * expression * block * cabsloc
+ | TRY_FINALLY of block * block * cabsloc
+ 
+and for_clause = 
+   FC_EXP of expression
+ | FC_DECL of definition
+
+(*
+** Expressions
+*)
+and binary_operator =
+    ADD | SUB | MUL | DIV | MOD
+  | AND | OR
+  | BAND | BOR | XOR | SHL | SHR
+  | EQ | NE | LT | GT | LE | GE
+  | ASSIGN
+  | ADD_ASSIGN | SUB_ASSIGN | MUL_ASSIGN | DIV_ASSIGN | MOD_ASSIGN
+  | BAND_ASSIGN | BOR_ASSIGN | XOR_ASSIGN | SHL_ASSIGN | SHR_ASSIGN
+
+and unary_operator =
+    MINUS | PLUS | NOT | BNOT | MEMOF | ADDROF
+  | PREINCR | PREDECR | POSINCR | POSDECR
+
+and expression =
+    NOTHING
+  | UNARY of unary_operator * expression
+  | LABELADDR of string  (* GCC's && Label *)
+  | BINARY of binary_operator * expression * expression
+  | QUESTION of expression * expression * expression
+
+   (* A CAST can actually be a constructor expression *)
+  | CAST of (specifier * decl_type) * init_expression
+
+    (* There is a special form of CALL in which the function called is
+       __builtin_va_arg and the second argument is sizeof(T). This 
+       should be printed as just T *)
+  | CALL of expression * expression list
+  | COMMA of expression list
+  | CONSTANT of constant
+  | VARIABLE of string
+  | EXPR_SIZEOF of expression
+  | TYPE_SIZEOF of specifier * decl_type
+  | EXPR_ALIGNOF of expression
+  | TYPE_ALIGNOF of specifier * decl_type
+  | INDEX of expression * expression
+  | MEMBEROF of expression * string
+  | MEMBEROFPTR of expression * string
+  | GNU_BODY of block
+  | EXPR_PATTERN of string     (* pattern variable, and name *)
+
+and constant =
+  | CONST_INT of string   (* the textual representation *)
+  | CONST_FLOAT of string (* the textual representaton *)
+  | CONST_CHAR of int64 list
+  | CONST_WCHAR of int64 list
+  | CONST_STRING of string
+  | CONST_WSTRING of int64 list 
+    (* ww: wstrings are stored as an int64 list at this point because
+     * we might need to feed the wide characters piece-wise into an 
+     * array initializer (e.g., wchar_t foo[] = L"E\xabcd";). If that
+     * doesn't happen we will convert it to an (escaped) string before
+     * passing it to Cil. *) 
+
+and init_expression =
+  | NO_INIT
+  | SINGLE_INIT of expression
+  | COMPOUND_INIT of (initwhat * init_expression) list
+
+and initwhat =
+    NEXT_INIT
+  | INFIELD_INIT of string * initwhat
+  | ATINDEX_INIT of expression * initwhat
+  | ATINDEXRANGE_INIT of expression * expression
+ 
+
+                                        (* Each attribute has a name and some
+                                         * optional arguments *)
+and attribute = string * expression list
+                                              
+
+(*********** HELPER FUNCTIONS **********)
+
+let missingFieldDecl = ("___missing_field_name", JUSTBASE, [], cabslu)
+
+let rec isStatic = function
+    [] -> false
+  | (SpecStorage STATIC) :: _ -> true
+  | _ :: rest -> isStatic rest
+
+let rec isExtern = function
+    [] -> false
+  | (SpecStorage EXTERN) :: _ -> true
+  | _ :: rest -> isExtern rest
+
+let rec isInline = function
+    [] -> false
+  | SpecInline :: _ -> true
+  | _ :: rest -> isInline rest
+
+let rec isTypedef = function
+    [] -> false
+  | SpecTypedef :: _ -> true
+  | _ :: rest -> isTypedef rest
+
+
+let get_definitionloc (d : definition) : cabsloc =
+  match d with
+  | FUNDEF(_, _, l, _) -> l
+  | DECDEF(_, l) -> l
+  | TYPEDEF(_, l) -> l
+  | ONLYTYPEDEF(_, l) -> l
+  | GLOBASM(_, l) -> l
+  | PRAGMA(_, l) -> l
+  | TRANSFORMER(_, _, l) -> l
+  | EXPRTRANSFORMER(_, _, l) -> l
+  | LINKAGE (_, l, _) -> l
+
+let get_statementloc (s : statement) : cabsloc =
+begin
+  match s with
+  | NOP(loc) -> loc
+  | COMPUTATION(_,loc) -> loc
+  | BLOCK(_,loc) -> loc
+  | SEQUENCE(_,_,loc) -> loc
+  | IF(_,_,_,loc) -> loc
+  | WHILE(_,_,loc) -> loc
+  | DOWHILE(_,_,loc) -> loc
+  | FOR(_,_,_,_,loc) -> loc
+  | BREAK(loc) -> loc
+  | CONTINUE(loc) -> loc
+  | RETURN(_,loc) -> loc
+  | SWITCH(_,_,loc) -> loc
+  | CASE(_,_,loc) -> loc
+  | CASERANGE(_,_,_,loc) -> loc
+  | DEFAULT(_,loc) -> loc
+  | LABEL(_,_,loc) -> loc
+  | GOTO(_,loc) -> loc
+  | COMPGOTO (_, loc) -> loc
+  | DEFINITION d -> get_definitionloc d
+  | ASM(_,_,_,loc) -> loc
+  | TRY_EXCEPT(_, _, _, loc) -> loc
+  | TRY_FINALLY(_, _, loc) -> loc
+end
+
+
+let explodeStringToInts (s: string) : int64 list =  
+  let rec allChars i acc = 
+    if i < 0 then acc
+    else allChars (i - 1) (Int64.of_int (Char.code (String.get s i)) :: acc)
+  in
+  allChars (-1 + String.length s) []
+
+let valueOfDigit chr =
+  let int_value = 
+    match chr with
+      '0'..'9' -> (Char.code chr) - (Char.code '0')
+    | 'a'..'z' -> (Char.code chr) - (Char.code 'a') + 10
+    | 'A'..'Z' -> (Char.code chr) - (Char.code 'A') + 10
+    | _ -> Errormsg.s (Errormsg.bug "not a digit") in
+  Int64.of_int int_value
+  
+    
+open Pretty
+let d_cabsloc () cl = 
+  text cl.filename ++ text ":" ++ num cl.lineno
diff --git a/cil/src/frontc/cabs2cil.ml b/cil/src/frontc/cabs2cil.ml
new file mode 100644
index 000000000..31b65b5b4
--- /dev/null
+++ b/cil/src/frontc/cabs2cil.ml
@@ -0,0 +1,6238 @@
+(* MODIF: allow E.Error to propagate *)
+
+(* MODIF: for pointer comparison, avoid systematic cast to unsigned int *)
+
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+(* MODIF: Return statement no longer added when the body of the function
+          falls-through. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* Type check and elaborate ABS to CIL *)
+
+(* The references to ISO means ANSI/ISO 9899-1999 *)
+module A = Cabs
+module E = Errormsg
+module H = Hashtbl
+module IH = Inthash
+module AL = Alpha
+
+open Cabs
+open Pretty
+open Cil
+open Trace
+
+
+let mydebugfunction () = 
+  E.s (error "mydebugfunction")
+
+let debugGlobal = false
+
+(** NDC added command line parameter **)
+(* Turn on tranformation that forces correct parameter evaluation order *)
+let forceRLArgEval = ref false
+
+(* Leave a certain global alone. Use a negative number to disable. *)
+let nocil: int ref = ref (-1)
+
+(* Indicates whether we're allowed to duplicate small chunks. *)
+let allowDuplication: bool ref = ref true
+
+(* ---------- source error message handling ------------- *)
+let lu = locUnknown
+let cabslu = {lineno = -10; 
+	      filename = "cabs lu"; 
+	      byteno = -10;}
+
+
+(** Interface to the Cprint printer *)
+let withCprint (f: 'a -> unit) (x: 'a) : unit = 
+  Cprint.commit (); Cprint.flush ();
+  let old = !Cprint.out in
+  Cprint.out := !E.logChannel;
+  f x;
+  Cprint.commit (); Cprint.flush ();
+  flush !Cprint.out;
+  Cprint.out := old
+
+
+(** Keep a list of the variable ID for the variables that were created to 
+ * hold the result of function calls *)
+let callTempVars: unit IH.t = IH.create 13
+
+(* Keep a list of functions that were called without a prototype. *)
+let noProtoFunctions : bool IH.t = IH.create 13
+
+(* Check that s starts with the prefix p *)
+let prefix p s = 
+  let lp = String.length p in
+  let ls = String.length s in
+  lp <= ls && String.sub s 0 lp = p
+
+(***** COMPUTED GOTO ************)
+
+(* The address of labels are small integers (starting from 0). A computed 
+ * goto is replaced with a switch on the address of the label. We generate 
+ * only one such switch and we'll jump to it from all computed gotos. To 
+ * accomplish this we'll add a local variable to store the target of the 
+ * goto. *)
+
+(* The local variable in which to put the detination of the goto and the 
+ * statement where to jump *) 
+let gotoTargetData: (varinfo * stmt) option ref = ref None
+
+(* The "addresses" of labels *)
+let gotoTargetHash: (string, int) H.t = H.create 13
+let gotoTargetNextAddr: int ref = ref 0
+
+
+(********** TRANSPARENT UNION ******)
+(* Check if a type is a transparent union, and return the first field if it 
+ * is *)
+let isTransparentUnion (t: typ) : fieldinfo option = 
+  match unrollType t with 
+    TComp (comp, _) when not comp.cstruct -> 
+      (* Turn transparent unions into the type of their first field *)
+      if hasAttribute "transparent_union" (typeAttrs t) then begin
+        match comp.cfields with
+          f :: _ -> Some f
+        | _ -> E.s (unimp "Empty transparent union: %s" (compFullName comp))
+      end else 
+        None
+  | _ -> None
+
+(* When we process an argument list, remember the argument index which has a 
+ * transparent union type, along with the original type. We need this to 
+ * process function definitions *)
+let transparentUnionArgs : (int * typ) list ref = ref []
+
+let debugLoc = false
+let convLoc (l : cabsloc) =
+  if debugLoc then 
+    ignore (E.log "convLoc at %s: line %d, btye %d\n" l.filename l.lineno l.byteno);
+  {line = l.lineno; file = l.filename; byte = l.byteno;}
+
+
+let isOldStyleVarArgName n = 
+  if !msvcMode then n = "va_alist"
+  else n = "__builtin_va_alist"
+
+let isOldStyleVarArgTypeName n = 
+  if !msvcMode then n = "va_list"  || n = "__ccured_va_list" 
+  else n = "__builtin_va_alist_t"
+
+(* Weimer
+ * multi-character character constants
+ * In MSCV, this code works:
+ *
+ * long l1 = 'abcd';  // note single quotes
+ * char * s = "dcba";
+ * long * lptr = ( long * )s;
+ * long l2 = *lptr;
+ * assert(l1 == l2);
+ *
+ * We need to change a multi-character character literal into the
+ * appropriate integer constant. However, the plot sickens: we
+ * must also be able to handle things like 'ab\nd' (value = * "d\nba")
+ * and 'abc' (vale = *"cba"). 
+ *
+ * First we convert 'AB\nD' into the list [ 65 ; 66 ; 10 ; 68 ], then we
+ * multiply and add to get the desired value. 
+ *)
+
+(* Given a character constant (like 'a' or 'abc') as a list of 64-bit
+ * values, turn it into a CIL constant.  Multi-character constants are
+ * treated as multi-digit numbers with radix given by the bit width of
+ * the specified type (either char or wchar_t). *)
+let reduce_multichar typ : int64 list -> int64 =
+  let radix = bitsSizeOf typ in
+  List.fold_left
+    (fun acc -> Int64.add (Int64.shift_left acc radix))
+    Int64.zero
+
+let interpret_character_constant char_list =
+  let value = reduce_multichar charType char_list in
+  if value < (Int64.of_int 256) then  
+    (* ISO C 6.4.4.4.10: single-character constants have type int *)
+    (CChr(Char.chr (Int64.to_int value))), intType
+  else begin
+    let orig_rep = None (* Some("'" ^ (String.escaped str) ^ "'") *) in
+    if value <= (Int64.of_int32 Int32.max_int) then
+      (CInt64(value,IULong,orig_rep)),(TInt(IULong,[]))
+    else 
+      (CInt64(value,IULongLong,orig_rep)),(TInt(IULongLong,[]))
+  end
+
+(*** EXPRESSIONS *************)
+
+                                        (* We collect here the program *)
+let theFile : global list ref = ref []
+let theFileTypes : global list ref = ref []
+
+let initGlobals () = theFile := []; theFileTypes := []
+
+    
+let cabsPushGlobal (g: global) = 
+  pushGlobal g ~types:theFileTypes ~variables:theFile
+
+(* Keep track of some variable ids that must be turned into definitions. We 
+ * do this when we encounter what appears a definition of a global but 
+ * without initializer. We leave it a declaration because maybe down the road 
+ * we see another definition with an initializer. But if we don't see any 
+ * then we turn the last such declaration into a definition without 
+ * initializer *)
+let mustTurnIntoDef: bool IH.t = IH.create 117
+
+(* Globals that have already been defined. Indexed by the variable name. *)
+let alreadyDefined: (string, location) H.t = H.create 117
+
+(* Globals that were created due to static local variables. We chose their 
+ * names to be distinct from any global encountered at the time. But we might 
+ * see a global with conflicting name later in the file. *)
+let staticLocals: (string, varinfo) H.t = H.create 13
+
+
+(* Typedefs. We chose their names to be distinct from any global encounterd 
+ * at the time. But we might see a global with conflicting name later in the 
+ * file *)
+let typedefs: (string, typeinfo) H.t = H.create 13
+
+let popGlobals () = 
+  let rec revonto (tail: global list) = function
+      [] -> tail
+
+    | GVarDecl (vi, l) :: rest 
+      when vi.vstorage != Extern && IH.mem mustTurnIntoDef vi.vid -> 
+        IH.remove mustTurnIntoDef vi.vid;
+        revonto (GVar (vi, {init = None}, l) :: tail) rest
+
+    | x :: rest -> revonto (x :: tail) rest
+  in
+  revonto (revonto [] !theFile) !theFileTypes
+
+
+(********* ENVIRONMENTS ***************)
+
+(* The environment is kept in two distinct data structures. A hash table maps
+ * each original variable name into a varinfo (for variables, or an
+ * enumeration tag, or a type). (Note that the varinfo might contain an
+ * alpha-converted name different from that of the lookup name.) The Ocaml
+ * hash tables can keep multiple mappings for a single key. Each time the
+ * last mapping is returned and upon deletion the old mapping is restored. To
+ * keep track of local scopes we also maintain a list of scopes (represented
+ * as lists).  *)
+type envdata =
+    EnvVar of varinfo                   (* The name refers to a variable
+                                         * (which could also be a function) *)
+  | EnvEnum of exp * typ                (* The name refers to an enumeration
+                                         * tag for which we know the value
+                                         * and the host type *)
+  | EnvTyp of typ                       (* The name is of the form  "struct
+                                         * foo", or "union foo" or "enum foo"
+                                         * and refers to a type. Note that
+                                         * the name of the actual type might
+                                         * be different from foo due to alpha
+                                         * conversion *)
+  | EnvLabel of string                  (* The name refers to a label. This 
+                                         * is useful for GCC's locally 
+                                         * declared labels. The lookup name 
+                                         * for this category is "label foo" *)
+
+let env : (string, envdata * location) H.t = H.create 307
+(* We also keep a global environment. This is always a subset of the env *)
+let genv : (string, envdata * location) H.t = H.create 307
+
+ (* In the scope we keep the original name, so we can remove them from the
+  * hash table easily *)
+type undoScope =
+    UndoRemoveFromEnv of string
+  | UndoResetAlphaCounter of location AL.alphaTableData ref * 
+                             location AL.alphaTableData
+  | UndoRemoveFromAlphaTable of string
+
+let scopes :  undoScope list ref list ref = ref []
+
+let isAtTopLevel () = 
+  !scopes = []
+
+
+(* When you add to env, you also add it to the current scope *)
+let addLocalToEnv (n: string) (d: envdata) = 
+(*  ignore (E.log "%a: adding local %s to env\n" d_loc !currentLoc n); *)
+  H.add env n (d, !currentLoc);
+    (* If we are in a scope, then it means we are not at top level. Add the 
+     * name to the scope *)
+  (match !scopes with
+    [] -> begin
+      match d with
+        EnvVar _ -> 
+          E.s (E.bug "addLocalToEnv: not in a scope when adding %s!" n)
+      | _ -> () (* We might add types *)
+    end
+  | s :: _ -> 
+      s := (UndoRemoveFromEnv n) :: !s)
+
+
+let addGlobalToEnv (k: string) (d: envdata) : unit = 
+(*  ignore (E.log "%a: adding global %s to env\n" d_loc !currentLoc k); *)
+  H.add env k (d, !currentLoc);
+  (* Also add it to the global environment *)
+  H.add genv k (d, !currentLoc)
+  
+  
+
+(* Create a new name based on a given name. The new name is formed from a 
+ * prefix (obtained from the given name as the longest prefix that ends with 
+ * a non-digit), followed by a '_' and then by a positive integer suffix. The 
+ * first argument is a table mapping name prefixes with the largest suffix 
+ * used so far for that prefix. The largest suffix is one when only the 
+ * version without suffix has been used. *)
+let alphaTable : (string, location AL.alphaTableData ref) H.t = H.create 307 
+        (* vars and enum tags. For composite types we have names like "struct 
+         * foo" or "union bar" *)
+
+(* To keep different name scopes different, we add prefixes to names 
+ * specifying the kind of name: the kind can be one of "" for variables or 
+ * enum tags, "struct" for structures and unions (they share the name space), 
+ * "enum" for enumerations, or "type" for types *)
+let kindPlusName (kind: string)
+                 (origname: string) : string =
+  if kind = "" then origname else
+  kind ^ " " ^ origname
+                
+
+let stripKind (kind: string) (kindplusname: string) : string = 
+  let l = 1 + String.length kind in
+  if l > 1 then 
+    String.sub kindplusname l (String.length kindplusname - l)
+  else
+    kindplusname
+   
+let newAlphaName (globalscope: bool) (* The name should have global scope *)
+                 (kind: string) 
+                 (origname: string) : string * location = 
+  let lookupname = kindPlusName kind origname in
+  (* If we are in a scope then it means that we are alpha-converting a local 
+   * name. Go and add stuff to reset the state of the alpha table but only to 
+   * the top-most scope (that of the enclosing function) *)
+  let rec findEnclosingFun = function
+      [] -> (* At global scope *)()
+    | [s] -> begin
+        let prefix = AL.getAlphaPrefix lookupname in
+        try
+          let countref = H.find alphaTable prefix in
+          s := (UndoResetAlphaCounter (countref, !countref)) :: !s
+        with Not_found ->
+          s := (UndoRemoveFromAlphaTable prefix) :: !s
+    end
+    | _ :: rest -> findEnclosingFun rest
+  in
+  if not globalscope then 
+    findEnclosingFun !scopes;
+  let newname, oldloc = 
+           AL.newAlphaName alphaTable None lookupname !currentLoc in
+  stripKind kind newname, oldloc
+
+
+  
+
+let explodeString (nullterm: bool) (s: string) : char list =  
+  let rec allChars i acc = 
+    if i < 0 then acc
+    else allChars (i - 1) ((String.get s i) :: acc)
+  in
+  allChars (-1 + String.length s) 
+    (if nullterm then [Char.chr 0] else [])
+    
+(*** In order to process GNU_BODY expressions we must record that a given 
+ *** COMPUTATION is interesting *)
+let gnu_body_result : (A.statement * ((exp * typ) option ref)) ref 
+    = ref (A.NOP cabslu, ref None)
+
+(*** When we do statements we need to know the current return type *)
+let currentReturnType : typ ref = ref (TVoid([]))
+let currentFunctionFDEC: fundec ref = ref dummyFunDec
+
+  
+let lastStructId = ref 0
+let anonStructName (k: string) (suggested: string) = 
+  incr lastStructId;
+  "__anon" ^ k ^ (if suggested <> "" then "_"  ^ suggested else "") 
+  ^ "_" ^ (string_of_int (!lastStructId))
+
+
+let constrExprId = ref 0
+
+
+let startFile () = 
+  H.clear env;
+  H.clear genv;
+  H.clear alphaTable;
+  lastStructId := 0
+
+
+
+let enterScope () = 
+  scopes := (ref []) :: !scopes
+
+     (* Exit a scope and clean the environment. We do not yet delete from 
+      * the name table *)
+let exitScope () = 
+  let this, rest = 
+    match !scopes with
+      car :: cdr -> car, cdr
+    | [] -> E.s (error "Not in a scope")
+  in
+  scopes := rest;
+  let rec loop = function
+      [] -> ()
+    | UndoRemoveFromEnv n :: t -> 
+        H.remove env n; loop t
+    | UndoRemoveFromAlphaTable n :: t -> H.remove alphaTable n; loop t
+    | UndoResetAlphaCounter (vref, oldv) :: t -> 
+        vref := oldv;
+        loop t
+  in
+  loop !this
+
+(* Lookup a variable name. Return also the location of the definition. Might 
+ * raise Not_found  *)
+let lookupVar (n: string) : varinfo * location = 
+  match H.find env n with
+    (EnvVar vi), loc -> vi, loc
+  | _ -> raise Not_found
+        
+let lookupGlobalVar (n: string) : varinfo * location = 
+  match H.find genv n with
+    (EnvVar vi), loc -> vi, loc
+  | _ -> raise Not_found
+        
+let docEnv () = 
+  let acc : (string * (envdata * location)) list ref = ref [] in
+  let doone () = function
+      EnvVar vi, l -> 
+        dprintf "Var(%s,global=%b) (at %a)" vi.vname vi.vglob d_loc l
+    | EnvEnum (tag, typ), l -> dprintf "Enum (at %a)" d_loc l
+    | EnvTyp t, l -> text "typ"
+    | EnvLabel l, _ -> text ("label " ^ l)
+  in
+  H.iter (fun k d -> acc := (k, d) :: !acc) env;
+  docList ~sep:line (fun (k, d) -> dprintf "  %s -> %a" k doone d) () !acc
+
+
+
+(* Add a new variable. Do alpha-conversion if necessary *)
+let alphaConvertVarAndAddToEnv (addtoenv: bool) (vi: varinfo) : varinfo = 
+(*
+  ignore (E.log "%t: alphaConvert(addtoenv=%b) %s" d_thisloc addtoenv vi.vname);
+*)
+  (* Announce the name to the alpha conversion table *)
+  let newname, oldloc = newAlphaName (addtoenv && vi.vglob) "" vi.vname in
+  (* Make a copy of the vi if the name has changed. Never change the name for 
+   * global variables *)
+  let newvi = 
+    if vi.vname = newname then 
+      vi 
+    else begin
+      if vi.vglob then begin
+        (* Perhaps this is because we have seen a static local which happened 
+         * to get the name that we later want to use for a global. *)
+        try 
+          let static_local_vi = H.find staticLocals vi.vname in
+          H.remove staticLocals vi.vname;
+          (* Use the new name for the static local *)
+          static_local_vi.vname <- newname;
+          (* And continue using the last one *)
+          vi
+        with Not_found -> begin
+          (* Or perhaps we have seen a typedef which stole our name. This is 
+           possible because typedefs use the same name space *)
+          try
+            let typedef_ti = H.find typedefs vi.vname in 
+            H.remove typedefs vi.vname;
+            (* Use the new name for the typedef instead *)
+            typedef_ti.tname <- newname;
+            (* And continue using the last name *)
+            vi
+          with Not_found -> 
+            E.s (E.error "It seems that we would need to rename global %s (to %s) because of previous occurrence at %a" 
+                   vi.vname newname d_loc oldloc);
+        end
+      end else begin 
+        (* We have changed the name of a local variable. Can we try to detect 
+         * if the other variable was also local in the same scope? Not for 
+         * now. *)
+        copyVarinfo vi newname
+      end
+    end
+  in
+  (* Store all locals in the slocals (in reversed order). We'll reverse them 
+   * and take out the formals at the end of the function *)
+  if not vi.vglob then
+    !currentFunctionFDEC.slocals <- newvi :: !currentFunctionFDEC.slocals;
+
+  (if addtoenv then 
+    if vi.vglob then
+      addGlobalToEnv vi.vname (EnvVar newvi)
+    else
+      addLocalToEnv vi.vname (EnvVar newvi));
+(*
+  ignore (E.log "  new=%s\n" newvi.vname);
+*)
+(*  ignore (E.log "After adding %s alpha table is: %a\n"
+            newvi.vname docAlphaTable alphaTable); *)
+  newvi
+
+
+(* Strip the "const" from the type. It is unfortunate that const variables 
+ * can only be set in initialization. Once we decided to move all 
+ * declarations to the top of the functions, we have no way of setting a 
+ * "const" variable. Furthermore, if the type of the variable is an array or 
+ * a struct we must recursively strip the "const" from fields and array 
+ * elements. *)
+let rec stripConstLocalType (t: typ) : typ = 
+  let dc a = 
+    if hasAttribute "const" a then 
+      dropAttribute "const" a 
+    else a 
+  in
+  match t with 
+  | TPtr (bt, a) -> 
+      (* We want to be able to detect by pointer equality if the type has 
+       * changed. So, don't realloc the type unless necessary. *)
+      let a' = dc a in if a != a' then TPtr(bt, a') else t
+  | TInt (ik, a) -> 
+      let a' = dc a in if a != a' then TInt(ik, a') else t
+  | TFloat(fk, a) -> 
+      let a' = dc a in if a != a' then TFloat(fk, a') else t
+  | TNamed (ti, a) -> 
+      (* We must go and drop the consts from the typeinfo as well ! *)
+      let t' = stripConstLocalType ti.ttype in
+      if t != t' then begin
+        (* ignore (warn "Stripping \"const\" from typedef %s\n" ti.tname); *)
+        ti.ttype <- t'
+      end;
+      let a' = dc a in if a != a' then TNamed(ti, a') else t
+
+  | TEnum (ei, a) -> 
+      let a' = dc a in if a != a' then TEnum(ei, a') else t
+      
+  | TArray(bt, leno, a) -> 
+      (* We never assign to the array. So, no need to change the const. But 
+       * we must change it on the base type *)
+      let bt' = stripConstLocalType bt in
+      if bt' != bt then TArray(bt', leno, a) else t
+
+  | TComp(ci, a) ->
+      (* Must change both this structure as well as its fields *)
+      List.iter
+        (fun f -> 
+          let t' = stripConstLocalType f.ftype in
+          if t' != f.ftype then begin
+            ignore (warnOpt "Stripping \"const\" from field %s of %s\n" 
+                      f.fname (compFullName ci));
+            f.ftype <- t'
+          end)
+        ci.cfields;
+      let a' = dc a in if a != a' then TComp(ci, a') else t
+
+    (* We never assign functions either *)
+  | TFun(rt, args, va, a) -> t
+  | TVoid _ -> E.s (bug "cabs2cil: stripConstLocalType: void")
+  | TBuiltin_va_list a -> 
+      let a' = dc a in if a != a' then TBuiltin_va_list a' else t
+
+
+let constFoldTypeVisitor = object (self)
+  inherit nopCilVisitor
+  method vtype t: typ visitAction =
+    match t with
+      TArray(bt, Some len, a) -> 
+        let len' = constFold true len in
+        ChangeDoChildrenPost (
+          TArray(bt, Some len', a),
+          (fun x -> x)
+        )
+    | _ -> DoChildren
+end
+
+(* Const-fold any expressions that appear as array lengths in this type *)
+let constFoldType (t:typ) : typ =
+  visitCilType constFoldTypeVisitor t
+
+
+
+(* Create a new temporary variable *)
+let newTempVar typ = 
+  if !currentFunctionFDEC == dummyFunDec then 
+    E.s (bug "newTempVar called outside a function");
+(*  ignore (E.log "stripConstLocalType(%a) for temporary\n" d_type typ); *)
+  let t' = stripConstLocalType typ in
+  (* Start with the name "tmp". The alpha converter will fix it *)
+  let vi = makeVarinfo false "tmp" t' in
+  alphaConvertVarAndAddToEnv false  vi (* Do not add to the environment *)
+(*
+    { vname = "tmp";  (* addNewVar will make the name fresh *)
+      vid   = newVarId "tmp" false;
+      vglob = false;
+      vtype = t';
+      vdecl = locUnknown;
+      vinline = false;
+      vattr = [];
+      vaddrof = false;
+      vreferenced = false;   (* sm *)
+      vstorage = NoStorage;
+    } 
+*)
+
+let mkAddrOfAndMark ((b, off) as lval) : exp = 
+  (* Mark the vaddrof flag if b is a variable *)
+  (match b with 
+    Var vi -> vi.vaddrof <- true
+  | _ -> ());
+  mkAddrOf lval
+  
+(* Call only on arrays *)
+let mkStartOfAndMark ((b, off) as lval) : exp = 
+  (* Mark the vaddrof flag if b is a variable *)
+  (match b with 
+    Var vi -> vi.vaddrof <- true
+  | _ -> ());
+  let res = StartOf lval in
+  res
+  
+
+
+   (* Keep a set of self compinfo for composite types *)
+let compInfoNameEnv : (string, compinfo) H.t = H.create 113
+let enumInfoNameEnv : (string, enuminfo) H.t = H.create 113
+
+
+let lookupTypeNoError (kind: string) 
+                      (n: string) : typ * location = 
+  let kn = kindPlusName kind n in
+  match H.find env kn with
+    EnvTyp t, l -> t, l
+  | _ -> raise Not_found
+
+let lookupType (kind: string) 
+               (n: string) : typ * location = 
+  try
+    lookupTypeNoError kind n
+  with Not_found -> 
+    E.s (error "Cannot find type %s (kind:%s)\n" n kind)
+
+(* Create the self ref cell and add it to the map. Return also an indication 
+ * if this is a new one. *)
+let createCompInfo (iss: bool) (n: string) : compinfo * bool = 
+  (* Add to the self cell set *)
+  let key = (if iss then "struct " else "union ") ^ n in
+  try
+    H.find compInfoNameEnv key, false (* Only if not already in *)
+  with Not_found -> begin
+    (* Create a compinfo. This will have "cdefined" false. *)
+    let res = mkCompInfo iss n (fun _ -> []) [] in
+    H.add compInfoNameEnv key res;
+    res, true
+  end
+
+(* Create the self ref cell and add it to the map. Return an indication 
+ * whether this is a new one. *)
+let createEnumInfo (n: string) : enuminfo * bool = 
+  (* Add to the self cell set *)
+  try
+    H.find enumInfoNameEnv n, false (* Only if not already in *)
+  with Not_found -> begin
+    (* Create a enuminfo *)
+    let enum = { ename = n; eitems = []; 
+                 eattr = []; ereferenced = false; } in
+    H.add enumInfoNameEnv n enum;
+    enum, true
+  end
+
+
+   (* kind is either "struct" or "union" or "enum" and n is a name *)
+let findCompType (kind: string) (n: string) (a: attributes) = 
+  let makeForward () = 
+    (* This is a forward reference, either because we have not seen this 
+     * struct already or because we want to create a version with different 
+     * attributes  *)
+    if kind = "enum" then 
+      let enum, isnew = createEnumInfo n in
+      if isnew then
+        cabsPushGlobal (GEnumTagDecl (enum, !currentLoc));
+      TEnum (enum, a)
+    else 
+      let iss = if kind = "struct" then true else false in
+      let self, isnew = createCompInfo iss n in
+      if isnew then 
+        cabsPushGlobal (GCompTagDecl (self, !currentLoc));
+      TComp (self, a)
+  in
+  try
+    let old, _ = lookupTypeNoError kind n in (* already defined  *)
+    let olda = typeAttrs old in
+    if Util.equals olda a then old else makeForward ()
+  with Not_found -> makeForward ()
+  
+
+(* A simple visitor that searchs a statement for labels *)
+class canDropStmtClass pRes = object
+  inherit nopCilVisitor
+        
+  method vstmt s = 
+    if s.labels != [] then 
+      (pRes := false; SkipChildren)
+    else 
+      if !pRes then DoChildren else SkipChildren
+
+  method vinst _ = SkipChildren
+  method vexpr _ = SkipChildren
+      
+end
+let canDropStatement (s: stmt) : bool = 
+  let pRes = ref true in
+  let vis = new canDropStmtClass pRes in
+  ignore (visitCilStmt vis s);
+  !pRes
+
+(**** Occasionally we see structs with no name and no fields *)
+
+
+module BlockChunk = 
+  struct
+    type chunk = {
+        stmts: stmt list;
+        postins: instr list;              (* Some instructions to append at 
+                                           * the ends of statements (in 
+                                           * reverse order)  *)
+                                        (* A list of case statements visible at the 
+                                         * outer level *)
+        cases: (label * stmt) list
+      } 
+
+    let d_chunk () (c: chunk) = 
+      dprintf "@[{ @[%a@] };@?%a@]"
+           (docList ~sep:(chr ';') (d_stmt ())) c.stmts
+           (docList ~sep:(chr ';') (d_instr ())) (List.rev c.postins)
+ 
+    let empty = 
+      { stmts = []; postins = []; cases = []; }
+
+    let isEmpty (c: chunk) = 
+      c.postins == [] && c.stmts == []
+
+    let isNotEmpty (c: chunk) = not (isEmpty c)
+
+    let i2c (i: instr) = 
+      { empty with postins = [i] }
+        
+    (* Occasionally, we'll have to push postins into the statements *)
+    let pushPostIns (c: chunk) : stmt list = 
+      if c.postins = [] then c.stmts
+      else
+        let rec toLast = function
+            [{skind=Instr il} as s] as stmts -> 
+              s.skind <- Instr (il @ (List.rev c.postins));
+              stmts
+
+          | [] -> [mkStmt (Instr (List.rev c.postins))]
+
+          | a :: rest -> a :: toLast rest
+        in
+        compactStmts (toLast c.stmts)
+
+
+    let c2block (c: chunk) : block = 
+      { battrs = [];
+        bstmts = pushPostIns c;
+      } 
+
+    (* Add an instruction at the end. Never refer to this instruction again 
+     * after you call this *)
+    let (+++) (c: chunk) (i : instr) =
+      {c with postins = i :: c.postins}
+
+    (* Append two chunks. Never refer to the original chunks after you call 
+     * this. And especially never share c2 with somebody else *)
+    let (@@) (c1: chunk) (c2: chunk) = 
+      { stmts = compactStmts (pushPostIns c1 @ c2.stmts);
+        postins = c2.postins;
+        cases = c1.cases @ c2.cases;
+      } 
+
+    let skipChunk = empty
+        
+    let returnChunk (e: exp option) (l: location) : chunk = 
+      { stmts = [ mkStmt (Return(e, l)) ];
+        postins = [];
+        cases = []
+      }
+
+    let ifChunk (be: exp) (l: location) (t: chunk) (e: chunk) : chunk = 
+      
+      { stmts = [ mkStmt(If(be, c2block t, c2block e, l))];
+        postins = [];
+        cases = t.cases @ e.cases;
+      } 
+
+        (* We can duplicate a chunk if it has a few simple statements, and if 
+         * it does not have cases *)
+    let duplicateChunk (c: chunk) = (* raises Failure if you should not 
+                                     * duplicate this chunk *)
+      if not !allowDuplication then
+        raise (Failure "cannot duplicate: disallowed by user");
+      if c.cases != [] then raise (Failure "cannot duplicate: has cases") else
+      let pCount = ref (List.length c.postins) in
+      { stmts = 
+        List.map 
+          (fun s -> 
+            if s.labels != [] then 
+              raise (Failure "cannot duplicate: has labels");
+(*
+            (match s.skind with 
+              If _ | Switch _ | (*Loop _*)
+	       While _ | DoWhile _ | For _ | Block _ -> 
+                raise (Failure "cannot duplicate: complex stmt")
+            | Instr il -> 
+                pCount := !pCount + List.length il
+            | _ -> incr pCount);
+            if !pCount > 5 then raise (Failure ("cannot duplicate: too many instr"));
+*)
+            (* We can just copy it because there is nothing to share here. 
+             * Except maybe for the ref cell in Goto but it is Ok to share 
+             * that, I think *)
+            { s with sid = s.sid}) c.stmts;
+        postins = c.postins; (* There is no shared stuff in instructions *)
+        cases = []
+      } 
+(*
+    let duplicateChunk (c: chunk) = 
+      if isEmpty c then c else raise (Failure ("cannot duplicate: isNotEmpty"))
+*)
+    (* We can drop a chunk if it does not have labels inside *)
+    let canDrop (c: chunk) =
+      List.for_all canDropStatement c.stmts
+
+(*
+    let loopChunk (body: chunk) : chunk = 
+      (* Make the statement *)
+      let loop = mkStmt (Loop (c2block body, !currentLoc, None, None)) in
+      { stmts = [ loop (* ; n *) ];
+        postins = [];
+        cases = body.cases;
+      } 
+*)
+
+    let whileChunk (e: exp) (body: chunk) : chunk = 
+      let loop = mkStmt (While (e, c2block body, !currentLoc)) in
+	
+	{ stmts = [ loop ];
+          postins = [];
+          cases = body.cases;
+	} 
+
+    let doWhileChunk (e: exp) (body: chunk) : chunk = 
+      let loop = mkStmt (DoWhile (e, c2block body, !currentLoc)) in
+	
+	{ stmts = [ loop ];
+          postins = [];
+          cases = body.cases;
+	} 
+      
+    let forChunk (bInit: chunk) (e: exp) (bIter: chunk)
+                 (body: chunk) : chunk = 
+      let loop = mkStmt (For (c2block bInit, e, c2block bIter,
+			      c2block body, !currentLoc)) in
+	
+	{ stmts = [ loop ];
+          postins = [];
+          cases = body.cases;
+	} 
+      
+    let breakChunk (l: location) : chunk = 
+      { stmts = [ mkStmt (Break l) ];
+        postins = [];
+        cases = [];
+      } 
+      
+    let continueChunk (l: location) : chunk = 
+      { stmts = [ mkStmt (Continue l) ];
+        postins = [];
+        cases = []
+      } 
+
+        (* Keep track of the gotos *)
+    let backPatchGotos : (string, stmt ref list ref) H.t = H.create 17
+    let addGoto (lname: string) (bref: stmt ref) : unit = 
+      let gotos = 
+        try
+          H.find backPatchGotos lname
+        with Not_found -> begin
+          let gotos = ref [] in
+          H.add backPatchGotos lname gotos;
+          gotos
+        end
+      in
+      gotos := bref :: !gotos
+
+        (* Keep track of the labels *)
+    let labelStmt : (string, stmt) H.t = H.create 17
+    let initLabels () = 
+      H.clear backPatchGotos;
+      H.clear labelStmt
+      
+    let resolveGotos () = 
+      H.iter
+        (fun lname gotos ->
+          try
+            let dest = H.find labelStmt lname in
+            List.iter (fun gref -> gref := dest) !gotos
+          with Not_found -> begin
+            E.s (error "Label %s not found\n" lname)
+          end)
+        backPatchGotos
+
+        (* Get the first statement in a chunk. Might need to change the 
+         * statements in the chunk *)
+    let getFirstInChunk (c: chunk) : stmt * stmt list = 
+      (* Get the first statement and add the label to it *)
+      match c.stmts with
+        s :: _ -> s, c.stmts
+      | [] -> (* Add a statement *)
+          let n = mkEmptyStmt () in
+          n, n :: c.stmts
+      
+    let consLabel (l: string) (c: chunk) (loc: location) 
+				(in_original_program_text : bool) : chunk = 
+      (* Get the first statement and add the label to it *)
+      let labstmt, stmts' = getFirstInChunk c in
+      (* Add the label *)
+      labstmt.labels <- Label (l, loc, in_original_program_text) :: 
+				labstmt.labels;
+      H.add labelStmt l labstmt;
+      if c.stmts == stmts' then c else {c with stmts = stmts'}
+
+    let s2c (s:stmt) : chunk = 
+      { stmts = [ s ];
+        postins = [];
+        cases = [];
+      } 
+
+    let gotoChunk (ln: string) (l: location) : chunk = 
+      let gref = ref dummyStmt in
+      addGoto ln gref;
+      { stmts = [ mkStmt (Goto (gref, l)) ];
+        postins = [];
+        cases = [];
+      }
+
+    let caseRangeChunk (el: exp list) (l: location) (next: chunk) = 
+      let fst, stmts' = getFirstInChunk next in
+      let labels = List.map (fun e -> Case (e, l)) el in
+      let cases  = List.map (fun l -> (l, fst)) labels in
+      fst.labels <- labels @ fst.labels;
+      { next with stmts = stmts'; cases = cases @ next.cases}
+        
+    let defaultChunk (l: location) (next: chunk) = 
+      let fst, stmts' = getFirstInChunk next in
+      let lb = Default l in
+      fst.labels <- lb :: fst.labels;
+      { next with stmts = stmts'; cases = (lb, fst) :: next.cases}
+
+        
+    let switchChunk (e: exp) (body: chunk) (l: location) =
+      (* Make the statement *)
+      let switch = mkStmt (Switch (e, c2block body, 
+                                   List.map (fun (_, s) -> s) body.cases, 
+                                   l)) in
+      { stmts = [ switch (* ; n *) ];
+        postins = [];
+        cases = [];
+      } 
+
+    let mkFunctionBody (c: chunk) : block = 
+      resolveGotos (); initLabels ();
+      if c.cases <> [] then
+        E.s (error "Switch cases not inside a switch statement\n");
+      c2block c
+      
+  end
+
+open BlockChunk 
+
+
+(************ Labels ***********)
+(*
+(* Since we turn dowhile and for loops into while we need to take care in 
+ * processing the continue statement. For each loop that we enter we place a 
+ * marker in a list saying what kinds of loop it is. When we see a continue 
+ * for a Non-while loop we must generate a label for the continue *)
+type loopstate = 
+    While
+  | NotWhile of string ref
+
+let continues : loopstate list ref = ref []
+
+let startLoop iswhile = 
+  continues := (if iswhile then While else NotWhile (ref "")) :: !continues
+*)
+
+(* We need to take care while processing the continue statement...
+ * For each loop that we enter we place a marker in a list saying what
+ * chunk of code we must duplicate before each continue statement
+ * in order to preserve the semantics. *)
+type loopMarker =
+  | DuplicateBeforeContinue of chunk
+  | ContinueUnchanged
+
+let continues : loopMarker list ref = ref []
+  
+let startLoop lstate =
+  continues := lstate :: !continues
+  
+let continueDuplicateChunk (l: location) : chunk = 
+  match !continues with
+    | []                             -> E.s (error "continue not in a loop")
+    | DuplicateBeforeContinue c :: _ -> c @@ continueChunk l
+    | ContinueUnchanged :: _         -> continueChunk l
+
+(* Sometimes we need to create new label names *)
+let newLabelName (base: string) = fst (newAlphaName false "label" base)
+
+(*
+let continueOrLabelChunk (l: location) : chunk = 
+  match !continues with
+    [] -> E.s (error "continue not in a loop")
+  | While :: _ -> continueChunk l
+  | NotWhile lr :: _ -> 
+      if !lr = "" then begin
+        lr := newLabelName "__Cont"
+      end;
+      gotoChunk !lr l
+
+let consLabContinue (c: chunk) = 
+  match !continues with
+    [] -> E.s (error "labContinue not in a loop")
+  | While :: rest -> c
+  | NotWhile lr :: rest -> if !lr = "" then c else consLabel !lr c !currentLoc false
+*)
+
+let exitLoop () = 
+  match !continues with
+    [] -> E.s (error "exit Loop not in a loop")
+  | _ :: rest -> continues := rest
+      
+
+(* In GCC we can have locally declared labels. *)
+let genNewLocalLabel (l: string) = 
+  (* Call the newLabelName to register the label name in the alpha conversion 
+   * table. *)
+  let l' = newLabelName l in
+  (* Add it to the environment *)
+  addLocalToEnv (kindPlusName "label" l) (EnvLabel l');
+  l'
+
+let lookupLabel (l: string) = 
+  try 
+    match H.find env (kindPlusName "label" l) with
+      EnvLabel l', _ -> l'
+    | _ -> raise Not_found
+  with Not_found -> 
+    l
+
+
+(** ALLOCA ***)
+let allocaFun () = 
+  let name = 
+    if !msvcMode then "alloca"
+      (* Use __builtin_alloca where possible, because this can be used
+         even when gcc is invoked with -fno-builtin *)
+    else "__builtin_alloca"
+  in
+  let fdec = emptyFunction name in
+  fdec.svar.vtype <- 
+     TFun(voidPtrType, Some [ ("len", !typeOfSizeOf, []) ], false, []);
+  fdec.svar
+  
+(* Maps local variables that are variable sized arrays to the expression that 
+ * denotes their length *)
+let varSizeArrays : exp IH.t = IH.create 17
+  
+(**** EXP actions ***)
+type expAction = 
+    ADrop                               (* Drop the result. Only the 
+                                         * side-effect is interesting *)
+  | ASet of lval * typ                  (* Put the result in a given lval, 
+                                         * provided it matches the type. The 
+                                         * type is the type of the lval. *)
+  | AExp of typ option                  (* Return the exp as usual. 
+                                         * Optionally we can specify an 
+                                         * expected type. This is useful for 
+                                         * constants. The expected type is 
+                                         * informational only, we do not 
+                                         * guarantee that the converted 
+                                         * expression has that type.You must 
+                                         * use a doCast afterwards to make 
+                                         * sure. *)
+  | AExpLeaveArrayFun                   (* Do it like an expression, but do 
+                                         * not convert arrays of functions 
+                                         * into pointers *)
+
+
+(*** Result of compiling conditional expressions *)
+type condExpRes = 
+    CEExp of chunk * exp (* Do a chunk and then an expression *)
+  | CEAnd of condExpRes * condExpRes
+  | CEOr  of condExpRes * condExpRes
+  | CENot of condExpRes
+
+(******** CASTS *********)
+let integralPromotion (t : typ) : typ = (* c.f. ISO 6.3.1.1 *)
+  match unrollType t with
+          (* We assume that an IInt can hold even an IUShort *)
+    TInt ((IShort|IUShort|IChar|ISChar|IUChar), a) -> TInt(IInt, a)
+  | TInt _ -> t
+  | TEnum (_, a) -> TInt(IInt, a)
+  | t -> E.s (error "integralPromotion: not expecting %a" d_type t)
+  
+
+let arithmeticConversion    (* c.f. ISO 6.3.1.8 *)
+    (t1: typ)
+    (t2: typ) : typ = 
+  let checkToInt _ = () in  (* dummies for now *)
+  let checkToFloat _ = () in
+  match unrollType t1, unrollType t2 with
+    TFloat(FLongDouble, _), _ -> checkToFloat t2; t1
+  | _, TFloat(FLongDouble, _) -> checkToFloat t1; t2
+  | TFloat(FDouble, _), _ -> checkToFloat t2; t1
+  | _, TFloat (FDouble, _) -> checkToFloat t1; t2
+  | TFloat(FFloat, _), _ -> checkToFloat t2; t1
+  | _, TFloat (FFloat, _) -> checkToFloat t1; t2
+  | _, _ -> begin
+      let t1' = integralPromotion t1 in
+      let t2' = integralPromotion t2 in
+      match unrollType t1', unrollType t2' with
+        TInt(IULongLong, _), _ -> checkToInt t2'; t1'
+      | _, TInt(IULongLong, _) -> checkToInt t1'; t2'
+            
+      (* We assume a long long is always larger than a long  *)
+      | TInt(ILongLong, _), _ -> checkToInt t2'; t1'  
+      | _, TInt(ILongLong, _) -> checkToInt t1'; t2'
+            
+      | TInt(IULong, _), _ -> checkToInt t2'; t1'
+      | _, TInt(IULong, _) -> checkToInt t1'; t2'
+
+                    
+      | TInt(ILong,_), TInt(IUInt,_) 
+            when bitsSizeOf t1' <= bitsSizeOf t2' -> TInt(IULong,[])
+      | TInt(IUInt,_), TInt(ILong,_) 
+            when bitsSizeOf t2' <= bitsSizeOf t1' -> TInt(IULong,[])
+            
+      | TInt(ILong, _), _ -> checkToInt t2'; t1'
+      | _, TInt(ILong, _) -> checkToInt t1'; t2'
+
+      | TInt(IUInt, _), _ -> checkToInt t2'; t1'
+      | _, TInt(IUInt, _) -> checkToInt t1'; t2'
+            
+      | TInt(IInt, _), TInt (IInt, _) -> t1'
+
+      | _, _ -> E.s (error "arithmeticConversion")
+  end
+
+  
+(* Specify whether the cast is from the source code *)
+let rec castTo ?(fromsource=false) 
+                (ot : typ) (nt : typ) (e : exp) : (typ * exp ) = 
+(*
+  ignore (E.log "%t: castTo:%s %a->%a\n"
+            d_thisloc
+            (if fromsource then "(source)" else "")
+            d_type ot d_type nt);
+*)
+  if not fromsource && Util.equals (typeSig ot) (typeSig nt) then
+    (* Do not put the cast if it is not necessary, unless it is from the 
+     * source. *)
+    (ot, e) 
+  else begin
+    let result = (nt, 
+                  if !insertImplicitCasts || fromsource then mkCastT e ot nt else e) in
+(*
+    ignore (E.log "castTo: ot=%a nt=%a\n  result is %a\n" 
+              d_type ot d_type nt
+              d_plainexp (snd result));
+*)
+    (* Now see if we can have a cast here *)
+    match ot, nt with
+      TNamed(r, _), _ -> castTo ~fromsource:fromsource r.ttype nt e
+    | _, TNamed(r, _) -> castTo ~fromsource:fromsource ot r.ttype e
+    | TInt(ikindo,_), TInt(ikindn,_) -> 
+        (* We used to ignore attributes on integer-integer casts. Not anymore *)
+        (* if ikindo = ikindn then (nt, e) else *) 
+        result
+
+    | TPtr (told, _), TPtr(tnew, _) -> result
+          
+    | TInt _, TPtr _ -> result
+          
+    | TPtr _, TInt _ -> result
+          
+    | TArray _, TPtr _ -> result
+          
+    | TArray(t1,_,_), TArray(t2,None,_) when Util.equals (typeSig t1) (typeSig t2) -> (nt, e)
+          
+    | TPtr _, TArray(_,_,_) -> (nt, e)
+          
+    | TEnum _, TInt _ -> result
+    | TFloat _, (TInt _|TEnum _) -> result
+    | (TInt _|TEnum _), TFloat _ -> result
+    | TFloat _, TFloat _ -> result
+    | TInt _, TEnum _ -> result
+    | TEnum _, TEnum _ -> result
+
+    | TEnum _, TPtr _ -> result
+    | TBuiltin_va_list _, (TInt _ | TPtr _) -> 
+        result
+
+    | (TInt _ | TPtr _), TBuiltin_va_list _ ->
+        ignore (warnOpt "Casting %a to __builtin_va_list" d_type ot);
+        result
+
+    | TPtr _, TEnum _ -> 
+        ignore (warnOpt "Casting a pointer into an enumeration type");
+        result
+
+          (* The expression is evaluated for its side-effects *)
+    | (TInt _ | TEnum _ | TPtr _ ), TVoid _ -> 
+        (ot, e)
+
+          (* Even casts between structs are allowed when we are only 
+           * modifying some attributes *)
+    | TComp (comp1, a1), TComp (comp2, a2) when comp1.ckey = comp2.ckey -> 
+        (nt, e)
+          
+          (** If we try to pass a transparent union value to a function 
+           * expecting a transparent union argument, the argument type would 
+           * have been changed to the type of the first argument, and we'll 
+           * see a cast from a union to the type of the first argument. Turn 
+           * that into a field access *)
+    | TComp(tunion, a1), nt -> begin
+        match isTransparentUnion ot with 
+          None -> E.s (error "castTo %a -> %a@!" d_type ot d_type nt)
+        | Some fstfield -> begin
+            (* We do it now only if the expression is an lval *)
+            let e' = 
+              match e with 
+                Lval lv -> 
+                  Lval (addOffsetLval (Field(fstfield, NoOffset)) lv)
+              | _ -> E.s (unimp "castTo: transparent union expression is not an lval: %a\n" d_exp e)
+            in
+            (* Continue casting *)
+            castTo ~fromsource:fromsource fstfield.ftype nt e'
+        end
+    end
+    | _ -> E.s (error "cabs2cil: castTo %a -> %a@!" d_type ot d_type nt)
+  end
+
+
+(* A cast that is used for conditional expressions. Pointers are Ok *)
+let checkBool (ot : typ) (e : exp) : bool =
+  match unrollType ot with
+    TInt _ -> true
+  | TPtr _ -> true
+  | TEnum _ -> true
+  | TFloat _ -> true
+  |  _ -> E.s (error "castToBool %a" d_type ot)
+
+(* Given an expression that is being coerced to bool, 
+   is it a nonzero constant? *)
+let rec isConstTrue (e:exp): bool =
+  match e with
+  | Const(CInt64 (n,_,_)) -> n <> Int64.zero
+  | Const(CChr c) -> 0 <> Char.code c
+  | Const(CStr _ | CWStr _) -> true
+  | Const(CReal(f, _, _)) -> f <> 0.0;
+  | CastE(_, e) -> isConstTrue e
+  | _ -> false
+
+(* Given an expression that is being coerced to bool, is it zero? 
+   This is a more general version of Cil.isZero, which only handles integers.
+   On constant expressions, either isConstTrue or isConstFalse will hold. *)
+let rec isConstFalse (e:exp): bool =
+  match e with
+  | Const(CInt64 (n,_,_)) -> n = Int64.zero
+  | Const(CChr c) -> 0 = Char.code c
+  | Const(CReal(f, _, _)) -> f = 0.0;
+  | CastE(_, e) -> isConstFalse e
+  | _ -> false
+
+
+
+(* We have our own version of addAttributes that does not allow duplicates *)
+let cabsAddAttributes al0 (al: attributes) : attributes = 
+  if al0 == [] then al else
+  List.fold_left 
+    (fun acc (Attr(an, _) as a) -> 
+      (* See if the attribute is already in there *)
+      match filterAttributes an acc with
+        [] -> addAttribute a acc (* Nothing with that name *)
+      | a' :: _ -> 
+          if Util.equals a a' then 
+            acc (* Already in *)
+          else begin
+            ignore (warnOpt 
+                      "Duplicate attribute %a along with %a"
+                      d_attr a d_attr a');
+            (* let acc' = dropAttribute an acc in *)
+            (** Keep both attributes *)
+            addAttribute a acc
+          end)
+    al
+    al0
+      
+let cabsTypeAddAttributes a0 t =
+  begin
+    match a0 with
+    | [] ->
+        (* no attributes, keep same type *)
+          t
+    | _ ->
+        (* anything else: add a0 to existing attributes *)
+          let add (a: attributes) = cabsAddAttributes a0 a in
+          match t with
+            TVoid a -> TVoid (add a)
+          | TInt (ik, a) -> 
+              (* Here we have to watch for the mode attribute *)
+(* sm: This stuff is to handle a GCC extension where you can request integers*)
+(* of specific widths using the "mode" attribute syntax; for example:     *)
+(*   typedef int int8_t __attribute__ ((__mode__ (  __QI__ ))) ;          *)
+(* The cryptic "__QI__" defines int8_t to be 8 bits wide, instead of the  *)
+(* 32 bits you'd guess if you didn't know about "mode".  The relevant     *)
+(* testcase is test/small2/mode_sizes.c, and it was inspired by my        *)
+(* /usr/include/sys/types.h.                                              *)
+(*                                                                        *)
+(* A consequence of this handling is that we throw away the mode          *)
+(* attribute, which we used to go out of our way to avoid printing anyway.*)  
+              let ik', a0' = 
+                (* Go over the list of new attributes and come back with a 
+                 * filtered list and a new integer kind *)
+                List.fold_left
+                  (fun (ik', a0') a0one -> 
+                    match a0one with 
+                      Attr("mode", [ACons(mode,[])]) -> begin
+                        (trace "gccwidth" (dprintf "I see mode %s applied to an int type\n"
+                                             mode (* #$@!#@ ML! d_type t *) ));
+                        (* the cases below encode the 32-bit assumption.. *)
+                        match (ik', mode) with
+                        | (IInt, "__QI__")      -> (IChar, a0')
+                        | (IInt, "__byte__")    -> (IChar, a0')
+                        | (IInt, "__HI__")      -> (IShort,  a0')
+                        | (IInt, "__SI__")      -> (IInt, a0')   (* same as t *)
+                        | (IInt, "__word__")    -> (IInt, a0')
+                        | (IInt, "__pointer__") -> (IInt, a0')
+                        | (IInt, "__DI__")      -> (ILongLong, a0')
+                      
+                        | (IUInt, "__QI__")     -> (IUChar, a0')
+                        | (IUInt, "__byte__")   -> (IUChar, a0')
+                        | (IUInt, "__HI__")     -> (IUShort, a0')
+                        | (IUInt, "__SI__")     -> (IUInt, a0')
+                        | (IUInt, "__word__")   -> (IUInt, a0')
+                        | (IUInt, "__pointer__")-> (IUInt, a0')
+                        | (IUInt, "__DI__")     -> (IULongLong, a0')
+                              
+                        | _ -> 
+                            (ignore (error "GCC width mode %s applied to unexpected type, or unexpected mode"
+                                       mode));
+                            (ik', a0one :: a0')
+ 
+                      end
+                    | _ -> (ik', a0one :: a0'))
+                  (ik, [])
+                  a0
+              in
+              TInt (ik', cabsAddAttributes a0' a)
+
+          | TFloat (fk, a) -> TFloat (fk, add a)
+          | TEnum (enum, a) -> TEnum (enum, add a)
+          | TPtr (t, a) -> TPtr (t, add a)
+          | TArray (t, l, a) -> TArray (t, l, add a)
+          | TFun (t, args, isva, a) -> TFun(t, args, isva, add a)
+          | TComp (comp, a) -> TComp (comp, add a)
+          | TNamed (t, a) -> TNamed (t, add a)
+          | TBuiltin_va_list a -> TBuiltin_va_list (add a)
+  end
+
+
+(* Do types *)
+    (* Combine the types. Raises the Failure exception with an error message. 
+     * isdef says whether the new type is for a definition *)
+type combineWhat = 
+    CombineFundef (* The new definition is for a function definition. The old 
+                   * is for a prototype *)
+  | CombineFunarg (* Comparing a function argument type with an old prototype 
+                   * arg *)
+  | CombineFunret (* Comparing the return of a function with that from an old 
+                   * prototype *)
+  | CombineOther
+
+(* We sometimes want to succeed in combining two structure types that are 
+ * identical except for the names of the structs. We keep a list of types 
+ * that are known to be equal *)
+let isomorphicStructs : (string * string, bool) H.t = H.create 15
+
+let rec combineTypes (what: combineWhat) (oldt: typ) (t: typ) : typ = 
+  match oldt, t with
+  | TVoid olda, TVoid a -> TVoid (cabsAddAttributes olda a)
+  | TInt (oldik, olda), TInt (ik, a) -> 
+      let combineIK oldk k = 
+        if oldk = k then oldk else
+        (* GCC allows a function definition to have a more precise integer 
+         * type than a prototype that says "int" *)
+        if not !msvcMode && oldk = IInt && bitsSizeOf t <= 32 
+           && (what = CombineFunarg || what = CombineFunret) then
+          k
+        else
+          raise (Failure "different integer types")
+      in
+      TInt (combineIK oldik ik, cabsAddAttributes olda a)
+  | TFloat (oldfk, olda), TFloat (fk, a) -> 
+      let combineFK oldk k = 
+        if oldk = k then oldk else
+        (* GCC allows a function definition to have a more precise integer 
+         * type than a prototype that says "double" *)
+        if not !msvcMode && oldk = FDouble && k = FFloat 
+           && (what = CombineFunarg || what = CombineFunret) then
+          k
+        else
+          raise (Failure "different floating point types")
+      in
+      TFloat (combineFK oldfk fk, cabsAddAttributes olda a)
+  | TEnum (_, olda), TEnum (ei, a) -> 
+      TEnum (ei, cabsAddAttributes olda a)
+        
+        (* Strange one. But seems to be handled by GCC *)
+  | TEnum (oldei, olda) , TInt(IInt, a) -> TEnum(oldei, 
+                                                 cabsAddAttributes olda a)
+        (* Strange one. But seems to be handled by GCC *)
+  | TInt(IInt, olda), TEnum (ei, a) -> TEnum(ei, cabsAddAttributes olda a)
+        
+        
+  | TComp (oldci, olda) , TComp (ci, a) -> 
+      if oldci.cstruct <> ci.cstruct then 
+        raise (Failure "different struct/union types");
+      let comb_a = cabsAddAttributes olda a in
+      if oldci.cname = ci.cname then 
+        TComp (oldci, comb_a)
+      else 
+        (* Now maybe they are actually the same *)
+        if H.mem isomorphicStructs (oldci.cname, ci.cname) then 
+          (* We know they are the same *)
+          TComp (oldci, comb_a)
+        else begin
+          (* If one has 0 fields (undefined) while the other has some fields 
+           * we accept it *)
+          let oldci_nrfields = List.length oldci.cfields in
+          let ci_nrfields = List.length ci.cfields in
+          if oldci_nrfields = 0 then
+            TComp (ci, comb_a)
+          else if ci_nrfields = 0 then
+            TComp (oldci, comb_a) 
+          else begin
+            (* Make sure that at least they have the same number of fields *)
+            if  oldci_nrfields <> ci_nrfields then begin
+(*
+              ignore (E.log "different number of fields: %s had %d and %s had %d\n"
+                        oldci.cname oldci_nrfields
+                        ci.cname ci_nrfields);
+*)
+              raise (Failure "different structs(number of fields)");
+            end;
+            (* Assume they are the same *)
+            H.add isomorphicStructs (oldci.cname, ci.cname) true;
+            H.add isomorphicStructs (ci.cname, oldci.cname) true;
+            (* Check that the fields are isomorphic and watch for Failure *)
+            (try
+              List.iter2 (fun oldf f -> 
+                if oldf.fbitfield <> f.fbitfield then 
+                  raise (Failure "different structs(bitfield info)");
+                if oldf.fattr <> f.fattr then 
+                  raise (Failure "different structs(field attributes)");
+                (* Make sure the types are compatible *)
+                ignore (combineTypes CombineOther oldf.ftype f.ftype);
+                ) oldci.cfields ci.cfields
+            with Failure _ as e -> begin 
+              (* Our assumption was wrong. Forget the isomorphism *)
+              ignore (E.log "\tFailed in our assumption that %s and %s are isomorphic\n"
+                        oldci.cname ci.cname);
+              H.remove isomorphicStructs (oldci.cname, ci.cname);
+              H.remove isomorphicStructs (ci.cname, oldci.cname);
+              raise e
+            end);
+            (* We get here if we succeeded *)
+            TComp (oldci, comb_a)
+          end
+        end
+
+  | TArray (oldbt, oldsz, olda), TArray (bt, sz, a) -> 
+      let newbt = combineTypes CombineOther oldbt bt in
+      let newsz = 
+        match oldsz, sz with
+          None, Some _ -> sz
+        | Some _, None -> oldsz
+        | None, None -> sz
+        | Some oldsz', Some sz' -> 
+            (* They are not structurally equal. But perhaps they are equal if 
+             * we evaluate them. Check first machine independent comparison  *)
+           let checkEqualSize (machdep: bool) = 
+              Util.equals (constFold machdep oldsz') 
+                          (constFold machdep sz') 
+           in
+           if checkEqualSize false then 
+              oldsz
+           else if checkEqualSize true then begin
+              ignore (warn "Array type comparison succeeds only based on machine-dependent constant evaluation: %a and %a\n" 
+                       d_exp oldsz' d_exp sz');
+              oldsz
+           end else
+              raise (Failure "different array lengths")
+           
+      in
+      TArray (newbt, newsz, cabsAddAttributes olda a)
+        
+  | TPtr (oldbt, olda), TPtr (bt, a) -> 
+      TPtr (combineTypes CombineOther oldbt bt, cabsAddAttributes olda a)
+        
+  | TFun (_, _, _, [Attr("missingproto",_)]), TFun _ -> t
+        
+  | TFun (oldrt, oldargs, oldva, olda), TFun (rt, args, va, a) ->
+      let newrt = combineTypes 
+          (if what = CombineFundef then CombineFunret else CombineOther) 
+          oldrt rt 
+      in
+      if oldva != va then 
+        raise (Failure "diferent vararg specifiers");
+      (* If one does not have arguments, believe the one with the 
+      * arguments *)
+      let newargs = 
+        if oldargs = None then args else
+        if args = None then oldargs else
+        let oldargslist = argsToList oldargs in
+        let argslist = argsToList args in
+        if List.length oldargslist <> List.length argslist then 
+          raise (Failure "different number of arguments")
+        else begin
+          (* Go over the arguments and update the old ones with the 
+          * adjusted types *)
+          Some 
+            (List.map2 
+               (fun (on, ot, oa) (an, at, aa) -> 
+                 (* Update the names. Always prefer the new name. This is 
+                  * very important if the prototype uses different names than 
+                  * the function definition. *)
+                 let n = if an <> "" then an else on in
+                 let t = 
+                   combineTypes 
+                     (if what = CombineFundef then 
+                       CombineFunarg else CombineOther) 
+                     ot at
+                 in
+                 let a = addAttributes oa aa in
+                 (n, t, a))
+               oldargslist argslist)
+        end
+      in
+      TFun (newrt, newargs, oldva, cabsAddAttributes olda a)
+        
+  | TNamed (oldt, olda), TNamed (t, a) when oldt.tname = t.tname ->
+      TNamed (oldt, cabsAddAttributes olda a)
+        
+  | TBuiltin_va_list olda, TBuiltin_va_list a -> 
+      TBuiltin_va_list (cabsAddAttributes olda a)
+
+        (* Unroll first the new type *)
+  | _, TNamed (t, a) -> 
+      let res = combineTypes what oldt t.ttype in
+      cabsTypeAddAttributes a res
+        
+        (* And unroll the old type as well if necessary *)
+  | TNamed (oldt, a), _ -> 
+      let res = combineTypes what oldt.ttype t in
+      cabsTypeAddAttributes a res
+        
+  | _ -> raise (Failure "different type constructors")
+
+
+(* Create and cache varinfo's for globals. Starts with a varinfo but if the 
+ * global has been declared already it might come back with another varinfo. 
+ * Returns the varinfo to use (might be the old one), and an indication 
+ * whether the variable exists already in the environment *)
+let makeGlobalVarinfo (isadef: bool) (vi: varinfo) : varinfo * bool =
+  try (* See if already defined, in the global environment. We could also 
+       * look it up in the whole environment but in that case we might see a 
+       * local. This can happen when we declare an extern variable with 
+       * global scope but we are in a local scope. *)
+    let oldvi, oldloc = lookupGlobalVar vi.vname in
+    (* It was already defined. We must reuse the varinfo. But clean up the 
+     * storage.  *)
+    let newstorage = (** See 6.2.2 *)
+      match oldvi.vstorage, vi.vstorage with
+        (* Extern and something else is that thing *)
+      | Extern, other
+      | other, Extern -> other
+
+      | NoStorage, other
+      | other, NoStorage ->  other
+
+
+      | _ ->
+	  if vi.vstorage != oldvi.vstorage then
+            ignore (warn
+		      "Inconsistent storage specification for %s. Previous declaration: %a" 
+		      vi.vname d_loc oldloc);
+          vi.vstorage
+    in
+    oldvi.vinline <- oldvi.vinline || vi.vinline;
+    oldvi.vstorage <- newstorage;
+    (* Union the attributes *)
+    oldvi.vattr <- cabsAddAttributes oldvi.vattr vi.vattr;
+    begin 
+      try
+        oldvi.vtype <- 
+           combineTypes 
+             (if isadef then CombineFundef else CombineOther) 
+             oldvi.vtype vi.vtype;
+      with Failure reason -> 
+        ignore (E.log "old type = %a\n" d_plaintype oldvi.vtype);
+        ignore (E.log "new type = %a\n" d_plaintype vi.vtype);
+        E.s (error "Declaration of %s does not match previous declaration from %a (%s)." 
+               vi.vname d_loc oldloc reason)
+    end;
+      
+    (* Found an old one. Keep the location always from the definition *)
+    if isadef then begin 
+      oldvi.vdecl <- vi.vdecl;
+    end;
+    oldvi, true
+      
+  with Not_found -> begin (* A new one.  *)
+    (* Announce the name to the alpha conversion table. This will not 
+     * actually change the name of the vi. See the definition of 
+     * alphaConvertVarAndAddToEnv *)
+    alphaConvertVarAndAddToEnv true vi, false
+  end 
+
+let conditionalConversion (t2: typ) (t3: typ) : typ =
+  let tresult =  (* ISO 6.5.15 *)
+    match unrollType t2, unrollType t3 with
+      (TInt _ | TEnum _ | TFloat _), 
+      (TInt _ | TEnum _ | TFloat _) -> 
+        arithmeticConversion t2 t3 
+    | TComp (comp2,_), TComp (comp3,_) 
+          when comp2.ckey = comp3.ckey -> t2 
+    | TPtr(_, _), TPtr(TVoid _, _) -> t2
+    | TPtr(TVoid _, _), TPtr(_, _) -> t3
+    | TPtr _, TPtr _ when Util.equals (typeSig t2) (typeSig t3) -> t2
+    | TPtr _, TInt _  -> t2 (* most likely comparison with 0 *)
+    | TInt _, TPtr _ -> t3 (* most likely comparison with 0 *)
+
+          (* When we compare two pointers of diffent type, we combine them 
+           * using the same algorithm when combining multiple declarations of 
+           * a global *)
+    | (TPtr _) as t2', (TPtr _ as t3') -> begin
+        try combineTypes CombineOther t2' t3' 
+        with Failure msg -> begin
+          ignore (warn "A.QUESTION: %a does not match %a (%s)"
+                    d_type (unrollType t2) d_type (unrollType t3) msg);
+          t2 (* Just pick one *)
+        end
+    end
+    | _, _ -> E.s (error "A.QUESTION for invalid combination of types")
+  in
+  tresult
+
+(* Some utilitites for doing initializers *)
+
+let debugInit = false
+
+type preInit = 
+  | NoInitPre
+  | SinglePre of exp 
+  | CompoundPre of int ref (* the maximum used index *)
+                 * preInit array ref (* an array with initializers *)
+
+(* Instructions on how to handle designators *)
+type handleDesignators = 
+  | Handle (* Handle them yourself *)
+  | DoNotHandle (* Do not handle them your self *)
+  | HandleAsNext (* First behave as if you have a NEXT_INIT. Useful for going 
+                  * into nested designators *)
+  | HandleFirst (* Handle only the first designator *)
+
+(* Set an initializer *)
+let rec setOneInit (this: preInit)
+                   (o: offset) (e: exp) : preInit = 
+  match o with 
+    NoOffset -> SinglePre e
+  | _ -> 
+      let idx, (* Index in the current comp *)
+          restoff (* Rest offset *) =
+        match o with 
+        | Index(Const(CInt64(i,_,_)), off) -> Int64.to_int i, off
+        | Field (f, off) -> 
+            (* Find the index of the field *)
+            let rec loop (idx: int) = function
+                [] -> E.s (bug "Cannot find field %s" f.fname)
+              | f' :: _ when f'.fname = f.fname -> idx
+              | _ :: restf -> loop (idx + 1) restf
+            in
+            loop 0 f.fcomp.cfields, off
+        | _ -> E.s (bug "setOneInit: non-constant index")
+      in
+      let pMaxIdx, pArray = 
+        match this  with 
+          NoInitPre  -> (* No initializer so far here *)
+            ref idx, ref (Array.create (max 32 (idx + 1)) NoInitPre)
+              
+        | CompoundPre (pMaxIdx, pArray) -> 
+            if !pMaxIdx < idx then begin 
+              pMaxIdx := idx;
+              (* Maybe we also need to grow the array *)
+              let l = Array.length !pArray in
+              if l <= idx then begin
+                let growBy = max (max 32 (idx + 1 - l)) (l / 2) in
+                let newarray = Array.make (growBy + idx) NoInitPre in
+                Array.blit !pArray 0 newarray 0 l;
+                pArray := newarray
+              end
+            end;
+            pMaxIdx, pArray
+        | SinglePre e -> 
+            E.s (unimp "Index %d is already initialized" idx)
+      in
+      assert (idx >= 0 && idx < Array.length !pArray);
+      let this' = setOneInit !pArray.(idx) restoff e in
+      !pArray.(idx) <- this';
+      CompoundPre (pMaxIdx, pArray)
+
+
+(* collect a CIL initializer, given the original syntactic initializer
+ * 'preInit'; this returns a type too, since initialization of an array
+ * with unspecified size actually changes the array's type
+ * (ANSI C, 6.7.8, para 22) *)
+let rec collectInitializer
+    (this: preInit)
+    (thistype: typ) : (init * typ) =
+  if this = NoInitPre then (makeZeroInit thistype), thistype
+  else
+    match unrollType thistype, this with 
+    | _ , SinglePre e -> SingleInit e, thistype
+    | TArray (bt, leno, at), CompoundPre (pMaxIdx, pArray) -> 
+        let (len: int), newtype =
+          (* normal case: use array's declared length, newtype=thistype *)
+          match leno with 
+            Some len -> begin
+              match constFold true len with 
+                Const(CInt64(ni, _, _)) when ni >= 0L -> 
+                  (Int64.to_int ni), TArray(bt,leno,at)
+
+              | _ -> E.s (error "Array length is not a constant expression %a"
+                            d_exp len)
+            end
+          | _ -> 
+              (* unsized array case, length comes from initializers *)
+              (!pMaxIdx + 1,
+               TArray (bt, Some (integer (!pMaxIdx + 1)), at))
+        in
+        if !pMaxIdx >= len then 
+          E.s (E.bug "collectInitializer: too many initializers(%d >= %d)\n"
+                 !pMaxIdx len);
+        (* len could be extremely big. So omit the last initializers, if they 
+         * are many (more than 16) *)
+(*
+        ignore (E.log "collectInitializer: len = %d, pMaxIdx= %d\n"
+                  len !pMaxIdx); *)
+        let endAt = 
+          if len - 1 > !pMaxIdx + 16 then 
+            !pMaxIdx 
+          else
+            len - 1
+        in
+        (* Make one zero initializer to be used next *)
+        let oneZeroInit = makeZeroInit bt in
+        let rec collect (acc: (offset * init) list) (idx: int) = 
+          if idx = -1 then acc
+          else
+            let thisi =
+              if idx > !pMaxIdx then oneZeroInit
+              else (fst (collectInitializer !pArray.(idx) bt))
+            in
+            collect ((Index(integer idx, NoOffset), thisi) :: acc) (idx - 1)
+        in
+        
+        CompoundInit (newtype, collect [] endAt), newtype
+
+    | TComp (comp, _), CompoundPre (pMaxIdx, pArray) when comp.cstruct ->
+        let rec collect (idx: int) = function
+            [] -> []
+          | f :: restf -> 
+              if f.fname = missingFieldName then 
+                collect (idx + 1) restf
+              else 
+                let thisi = 
+                  if idx > !pMaxIdx then 
+                    makeZeroInit f.ftype
+                  else
+                    collectFieldInitializer !pArray.(idx) f
+                in
+                (Field(f, NoOffset), thisi) :: collect (idx + 1) restf
+        in
+        CompoundInit (thistype, collect 0 comp.cfields), thistype
+
+    | TComp (comp, _), CompoundPre (pMaxIdx, pArray) when not comp.cstruct ->
+        (* Find the field to initialize *)
+        let rec findField (idx: int) = function
+            [] -> E.s (bug "collectInitializer: union")
+          | _ :: rest when idx < !pMaxIdx && !pArray.(idx) = NoInitPre -> 
+              findField (idx + 1) rest
+          | f :: _ when idx = !pMaxIdx -> 
+              Field(f, NoOffset), 
+              collectFieldInitializer !pArray.(idx) f
+          | _ -> E.s (error "Can initialize only one field for union")
+        in
+        if !msvcMode && !pMaxIdx != 0 then 
+          ignore (warn "On MSVC we can initialize only the first field of a union");
+        CompoundInit (thistype, [ findField 0 comp.cfields ]), thistype
+
+    | _ -> E.s (unimp "collectInitializer")
+                      
+and collectFieldInitializer 
+    (this: preInit)
+    (f: fieldinfo) : init =
+  (* collect, and rewrite type *)
+  let init,newtype = (collectInitializer this f.ftype) in
+  f.ftype <- newtype;
+  init
+            
+
+type stackElem = 
+    InArray of offset * typ * int * int ref (* offset of parent, base type, 
+                                             * length, current index. If the 
+                                             * array length is unspecified we 
+                                             * use Int.max_int  *)
+  | InComp  of offset * compinfo * fieldinfo list (* offset of parent, 
+                                                   base comp, current fields *)
+    
+
+(* A subobject is given by its address. The address is read from the end of 
+ * the list (the bottom of the stack), starting with the current object *)
+type subobj = { mutable stack: stackElem list; (* With each stack element we 
+                                                * store the offset of its 
+                                                * PARENT  *)
+                mutable eof: bool; (* The stack is empty and we reached the 
+                                    * end *)
+                mutable soTyp: typ; (* The type of the subobject. Set using 
+                                     * normalSubobj after setting stack. *)
+                mutable soOff: offset; (* The offset of the subobject. Set 
+                                        * using normalSubobj after setting 
+                                        * stack.  *)
+                        curTyp: typ; (* Type of current object. See ISO for 
+                                      * the definition of the current object *)
+                        curOff: offset; (* The offset of the current obj *)
+                        host: varinfo; (* The host that we are initializing. 
+                                        * For error messages *)
+              }
+
+
+(* Make a subobject iterator *)  
+let rec makeSubobj 
+    (host: varinfo) 
+    (curTyp: typ)
+    (curOff: offset) = 
+  let so = 
+    { host = host; curTyp = curTyp; curOff = curOff; 
+      stack = []; eof = false;
+      (* The next are fixed by normalSubobj *)
+      soTyp = voidType; soOff = NoOffset } in
+  normalSubobj so;
+  so
+
+  (* Normalize a stack so the we always point to a valid subobject. Do not 
+   * descend into type *)
+and normalSubobj (so: subobj) : unit = 
+  match so.stack with 
+    [] -> so.soOff <- so.curOff; so.soTyp <- so.curTyp 
+        (* The array is over *)
+  | InArray (parOff, bt, leno, current) :: rest ->
+      if leno = !current then begin (* The array is over *)
+        if debugInit then ignore (E.log "Past the end of array\n");
+        so.stack <- rest; 
+        advanceSubobj so
+      end else begin
+        so.soTyp <- bt;
+        so.soOff <- addOffset (Index(integer !current, NoOffset)) parOff
+      end
+
+        (* The fields are over *)
+  | InComp (parOff, comp, nextflds) :: rest -> 
+      if nextflds == [] then begin (* No more fields here *)
+        if debugInit then ignore (E.log "Past the end of structure\n");
+        so.stack <- rest; 
+        advanceSubobj so
+      end else begin
+        let fst = List.hd nextflds in
+        so.soTyp <- fst.ftype;
+        so.soOff <- addOffset (Field(fst, NoOffset)) parOff
+      end
+
+  (* Advance to the next subobject. Always apply to a normalized object *)
+and advanceSubobj (so: subobj) : unit = 
+  if so.eof then E.s (bug "advanceSubobj past end");
+  match so.stack with
+  | [] -> if debugInit then ignore (E.log "Setting eof to true\n"); 
+          so.eof <- true 
+  | InArray (parOff, bt, leno, current) :: rest -> 
+      if debugInit then ignore (E.log "  Advancing to [%d]\n" (!current + 1));
+      (* so.stack <- InArray (parOff, bt, leno, current + 1) :: rest; *)
+      incr current;
+      normalSubobj so
+
+        (* The fields are over *)
+  | InComp (parOff, comp, nextflds) :: rest -> 
+      if debugInit then 
+        ignore (E.log "Advancing past .%s\n" (List.hd nextflds).fname);
+      let flds' = try List.tl nextflds with _ -> E.s (bug "advanceSubobj") in
+      so.stack <- InComp(parOff, comp, flds') :: rest;
+      normalSubobj so
+        
+        
+
+(* Find the fields to initialize in a composite. *)
+let fieldsToInit 
+    (comp: compinfo) 
+    (designator: string option) 
+    : fieldinfo list = 
+  (* Never look at anonymous fields *)
+  let flds1 = 
+    List.filter (fun f -> f.fname <> missingFieldName) comp.cfields in
+  let flds2 = 
+    match designator with 
+      None -> flds1
+    | Some fn -> 
+        let rec loop = function
+            [] -> E.s (error "Cannot find designated field %s" fn)
+          | (f :: _) as nextflds when f.fname = fn -> nextflds
+          | _ :: rest -> loop rest
+        in
+        loop flds1
+  in
+  (* If it is a union we only initialize one field *)
+  match flds2 with 
+    [] -> []
+  | (f :: rest) as toinit -> 
+      if comp.cstruct then toinit else [f]
+        
+
+let integerArrayLength (leno: exp option) : int = 
+  match leno with
+    None -> max_int
+  | Some len -> begin
+      try lenOfArray leno 
+      with LenOfArray -> 
+        E.s (error "Initializing non-constant-length array\n  length=%a\n"
+               d_exp len)
+  end
+
+(* sm: I'm sure something like this already exists, but ... *)
+let isNone (o : 'a option) : bool =
+  match o with
+  | None -> true
+  | Some _ -> false
+
+
+let annonCompFieldNameId = ref 0
+let annonCompFieldName = "__annonCompField"
+ 
+                   
+
+(* Utility ***)
+let rec replaceLastInList 
+    (lst: A.expression list) 
+    (how: A.expression -> A.expression) : A.expression list= 
+  match lst with
+    [] -> []
+  | [e] -> [how e]
+  | h :: t -> h :: replaceLastInList t how
+
+
+
+
+
+let convBinOp (bop: A.binary_operator) : binop =
+  match bop with
+    A.ADD -> PlusA
+  | A.SUB -> MinusA
+  | A.MUL -> Mult
+  | A.DIV -> Div
+  | A.MOD -> Mod
+  | A.BAND -> BAnd
+  | A.BOR -> BOr
+  | A.XOR -> BXor
+  | A.SHL -> Shiftlt
+  | A.SHR -> Shiftrt
+  | A.EQ -> Eq
+  | A.NE -> Ne
+  | A.LT -> Lt
+  | A.LE -> Le
+  | A.GT -> Gt
+  | A.GE -> Ge
+  | _ -> E.s (error "convBinOp")
+
+(**** PEEP-HOLE optimizations ***)
+let afterConversion (c: chunk) : chunk = 
+  (* Now scan the statements and find Instr blocks *)
+
+  (** We want to collapse sequences of the form "tmp = f(); v = tmp". This 
+   * will help significantly with the handling of calls to malloc, where it 
+   * is important to have the cast at the same place as the call *)
+  let collapseCallCast = function
+      Call(Some(Var vi, NoOffset), f, args, l),
+      Set(destlv, CastE (newt, Lval(Var vi', NoOffset)), _) 
+      when (not vi.vglob && 
+            String.length vi.vname >= 3 &&
+            (* Watch out for the possibility that we have an implied cast in 
+             * the call *)
+           (let tcallres = 
+              match unrollType (typeOf f) with
+                 TFun (rt, _, _, _) -> rt
+               | _ -> E.s (E.bug "Function call to a non-function")
+           in 
+           Util.equals (typeSig tcallres) (typeSig vi.vtype) &&
+           Util.equals (typeSig newt) (typeSig (typeOfLval destlv))) && 
+           IH.mem callTempVars vi.vid &&
+           vi' == vi) 
+      -> Some [Call(Some destlv, f, args, l)]
+    | i1,i2 ->  None
+  in
+  (* First add in the postins *)
+  let sl = pushPostIns c in
+  peepHole2 collapseCallCast sl;
+  { c with stmts = sl; postins = [] }
+
+(***** Try to suggest a name for the anonymous structures *)
+let suggestAnonName (nl: A.name list) = 
+  match nl with 
+    [] -> ""
+  | (n, _, _, _) :: _ -> n
+
+
+(** Optional constant folding of binary operations *)
+let optConstFoldBinOp (machdep: bool) (bop: binop) 
+                      (e1: exp) (e2:exp) (t: typ) = 
+  if !lowerConstants then 
+    constFoldBinOp machdep bop e1 e2 t
+  else
+    BinOp(bop, e1, e2, t)
+  
+(****** TYPE SPECIFIERS *******)
+let rec doSpecList (suggestedAnonName: string) (* This string will be part of 
+                                                * the names for anonymous 
+                                                * structures and enums  *)
+                   (specs: A.spec_elem list) 
+       (* Returns the base type, the storage, whether it is inline and the 
+        * (unprocessed) attributes *)
+    : typ * storage * bool * A.attribute list =
+  (* Do one element and collect the type specifiers *)
+  let isinline = ref false in (* If inline appears *)
+  (* The storage is placed here *)
+  let storage : storage ref = ref NoStorage in
+
+  (* Collect the attributes.  Unfortunately, we cannot treat GCC
+   * __attributes__ and ANSI C const/volatile the same way, since they
+   * associate with structures differently.  Specifically, ANSI 
+   * qualifiers never apply to structures (ISO 6.7.3), whereas GCC
+   * attributes always do (GCC manual 4.30).  Therefore, they are 
+   * collected and processed separately. *)
+  let attrs : A.attribute list ref = ref [] in      (* __attribute__, etc. *)
+  let cvattrs : A.cvspec list ref = ref [] in       (* const/volatile *)
+
+  let doSpecElem (se: A.spec_elem)
+                 (acc: A.typeSpecifier list) 
+                  : A.typeSpecifier list = 
+    match se with 
+      A.SpecTypedef -> acc
+    | A.SpecInline -> isinline := true; acc
+    | A.SpecStorage st ->
+        if !storage <> NoStorage then 
+          E.s (error "Multiple storage specifiers");
+        let sto' = 
+          match st with
+            A.NO_STORAGE -> NoStorage
+          | A.AUTO -> NoStorage
+          | A.REGISTER -> Register
+          | A.STATIC -> Static
+          | A.EXTERN -> Extern
+        in
+        storage := sto';
+        acc
+
+    | A.SpecCV cv -> cvattrs := cv :: !cvattrs; acc
+    | A.SpecAttr a -> attrs := a :: !attrs; acc
+    | A.SpecType ts -> ts :: acc
+    | A.SpecPattern _ -> E.s (E.bug "SpecPattern in cabs2cil input")
+  in
+  (* Now scan the list and collect the type specifiers. Preserve the order *)
+  let tspecs = List.fold_right doSpecElem specs [] in
+  
+  let tspecs' = 
+    (* GCC allows a named type that appears first to be followed by things 
+     * like "short", "signed", "unsigned" or "long". *)
+    match tspecs with 
+      A.Tnamed n :: (_ :: _ as rest) when not !msvcMode -> 
+        (* If rest contains "short" or "long" then drop the Tnamed *)
+        if List.exists (function A.Tshort -> true 
+                               | A.Tlong -> true | _ -> false) rest then
+          rest
+        else
+          tspecs
+
+    | _ -> tspecs
+  in
+  (* Sort the type specifiers *)
+  let sortedspecs = 
+    let order = function (* Don't change this *)
+      | A.Tvoid -> 0
+      | A.Tsigned -> 1
+      | A.Tunsigned -> 2
+      | A.Tchar -> 3
+      | A.Tshort -> 4
+      | A.Tlong -> 5
+      | A.Tint -> 6
+      | A.Tint64 -> 7
+      | A.Tfloat -> 8
+      | A.Tdouble -> 9
+      | _ -> 10 (* There should be at most one of the others *)
+    in
+    List.stable_sort (fun ts1 ts2 -> compare (order ts1) (order ts2)) tspecs' 
+  in
+  let getTypeAttrs () : A.attribute list =
+    (* Partitions the attributes in !attrs.
+       Type attributes are removed from attrs and returned, so that they
+       can go into the type definition.  Name attributes are left in attrs,
+       so they will be returned by doSpecAttr and used in the variable 
+       declaration. 
+       Testcase: small1/attr9.c *)
+    let an, af, at = cabsPartitionAttributes ~default:AttrType !attrs in
+    attrs := an;      (* Save the name attributes for later *)
+    if af <> [] then
+      E.s (error "Invalid position for function type attributes.");
+    at
+  in 
+
+  (* And now try to make sense of it. See ISO 6.7.2 *)
+  let bt = 
+    match sortedspecs with
+      [A.Tvoid] -> TVoid []
+    | [A.Tchar] -> TInt(IChar, [])
+    | [A.Tsigned; A.Tchar] -> TInt(ISChar, [])
+    | [A.Tunsigned; A.Tchar] -> TInt(IUChar, [])
+
+    | [A.Tshort] -> TInt(IShort, [])
+    | [A.Tsigned; A.Tshort] -> TInt(IShort, [])
+    | [A.Tshort; A.Tint] -> TInt(IShort, [])
+    | [A.Tsigned; A.Tshort; A.Tint] -> TInt(IShort, [])
+
+    | [A.Tunsigned; A.Tshort] -> TInt(IUShort, [])
+    | [A.Tunsigned; A.Tshort; A.Tint] -> TInt(IUShort, [])
+
+    | [] -> TInt(IInt, [])
+    | [A.Tint] -> TInt(IInt, [])
+    | [A.Tsigned] -> TInt(IInt, [])
+    | [A.Tsigned; A.Tint] -> TInt(IInt, [])
+
+    | [A.Tunsigned] -> TInt(IUInt, [])
+    | [A.Tunsigned; A.Tint] -> TInt(IUInt, [])
+
+    | [A.Tlong] -> TInt(ILong, [])
+    | [A.Tsigned; A.Tlong] -> TInt(ILong, [])
+    | [A.Tlong; A.Tint] -> TInt(ILong, [])
+    | [A.Tsigned; A.Tlong; A.Tint] -> TInt(ILong, [])
+
+    | [A.Tunsigned; A.Tlong] -> TInt(IULong, [])
+    | [A.Tunsigned; A.Tlong; A.Tint] -> TInt(IULong, [])
+
+    | [A.Tlong; A.Tlong] -> TInt(ILongLong, [])
+    | [A.Tsigned; A.Tlong; A.Tlong] -> TInt(ILongLong, [])
+    | [A.Tlong; A.Tlong; A.Tint] -> TInt(ILongLong, [])
+    | [A.Tsigned; A.Tlong; A.Tlong; A.Tint] -> TInt(ILongLong, [])
+
+    | [A.Tunsigned; A.Tlong; A.Tlong] -> TInt(IULongLong, [])
+    | [A.Tunsigned; A.Tlong; A.Tlong; A.Tint] -> TInt(IULongLong, [])
+
+    (* int64 is to support MSVC *)
+    | [A.Tint64] -> TInt(ILongLong, [])
+    | [A.Tsigned; A.Tint64] -> TInt(ILongLong, [])
+
+    | [A.Tunsigned; A.Tint64] -> TInt(IULongLong, [])
+
+    | [A.Tfloat] -> TFloat(FFloat, [])
+    | [A.Tdouble] -> TFloat(FDouble, [])
+
+    | [A.Tlong; A.Tdouble] -> TFloat(FLongDouble, [])
+
+     (* Now the other type specifiers *)
+    | [A.Tnamed n] -> begin
+        if n = "__builtin_va_list" && 
+          Machdep.gccHas__builtin_va_list then begin
+            TBuiltin_va_list []
+        end else
+          let t = 
+            match lookupType "type" n with 
+              (TNamed _) as x, _ -> x
+            | typ -> E.s (error "Named type %s is not mapped correctly\n" n)
+          in
+          t
+    end
+
+    | [A.Tstruct (n, None, _)] -> (* A reference to a struct *)
+        if n = "" then E.s (error "Missing struct tag on incomplete struct");
+        findCompType "struct" n []
+    | [A.Tstruct (n, Some nglist, extraAttrs)] -> (* A definition of a struct *)
+      let n' =
+        if n <> "" then n else anonStructName "struct" suggestedAnonName in
+      (* Use the (non-cv, non-name) attributes in !attrs now *)
+      let a = extraAttrs @ (getTypeAttrs ()) in
+      makeCompType true n' nglist (doAttributes a)
+
+    | [A.Tunion (n, None, _)] -> (* A reference to a union *)
+        if n = "" then E.s (error "Missing union tag on incomplete union");
+        findCompType "union" n []
+    | [A.Tunion (n, Some nglist, extraAttrs)] -> (* A definition of a union *)
+        let n' =
+          if n <> "" then n else anonStructName "union" suggestedAnonName in
+        (* Use the attributes now *)
+        let a = extraAttrs @ (getTypeAttrs ()) in
+        makeCompType false n' nglist (doAttributes a)
+
+    | [A.Tenum (n, None, _)] -> (* Just a reference to an enum *)
+        if n = "" then E.s (error "Missing enum tag on incomplete enum");
+        findCompType "enum" n []
+
+    | [A.Tenum (n, Some eil, extraAttrs)] -> (* A definition of an enum *)
+        let n' =
+          if n <> "" then n else anonStructName "enum" suggestedAnonName in
+        (* make a new name for this enumeration *)
+        let n'', _  = newAlphaName true "enum" n' in
+
+        (* Create the enuminfo, or use one that was created already for a
+         * forward reference *)
+        let enum, _ = createEnumInfo n'' in 
+        let a = extraAttrs @ (getTypeAttrs ()) in 
+        enum.eattr <- doAttributes a;
+        let res = TEnum (enum, []) in
+
+        (* sm: start a scope for the enum tag values, since they *
+        * can refer to earlier tags *)
+        enterScope ();
+        
+        (* as each name,value pair is determined, this is called *)
+        let rec processName kname (i: exp) loc rest = begin
+          (* add the name to the environment, but with a faked 'typ' field; 
+           * we don't know the full type yet (since that includes all of the 
+           * tag values), but we won't need them in here  *)
+          addLocalToEnv kname (EnvEnum (i, res));
+          
+          (* add this tag to the list so that it ends up in the real 
+          * environment when we're finished  *)
+          let newname, _  = newAlphaName true "" kname in
+          
+          (kname, (newname, i, loc)) :: loop (increm i 1) rest
+        end
+            
+        and loop i = function
+            [] -> []
+          | (kname, A.NOTHING, cloc) :: rest ->
+              (* use the passed-in 'i' as the value, since none specified *)
+              processName kname i (convLoc cloc) rest
+                
+          | (kname, e, cloc) :: rest ->
+              (* constant-eval 'e' to determine tag value *)
+              let e' = getIntConstExp e in
+              let e' = 
+                match isInteger (constFold true e') with 
+                  Some i -> if !lowerConstants then kinteger64 IInt i else e'
+                | _ -> E.s (error "Constant initializer %a not an integer" d_exp e')
+              in
+              processName kname e' (convLoc cloc) rest
+        in
+        
+        (* sm: now throw away the environment we built for eval'ing the enum 
+        * tags, so we can add to the new one properly  *)
+        exitScope ();
+        
+        let fields = loop zero eil in
+        (* Now set the right set of items *)
+        enum.eitems <- List.map (fun (_, x) -> x) fields;
+        (* Record the enum name in the environment *)
+        addLocalToEnv (kindPlusName "enum" n'') (EnvTyp res);
+        (* And define the tag *)
+        cabsPushGlobal (GEnumTag (enum, !currentLoc));
+        res
+        
+          
+    | [A.TtypeofE e] -> 
+        let (c, e', t) = doExp false e AExpLeaveArrayFun in
+        let t' = 
+          match e' with 
+            StartOf(lv) -> typeOfLval lv
+                (* If this is a string literal, then we treat it as in sizeof*)
+          | Const (CStr s) -> begin
+              match typeOf e' with 
+                TPtr(bt, _) -> (* This is the type of array elements *)
+                  TArray(bt, Some (SizeOfStr s), [])
+              | _ -> E.s (bug "The typeOf a string is not a pointer type")
+          end
+          | _ -> t
+        in
+(*
+        ignore (E.log "typeof(%a) = %a\n" d_exp e' d_plaintype t');
+*)
+        t'
+
+    | [A.TtypeofT (specs, dt)] -> 
+        let typ = doOnlyType specs dt in
+        typ
+
+    | _ -> 
+        E.s (error "Invalid combination of type specifiers")
+  in
+  bt,!storage,!isinline,List.rev (!attrs @ (convertCVtoAttr !cvattrs))
+                                                           
+(* given some cv attributes, convert them into named attributes for
+ * uniform processing *)
+and convertCVtoAttr (src: A.cvspec list) : A.attribute list =
+  match src with
+  | [] -> []
+  | CV_CONST    :: tl -> ("const",[])    :: (convertCVtoAttr tl)
+  | CV_VOLATILE :: tl -> ("volatile",[]) :: (convertCVtoAttr tl)
+  | CV_RESTRICT :: tl -> ("restrict",[]) :: (convertCVtoAttr tl)
+
+
+and makeVarInfoCabs 
+                ~(isformal: bool)
+                ~(isglobal: bool) 
+		(ldecl : location)
+                (bt, sto, inline, attrs)
+                (n,ndt,a) 
+      : varinfo = 
+  let vtype, nattr = 
+    doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in
+  if inline && not (isFunctionType vtype) then
+    ignore (error "inline for a non-function: %s" n);
+  let t = 
+    if not isglobal && not isformal then begin
+      (* Sometimes we call this on the formal argument of a function with no 
+       * arguments. Don't call stripConstLocalType in that case *)
+(*      ignore (E.log "stripConstLocalType(%a) for %s\n" d_type vtype n); *)
+      stripConstLocalType vtype
+    end else 
+      vtype
+  in
+  let vi = makeVarinfo isglobal n t in
+  vi.vstorage <- sto;
+  vi.vattr <- nattr;
+  vi.vdecl <- ldecl;
+
+  if false then 
+    ignore (E.log "Created varinfo %s : %a\n" vi.vname d_type vi.vtype); 
+
+  vi
+
+(* Process a local variable declaration and allow variable-sized arrays *)
+and makeVarSizeVarInfo (ldecl : location)
+                       spec_res
+                       (n,ndt,a)
+   : varinfo * chunk * exp * bool = 
+  if not !msvcMode then 
+    match isVariableSizedArray ndt with
+      None -> 
+        makeVarInfoCabs ~isformal:false 
+                        ~isglobal:false 
+                        ldecl spec_res (n,ndt,a), empty, zero, false
+    | Some (ndt', se, len) -> 
+        makeVarInfoCabs ~isformal:false 
+                        ~isglobal:false 
+                        ldecl spec_res (n,ndt',a), se, len, true
+  else
+    makeVarInfoCabs ~isformal:false
+                    ~isglobal:false 
+                    ldecl spec_res (n,ndt,a), empty, zero, false
+
+and doAttr (a: A.attribute) : attribute list = 
+  (* Strip the leading and trailing underscore *)
+  let stripUnderscore (n: string) : string = 
+    let l = String.length n in
+    let rec start i = 
+      if i >= l then 
+        E.s (error "Invalid attribute name %s" n);
+      if String.get n i = '_' then start (i + 1) else i
+    in
+    let st = start 0 in
+    let rec finish i = 
+      (* We know that we will stop at >= st >= 0 *)
+      if String.get n i = '_' then finish (i - 1) else i
+    in
+    let fin = finish (l - 1) in
+    String.sub n st (fin - st + 1)
+  in
+  match a with
+  | (s, []) -> [Attr (stripUnderscore s, [])]
+  | (s, el) -> 
+      
+      let rec attrOfExp (strip: bool) 
+                        ?(foldenum=true) 
+                        (a: A.expression) : attrparam =
+        match a with
+          A.VARIABLE n -> begin
+            let n' = if strip then stripUnderscore n else n in
+            (** See if this is an enumeration *)
+            try
+              if not foldenum then raise Not_found;
+
+              match H.find env n' with 
+                EnvEnum (tag, _), _ -> begin
+                  match isInteger (constFold true tag) with 
+                    Some i64 when !lowerConstants -> AInt (Int64.to_int i64)
+                  |  _ -> ACons(n', [])
+                end
+              | _ -> ACons (n', [])
+            with Not_found -> ACons(n', [])
+          end
+        | A.CONSTANT (A.CONST_STRING s) -> AStr s
+        | A.CONSTANT (A.CONST_INT str) -> AInt (int_of_string str)
+        | A.CALL(A.VARIABLE n, args) -> begin
+            let n' = if strip then stripUnderscore n else n in
+            let ae' = List.map ae args in
+            ACons(n', ae')
+        end
+        | A.EXPR_SIZEOF e -> ASizeOfE (ae e)
+        | A.TYPE_SIZEOF (bt, dt) -> ASizeOf (doOnlyType bt dt)
+        | A.EXPR_ALIGNOF e -> AAlignOfE (ae e)
+        | A.TYPE_ALIGNOF (bt, dt) -> AAlignOf (doOnlyType bt dt)
+        | A.BINARY(A.AND, aa1, aa2) -> 
+            ABinOp(LAnd, ae aa1, ae aa2)
+        | A.BINARY(A.OR, aa1, aa2) -> 
+            ABinOp(LOr, ae aa1, ae aa2)
+        | A.BINARY(abop, aa1, aa2) -> 
+            ABinOp (convBinOp abop, ae aa1, ae aa2)
+        | A.UNARY(A.PLUS, aa) -> ae aa
+        | A.UNARY(A.MINUS, aa) -> AUnOp (Neg, ae aa)
+        | A.UNARY(A.BNOT, aa) -> AUnOp(BNot, ae aa)
+        | A.UNARY(A.NOT, aa) -> AUnOp(LNot, ae aa)
+        | A.MEMBEROF (e, s) -> ADot (ae e, s)
+        | _ -> 
+            ignore (E.log "Invalid expression in attribute: ");
+            withCprint Cprint.print_expression a;
+            E.s (error "cabs2cil: invalid expression")
+
+      and ae (e: A.expression) = attrOfExp false e in
+
+      (* Sometimes we need to convert attrarg into attr *)
+      let arg2attr = function
+        | ACons (s, args) -> Attr (s, args)
+        | a -> 
+            E.s (error "Invalid form of attribute: %a"
+                   d_attrparam a);
+      in
+      if s = "__attribute__" then (* Just a wrapper for many attributes*)
+        List.map (fun e -> arg2attr (attrOfExp true ~foldenum:false e)) el
+      else if s = "__blockattribute__" then (* Another wrapper *)
+        List.map (fun e -> arg2attr (attrOfExp true ~foldenum:false e)) el
+      else if s = "__declspec" then
+        List.map (fun e -> arg2attr (attrOfExp false ~foldenum:false e)) el
+      else
+        [Attr(stripUnderscore s, List.map (attrOfExp ~foldenum:false false) el)]
+
+and doAttributes (al: A.attribute list) : attribute list =
+  List.fold_left (fun acc a -> cabsAddAttributes (doAttr a) acc) [] al
+
+(* A version of Cil.partitionAttributes that works on CABS attributes.
+   It would  be better to use Cil.partitionAttributes instead to avoid
+   the extra doAttr conversions here, but that's hard to do in doSpecList.*)
+and cabsPartitionAttributes 
+    ~(default:attributeClass)  
+    (attrs:  A.attribute list) :
+    A.attribute list * A.attribute list * A.attribute list = 
+  let rec loop (n,f,t) = function
+      [] -> n, f, t
+    | a :: rest -> 
+        let kind = match doAttr a with 
+            [] -> default
+          | Attr(an, _)::_ -> 
+              (try H.find attributeHash an with Not_found -> default)
+        in
+        match kind with 
+          AttrName _ -> loop (a::n, f, t) rest
+        | AttrFunType _ -> 
+            loop (n, a::f, t) rest
+        | AttrType -> loop (n, f, a::t) rest
+  in
+  loop ([], [], []) attrs
+
+
+
+and doType (nameortype: attributeClass) (* This is AttrName if we are doing 
+                                         * the type for a name, or AttrType 
+                                         * if we are doing this type in a 
+                                         * typedef *)
+           (bt: typ)                    (* The base type *)
+           (dt: A.decl_type) 
+  (* Returns the new type and the accumulated name (or type attribute 
+    if nameoftype =  AttrType) attributes *)
+  : typ * attribute list = 
+
+  (* Now do the declarator type. But remember that the structure of the 
+   * declarator type is as printed, meaning that it is the reverse of the 
+   * right one *)
+  let rec doDeclType (bt: typ) (acc: attribute list) = function
+      A.JUSTBASE -> bt, acc
+    | A.PARENTYPE (a1, d, a2) -> 
+        let a1' = doAttributes a1 in
+        let a1n, a1f, a1t = partitionAttributes AttrType a1' in
+        let a2' = doAttributes a2 in
+        let a2n, a2f, a2t = partitionAttributes nameortype a2' in
+(*
+        ignore (E.log "doType: %a @[a1n=%a@!a1f=%a@!a1t=%a@!a2n=%a@!a2f=%a@!a2t=%a@]@!" d_loc !currentLoc d_attrlist a1n d_attrlist a1f d_attrlist a1t d_attrlist a2n d_attrlist a2f d_attrlist a2t);
+*)
+        let bt' = cabsTypeAddAttributes a1t bt in
+(*
+        ignore (E.log "bt' = %a\n" d_type bt');
+*)
+        let bt'', a1fadded = 
+          match unrollType bt with 
+            TFun _ -> cabsTypeAddAttributes a1f bt', true
+          | _ -> bt', false
+        in
+        (* Now recurse *)
+        let restyp, nattr = doDeclType bt'' acc d in
+        (* Add some more type attributes *)
+        let restyp = cabsTypeAddAttributes a2t restyp in
+        (* See if we can add some more type attributes *)
+        let restyp' = 
+          match unrollType restyp with 
+            TFun _ -> 
+              if a1fadded then
+                cabsTypeAddAttributes a2f restyp
+              else
+                cabsTypeAddAttributes a2f
+                  (cabsTypeAddAttributes a1f restyp)
+          | TPtr ((TFun _ as tf), ap) when not !msvcMode ->
+              if a1fadded then
+                TPtr(cabsTypeAddAttributes a2f tf, ap)
+              else
+                TPtr(cabsTypeAddAttributes a2f
+                       (cabsTypeAddAttributes a1f tf), ap)
+          | _ -> 
+              if a1f <> [] && not a1fadded then
+                E.s (error "Invalid position for (prefix) function type attributes:%a" 
+                       d_attrlist a1f);
+              if a2f <> [] then
+                E.s (error "Invalid position for (post) function type attributes:%a"
+                       d_attrlist a2f);
+              restyp
+        in
+(*
+           ignore (E.log "restyp' = %a\n" d_type restyp');
+*)
+        (* Now add the name attributes and return *)
+        restyp', cabsAddAttributes a1n (cabsAddAttributes a2n nattr)
+
+    | A.PTR (al, d) -> 
+        let al' = doAttributes al in
+        let an, af, at = partitionAttributes AttrType al' in
+        (* Now recurse *)
+        let restyp, nattr = doDeclType (TPtr(bt, at)) acc d in
+        (* See if we can do anything with function type attributes *)
+        let restyp' = 
+          match unrollType restyp with
+            TFun _ -> cabsTypeAddAttributes af restyp
+          | TPtr((TFun _ as tf), ap) ->
+              TPtr(cabsTypeAddAttributes af tf, ap)
+          | _ -> 
+              if af <> [] then
+                E.s (error "Invalid position for function type attributes:%a"
+                       d_attrlist af);
+              restyp
+        in
+        (* Now add the name attributes and return *)
+        restyp', cabsAddAttributes an nattr
+              
+
+    | A.ARRAY (d, al, len) -> 
+        let lo = 
+          match len with 
+            A.NOTHING -> None 
+          | _ -> 
+              let len' = doPureExp len in
+              let _, len'' = castTo (typeOf len') intType len' in
+              let elsz = 
+                try (bitsSizeOf bt + 7) / 8
+                with _ -> 1 (** We get this if we cannot compute the size of 
+                             * one element. This can happen, when we define 
+                             * an extern, for example. We use 1 for now *)
+              in 
+              (match constFold true len' with 
+                Const(CInt64(i, _, _)) ->
+                  if i < 0L then 
+                    E.s (error "Length of array is negative\n");
+                  if Int64.mul i (Int64.of_int elsz) >= 0x80000000L then 
+                    E.s (error "Length of array is too large\n")
+           
+
+                | l -> 
+                    if isConstant l then 
+                      (* e.g., there may be a float constant involved. 
+                       * We'll leave it to the user to ensure the length is
+                       * non-negative, etc.*)
+                      ignore(warn "Unable to do constant-folding on array length %a.  Some CIL operations on this array may fail."
+                               d_exp l)
+                    else 
+                      E.s (error "Length of array is not a constant: %a\n"
+                             d_exp l));
+              Some len''
+        in
+	let al' = doAttributes al in
+        doDeclType (TArray(bt, lo, al')) acc d
+
+    | A.PROTO (d, args, isva) -> 
+        (* Start a scope for the parameter names *)
+        enterScope ();
+        (* Intercept the old-style use of varargs.h. On GCC this means that 
+         * we have ellipsis and a last argument "builtin_va_alist: 
+         * builtin_va_alist_t". On MSVC we do not have the ellipsis and we 
+         * have a last argument "va_alist: va_list" *)
+        let args', isva' = 
+          if args != [] && !msvcMode = not isva then begin
+            let newisva = ref isva in 
+            let rec doLast = function
+                [([A.SpecType (A.Tnamed atn)], (an, A.JUSTBASE, [], _))] 
+                  when isOldStyleVarArgTypeName atn && 
+                       isOldStyleVarArgName an -> begin
+                         (* Turn it into a vararg *)
+                         newisva := true;
+                         (* And forget about this argument *)
+                         []
+                       end
+                         
+              | a :: rest -> a :: doLast rest
+              | [] -> []
+            in
+            let args' = doLast args in
+            (args', !newisva)
+          end else (args, isva)
+        in
+        (* Make the argument as for a formal *)
+        let doOneArg (s, (n, ndt, a, cloc)) : varinfo = 
+          let s' = doSpecList n s in
+          let ndt' =  match isVariableSizedArray ndt with
+              None -> ndt
+            | Some (ndt', se, len) -> 
+                (* If this is a variable-sized array, we replace the array
+                   type with a pointer type.  This is the defined behavior
+                   for array parameters, so we do not need to add this to
+                   varSizeArrays, fix sizeofs, etc. *)
+                if isNotEmpty se then
+                  E.s (error "array parameter: length not pure");
+                ndt'
+          in              
+          let vi = makeVarInfoCabs ~isformal:true ~isglobal:false 
+                     (convLoc cloc) s' (n,ndt',a) in
+          (* Add the formal to the environment, so it can be referenced by
+             other formals  (e.g. in an array type, although that will be
+             changed to a pointer later, or though typeof).  *) 
+          addLocalToEnv vi.vname (EnvVar vi);
+          vi
+        in
+        let targs : varinfo list option = 
+          match List.map doOneArg args'  with
+          | [] -> None (* No argument list *)
+          | [t] when isVoidType t.vtype -> 
+              Some []
+          | l -> Some l
+        in
+        exitScope ();
+        (* Turn [] types into pointers in the arguments and the result type. 
+         * Turn function types into pointers to respective. This simplifies 
+         * our life a lot, and is what the standard requires. *)
+        let rec fixupArgumentTypes (argidx: int) (args: varinfo list) : unit = 
+          match args with
+            [] -> ()
+          | a :: args' -> 
+              (match unrollType a.vtype with
+                TArray(t,_,attr) -> a.vtype <- TPtr(t, attr)
+              | TFun _ -> a.vtype <- TPtr(a.vtype, [])
+              | TComp (comp, _) -> begin
+                  match isTransparentUnion a.vtype with
+                    None ->  ()
+                  | Some fstfield -> 
+                      transparentUnionArgs := 
+                         (argidx, a.vtype) :: !transparentUnionArgs;
+                      a.vtype <- fstfield.ftype;
+              end
+              | _ -> ());
+              fixupArgumentTypes (argidx + 1) args'
+        in
+        let args = 
+          match targs with 
+            None -> None
+          | Some argl -> 
+              fixupArgumentTypes 0 argl;
+              Some (List.map (fun a -> (a.vname, a.vtype, a.vattr)) argl)
+        in
+        let tres = 
+          match unrollType bt with
+            TArray(t,_,attr) -> TPtr(t, attr)
+          | _ -> bt
+        in
+        doDeclType (TFun (tres, args, isva', [])) acc d
+
+  in
+  doDeclType bt [] dt
+
+(* If this is a declarator for a variable size array then turn it into a 
+   pointer type and a length *)
+and isVariableSizedArray (dt: A.decl_type) 
+    : (A.decl_type * chunk * exp) option = 
+  let res = ref None in
+  let rec findArray = function
+    ARRAY (JUSTBASE, al, lo) when lo != A.NOTHING -> 
+      (* Try to compile the expression to a constant *)
+      let (se, e', _) = doExp true lo (AExp (Some intType)) in
+      if isNotEmpty se || not (isConstant e') then begin
+        res := Some (se, e');
+        PTR (al, JUSTBASE)
+      end else 
+        ARRAY (JUSTBASE, al, lo)
+    | ARRAY (dt, al, lo) -> ARRAY (findArray dt, al, lo)
+    | PTR (al, dt) -> PTR (al, findArray dt)
+    | JUSTBASE -> JUSTBASE
+    | PARENTYPE (prea, dt, posta) -> PARENTYPE (prea, findArray dt, posta)
+    | PROTO (dt, f, a) -> PROTO (findArray dt, f, a)
+  in
+  let dt' = findArray dt in
+  match !res with 
+    None -> None
+  | Some (se, e) -> Some (dt', se, e)
+
+and doOnlyType (specs: A.spec_elem list) (dt: A.decl_type) : typ = 
+  let bt',sto,inl,attrs = doSpecList "" specs in
+  if sto <> NoStorage || inl then
+    E.s (error "Storage or inline specifier in type only");
+  let tres, nattr = doType AttrType bt' (A.PARENTYPE(attrs, dt, [])) in
+  if nattr <> [] then
+    E.s (error "Name attributes in only_type: %a"
+           d_attrlist nattr);
+  tres
+
+
+and makeCompType (isstruct: bool)
+                 (n: string)
+                 (nglist: A.field_group list) 
+                 (a: attribute list) = 
+  (* Make a new name for the structure *)
+  let kind = if isstruct then "struct" else "union" in
+  let n', _  = newAlphaName true kind n in
+  (* Create the self cell for use in fields and forward references. Or maybe 
+   * one exists already from a forward reference  *)
+  let comp, _ = createCompInfo isstruct n' in
+  let doFieldGroup ((s: A.spec_elem list), 
+                    (nl: (A.name * A.expression option) list)) : 'a list =
+    (* Do the specifiers exactly once *)
+    let sugg = match nl with 
+      [] -> ""
+    | ((n, _, _, _), _) :: _ -> n
+    in
+    let bt, sto, inl, attrs = doSpecList sugg s in
+    (* Do the fields *)
+    let makeFieldInfo
+        (((n,ndt,a,cloc) : A.name), (widtho : A.expression option))
+      : fieldinfo = 
+      if sto <> NoStorage || inl then 
+        E.s (error "Storage or inline not allowed for fields");
+      let ftype, nattr = 
+        doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in 
+      (* check for fields whose type is an undefined struct.  This rules
+         out circularity:
+             struct C1 { struct C2 c2; };          //This line is now an error.
+             struct C2 { struct C1 c1; int dummy; };
+       *)
+      (match unrollType ftype with
+         TComp (ci',_) when not ci'.cdefined ->
+           E.s (error "Type of field %s is an undefined struct.\n" n)
+       | _ -> ());
+      let width = 
+        match widtho with 
+          None -> None
+        | Some w -> begin
+            (match unrollType ftype with
+              TInt (ikind, a) -> ()
+            | TEnum _ -> ()
+            | _ -> E.s (error "Base type for bitfield is not an integer type"));
+            match isIntegerConstant w with
+                Some n -> Some n
+              | None -> E.s (error "bitfield width is not an integer constant")
+	  end
+      in
+      (* If the field is unnamed and its type is a structure of union type 
+       * then give it a distinguished name  *)
+      let n' = 
+        if n = missingFieldName then begin
+          match unrollType ftype with 
+            TComp _ -> begin
+              incr annonCompFieldNameId;
+              annonCompFieldName ^ (string_of_int !annonCompFieldNameId)
+            end 
+          | _ -> n
+        end else
+          n
+      in
+      { fcomp     =  comp;
+        fname     =  n';
+        ftype     =  ftype;
+        fbitfield =  width;
+        fattr     =  nattr;
+        floc      =  convLoc cloc
+      } 
+    in
+    List.map makeFieldInfo nl
+  in
+
+
+  let flds = List.concat (List.map doFieldGroup nglist) in
+  if comp.cfields <> [] then begin
+    (* This appears to be a multiply defined structure. This can happen from 
+    * a construct like "typedef struct foo { ... } A, B;". This is dangerous 
+    * because at the time B is processed some forward references in { ... } 
+    * appear as backward references, which coild lead to circularity in 
+    * the type structure. We do a thourough check and then we reuse the type 
+    * for A *)
+    let fieldsSig fs = List.map (fun f -> typeSig f.ftype) fs in 
+    if not (Util.equals (fieldsSig comp.cfields) (fieldsSig flds)) then
+      ignore (error "%s seems to be multiply defined" (compFullName comp))
+  end else 
+    comp.cfields <- flds;
+
+(*  ignore (E.log "makeComp: %s: %a\n" comp.cname d_attrlist a); *)
+  comp.cattr <- a;
+  let res = TComp (comp, []) in
+  (* This compinfo is defined, even if there are no fields *)
+  comp.cdefined <- true;
+  (* Create a typedef for this one *)
+  cabsPushGlobal (GCompTag (comp, !currentLoc));
+
+      (* There must be a self cell created for this already *)
+  addLocalToEnv (kindPlusName kind n) (EnvTyp res);
+  (* Now create a typedef with just this type *)
+  res
+
+and preprocessCast (specs: A.specifier) 
+                   (dt: A.decl_type) 
+                   (ie: A.init_expression) 
+  : A.specifier * A.decl_type * A.init_expression = 
+  let typ = doOnlyType specs dt in
+  (* If we are casting to a union type then we have to treat this as a 
+   * constructor expression. This is to handle the gcc extension that allows 
+   * cast from a type of a field to the type of the union  *)
+  let ie' = 
+    match unrollType typ, ie with
+      TComp (c, _), A.SINGLE_INIT _ when not c.cstruct -> 
+        A.COMPOUND_INIT [(A.INFIELD_INIT ("___matching_field", 
+                                          A.NEXT_INIT), 
+                          ie)]
+    | _, _ -> ie
+  in
+  (* Maybe specs contains an unnamed composite. Replace with the name so that 
+   * when we do again the specs we get the right name  *)
+  let specs1 = 
+    match typ with
+      TComp (ci, _) -> 
+        List.map 
+          (function 
+              A.SpecType (A.Tstruct ("", flds, [])) -> 
+                A.SpecType (A.Tstruct (ci.cname, None, []))
+            | A.SpecType (A.Tunion ("", flds, [])) ->
+                A.SpecType (A.Tunion (ci.cname, None, []))
+            | s -> s) specs
+    | _ -> specs
+  in
+  specs1, dt, ie' 
+
+and getIntConstExp (aexp) : exp =
+  let c, e, _ = doExp true aexp (AExp None) in 
+  if not (isEmpty c) then 
+    E.s (error "Constant expression %a has effects" d_exp e);
+  match e with 
+    (* first, filter for those Const exps that are integers *)
+  | Const (CInt64 _ ) -> e
+  | Const (CEnum _) -> e
+  | Const (CChr i) -> Const(charConstToInt i)
+
+        (* other Const expressions are not ok *)
+  | Const _ -> E.s (error "Expected integer constant and got %a" d_exp e)
+        
+    (* now, anything else that 'doExp true' returned is ok (provided
+       that it didn't yield side effects); this includes, in particular,
+       the various sizeof and alignof expression kinds *)
+  | _ -> e
+
+(* this is like 'isIntConstExp', but retrieves the actual integer
+ * the expression denotes; I have not extended it to work with
+ * sizeof/alignof since (for CCured) we can't const-eval those,
+ * and it's not clear whether they can be bitfield width specifiers
+ * anyway (since that's where this function is used) *)
+and isIntegerConstant (aexp) : int option =
+  match doExp true aexp (AExp None) with
+    (c, e, _) when isEmpty c -> begin
+      match isInteger e with 
+        Some i64 -> Some (Int64.to_int i64)
+      | _ -> None
+    end
+  | _ -> None
+        
+     (* Process an expression and in the process do some type checking,
+      * extract the effects as separate statements  *)
+and doExp (asconst: bool)   (* This expression is used as a constant *)
+          (e: A.expression) 
+          (what: expAction) : (chunk * exp * typ) = 
+  (* A subexpression of array type is automatically turned into StartOf(e). 
+   * Similarly an expression of function type is turned into AddrOf. So 
+   * essentially doExp should never return things of type TFun or TArray *)
+  let processArrayFun e t = 
+    match e, unrollType t with
+      (Lval(lv) | CastE(_, Lval lv)), TArray(tbase, _, a) -> 
+        mkStartOfAndMark lv, TPtr(tbase, a)
+    | (Lval(lv) | CastE(_, Lval lv)), TFun _  -> 
+        mkAddrOfAndMark lv, TPtr(t, [])
+    | _, (TArray _ | TFun _) -> 
+        E.s (error "Array or function expression is not lval: %a@!"
+               d_plainexp e)
+    | _ -> e, t
+  in
+  (* Before we return we call finishExp *)
+  let finishExp ?(newWhat=what) 
+                (se: chunk) (e: exp) (t: typ) : chunk * exp * typ = 
+    match newWhat with 
+      ADrop -> (se, e, t)
+    | AExpLeaveArrayFun -> 
+        (se, e, t) (* It is important that we do not do "processArrayFun" in 
+                    * this case. We exploit this when we process the typeOf 
+                    * construct *)
+    | AExp _ -> 
+        let (e', t') = processArrayFun e t in
+(*
+        ignore (E.log "finishExp: e'=%a, t'=%a\n" 
+           d_exp e' d_type t');
+*)
+        (se, e', t')
+
+    | ASet (lv, lvt) -> begin
+        (* See if the set was done already *)
+        match e with 
+          Lval(lv') when lv == lv' -> 
+            (se, e, t)
+        | _ -> 
+            let (e', t') = processArrayFun e t in
+            let (t'', e'') = castTo t' lvt e' in
+(*
+            ignore (E.log "finishExp: e = %a\n  e'' = %a\n" d_plainexp e d_plainexp e'');
+*)
+            (se +++ (Set(lv, e'', !currentLoc)), e'', t'')
+    end
+  in
+  let rec findField (n: string) (fidlist: fieldinfo list) : offset =
+    (* Depth first search for the field. This appears to be what GCC does. 
+     * MSVC checks that there are no ambiguous field names, so it does not 
+     * matter how we search *)
+    let rec search = function
+        [] -> NoOffset (* Did not find *)
+      | fid :: rest when fid.fname = n -> Field(fid, NoOffset)
+      | fid :: rest when prefix annonCompFieldName fid.fname -> begin
+          match unrollType fid.ftype with 
+            TComp (ci, _) -> 
+              let off = search ci.cfields in
+              if off = NoOffset then 
+                search rest  (* Continue searching *)
+              else
+                Field (fid, off)
+          | _ -> E.s (bug "unnamed field type is not a struct/union")
+      end
+      | _ :: rest -> search rest
+    in
+    let off = search fidlist in
+    if off = NoOffset then 
+      E.s (error "Cannot find field %s" n);
+    off
+  in
+  try
+    match e with
+    | A.NOTHING when what = ADrop -> finishExp empty (integer 0) intType
+    | A.NOTHING ->
+        let res = Const(CStr "exp_nothing") in
+        finishExp empty res (typeOf res)
+
+    (* Do the potential lvalues first *)
+    | A.VARIABLE n -> begin
+        (* Look up in the environment *)
+        try
+          let envdata = H.find env n in
+          match envdata with
+            EnvVar vi, _ ->
+              (* if isconst && 
+                 not (isFunctionType vi.vtype) && 
+                 not (isArrayType vi.vtype)then
+                E.s (error "variable appears in constant"); *)
+              finishExp empty (Lval(var vi)) vi.vtype
+          | EnvEnum (tag, typ), _ ->
+              if !Cil.lowerConstants then 
+                finishExp empty tag typ
+              else begin
+                let ei = 
+                  match unrollType typ with 
+                    TEnum(ei, _) -> ei
+                  | _ -> assert false
+                in
+                finishExp empty (Const (CEnum(tag, n, ei))) typ
+              end
+
+          | _ -> raise Not_found
+        with Not_found -> begin
+          if isOldStyleVarArgName n then 
+            E.s (error "Cannot resolve variable %s. This could be a CIL bug due to the handling of old-style variable argument functions.\n" n)
+          else 
+            E.s (error "Cannot resolve variable %s.\n" n)
+        end
+    end
+    | A.INDEX (e1, e2) -> begin
+        (* Recall that doExp turns arrays into StartOf pointers *)
+        let (se1, e1', t1) = doExp false e1 (AExp None) in
+        let (se2, e2', t2) = doExp false e2 (AExp None) in
+        let se = se1 @@ se2 in
+        let (e1'', t1, e2'', tresult) =
+          (* Either e1 or e2 can be the pointer *)
+          match unrollType t1, unrollType t2 with
+            TPtr(t1e,_), (TInt _|TEnum _) -> e1', t1, e2', t1e
+          | (TInt _|TEnum _), TPtr(t2e,_) -> e2', t2, e1', t2e
+          | _ -> 
+              E.s (error 
+                     "Expecting a pointer type in index:@! t1=%a@!t2=%a@!"
+                     d_plaintype t1 d_plaintype t2)
+        in
+        (* We have to distinguish the construction based on the type of e1'' *)
+        let res = 
+          match e1'' with 
+            StartOf array -> (* A real array indexing operation *)
+              addOffsetLval (Index(e2'', NoOffset)) array
+          | _ -> (* Turn into *(e1 + e2) *)
+              mkMem (BinOp(IndexPI, e1'', e2'', t1)) NoOffset
+        in
+        (* Do some optimization of StartOf *)
+        finishExp se (Lval res) tresult
+
+    end      
+    | A.UNARY (A.MEMOF, e) -> 
+        if asconst then
+          ignore (warn "MEMOF in constant");
+        let (se, e', t) = doExp false e (AExp None) in
+        let tresult = 
+          match unrollType t with
+          | TPtr(te, _) -> te
+          | _ -> E.s (error "Expecting a pointer type in *. Got %a@!"
+                        d_plaintype t)
+        in
+        finishExp se 
+                  (Lval (mkMem e' NoOffset))
+                  tresult
+
+           (* e.str = (& e + off(str)). If e = (be + beoff) then e.str = (be 
+            * + beoff + off(str))  *)
+    | A.MEMBEROF (e, str) -> 
+        (* member of is actually allowed if we only take the address *)
+        (* if isconst then
+          E.s (error "MEMBEROF in constant");  *)
+        let (se, e', t') = doExp false e (AExp None) in
+        let lv = 
+          match e' with 
+            Lval x -> x 
+          | CastE(_, Lval x) -> x
+          | _ -> E.s (error "Expected an lval in MEMBEROF (field %s)" str)
+        in
+        let field_offset = 
+          match unrollType t' with
+            TComp (comp, _) -> findField str comp.cfields
+          | _ -> E.s (error "expecting a struct with field %s" str)
+        in
+        let lv' = Lval(addOffsetLval field_offset lv) in
+	let field_type = typeOf lv' in
+        finishExp se lv' field_type
+          
+       (* e->str = * (e + off(str)) *)
+    | A.MEMBEROFPTR (e, str) -> 
+        if asconst then
+          ignore (warn "MEMBEROFPTR in constant");
+        let (se, e', t') = doExp false e (AExp None) in
+        let pointedt = 
+          match unrollType t' with
+            TPtr(t1, _) -> t1
+          | TArray(t1,_,_) -> t1
+          | _ -> E.s (error "expecting a pointer to a struct")
+        in
+        let field_offset = 
+          match unrollType pointedt with 
+            TComp (comp, _) -> findField str comp.cfields
+          | x -> 
+              E.s (error 
+                     "expecting a struct with field %s. Found %a. t1 is %a" 
+                     str d_type x d_type t')
+        in
+	let lv' = Lval (mkMem e' field_offset) in
+	let field_type = typeOf lv' in
+        finishExp se lv' field_type
+          
+    | A.CONSTANT ct -> begin
+        let hasSuffix str = 
+          let l = String.length str in
+          fun s -> 
+            let ls = String.length s in
+            l >= ls && s = String.uppercase (String.sub str (l - ls) ls)
+        in
+        match ct with 
+          A.CONST_INT str -> begin
+            let res = parseInt str in
+            finishExp empty res (typeOf res)
+          end
+
+(*
+        | A.CONST_WSTRING wstr ->
+            let len = List.length wstr in 
+            let wchar_t = !wcharType in
+            (* We will make an array big enough to contain the wide 
+             * characters and the wide-null terminator *)
+            let ws_t = TArray(wchar_t, Some (integer len), []) in
+            let ws = 
+              makeGlobalVar ("wide_string" ^ string_of_int !lastStructId)
+                ws_t
+            in
+            ws.vstorage <- Static;
+            incr lastStructId;
+            (* Make the initializer. Idx is a wide_char index.  *)
+            let rec loop (idx: int) (s: int64 list) = 
+	      match s with
+		[] -> []
+	      | wc::rest ->
+		  let wc_cilexp = Const (CInt64(wc, IInt, None)) in
+                  (Index(integer idx, NoOffset), 
+                   SingleInit (mkCast wc_cilexp wchar_t))
+                  :: loop (idx + 1) rest
+            in
+            (* Add the definition for the array *)
+            cabsPushGlobal (GVar(ws, 
+                                 {init = Some (CompoundInit(ws_t,
+                                                            loop 0 wstr))},
+                                 !currentLoc));
+            finishExp empty (StartOf(Var ws, NoOffset))
+              (TPtr(wchar_t, []))
+              *)
+
+        | A.CONST_WSTRING (ws: int64 list) -> 
+            let res = Const(CWStr ((* intlist_to_wstring *) ws)) in
+            finishExp empty res (typeOf res)
+
+        | A.CONST_STRING s -> 
+            (* Maybe we burried __FUNCTION__ in there *)
+            let s' = 
+              try
+                let start = String.index s (Char.chr 0) in
+                let l = String.length s in
+                let tofind = (String.make 1 (Char.chr 0)) ^ "__FUNCTION__" in
+                let past = start + String.length tofind in
+                if past <= l &&
+                   String.sub s start (String.length tofind) = tofind then
+                  (if start > 0 then String.sub s 0 start else "") ^
+                  !currentFunctionFDEC.svar.vname ^
+                  (if past < l then String.sub s past (l - past) else "")
+                else
+                  s
+              with Not_found -> s
+            in
+            let res = Const(CStr s') in
+            finishExp empty res (typeOf res)
+              
+        | A.CONST_CHAR char_list ->
+            let a, b = (interpret_character_constant char_list) in 
+            finishExp empty (Const a) b 
+              
+        | A.CONST_WCHAR char_list ->
+            (* matth: I can't see a reason for a list of more than one char
+             * here, since the kinteger64 below will take only the lower 16
+             * bits of value.  ('abc' makes sense, because CHAR constants have
+             * type int, and so more than one char may be needed to represent 
+             * the value.  But L'abc' has type wchar, and so is equivalent to 
+             * L'c').  But gcc allows L'abc', so I'll leave this here in case
+             * I'm missing some architecture dependent behavior. *)
+	    let value = reduce_multichar !wcharType char_list in
+	    let result = kinteger64 !wcharKind value in
+            finishExp empty result (typeOf result)
+              
+        | A.CONST_FLOAT str -> begin
+            (* Maybe it ends in U or UL. Strip those *)
+            let l = String.length str in
+            let hasSuffix = hasSuffix str in
+            let baseint, kind = 
+              if  hasSuffix "L" then
+                String.sub str 0 (l - 1), FLongDouble
+              else if hasSuffix "F" then
+                String.sub str 0 (l - 1), FFloat
+              else if hasSuffix "D" then
+                String.sub str 0 (l - 1), FDouble
+              else
+                str, FDouble
+            in
+            try
+              finishExp empty 
+                (Const(CReal(float_of_string baseint, kind,
+                             Some str)))
+                (TFloat(kind,[]))
+            with e -> begin
+              ignore (E.log "float_of_string %s (%s)\n" str 
+                        (Printexc.to_string e));
+              let res = Const(CStr "booo CONS_FLOAT") in
+              finishExp empty res (typeOf res)
+            end
+        end
+    end          
+
+    | A.TYPE_SIZEOF (bt, dt) ->
+        let typ = doOnlyType bt dt in
+        finishExp empty (SizeOf(typ)) !typeOfSizeOf
+
+      (* Intercept the sizeof("string") *)
+    | A.EXPR_SIZEOF (A.CONSTANT (A.CONST_STRING s)) -> begin
+        (* Process the string first *)
+        match doExp asconst (A.CONSTANT (A.CONST_STRING s)) (AExp None) with 
+          _, Const(CStr s), _ -> 
+            finishExp empty (SizeOfStr s) !typeOfSizeOf
+        | _ -> E.s (bug "cabs2cil: sizeOfStr")
+    end
+
+    | A.EXPR_SIZEOF e ->
+        (* Allow non-constants in sizeof *)
+        (* Do not convert arrays and functions into pointers. *)
+        let (se, e', t) = doExp false e AExpLeaveArrayFun in
+(*
+        ignore (E.log "sizeof: %a e'=%a, t=%a\n"
+                  d_loc !currentLoc d_plainexp e' d_type t);
+*)
+        (* !!!! The book says that the expression is not evaluated, so we
+           * drop the potential side-effects 
+        if isNotEmpty se then
+          ignore (warn "Warning: Dropping side-effect in EXPR_SIZEOF\n");
+*)
+        let size =
+          match e' with                 (* If we are taking the sizeof an
+                                         * array we must drop the StartOf  *)
+            StartOf(lv) -> SizeOfE (Lval(lv))
+
+                (* Maybe we are taking the sizeof for a CStr. In that case we 
+                 * mean the pointer to the start of the string *)
+          | Const(CStr _) -> SizeOf (charPtrType)
+
+                (* Maybe we are taking the sizeof a variable-sized array *)
+          | Lval (Var vi, NoOffset) -> begin
+              try 
+                IH.find varSizeArrays vi.vid 
+              with Not_found -> SizeOfE e' 
+          end
+          | _ -> SizeOfE e'
+        in
+        finishExp empty size !typeOfSizeOf
+
+    | A.TYPE_ALIGNOF (bt, dt) ->
+        let typ = doOnlyType bt dt in
+        finishExp empty (AlignOf(typ)) !typeOfSizeOf
+
+    | A.EXPR_ALIGNOF e ->
+        let (se, e', t) = doExp false e AExpLeaveArrayFun in
+        (* !!!! The book says that the expression is not evaluated, so we
+           * drop the potential side-effects 
+        if isNotEmpty se then
+          ignore (warn "Warning: Dropping side-effect in EXPR_ALIGNOF\n");
+*)
+        let e'' =
+          match e' with                 (* If we are taking the alignof an
+                                         * array we must drop the StartOf  *)
+            StartOf(lv) -> Lval(lv)
+
+          | _ -> e'
+        in
+        finishExp empty (AlignOfE(e'')) !typeOfSizeOf
+
+    | A.CAST ((specs, dt), ie) ->
+        let s', dt', ie' = preprocessCast specs dt ie in
+        (* We know now that we can do s' and dt' many times *)
+        let typ = doOnlyType s' dt' in
+        let what' =
+          match what with
+            AExp (Some _) -> AExp (Some typ)
+          | AExp None -> what
+          | ADrop | AExpLeaveArrayFun -> what
+          | ASet (lv, lvt) -> 
+              (* If the cast from typ to lvt would be dropped, then we 
+               * continue with a Set *)
+              if false && Util.equals (typeSig typ) (typeSig lvt) then 
+                what
+              else
+                AExp None (* We'll create a temporary *)
+        in
+        (* Remember here if we have done the Set *)
+        let (se, e', t'), (needcast: bool) = 
+          match ie' with
+            A.SINGLE_INIT e -> doExp asconst e what', true
+
+          | A.NO_INIT -> E.s (error "missing expression in cast")
+
+          | A.COMPOUND_INIT _ -> begin
+              (* Pretend that we are declaring and initializing a brand new 
+               * variable  *)
+              let newvar = "__constr_expr_" ^ string_of_int (!constrExprId) in
+              incr constrExprId;
+              let spec_res = doSpecList "" s' in
+              let se1 = 
+                if !scopes == [] then begin
+                  ignore (createGlobal spec_res 
+                            ((newvar, dt', [], cabslu), ie'));
+                  empty
+                end else
+                  createLocal spec_res ((newvar, dt', [], cabslu), ie') 
+              in
+              (* Now pretend that e is just a reference to the newly created 
+               * variable *)
+              let se, e', t' = doExp asconst (A.VARIABLE newvar) what' in
+              (* If typ is an array then the doExp above has already added a 
+               * StartOf. We must undo that now so that it is done once by 
+               * the finishExp at the end of this case *)
+              let e2, t2 = 
+                match unrollType typ, e' with
+                  TArray _, StartOf lv -> Lval lv, typ
+                | _, _ -> e', t'
+              in
+              (* If we are here, then the type t2 is guaranteed to match the 
+               * type of the expression e2, so we do not need a cast. We have 
+               * to worry about this because otherwise, we might need to cast 
+               * between arrays or structures. *)
+              (se1 @@ se, e2, t2), false
+          end
+        in
+        let (t'', e'') = 
+          match typ with
+            TVoid _ when what' = ADrop -> (t', e') (* strange GNU thing *)
+          |  _ -> 
+              (* Do this to check the cast, unless we are sure that we do not 
+               * need the check. *)
+              let newtyp, newexp = 
+                if needcast then 
+                  castTo ~fromsource:true t' typ e' 
+                else
+                  t', e'
+              in
+              newtyp, newexp
+        in
+        finishExp se e'' t''
+          
+    | A.UNARY(A.MINUS, e) -> 
+        let (se, e', t) = doExp asconst e (AExp None) in
+        if isIntegralType t then
+          let tres = integralPromotion t in
+          let e'' = 
+            match e' with
+            | Const(CInt64(i, ik, _)) -> kinteger64 ik (Int64.neg i)
+            | _ -> UnOp(Neg, mkCastT e' t tres, tres)
+          in
+          finishExp se e'' tres
+        else
+          if isArithmeticType t then
+            finishExp se (UnOp(Neg,e',t)) t
+          else
+            E.s (error "Unary - on a non-arithmetic type")
+        
+    | A.UNARY(A.BNOT, e) -> 
+        let (se, e', t) = doExp asconst e (AExp None) in
+        if isIntegralType t then
+          let tres = integralPromotion t in
+          let e'' = UnOp(BNot, mkCastT e' t tres, tres) in
+          finishExp se e'' tres
+        else
+          E.s (error "Unary ~ on a non-integral type")
+          
+    | A.UNARY(A.PLUS, e) -> doExp asconst e what 
+          
+          
+    | A.UNARY(A.ADDROF, e) -> begin
+        match e with 
+          A.COMMA el -> (* GCC extension *)
+            doExp false 
+              (A.COMMA (replaceLastInList el (fun e -> A.UNARY(A.ADDROF, e))))
+              what
+        | A.QUESTION (e1, e2, e3) -> (* GCC extension *)
+            doExp false 
+              (A.QUESTION (e1, A.UNARY(A.ADDROF, e2), A.UNARY(A.ADDROF, e3)))
+              what
+        | A.VARIABLE s when 
+            isOldStyleVarArgName s 
+            && (match !currentFunctionFDEC.svar.vtype with 
+                   TFun(_, _, true, _) -> true | _ -> false) ->
+            (* We are in an old-style variable argument function and we are 
+             * taking the address of the argument that was removed while 
+             * processing the function type. We compute the address based on 
+             * the address of the last real argument *)
+            if !msvcMode then begin
+              let rec getLast = function
+                  [] -> E.s (unimp "old-style variable argument function without real arguments")
+                | [a] -> a
+                | _ :: rest -> getLast rest 
+              in
+              let last = getLast !currentFunctionFDEC.sformals in
+              let res = mkAddrOfAndMark (var last) in
+              let tres = typeOf res in
+              let tres', res' = castTo tres (TInt(IULong, [])) res in
+              (* Now we must add to this address to point to the next 
+              * argument. Round up to a multiple of 4  *)
+              let sizeOfLast = 
+                (((bitsSizeOf last.vtype) + 31) / 32) * 4
+              in
+              let res'' = 
+                BinOp(PlusA, res', kinteger IULong sizeOfLast, tres')
+              in
+              finishExp empty res'' tres'
+            end else begin (* On GCC the only reliable way to do this is to 
+                          * call builtin_next_arg. If we take the address of 
+                          * a local we are going to get the address of a copy 
+                          * of the local ! *)
+                
+              doExp asconst
+                (A.CALL (A.VARIABLE "__builtin_next_arg", 
+                         [A.CONSTANT (A.CONST_INT "0")]))
+                what
+            end
+
+        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
+           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ | 
+           A.CAST (_, A.COMPOUND_INIT _)) -> begin
+            let (se, e', t) = doExp false e (AExp None) in
+            (* ignore (E.log "ADDROF on %a : %a\n" d_plainexp e'
+                      d_plaintype t); *)
+            match e' with 
+             ( Lval x | CastE(_, Lval x)) -> 
+               finishExp se (mkAddrOfAndMark x) (TPtr(t, []))
+
+            | StartOf (lv) ->
+                let tres = TPtr(typeOfLval lv, []) in (* pointer to array *)
+                finishExp se (mkAddrOfAndMark lv) tres
+
+              (* Function names are converted into pointers to the function. 
+               * Taking the address-of again does not change things *)
+            | AddrOf (Var v, NoOffset) when isFunctionType v.vtype ->
+                finishExp se e' t
+
+            | _ -> E.s (error "Expected lval for ADDROF. Got %a@!"
+                          d_plainexp e')
+        end
+        | _ -> E.s (error "Unexpected operand for addrof")
+    end
+    | A.UNARY((A.PREINCR|A.PREDECR) as uop, e) -> begin
+        match e with 
+          A.COMMA el -> (* GCC extension *)
+            doExp asconst 
+              (A.COMMA (replaceLastInList el 
+                          (fun e -> A.UNARY(uop, e))))
+              what
+        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
+            doExp asconst 
+              (A.QUESTION (e1, A.UNARY(uop, e2q), 
+                           A.UNARY(uop, e3q)))
+              what
+
+        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
+           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ |
+           A.CAST _ (* A GCC extension *)) -> begin
+             let uop' = if uop = A.PREINCR then PlusA else MinusA in
+             if asconst then
+               ignore (warn "PREINCR or PREDECR in constant");
+             let (se, e', t) = doExp false e (AExp None) in
+             let lv = 
+               match e' with 
+                 Lval x -> x
+               | CastE (_, Lval x) -> x (* A GCC extension. The operation is 
+                                         * done at the cast type. The result 
+                                         * is also of the cast type *)
+               | _ -> E.s (error "Expected lval for ++ or --")
+             in
+             let tresult, result = doBinOp uop' e' t one intType in
+             finishExp (se +++ (Set(lv, mkCastT result tresult t, 
+                                    !currentLoc)))
+               e'
+               tresult   (* Should this be t instead ??? *)
+           end
+        | _ -> E.s (error "Unexpected operand for prefix -- or ++")
+    end
+          
+    | A.UNARY((A.POSINCR|A.POSDECR) as uop, e) -> begin
+        match e with 
+          A.COMMA el -> (* GCC extension *)
+            doExp asconst 
+              (A.COMMA (replaceLastInList el 
+                          (fun e -> A.UNARY(uop, e))))
+              what
+        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
+            doExp asconst 
+              (A.QUESTION (e1, A.UNARY(uop, e2q), A.UNARY(uop, e3q)))
+              what
+
+        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
+           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ | 
+           A.CAST _ (* A GCC extension *) ) -> begin
+             if asconst then
+               ignore (warn "POSTINCR or POSTDECR in constant");
+             (* If we do not drop the result then we must save the value *)
+             let uop' = if uop = A.POSINCR then PlusA else MinusA in
+             let (se, e', t) = doExp false e (AExp None) in
+             let lv = 
+               match e' with 
+                 Lval x -> x
+               | CastE (_, Lval x) -> x (* GCC extension. The addition must 
+                                         * be be done at the cast type. The 
+                                         * result of this is also of the cast 
+                                         * type *)
+               | _ -> E.s (error "Expected lval for ++ or --")
+             in
+             let tresult, opresult = doBinOp uop' e' t one intType in
+             let se', result = 
+               if what <> ADrop then 
+                 let tmp = newTempVar t in
+                 se +++ (Set(var tmp, e', !currentLoc)), Lval(var tmp)
+               else
+                 se, e'
+             in
+             finishExp 
+               (se' +++ (Set(lv, mkCastT opresult tresult t, 
+                             !currentLoc)))
+               result
+               tresult   (* Should this be t instead ??? *)
+           end
+        | _ -> E.s (error "Unexpected operand for suffix ++ or --")
+    end
+          
+    | A.BINARY(A.ASSIGN, e1, e2) -> begin
+        match e1 with 
+          A.COMMA el -> (* GCC extension *)
+            doExp asconst 
+              (A.COMMA (replaceLastInList el 
+                          (fun e -> A.BINARY(A.ASSIGN, e, e2))))
+              what
+        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
+            doExp asconst 
+              (A.QUESTION (e1, A.BINARY(A.ASSIGN, e2q, e2), 
+                           A.BINARY(A.ASSIGN, e3q, e2)))
+              what
+        | A.CAST (t, A.SINGLE_INIT e) -> (* GCC extension *)
+            doExp asconst
+              (A.CAST (t, 
+                       A.SINGLE_INIT (A.BINARY(A.ASSIGN, e, 
+                                               A.CAST (t, A.SINGLE_INIT e2)))))
+              what
+
+        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
+           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ ) -> begin
+             if asconst then ignore (warn "ASSIGN in constant");
+             let (se1, e1', lvt) = doExp false e1 (AExp None) in
+             let lv = 
+               match e1' with 
+                 Lval x -> x
+               | _ -> E.s (error "Expected lval for assignment. Got %a\n"
+                             d_plainexp e1')
+             in
+             let (se2, e'', t'') = doExp false e2 (ASet(lv, lvt)) in
+             finishExp (se1 @@ se2) e1' lvt
+           end
+        | _ -> E.s (error "Invalid left operand for ASSIGN")
+    end
+          
+    | A.BINARY((A.ADD|A.SUB|A.MUL|A.DIV|A.MOD|A.BAND|A.BOR|A.XOR|
+      A.SHL|A.SHR|A.EQ|A.NE|A.LT|A.GT|A.GE|A.LE) as bop, e1, e2) -> 
+        let bop' = convBinOp bop in
+        let (se1, e1', t1) = doExp asconst e1 (AExp None) in
+        let (se2, e2', t2) = doExp asconst e2 (AExp None) in
+        let tresult, result = doBinOp bop' e1' t1 e2' t2 in
+        finishExp (se1 @@ se2) result tresult
+          
+          (* assignment operators *)
+    | A.BINARY((A.ADD_ASSIGN|A.SUB_ASSIGN|A.MUL_ASSIGN|A.DIV_ASSIGN|
+      A.MOD_ASSIGN|A.BAND_ASSIGN|A.BOR_ASSIGN|A.SHL_ASSIGN|
+      A.SHR_ASSIGN|A.XOR_ASSIGN) as bop, e1, e2) -> begin
+        match e1 with 
+          A.COMMA el -> (* GCC extension *)
+            doExp asconst 
+              (A.COMMA (replaceLastInList el 
+                          (fun e -> A.BINARY(bop, e, e2))))
+              what
+        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
+            doExp asconst 
+              (A.QUESTION (e1, A.BINARY(bop, e2q, e2), 
+                           A.BINARY(bop, e3q, e2)))
+              what
+
+        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
+           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ |
+           A.CAST _ (* GCC extension *) ) -> begin
+             if asconst then
+               ignore (warn "op_ASSIGN in constant");
+             let bop' = match bop with          
+               A.ADD_ASSIGN -> PlusA
+             | A.SUB_ASSIGN -> MinusA
+             | A.MUL_ASSIGN -> Mult
+             | A.DIV_ASSIGN -> Div
+             | A.MOD_ASSIGN -> Mod
+             | A.BAND_ASSIGN -> BAnd
+             | A.BOR_ASSIGN -> BOr
+             | A.XOR_ASSIGN -> BXor
+             | A.SHL_ASSIGN -> Shiftlt
+             | A.SHR_ASSIGN -> Shiftrt
+             | _ -> E.s (error "binary +=")
+             in
+             let (se1, e1', t1) = doExp false e1 (AExp None) in
+             let lv1 = 
+               match e1' with 
+                 Lval x -> x
+               | CastE (_, Lval x) -> x (* GCC extension. The operation and 
+                                         * the result are at the cast type  *)
+               | _ -> E.s (error "Expected lval for assignment with arith")
+             in
+             let (se2, e2', t2) = doExp false e2 (AExp None) in
+             let tresult, result = doBinOp bop' e1' t1 e2' t2 in
+             (* We must cast the result to the type of the lv1, which may be 
+              * different than t1 if lv1 was a Cast *)
+             let _, result' = castTo tresult (typeOfLval lv1) result in
+             (* The type of the result is the type of the left-hand side  *) 
+             finishExp (se1 @@ se2 +++ 
+                        (Set(lv1, result', !currentLoc)))
+               e1'
+               t1 
+           end
+        | _ -> E.s (error "Unexpected left operand for assignment with arith")
+      end
+               
+          
+    | A.BINARY((A.AND|A.OR), _, _) | A.UNARY(A.NOT, _) -> begin
+        let ce = doCondExp asconst e in
+        (* We must normalize the result to 0 or 1 *)
+        match ce with
+          CEExp (se, ((Const _) as c)) -> 
+            finishExp se (if isConstTrue c then one else zero) intType
+	| CEExp (se, (UnOp(LNot, _, _) as e)) ->
+	    (* already normalized to 0 or 1 *)
+	    finishExp se e intType
+        | CEExp (se, e) ->
+            let e' = 
+              let te = typeOf e in
+              let _, zte = castTo intType te zero in
+              BinOp(Ne, e, zte, te)
+            in
+            finishExp se e' intType
+        | _ -> 
+            let tmp = var (newTempVar intType) in
+            finishExp (compileCondExp ce
+                         (empty +++ (Set(tmp, integer 1, 
+                                         !currentLoc)))
+                         (empty +++ (Set(tmp, integer 0, 
+                                         !currentLoc))))     
+              (Lval tmp)
+              intType
+    end
+
+    | A.CALL(f, args) -> 
+        if asconst then
+          ignore (warn "CALL in constant");
+        let (sf, f', ft') = 
+          match f with                  (* Treat the VARIABLE case separate 
+                                         * becase we might be calling a 
+                                         * function that does not have a 
+                                         * prototype. In that case assume it 
+                                         * takes INTs as arguments  *)
+            A.VARIABLE n -> begin
+              try
+                let vi, _ = lookupVar n in
+                (empty, Lval(var vi), vi.vtype) (* Found. Do not use 
+                                                 * finishExp. Simulate what = 
+                                                 * AExp None  *)
+              with Not_found -> begin
+                ignore (warnOpt "Calling function %s without prototype." n);
+                let ftype = TFun(intType, None, false, 
+                                 [Attr("missingproto",[])]) in
+                (* Add a prototype to the environment *)
+                let proto, _ = 
+                  makeGlobalVarinfo false (makeGlobalVar n ftype) in
+                (* Make it EXTERN *)
+                proto.vstorage <- Extern;
+                IH.add noProtoFunctions proto.vid true;
+                (* Add it to the file as well *)
+                cabsPushGlobal (GVarDecl (proto, !currentLoc));
+                (empty, Lval(var proto), ftype)
+              end
+            end
+          | _ -> doExp false f (AExp None) 
+        in
+        (* Get the result type and the argument types *)
+        let (resType, argTypes, isvar, f'') = 
+          match unrollType ft' with
+            TFun(rt,at,isvar,a) -> (rt,at,isvar,f')
+          | TPtr (t, _) -> begin
+              match unrollType t with 
+                TFun(rt,at,isvar,a) -> (* Make the function pointer 
+                                            * explicit  *)
+                  let f'' = 
+                    match f' with
+                      AddrOf lv -> Lval(lv)
+                    | _ -> Lval(mkMem f' NoOffset)
+                  in
+                  (rt,at,isvar, f'')
+              | x -> 
+                  E.s (error "Unexpected type of the called function %a: %a" 
+                         d_exp f' d_type x)
+          end
+          | x ->  E.s (error "Unexpected type of the called function %a: %a" 
+                         d_exp f' d_type x)
+        in
+        let argTypesList = argsToList argTypes in
+        (* Drop certain qualifiers from the result type *)
+        let resType' = resType in 
+        (* Before we do the arguments we try to intercept a few builtins. For 
+         * these we have defined then with a different type, so we do not 
+         * want to give warnings. We'll just leave the arguments of these
+         * functions alone*)
+        let isSpecialBuiltin =  
+          match f'' with 
+            Lval (Var fv, NoOffset) ->
+              fv.vname = "__builtin_stdarg_start" ||
+              fv.vname = "__builtin_va_arg" ||
+              fv.vname = "__builtin_va_start" ||
+              fv.vname = "__builtin_expect" ||
+              fv.vname = "__builtin_next_arg"
+            | _ -> false
+        in
+          
+        (** If the "--forceRLArgEval" flag was used, make sure
+          we evaluate args right-to-left.
+          Added by Nathan Cooprider. **)
+        let force_right_to_left_evaluation (c, e, t) =
+	  (* If chunk is empty then it is not already evaluated *)
+	  (* constants don't need to be pulled out *)
+          if (!forceRLArgEval && (not (isConstant e)) && 
+	      (not isSpecialBuiltin)) then 
+	    (* create a temporary *)
+	    let tmp = newTempVar t in
+	    (* create an instruction to give the e to the temporary *)
+	    let i = Set(var tmp, e, !currentLoc) in 
+	    (* add the instruction to the chunk *)
+	    (* change the expression to be the temporary *)
+	    (c +++ i, (Lval(var tmp)), t) 
+          else
+	    (c, e, t)
+        in
+        (* Do the arguments. In REVERSE order !!! Both GCC and MSVC do this *)
+        let rec loopArgs 
+            : (string * typ * attributes) list * A.expression list 
+          -> (chunk * exp list) = function
+            | ([], []) -> (empty, [])
+
+            | args, [] -> 
+                if not isSpecialBuiltin then 
+                  ignore (warnOpt 
+                            "Too few arguments in call to %a."
+                            d_exp f');
+		(empty, [])
+
+            | ((_, at, _) :: atypes, a :: args) -> 
+                let (ss, args') = loopArgs (atypes, args) in
+                (* Do not cast as part of translating the argument. We let 
+                 * the castTo to do this work. This was necessary for 
+                 * test/small1/union5, in which a transparent union is passed 
+                 * as an argument *)
+                let (sa, a', att) = force_right_to_left_evaluation
+                                      (doExp false a (AExp None)) in
+                let (_, a'') = castTo att at a' in
+                (ss @@ sa, a'' :: args')
+                  
+            | ([], args) -> (* No more types *)
+                if not isvar && argTypes != None && not isSpecialBuiltin then 
+                  (* Do not give a warning for functions without a prototype*)
+                  ignore (warnOpt "Too many arguments in call to %a" d_exp f');
+                let rec loop = function
+                    [] -> (empty, [])
+                  | a :: args -> 
+                      let (ss, args') = loop args in
+                      let (sa, a', at) = force_right_to_left_evaluation 
+                          (doExp false a (AExp None)) in
+                      (ss @@ sa, a' :: args')
+                in
+                loop args
+        in
+        let (sargs, args') = loopArgs (argTypesList, args) in
+        (* Setup some pointer to the elements of the call. We may change 
+         * these below *)
+        let prechunk: chunk ref = ref (sf @@ sargs) in (* comes before *)
+
+        (* Do we actually have a call, or an expression? *)
+        let piscall: bool ref = ref true in 
+
+        let pf: exp ref = ref f'' in (* function to call *)
+        let pargs: exp list ref = ref args' in (* arguments *)
+        let pis__builtin_va_arg: bool ref = ref false in 
+        let pwhat: expAction ref = ref what in (* what to do with result *)
+
+        let pres: exp ref = ref zero in (* If we do not have a call, this is 
+                                        * the result *)
+        let prestype: typ ref = ref intType in
+
+        let rec dropCasts = function CastE (_, e) -> dropCasts e | e -> e in
+        (* Get the name of the last formal *)
+        let getNameLastFormal () : string = 
+          match !currentFunctionFDEC.svar.vtype with
+            TFun(_, Some args, true, _) -> begin
+              match List.rev args with
+                (last_par_name, _, _) :: _ -> last_par_name
+              | _ -> ""
+            end
+          | _ -> ""
+        in
+
+        (* Try to intercept some builtins *)
+        (match !pf with 
+          Lval(Var fv, NoOffset) -> begin
+            if fv.vname = "__builtin_va_arg" then begin
+              match !pargs with 
+                marker :: SizeOf resTyp :: _ -> begin
+                  (* Make a variable of the desired type *)
+                  let destlv, destlvtyp = 
+                    match !pwhat with 
+                      ASet (lv, lvt) -> lv, lvt
+                    | _ -> var (newTempVar resTyp), resTyp
+                  in
+                  pwhat := (ASet (destlv, destlvtyp));
+                  pargs := [marker; SizeOf resTyp; AddrOf destlv];
+                  pis__builtin_va_arg := true;
+                end
+              | _ -> 
+                  ignore (warn "Invalid call to %s\n" fv.vname);
+            end else if fv.vname = "__builtin_stdarg_start" then begin
+              match !pargs with 
+                marker :: last :: [] -> begin
+                  let isOk = 
+                    match dropCasts last with 
+                      Lval (Var lastv, NoOffset) -> 
+                        lastv.vname = getNameLastFormal ()
+                    | _ -> false
+                  in
+                  if not isOk then 
+                    ignore (warn "The second argument in call to %s should be the last formal argument\n" fv.vname);
+                  
+                  (* Check that "lastv" is indeed the last variable in the 
+                   * prototype and then drop it *)
+                  pargs := [ marker ]
+                end
+              | _ -> 
+                  ignore (warn "Invalid call to %s\n" fv.vname);
+                  
+                  (* We have to turn uses of __builtin_varargs_start into uses 
+                   * of __builtin_stdarg_start (because we have dropped the 
+                   * __builtin_va_alist argument from this function) *)
+                  
+            end else if fv.vname = "__builtin_varargs_start" then begin
+              (* Lookup the prototype for the replacement *)
+              let v, _  = 
+                try lookupGlobalVar "__builtin_stdarg_start" 
+                with Not_found -> E.s (bug "Cannot find __builtin_stdarg_start to replace %s\n" fv.vname)
+              in
+              pf := Lval (var v)
+            end else if fv.vname = "__builtin_next_arg" then begin
+              match !pargs with 
+                last :: [] -> begin
+                  let isOk = 
+                    match dropCasts last with 
+                      Lval (Var lastv, NoOffset) -> 
+                        lastv.vname = getNameLastFormal ()
+                    | _ -> false
+                  in
+                  if not isOk then 
+                    ignore (warn "The argument in call to %s should be the last formal argument\n" fv.vname);
+                  
+                  pargs := [ ]
+                end
+              | _ -> 
+                  ignore (warn "Invalid call to %s\n" fv.vname);
+            end else if fv.vname = "__builtin_constant_p" then begin
+              (* Drop the side-effects *)
+              prechunk := empty;
+
+              (* Constant-fold the argument and see if it is a constant *)
+              (match !pargs with 
+                [ arg ] -> begin 
+                  match constFold true arg with 
+                    Const _ -> piscall := false; 
+                               pres := integer 1; 
+                               prestype := intType
+
+                  | _ -> piscall := false; 
+                         pres := integer 0;
+                         prestype := intType
+                end
+              | _ -> 
+                  ignore (warn "Invalid call to builtin_constant_p"));
+            end
+          end
+        | _ -> ());
+
+
+        (* Now we must finish the call *)
+        if !piscall then begin 
+          let addCall (calldest: lval option) (res: exp) (t: typ) = 
+            prechunk := !prechunk +++
+                (Call(calldest, !pf, !pargs, !currentLoc));
+            pres := res;
+            prestype := t
+          in
+          match !pwhat with 
+            ADrop -> addCall None zero intType
+                
+                (* Set to a variable of corresponding type *)
+          | ASet(lv, vtype) -> 
+              (* Make an exception here for __builtin_va_arg *)
+              if !pis__builtin_va_arg then 
+                addCall None (Lval(lv)) vtype
+              else
+                addCall (Some lv) (Lval(lv)) vtype
+                  
+          | _ -> begin
+              let tmp, restyp' = 
+                match !pwhat with
+                  AExp (Some t) -> newTempVar t, t
+                | _ -> newTempVar resType', resType'
+              in
+              (* Remember that this variable has been created for this 
+               * specific call. We will use this in collapseCallCast and 
+               * above in finishCall. *)
+              IH.add callTempVars tmp.vid ();
+              addCall (Some (var tmp)) (Lval(var tmp)) restyp'
+          end
+        end;
+              
+        finishExp !prechunk !pres !prestype
+
+          
+    | A.COMMA el -> 
+        if asconst then 
+          ignore (warn "COMMA in constant");
+        let rec loop sofar = function
+            [e] -> 
+              let (se, e', t') = doExp false e what in (* Pass on the action *)
+              (sofar @@ se, e', t')
+(*
+              finishExp (sofar @@ se) e' t' (* does not hurt to do it twice. 
+                                             * GN: it seems it does *)
+*)
+          | e :: rest -> 
+              let (se, _, _) = doExp false e ADrop in
+              loop (sofar @@ se) rest
+          | [] -> E.s (error "empty COMMA expression")
+        in
+        loop empty el
+          
+    | A.QUESTION (e1,e2,e3) when what = ADrop -> 
+        if asconst then
+          ignore (warn "QUESTION with ADrop in constant");
+        let (se3,_,_) = doExp false e3 ADrop in
+        let se2 = 
+          match e2 with 
+            A.NOTHING -> skipChunk
+          | _ -> let (se2,_,_) = doExp false e2 ADrop in se2
+        in
+        finishExp (doCondition asconst e1 se2 se3) zero intType
+          
+    | A.QUESTION (e1, e2, e3) -> begin (* what is not ADrop *)
+        (* Compile the conditional expression *)
+        let ce1 = doCondExp asconst e1 in
+        (* Now we must find the type of both branches, in order to compute 
+         * the type of the result *)
+        let se2, e2'o (* is an option. None means use e1 *), t2 = 
+          match e2 with 
+            A.NOTHING -> begin (* The same as the type of e1 *)
+              match ce1 with
+                CEExp (_, e1') -> empty, None, typeOf e1' (* Do not promote 
+                                                             to bool *)
+              | _ -> empty, None, intType
+            end
+          | _ -> 
+              let se2, e2', t2 = doExp asconst e2 (AExp None) in
+              se2, Some e2', t2
+        in
+        (* Do e3 for real *)
+        let se3, e3', t3 = doExp asconst e3 (AExp None) in
+        (* Compute the type of the result *)
+        let tresult = conditionalConversion t2 t3 in
+        match ce1 with
+          CEExp (se1, e1') when isConstFalse e1' && canDrop se2 -> 
+             finishExp (se1 @@ se3) (snd (castTo t3 tresult e3')) tresult
+        | CEExp (se1, e1') when isConstTrue e1' && canDrop se3 -> 
+           begin
+             match e2'o with
+               None -> (* use e1' *)
+                 finishExp (se1 @@ se2) (snd (castTo t2 tresult e1')) tresult
+             | Some e2' -> 
+                 finishExp (se1 @@ se2) (snd (castTo t2 tresult e2')) tresult
+           end
+
+        | _ -> (* Use a conditional *) begin
+            match e2 with 
+              A.NOTHING -> 
+                let tmp = var (newTempVar tresult) in
+                let (se1, _, _) = doExp asconst e1 (ASet(tmp, tresult)) in
+                let (se3, _, _) = doExp asconst e3 (ASet(tmp, tresult)) in
+                finishExp (se1 @@ ifChunk (Lval(tmp)) lu
+                                    skipChunk se3)
+                  (Lval(tmp))
+                  tresult
+            | _ -> 
+                let lv, lvt = 
+                  match what with
+                  | ASet (lv, lvt) -> lv, lvt
+                  | _ -> 
+                      let tmp = newTempVar tresult in
+                      var tmp, tresult
+                in
+                (* Now do e2 and e3 for real *)
+                let (se2, _, _) = doExp asconst e2 (ASet(lv, lvt)) in
+                let (se3, _, _) = doExp asconst e3 (ASet(lv, lvt)) in
+                finishExp (doCondition asconst e1 se2 se3) (Lval(lv)) tresult
+        end
+
+(*
+        (* Do these only to collect the types  *)
+        let se2, e2', t2' = 
+          match e2 with 
+            A.NOTHING -> (* A GNU thing. Use e1 as e2 *) 
+              doExp isconst e1 (AExp None)
+          | _ -> doExp isconst e2 (AExp None) in 
+        (* Do e3 for real *)
+        let se3, e3', t3' = doExp isconst e3 (AExp None) in
+        (* Compute the type of the result *)
+        let tresult = conditionalConversion e2' t2' e3' t3' in
+        if     (isEmpty se2 || e2 = A.NOTHING) 
+            && isEmpty se3 && isconst then begin 
+          (* Use the Question. This allows Question in initializers without 
+          * having to do constant folding  *)
+          let se1, e1', t1 = doExp isconst e1 (AExp None) in
+          ignore (checkBool t1 e1');
+          let e2'' = 
+            if e2 = A.NOTHING then 
+              mkCastT e1' t1 tresult 
+            else mkCastT e2' t2' tresult (* We know se2 is empty *)
+          in
+          let e3'' = mkCastT e3' t3' tresult in
+          let resexp = 
+            match e1' with
+              Const(CInt64(i, _, _)) when i <> Int64.zero -> e2''
+            | Const(CInt64(z, _, _)) when z = Int64.zero -> e3''
+            | _ -> Question(e1', e2'', e3'')
+          in
+          finishExp se1 resexp tresult
+        end else begin (* Now use a conditional *)
+          match e2 with 
+            A.NOTHING -> 
+              let tmp = var (newTempVar tresult) in
+              let (se1, _, _) = doExp isconst e1 (ASet(tmp, tresult)) in
+              let (se3, _, _) = doExp isconst e3 (ASet(tmp, tresult)) in
+              finishExp (se1 @@ ifChunk (Lval(tmp)) lu
+                                  skipChunk se3)
+                (Lval(tmp))
+                tresult
+          | _ -> 
+              let lv, lvt = 
+                match what with
+                | ASet (lv, lvt) -> lv, lvt
+                | _ -> 
+                    let tmp = newTempVar tresult in
+                    var tmp, tresult
+              in
+              (* Now do e2 and e3 for real *)
+              let (se2, _, _) = doExp isconst e2 (ASet(lv, lvt)) in
+              let (se3, _, _) = doExp isconst e3 (ASet(lv, lvt)) in
+              finishExp (doCondition isconst e1 se2 se3) (Lval(lv)) tresult
+        end
+*)
+    end
+
+    | A.GNU_BODY b -> begin
+        (* Find the last A.COMPUTATION and remember it. This one is invoked 
+         * on the reversed list of statements. *)
+        let rec findLastComputation = function
+            s :: _  -> 
+              let rec findLast = function
+                  A.SEQUENCE (_, s, loc) -> findLast s
+                | CASE (_, s, _) -> findLast s
+                | CASERANGE (_, _, s, _) -> findLast s
+                | LABEL (_, s, _) -> findLast s
+                | (A.COMPUTATION _) as s -> s
+                | _ -> raise Not_found
+              in
+              findLast s
+          | [] -> raise Not_found
+        in
+        (* Save the previous data *)
+        let old_gnu = ! gnu_body_result in
+        let lastComp, isvoidbody =
+          match what with 
+            ADrop -> (* We are dropping the result *)
+              A.NOP cabslu, true
+          | _ -> 
+              try findLastComputation (List.rev b.A.bstmts), false    
+              with Not_found -> 
+                E.s (error "Cannot find COMPUTATION in GNU.body")
+                  (*                A.NOP cabslu, true *)
+        in
+        (* Prepare some data to be filled by doExp *)
+        let data : (exp * typ) option ref = ref None in
+        gnu_body_result := (lastComp, data);
+
+        let se = doBody b in
+
+        gnu_body_result := old_gnu;
+        match !data with
+          None when isvoidbody -> finishExp se zero voidType
+        | None -> E.s (bug "Cannot find COMPUTATION in GNU.body")
+        | Some (e, t) -> finishExp se e t
+    end
+
+    | A.LABELADDR l -> begin (* GCC's taking the address of a label *)
+        let l = lookupLabel l in (* To support locallly declared labels *)
+        let addrval =
+          try H.find gotoTargetHash l
+          with Not_found -> begin
+            let res = !gotoTargetNextAddr in
+            incr gotoTargetNextAddr;
+            H.add gotoTargetHash l res;
+            res
+          end
+        in
+        finishExp empty (mkCast (integer addrval) voidPtrType) voidPtrType
+    end
+
+    | A.EXPR_PATTERN _ -> E.s (E.bug "EXPR_PATTERN in cabs2cil input")
+
+  with e -> begin
+    ignore (E.log "error in doExp (%s)@!" (Printexc.to_string e));
+    E.hadErrors := true;
+    (i2c (dInstr (dprintf "booo_exp(%t)" d_thisloc) !currentLoc),
+     integer 0, intType)
+  end
+
+(* bop is always the arithmetic version. Change it to the appropriate pointer 
+ * version if necessary *)
+and doBinOp (bop: binop) (e1: exp) (t1: typ) (e2: exp) (t2: typ) : typ * exp =
+  let doArithmetic () = 
+    let tres = arithmeticConversion t1 t2 in
+    (* Keep the operator since it is arithmetic *)
+    tres, 
+    optConstFoldBinOp false bop (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) tres
+  in
+  let doArithmeticComp () = 
+    let tres = arithmeticConversion t1 t2 in
+    (* Keep the operator since it is arithemtic *)
+    intType, 
+    optConstFoldBinOp false bop 
+      (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) intType
+  in
+  let doIntegralArithmetic () = 
+    let tres = unrollType (arithmeticConversion t1 t2) in
+    match tres with
+      TInt _ -> 
+        tres,
+        optConstFoldBinOp false bop 
+          (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) tres
+    | _ -> E.s (error "%a operator on a non-integer type" d_binop bop)
+  in
+  let pointerComparison e1 t1 e2 t2 = 
+    (* XL: Do not cast both sides -- what's the point? *)
+    intType,
+    optConstFoldBinOp false bop e1 e2 intType
+  in
+
+  match bop with
+    (Mult|Div) -> doArithmetic ()
+  | (Mod|BAnd|BOr|BXor) -> doIntegralArithmetic ()
+  | (Shiftlt|Shiftrt) -> (* ISO 6.5.7. Only integral promotions. The result 
+                          * has the same type as the left hand side *)
+      if !msvcMode then
+        (* MSVC has a bug. We duplicate it here *)
+        doIntegralArithmetic ()
+      else
+        let t1' = integralPromotion t1 in
+        let t2' = integralPromotion t2 in
+        t1', 
+        optConstFoldBinOp false bop (mkCastT e1 t1 t1') (mkCastT e2 t2 t2') t1'
+
+  | (PlusA|MinusA) 
+      when isArithmeticType t1 && isArithmeticType t2 -> doArithmetic ()
+  | (Eq|Ne|Lt|Le|Ge|Gt) 
+      when isArithmeticType t1 && isArithmeticType t2 -> 
+        doArithmeticComp ()
+  | PlusA when isPointerType t1 && isIntegralType t2 -> 
+      t1, 
+      optConstFoldBinOp false PlusPI e1 
+        (mkCastT e2 t2 (integralPromotion t2)) t1
+  | PlusA when isIntegralType t1 && isPointerType t2 -> 
+      t2, 
+      optConstFoldBinOp false PlusPI e2 
+        (mkCastT e1 t1 (integralPromotion t1)) t2
+  | MinusA when isPointerType t1 && isIntegralType t2 -> 
+      t1, 
+      optConstFoldBinOp false MinusPI e1 
+        (mkCastT e2 t2 (integralPromotion t2)) t1
+  | MinusA when isPointerType t1 && isPointerType t2 ->
+      let commontype = t1 in
+      intType,
+      optConstFoldBinOp false MinusPP (mkCastT e1 t1 commontype) 
+                                      (mkCastT e2 t2 commontype) intType
+  | (Le|Lt|Ge|Gt|Eq|Ne) when isPointerType t1 && isPointerType t2 ->
+      pointerComparison e1 t1 e2 t2
+  | (Eq|Ne) when isPointerType t1 && isZero e2 -> 
+      pointerComparison e1 t1 (mkCastT zero !upointType t1) t1
+  | (Eq|Ne) when isPointerType t2 && isZero e1 -> 
+      pointerComparison (mkCastT zero !upointType t2) t2 e2 t2
+
+
+  | (Eq|Ne|Le|Lt|Ge|Gt) when isPointerType t1 && isArithmeticType t2 ->
+      ignore (warnOpt "Comparison of pointer and non-pointer");
+      (* Cast both values to void * *)
+      doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
+                  (mkCastT e2 t2 voidPtrType) voidPtrType
+  | (Eq|Ne|Le|Lt|Ge|Gt) when isArithmeticType t1 && isPointerType t2 ->
+      ignore (warnOpt "Comparison of pointer and non-pointer");
+      (* Cast both values to void * *)
+      doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
+                  (mkCastT e2 t2 voidPtrType) voidPtrType
+
+  | _ -> E.s (error "doBinOp: %a\n" d_plainexp (BinOp(bop,e1,e2,intType)))
+
+(* Constant fold a conditional. This is because we want to avoid having 
+ * conditionals in the initializers. So, we try very hard to avoid creating 
+ * new statements. *)
+and doCondExp (asconst: bool) (** Try to evaluate the conditional expression 
+                                * to TRUE or FALSE, because it occurs in a 
+                                * constant *)
+              (e: A.expression) : condExpRes = 
+  let rec addChunkBeforeCE (c0: chunk) = function
+      CEExp (c, e) -> CEExp (c0 @@ c, e)
+    | CEAnd (ce1, ce2) -> CEAnd (addChunkBeforeCE c0 ce1, ce2)
+    | CEOr (ce1, ce2) -> CEOr (addChunkBeforeCE c0 ce1, ce2)
+    | CENot ce1 -> CENot (addChunkBeforeCE c0 ce1)
+  in
+  let rec canDropCE = function
+      CEExp (c, e) -> canDrop c
+    | CEAnd (ce1, ce2) | CEOr (ce1, ce2) -> canDropCE ce1 && canDropCE ce2
+    | CENot (ce1) -> canDropCE ce1
+  in
+  match e with 
+    A.BINARY (A.AND, e1, e2) -> begin
+      let ce1 = doCondExp asconst e1 in
+      let ce2 = doCondExp asconst e2 in
+      match ce1, ce2 with
+        CEExp (se1, ((Const _) as ci1)), _ -> 
+          if isConstTrue ci1 then 
+            addChunkBeforeCE se1 ce2
+          else 
+            (* se2 might contain labels so we cannot always drop it *)
+            if canDropCE ce2 then 
+              ce1 
+            else 
+              CEAnd (ce1, ce2)
+      | CEExp(se1, e1'), CEExp (se2, e2') when 
+              !useLogicalOperators && isEmpty se1 && isEmpty se2 -> 
+          CEExp (empty, BinOp(LAnd, 
+                              mkCast e1' intType, 
+                              mkCast e2' intType, intType))
+      | _ -> CEAnd (ce1, ce2)
+    end
+
+  | A.BINARY (A.OR, e1, e2) -> begin
+      let ce1 = doCondExp asconst e1 in
+      let ce2 = doCondExp asconst e2 in
+      match ce1, ce2 with
+        CEExp (se1, (Const(CInt64 _) as ci1)), _ -> 
+          if isConstFalse ci1 then 
+            addChunkBeforeCE se1 ce2
+          else 
+            (* se2 might contain labels so we cannot drop it *)
+            if canDropCE ce2 then 
+              ce1 
+            else 
+              CEOr (ce1, ce2)
+
+      | CEExp (se1, e1'), CEExp (se2, e2') when 
+              !useLogicalOperators && isEmpty se1 && isEmpty se2 ->
+          CEExp (empty, BinOp(LOr, mkCast e1' intType, 
+                              mkCast e2' intType, intType))
+      | _ -> CEOr (ce1, ce2)
+    end
+
+  | A.UNARY(A.NOT, e1) -> begin
+      match doCondExp asconst e1 with 
+        CEExp (se1, (Const _ as ci1)) -> 
+          if isConstFalse ci1 then 
+            CEExp (se1, one) 
+          else
+            CEExp (se1, zero)
+      | CEExp (se1, e) when isEmpty se1 -> 
+          let t = typeOf e in
+          if not ((isPointerType t) || (isArithmeticType t))then
+            E.s (error "Bad operand to !");
+          CEExp (empty, UnOp(LNot, e, intType))
+
+      | ce1 -> CENot ce1
+  end
+
+  | _ -> 
+      let (se, e, t) = doExp asconst e (AExp None) in
+      ignore (checkBool t e);
+      CEExp (se, if !lowerConstants then constFold asconst e else e)
+
+and compileCondExp (ce: condExpRes) (st: chunk) (sf: chunk) : chunk = 
+  match ce with 
+  | CEAnd (ce1, ce2) ->
+      let (sf1, sf2) = 
+        (* If sf is small then will copy it *)
+        try (sf, duplicateChunk sf) 
+        with Failure _ -> 
+          let lab = newLabelName "_L" in
+          (gotoChunk lab lu, consLabel lab sf !currentLoc false)
+      in
+      let st' = compileCondExp ce2 st sf1 in
+      let sf' = sf2 in
+      compileCondExp ce1 st' sf'
+        
+  | CEOr (ce1, ce2) -> 
+      let (st1, st2) = 
+        (* If st is small then will copy it *)
+        try (st, duplicateChunk st) 
+        with Failure _ -> 
+          let lab = newLabelName "_L" in
+          (gotoChunk lab lu, consLabel lab st !currentLoc false)
+      in
+      let st' = st1 in
+      let sf' = compileCondExp ce2 st2 sf in
+      compileCondExp ce1 st' sf'
+        
+  | CENot ce1 -> compileCondExp ce1 sf st
+        
+  | CEExp (se, e) -> begin
+      match e with 
+        Const(CInt64(i,_,_)) when i <> Int64.zero && canDrop sf -> se @@ st
+      | Const(CInt64(z,_,_)) when z = Int64.zero && canDrop st -> se @@ sf
+      | _ -> se @@ ifChunk e !currentLoc st sf
+  end
+ 
+
+(* A special case for conditionals *)
+and doCondition (isconst: bool) (* If we are in constants, we do our best to 
+                                 * eliminate the conditional *)
+                (e: A.expression) 
+                (st: chunk)
+                (sf: chunk) : chunk = 
+  compileCondExp (doCondExp isconst e) st sf
+
+
+and doPureExp (e : A.expression) : exp = 
+  let (se, e', _) = doExp true e (AExp None) in
+  if isNotEmpty se then
+   E.s (error "doPureExp: not pure");
+  e'
+
+and doInitializer
+    (vi: varinfo)
+    (inite: A.init_expression) 
+   (* Return the accumulated chunk, the initializer and the new type (might be 
+    * different for arrays) *)
+  : chunk * init * typ = 
+
+  (* Setup the pre-initializer *)
+  let topPreInit = ref NoInitPre in
+  if debugInit then 
+    ignore (E.log "\nStarting a new initializer for %s : %a\n" 
+              vi.vname d_type vi.vtype);
+  let topSetupInit (o: offset) (e: exp) = 
+    if debugInit then 
+      ignore (E.log " set %a := %a\n"  d_lval (Var vi, o) d_exp e);
+    let newinit = setOneInit !topPreInit o e in
+    if newinit != !topPreInit then topPreInit := newinit
+  in
+  let acc, restl = 
+    let so = makeSubobj vi vi.vtype NoOffset in
+    doInit vi.vglob topSetupInit so empty [ (A.NEXT_INIT, inite) ] 
+  in
+  if restl <> [] then 
+    ignore (warn "Ignoring some initializers");
+  (* sm: we used to do array-size fixups here, but they only worked
+   * for toplevel array types; now, collectInitializer does the job,
+   * including for nested array types *)
+  let typ' = unrollType vi.vtype in
+  if debugInit then 
+    ignore (E.log "Collecting the initializer for %s\n" vi.vname);
+  let (init, typ'') = collectInitializer !topPreInit typ' in
+  if debugInit then
+    ignore (E.log "Finished the initializer for %s\n  init=%a\n  typ=%a\n  acc=%a\n" 
+           vi.vname d_init init d_type typ' d_chunk acc);
+  acc, init, typ''
+
+
+  
+(* Consume some initializers. Watch out here. Make sure we use only 
+ * tail-recursion because these things can be big.  *)
+and doInit
+    (isconst: bool)  
+    (setone: offset -> exp -> unit) (* Use to announce an intializer *)
+    (so: subobj)
+    (acc: chunk)
+    (initl: (A.initwhat * A.init_expression) list)
+
+    (* Return the resulting chunk along with some unused initializers *)
+  : chunk * (A.initwhat * A.init_expression) list = 
+
+  let whoami () = d_lval () (Var so.host, so.soOff) in
+  
+  let initl1 = 
+    match initl with
+    | (A.NEXT_INIT, 
+       A.SINGLE_INIT (A.CAST ((s, dt), ie))) :: rest -> 
+         let s', dt', ie' = preprocessCast s dt ie in
+         (A.NEXT_INIT, A.SINGLE_INIT (A.CAST ((s', dt'), ie'))) :: rest
+    | _ -> initl
+  in
+      (* Sometimes we have a cast in front of a compound (in GCC). This 
+       * appears as a single initializer. Ignore the cast  *)
+  let initl2 = 
+    match initl1 with
+      (what, 
+       A.SINGLE_INIT (A.CAST (_, A.COMPOUND_INIT ci))) :: rest -> 
+         (what, A.COMPOUND_INIT ci) :: rest
+    | _ -> initl1
+  in
+  let allinitl = initl2 in
+
+  if debugInit then begin
+    ignore (E.log "doInit for %t %s (current %a). Looking at: " whoami
+              (if so.eof then "(eof)" else "")
+              d_lval (Var so.host, so.curOff));
+    (match allinitl with 
+      [] -> ignore (E.log "[]")
+    | (what, ie) :: _ -> 
+        withCprint 
+          Cprint.print_init_expression (A.COMPOUND_INIT [(what, ie)]));
+    ignore (E.log "\n");
+  end;
+  match unrollType so.soTyp, allinitl with 
+    _, [] -> acc, [] (* No more initializers return *)
+
+        (* No more subobjects *)
+  | _, (A.NEXT_INIT, _) :: _ when so.eof -> acc, allinitl
+    
+
+        (* If we are at an array of characters and the initializer is a 
+         * string literal (optionally enclosed in braces) then explode the 
+         * string into characters *)
+  | TArray(bt, leno, _), 
+      (A.NEXT_INIT, 
+       (A.SINGLE_INIT(A.CONSTANT (A.CONST_STRING s))|
+       A.COMPOUND_INIT 
+         [(A.NEXT_INIT, 
+           A.SINGLE_INIT(A.CONSTANT 
+                           (A.CONST_STRING s)))])) :: restil
+    when (match unrollType bt with
+            TInt((IChar|IUChar|ISChar), _) -> true
+          | TInt _ ->
+              (*Base type is a scalar other than char. Maybe a wchar_t?*)
+	      E.s (error "Using a string literal to initialize something other than a character array.\n")
+          | _ ->  false (* OK, this is probably an array of strings. Handle *)
+         )              (* it with the other arrays below.*)
+    ->
+      let charinits =
+	let init c = A.NEXT_INIT, A.SINGLE_INIT(A.CONSTANT (A.CONST_CHAR [c]))
+	in
+	let collector =
+	  (* ISO 6.7.8 para 14: final NUL added only if no size specified, or
+	   * if there is room for it; btw, we can't rely on zero-init of
+	   * globals, since this array might be a local variable *)
+          if ((isNone leno) or ((String.length s) < (integerArrayLength leno)))
+            then ref [init Int64.zero]
+            else ref []  
+        in
+	for pos = String.length s - 1 downto 0 do
+	  collector := init (Int64.of_int (Char.code (s.[pos]))) :: !collector
+	done;
+	!collector
+      in
+      (* Create a separate object for the array *)
+      let so' = makeSubobj so.host so.soTyp so.soOff in 
+      (* Go inside the array *)
+      let leno = integerArrayLength leno in
+      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
+      normalSubobj so';
+      let acc', initl' = doInit isconst setone so' acc charinits in
+      if initl' <> [] then 
+        ignore (warn "Too many initializers for character array %t" whoami);
+      (* Advance past the array *)
+      advanceSubobj so;
+      (* Continue *)
+      let res = doInit isconst setone so acc' restil in
+      res
+
+        (* If we are at an array of WIDE characters and the initializer is a 
+         * WIDE string literal (optionally enclosed in braces) then explore
+         * the WIDE string into characters *)
+  (* [weimer] Wed Jan 30 15:38:05 PST 2002
+   * Despite what the compiler says, this match case is used and it is
+   * important. *)
+  | TArray(bt, leno, _), 
+      (A.NEXT_INIT, 
+       (A.SINGLE_INIT(A.CONSTANT (A.CONST_WSTRING s)) |
+       A.COMPOUND_INIT 
+         [(A.NEXT_INIT, 
+           A.SINGLE_INIT(A.CONSTANT 
+                           (A.CONST_WSTRING s)))])) :: restil
+    when(let bt' = unrollType bt in
+         match bt' with 
+           (* compare bt to wchar_t, ignoring signed vs. unsigned *)
+	   TInt _ when (bitsSizeOf bt') = (bitsSizeOf !wcharType) -> true
+	 | TInt _ ->
+              (*Base type is a scalar other than wchar_t.  Maybe a char?*)
+	      E.s (error "Using a wide string literal to initialize something other than a wchar_t array.\n")
+	 | _ -> false (* OK, this is probably an array of strings. Handle *)
+        )             (* it with the other arrays below.*)
+    -> 
+      let maxWChar =  (*  (2**(bitsSizeOf !wcharType)) - 1  *)
+        Int64.sub (Int64.shift_left Int64.one (bitsSizeOf !wcharType)) 
+          Int64.one in
+      let charinits = 
+	let init c = 
+	  if (compare c maxWChar > 0) then (* if c > maxWChar *)
+	    E.s (error "cab2cil:doInit:character 0x%Lx too big." c);
+          A.NEXT_INIT, 
+          A.SINGLE_INIT(A.CONSTANT (A.CONST_INT (Int64.to_string c)))
+	in
+        (List.map init s) @
+        (
+	  (* ISO 6.7.8 para 14: final NUL added only if no size specified, or
+	   * if there is room for it; btw, we can't rely on zero-init of
+	   * globals, since this array might be a local variable *)
+          if ((isNone leno) or ((List.length s) < (integerArrayLength leno)))
+            then [init Int64.zero]
+            else [])
+(*
+        List.map 
+          (fun c -> 
+	    if (compare c maxWChar > 0) then (* if c > maxWChar *)
+	      E.s (error "cab2cil:doInit:character 0x%Lx too big." c)
+	    else
+              (A.NEXT_INIT, 
+               A.SINGLE_INIT(A.CONSTANT (A.CONST_INT (Int64.to_string c)))))
+      s
+*)
+      in
+      (* Create a separate object for the array *)
+      let so' = makeSubobj so.host so.soTyp so.soOff in 
+      (* Go inside the array *)
+      let leno = integerArrayLength leno in
+      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
+      normalSubobj so';
+      let acc', initl' = doInit isconst setone so' acc charinits in
+      if initl' <> [] then 
+        (* sm: see above regarding ISO 6.7.8 para 14, which is not implemented
+         * for wchar_t because, as far as I can tell, we don't even put in
+         * the automatic NUL (!) *)
+        ignore (warn "Too many initializers for wchar_t array %t" whoami);
+      (* Advance past the array *)
+      advanceSubobj so;
+      (* Continue *)
+      doInit isconst setone so acc' restil
+                    
+      (* If we are at an array and we see a single initializer then it must 
+       * be one for the first element *)
+  | TArray(bt, leno, al), (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil  -> 
+      (* Grab the length if there is one *)
+      let leno = integerArrayLength leno in
+      so.stack <- InArray(so.soOff, bt, leno, ref 0) :: so.stack; 
+      normalSubobj so;
+      (* Start over with the fields *)
+      doInit isconst setone so acc allinitl
+
+    (* If we are at a composite and we see a single initializer of the same 
+     * type as the composite then grab it all. If the type is not the same 
+     * then we must go on and try to initialize the fields *)
+  | TComp (comp, _), (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil -> 
+      let se, oneinit', t' = doExp isconst oneinit (AExp None) in
+      if (match unrollType t' with 
+             TComp (comp', _) when comp'.ckey = comp.ckey -> true 
+            | _ -> false) 
+      then begin
+        (* Initialize the whole struct *)
+        setone so.soOff oneinit';
+        (* Advance to the next subobject *)
+        advanceSubobj so;
+        doInit isconst setone so (acc @@ se) restil
+      end else begin (* Try to initialize fields *)
+        let toinit = fieldsToInit comp None in
+        so.stack <- InComp(so.soOff, comp, toinit) :: so.stack;
+        normalSubobj so;
+        doInit isconst setone so acc allinitl
+      end
+
+     (* A scalar with a single initializer *)
+  | _, (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil ->  
+      let se, oneinit', t' = doExp isconst oneinit (AExp(Some so.soTyp)) in
+(*
+      ignore (E.log "oneinit'=%a, t'=%a, so.soTyp=%a\n" 
+           d_exp oneinit' d_type t' d_type so.soTyp);
+*)
+      setone so.soOff (mkCastT oneinit' t' so.soTyp);
+      (* Move on *)
+      advanceSubobj so; 
+      doInit isconst setone so (acc @@ se) restil
+
+
+     (* An array with a compound initializer. The initializer is for the 
+      * array elements *)
+  | TArray (bt, leno, _), (A.NEXT_INIT, A.COMPOUND_INIT initl) :: restil -> 
+      (* Create a separate object for the array *)
+      let so' = makeSubobj so.host so.soTyp so.soOff in 
+      (* Go inside the array *)
+      let leno = integerArrayLength leno in
+      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
+      normalSubobj so';
+      let acc', initl' = doInit isconst setone so' acc initl in
+      if initl' <> [] then 
+        ignore (warn "Too many initializers for array %t" whoami);
+      (* Advance past the array *)
+      advanceSubobj so;
+      (* Continue *)
+      let res = doInit isconst setone so acc' restil in
+      res
+
+   (* We have a designator that tells us to select the matching union field. 
+    * This is to support a GCC extension *)
+  | TComp(ci, _), [(A.NEXT_INIT,
+                    A.COMPOUND_INIT [(A.INFIELD_INIT ("___matching_field", 
+                                                     A.NEXT_INIT), 
+                                      A.SINGLE_INIT oneinit)])] 
+                      when not ci.cstruct -> 
+      (* Do the expression to find its type *)
+      let _, _, t' = doExp isconst oneinit (AExp None) in
+      let tsig = typeSigWithAttrs (fun _ -> []) t' in
+      let rec findField = function
+          [] -> E.s (error "Cannot find matching union field in cast")
+        | fi :: rest 
+           when Util.equals (typeSigWithAttrs (fun _ -> []) fi.ftype) tsig 
+           -> fi
+        | _ :: rest -> findField rest
+      in
+      let fi = findField ci.cfields in
+      (* Change the designator and redo *)
+      doInit isconst setone so acc [(A.INFIELD_INIT (fi.fname, A.NEXT_INIT),
+                                     A.SINGLE_INIT oneinit)]
+        
+
+        (* A structure with a composite initializer. We initialize the fields*)
+  | TComp (comp, _), (A.NEXT_INIT, A.COMPOUND_INIT initl) :: restil ->
+      (* Create a separate subobject iterator *)
+      let so' = makeSubobj so.host so.soTyp so.soOff in
+      (* Go inside the comp *)
+      so'.stack <- [InComp(so'.curOff, comp, fieldsToInit comp None)];
+      normalSubobj so';
+      let acc', initl' = doInit isconst setone so' acc initl in
+      if initl' <> [] then 
+        ignore (warn "Too many initializers for structure");
+      (* Advance past the structure *)
+      advanceSubobj so;
+      (* Continue *)
+      doInit isconst setone so acc' restil
+
+        (* A scalar with a initializer surrounded by braces *)
+  | _, (A.NEXT_INIT, A.COMPOUND_INIT [(A.NEXT_INIT, 
+                                       A.SINGLE_INIT oneinit)]) :: restil ->
+      let se, oneinit', t' = doExp isconst oneinit (AExp(Some so.soTyp)) in
+      setone so.soOff (mkCastT oneinit' t' so.soTyp);
+      (* Move on *)
+      advanceSubobj so; 
+      doInit isconst setone so (acc @@ se) restil
+
+  | t, (A.NEXT_INIT, _) :: _ -> 
+      E.s (unimp "doInit: unexpected NEXT_INIT for %a\n" d_type t);
+
+   (* We have a designator *)        
+  | _, (what, ie) :: restil when what != A.NEXT_INIT -> 
+      (* Process a designator and position to the designated subobject *)
+      let rec addressSubobj 
+          (so: subobj) 
+          (what: A.initwhat) 
+          (acc: chunk) : chunk = 
+        (* Always start from the current element *)
+        so.stack <- []; so.eof <- false; 
+        normalSubobj so;
+        let rec address (what: A.initwhat) (acc: chunk)  : chunk = 
+          match what with 
+            A.NEXT_INIT -> acc
+          | A.INFIELD_INIT (fn, whatnext) -> begin
+              match unrollType so.soTyp with 
+                TComp (comp, _) -> 
+                  let toinit = fieldsToInit comp (Some fn) in
+                  so.stack <- InComp(so.soOff, comp, toinit) :: so.stack;
+                  normalSubobj so;
+                  address whatnext acc
+                    
+              | _ -> E.s (error "Field designator %s not in a struct " fn)
+          end
+                
+          | A.ATINDEX_INIT(idx, whatnext) -> begin
+              match unrollType so.soTyp with 
+                TArray (bt, leno, _) -> 
+                  let ilen = integerArrayLength leno in
+                  let nextidx', doidx = 
+                    let (doidx, idxe', _) = 
+                      doExp true idx (AExp(Some intType)) in
+                    match constFold true idxe', isNotEmpty doidx with
+                      Const(CInt64(x, _, _)), false -> Int64.to_int x, doidx
+                    | _ -> E.s (error 
+                      "INDEX initialization designator is not a constant")
+                  in
+                  if nextidx' < 0 || nextidx' >= ilen then
+                    E.s (error "INDEX designator is outside bounds");
+                  so.stack <- 
+                     InArray(so.soOff, bt, ilen, ref nextidx') :: so.stack;
+                  normalSubobj so;
+                  address whatnext (acc @@ doidx)
+                    
+              | _ -> E.s (error "INDEX designator for a non-array")
+          end 
+                
+          | A.ATINDEXRANGE_INIT _ -> 
+              E.s (bug "addressSubobj: INDEXRANGE")
+        in
+        address what acc
+      in
+      (* First expand the INDEXRANGE by making copies *)
+      let rec expandRange (top: A.initwhat -> A.initwhat) = function
+        | A.INFIELD_INIT (fn, whatnext) -> 
+            expandRange (fun what -> top (A.INFIELD_INIT(fn, what))) whatnext
+        | A.ATINDEX_INIT (idx, whatnext) ->
+            expandRange (fun what -> top (A.ATINDEX_INIT(idx, what))) whatnext
+
+        | A.ATINDEXRANGE_INIT (idxs, idxe) -> 
+            let (doidxs, idxs', _) = 
+              doExp true idxs (AExp(Some intType)) in
+            let (doidxe, idxe', _) = 
+              doExp true idxe (AExp(Some intType)) in
+            if isNotEmpty doidxs || isNotEmpty doidxe then 
+              E.s (error "Range designators are not constants\n");
+            let first, last = 
+              match constFold true idxs', constFold true idxe' with
+                Const(CInt64(s, _, _)), 
+                Const(CInt64(e, _, _)) -> 
+                  Int64.to_int s, Int64.to_int e
+              | _ -> E.s (error 
+                 "INDEX_RANGE initialization designator is not a constant")
+            in
+            if first < 0 || first > last then 
+              E.s (error 
+                     "start index larger than end index in range initializer");
+            let rec loop (i: int) = 
+              if i > last then restil
+              else 
+                (top (A.ATINDEX_INIT(A.CONSTANT(A.CONST_INT(string_of_int i)),
+                                     A.NEXT_INIT)), ie) 
+                :: loop (i + 1) 
+            in
+            doInit isconst setone so acc (loop first)
+
+        | A.NEXT_INIT -> (* We have not found any RANGE *) 
+            let acc' = addressSubobj so what acc in
+            doInit isconst setone so (acc @@ acc') 
+              ((A.NEXT_INIT, ie) :: restil)
+      in
+      expandRange (fun x -> x) what
+  
+  | t, (what, ie) :: _ -> 
+      E.s (bug "doInit: cases for t=%a" d_type t) 
+
+
+(* Create and add to the file (if not already added) a global. Return the 
+ * varinfo *)
+and createGlobal (specs : (typ * storage * bool * A.attribute list)) 
+                 (((n,ndt,a,cloc), inite) : A.init_name) : varinfo = 
+  try
+    if debugGlobal then 
+      ignore (E.log "createGlobal: %s\n" n);
+            (* Make a first version of the varinfo *)
+    let vi = makeVarInfoCabs ~isformal:false 
+                             ~isglobal:true (convLoc cloc) specs (n,ndt,a) in
+    (* Add the variable to the environment before doing the initializer 
+     * because it might refer to the variable itself *)
+    if isFunctionType vi.vtype then begin
+      if inite != A.NO_INIT  then
+        E.s (error "Function declaration with initializer (%s)\n"
+               vi.vname);
+      (* sm: if it's a function prototype, and the storage class *)
+      (* isn't specified, make it 'extern'; this fixes a problem *)
+      (* with no-storage prototype and static definition *)
+      if vi.vstorage = NoStorage then 
+        (*(trace "sm" (dprintf "adding extern to prototype of %s\n" n));*)
+        vi.vstorage <- Extern;
+    end;
+    let vi, alreadyInEnv = makeGlobalVarinfo (inite != A.NO_INIT) vi in
+(*
+    ignore (E.log "createGlobal %a: %s type=%a\n" 
+       d_loc (convLoc cloc) vi.vname d_plaintype vi.vtype);
+*)
+            (* Do the initializer and complete the array type if necessary *)
+    let init : init option = 
+      if inite = A.NO_INIT then 
+        None
+      else 
+        let se, ie', et = doInitializer vi inite in
+        (* Maybe we now have a better type *)
+        vi.vtype <- et;
+        if isNotEmpty se then 
+          E.s (error "global initializer");
+        Some ie'
+    in
+
+    try
+      let oldloc = H.find alreadyDefined vi.vname in
+      if init != None then begin
+        E.s (error "Global %s was already defined at %a\n" 
+               vi.vname d_loc oldloc);
+      end;
+      if debugGlobal then 
+        ignore (E.log " global %s was already defined\n" vi.vname);
+      (* Do not declare it again *)
+      vi
+    with Not_found -> begin
+      (* Not already defined *)
+      if debugGlobal then 
+        ignore (E.log " first definition for %s\n" vi.vname);
+      if init != None then begin
+        (* weimer: Sat Dec  8 17:43:34  2001
+         * MSVC NT Kernel headers include this lovely line:
+         * extern const GUID __declspec(selectany) \
+         *  MOUNTDEV_MOUNTED_DEVICE_GUID = { 0x53f5630d, 0xb6bf, 0x11d0, { \
+         *  0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } };
+         * So we allow "extern" + "initializer" if "const" is
+         * around. *)
+        (* sm: As I read the ISO spec, in particular 6.9.2 and 6.7.8,
+         * "extern int foo = 3" is exactly equivalent to "int foo = 3";
+         * that is, if you put an initializer, then it is a definition,
+         * and "extern" is redundantly giving the name external linkage.
+         * gcc emits a warning, I guess because it is contrary to
+         * usual practice, but I think CIL warnings should be about
+         * semantic rather than stylistic issues, so I see no reason to
+         * even emit a warning. *)
+        if vi.vstorage = Extern then
+          vi.vstorage <- NoStorage;     (* equivalent and canonical *)
+
+        H.add alreadyDefined vi.vname !currentLoc;
+        IH.remove mustTurnIntoDef vi.vid;
+        cabsPushGlobal (GVar(vi, {init = init}, !currentLoc));
+        vi
+      end else begin
+        if not (isFunctionType vi.vtype) 
+           && not (IH.mem mustTurnIntoDef vi.vid) then 
+          begin
+            IH.add mustTurnIntoDef vi.vid true
+          end;
+        if not alreadyInEnv then begin (* Only one declaration *)
+          (* If it has function type it is a prototype *)
+          cabsPushGlobal (GVarDecl (vi, !currentLoc));
+          vi
+        end else begin
+          if debugGlobal then 
+            ignore (E.log " already in env %s\n" vi.vname);
+          vi
+        end
+      end
+    end
+  with e -> begin
+    ignore (E.log "error in createGlobal(%s: %a): %s\n" n
+              d_loc !currentLoc
+              (Printexc.to_string e));
+    cabsPushGlobal (dGlobal (dprintf "booo - error in global %s (%t)" 
+                           n d_thisloc) !currentLoc);
+    dummyFunDec.svar
+  end
+(*
+          ignore (E.log "Env after processing global %s is:@!%t@!" 
+                    n docEnv);
+          ignore (E.log "Alpha after processing global %s is:@!%t@!" 
+                    n docAlphaTable)
+*)
+
+(* Must catch the Static local variables. Make them global *)
+and createLocal ((_, sto, _, _) as specs)
+                ((((n, ndt, a, cloc) : A.name), 
+                  (inite: A.init_expression)) as init_name) 
+  : chunk =
+  let loc = convLoc cloc in
+  (* Check if we are declaring a function *)
+  let rec isProto (dt: decl_type) : bool = 
+    match dt with
+    | PROTO (JUSTBASE, _, _) -> true
+    | PROTO (x, _, _) -> isProto x
+    | PARENTYPE (_, x, _) -> isProto x
+    | ARRAY (x, _, _) -> isProto x
+    | PTR (_, x) -> isProto x
+    | _ -> false
+  in
+  match ndt with 
+    (* Maybe we have a function prototype in local scope. Make it global. We 
+     * do this even if the storage is Static *)
+  | _ when isProto ndt -> 
+      let vi = createGlobal specs init_name in 
+      (* Add it to the environment to shadow previous decls *)
+      addLocalToEnv n (EnvVar vi);
+      empty
+    
+  | _ when sto = Static -> 
+      if debugGlobal then 
+        ignore (E.log "createGlobal (local static): %s\n" n);
+
+
+      (* Now alpha convert it to make sure that it does not conflict with 
+       * existing globals or locals from this function. *)
+      let newname, _  = newAlphaName true "" n in
+      (* Make it global  *)
+      let vi = makeVarInfoCabs ~isformal:false
+                               ~isglobal:true 
+                               loc specs (newname, ndt, a) in
+      (* However, we have a problem if a real global appears later with the 
+       * name that we have happened to choose for this one. Remember these names 
+       * for later. *)
+      H.add staticLocals vi.vname vi;
+      (* Add it to the environment as a local so that the name goes out of 
+       * scope properly *)
+      addLocalToEnv n (EnvVar vi);
+
+      (* Maybe this is an array whose length depends on something with local 
+         scope, e.g. "static char device[ sizeof(local) ]".
+         Const-fold the type to fix this. *)
+      vi.vtype <- constFoldType vi.vtype;
+
+      let init : init option = 
+        if inite = A.NO_INIT then 
+          None
+        else begin 
+          let se, ie', et = doInitializer vi inite in
+          (* Maybe we now have a better type *)
+          vi.vtype <- et;
+          if isNotEmpty se then 
+            E.s (error "global static initializer");
+          (* Maybe the initializer refers to the function itself. 
+             Push a prototype for the function, just in case. Hopefully,
+             if does not refer to the locals *)
+          cabsPushGlobal (GVarDecl (!currentFunctionFDEC.svar, !currentLoc));
+          Some ie'
+        end
+      in
+      cabsPushGlobal (GVar(vi, {init = init}, !currentLoc));
+      empty
+
+  (* Maybe we have an extern declaration. Make it a global *)
+  | _ when sto = Extern ->
+      let vi = createGlobal specs init_name in
+      (* Add it to the local environment to ensure that it shadows previous 
+       * local variables *)
+      addLocalToEnv n (EnvVar vi);
+      empty
+
+  | _ -> 
+      (* Make a variable of potentially variable size. If se0 <> empty then 
+       * it is a variable size variable *)
+      let vi,se0,len,isvarsize = 
+        makeVarSizeVarInfo loc specs (n, ndt, a) in
+
+      let vi = alphaConvertVarAndAddToEnv true vi in        (* Replace vi *)
+      let se1 = 
+        if isvarsize then begin (* Variable-sized array *) 
+          ignore (warn "Variable-sized local variable %s" vi.vname);
+          (* Make a local variable to keep the length *)
+          let savelen = 
+            makeVarInfoCabs 
+                        ~isformal:false
+                        ~isglobal:false 
+	                loc
+                        (TInt(IUInt, []), NoStorage, false, [])
+                        ("__lengthof" ^ vi.vname,JUSTBASE, []) 
+          in
+          (* Register it *)
+          let savelen = alphaConvertVarAndAddToEnv true savelen in
+          (* Compute the sizeof *)
+          let sizeof = 
+            BinOp(Mult, 
+                  SizeOfE (Lval(Mem(Lval(var vi)), NoOffset)),
+                  Lval (var savelen), !typeOfSizeOf) in
+          (* Register the length *)
+          IH.add varSizeArrays vi.vid sizeof;
+          (* There can be no initializer for this *)
+          if inite != A.NO_INIT then 
+            E.s (error "Variable-sized array cannot have initializer");
+          se0 +++ (Set(var savelen, len, !currentLoc)) 
+            (* Initialize the variable *)
+            +++ (Call(Some(var vi), Lval(var (allocaFun ())), 
+                      [ sizeof  ], !currentLoc))
+        end else empty
+      in
+      if inite = A.NO_INIT then
+        se1 (* skipChunk *)
+      else begin
+        let se4, ie', et = doInitializer vi inite in
+        (* Fix the length *)
+        (match vi.vtype, ie', et with 
+            (* We have a length now *)
+          TArray(_,None, _), _, TArray(_, Some _, _) -> vi.vtype <- et
+            (* Initializing a local array *)
+        | TArray(TInt((IChar|IUChar|ISChar), _) as bt, None, a),
+             SingleInit(Const(CStr s)), _ -> 
+               vi.vtype <- TArray(bt, 
+                                  Some (integer (String.length s + 1)),
+                                  a)
+        | _, _, _ -> ());
+
+        (* Now create assignments instead of the initialization *)
+        se1 @@ se4 @@ (assignInit (Var vi, NoOffset) ie' et empty)
+      end
+          
+and doAliasFun vtype (thisname:string) (othername:string) 
+  (sname:single_name) (loc: cabsloc) : unit =
+  (* This prototype declares that name is an alias for 
+     othername, which must be defined in this file *)
+(*   E.log "%s is alias for %s at %a\n" thisname othername  *)
+(*     d_loc !currentLoc; *)
+  let rt, formals, isva, _ = splitFunctionType vtype in
+  if isva then E.s (error "%a: alias unsupported with varargs."
+                      d_loc !currentLoc);
+  let args = List.map 
+               (fun (n,_,_) -> A.VARIABLE n)
+               (argsToList formals) in
+  let call = A.CALL (A.VARIABLE othername, args) in
+  let stmt = if isVoidType rt then A.COMPUTATION(call, loc)
+                              else A.RETURN(call, loc)
+  in
+  let body = { A.blabels = []; A.battrs = []; A.bstmts = [stmt] } in
+  let fdef = A.FUNDEF (sname, body, loc, loc) in
+  ignore (doDecl true fdef);
+  (* get the new function *)
+  let v,_ = try lookupGlobalVar thisname
+            with Not_found -> E.s (bug "error in doDecl") in
+  v.vattr <- dropAttribute "alias" v.vattr
+
+          
+(* Do one declaration *)
+and doDecl (isglobal: bool) : A.definition -> chunk = function
+  | A.DECDEF ((s, nl), loc) ->
+      currentLoc := convLoc(loc);
+      (* Do the specifiers exactly once *)
+      let sugg = 
+        match nl with 
+          [] -> ""
+        | ((n, _, _, _), _) :: _ -> n
+      in
+      let spec_res = doSpecList sugg s in
+      (* Do all the variables and concatenate the resulting statements *)
+      let doOneDeclarator (acc: chunk) (name: init_name) = 
+        let (n,ndt,a,l),_ = name in
+        if isglobal then begin
+          let bt,_,_,attrs = spec_res in
+          let vtype, nattr = 
+            doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in
+          (match filterAttributes "alias" nattr with
+             [] -> (* ordinary prototype. *)
+               ignore (createGlobal spec_res name)
+              (*  E.log "%s is not aliased\n" name *)
+           | [Attr("alias", [AStr othername])] ->
+               if not (isFunctionType vtype) then begin
+                 ignore (warn 
+                   "%a: CIL only supports attribute((alias)) for functions.\n"
+                   d_loc !currentLoc);
+                 ignore (createGlobal spec_res name)
+               end else
+                 doAliasFun vtype n othername (s, (n,ndt,a,l)) loc
+           | _ -> E.s (error "Bad alias attribute at %a" d_loc !currentLoc));
+          acc
+        end else 
+          acc @@ createLocal spec_res name
+      in
+      let res = List.fold_left doOneDeclarator empty nl in
+(*
+      ignore (E.log "after doDecl %a: res=%a\n" 
+           d_loc !currentLoc d_chunk res);
+*)
+      res
+
+
+
+  | A.TYPEDEF (ng, loc) -> 
+     currentLoc := convLoc(loc);
+     doTypedef ng; empty
+
+  | A.ONLYTYPEDEF (s, loc) -> 
+      currentLoc := convLoc(loc);
+      doOnlyTypedef s; empty
+
+  | A.GLOBASM (s,loc) when isglobal ->
+      currentLoc := convLoc(loc);
+      cabsPushGlobal (GAsm (s, !currentLoc));
+      empty
+        
+  | A.PRAGMA (a, loc) when isglobal -> begin
+      currentLoc := convLoc(loc);
+      match doAttr ("dummy", [a]) with
+        [Attr("dummy", [a'])] ->
+          let a'' =
+            match a' with
+            | ACons (s, args) -> Attr (s, args)
+            | _ -> E.s (error "Unexpected attribute in #pragma")
+          in
+          cabsPushGlobal (GPragma (a'', !currentLoc));
+          empty
+
+      | _ -> E.s (error "Too many attributes in pragma")
+  end
+  | A.TRANSFORMER (_, _, _) -> E.s (E.bug "TRANSFORMER in cabs2cil input")
+  | A.EXPRTRANSFORMER (_, _, _) -> 
+      E.s (E.bug "EXPRTRANSFORMER in cabs2cil input")
+        
+  (* If there are multiple definitions of extern inline, turn all but the 
+   * first into a prototype *)
+  | A.FUNDEF (((specs,(n,dt,a,loc')) : A.single_name),
+              (body : A.block), loc, _) 
+      when isglobal && isExtern specs && isInline specs 
+           && (H.mem genv (n ^ "__extinline")) -> 
+       currentLoc := convLoc(loc);
+       let othervi, _ = lookupVar (n ^ "__extinline") in
+       if othervi.vname = n then 
+         (* The previous entry in the env is also an extern inline version
+            of n. *)
+         ignore (warn "Duplicate extern inline definition for %s ignored" n)
+       else begin
+         (* Otherwise, the previous entry is an ordinary function that
+            happens to be named __extinline.  Renaming n to n__extinline
+            would confict with other, so report an error. *)
+         E.s (unimp("Trying to rename %s to\n %s__extinline, but %s__extinline"
+                     ^^ " already exists in the env.\n  \"__extinline\" is"
+                     ^^ " reserved for CIL.\n") n n n)
+       end;
+       (* Treat it as a prototype *)
+       doDecl isglobal (A.DECDEF ((specs, [((n,dt,a,loc'), A.NO_INIT)]), loc))
+
+  | A.FUNDEF (((specs,(n,dt,a, _)) : A.single_name),
+              (body : A.block), loc1, loc2) when isglobal ->
+    begin
+      let funloc = convLoc loc1 in
+      let endloc = convLoc loc2 in
+(*      ignore (E.log "Definition of %s at %a\n" n d_loc funloc); *)
+      currentLoc := funloc;
+      E.withContext
+        (fun _ -> dprintf "2cil: %s" n)
+        (fun _ ->
+          try
+            IH.clear callTempVars;
+
+            (* Make the fundec right away, and we'll populate it later. We 
+             * need this throughout the code to create temporaries. *)
+            currentFunctionFDEC := 
+               { svar     = makeGlobalVar "@tempname@" voidType;
+                 slocals  = []; (* For now we'll put here both the locals and 
+                                 * the formals. Then "endFunction" will 
+                                 * separate them *)
+                 sformals = []; (* Not final yet *)
+                 smaxid   = 0;
+                 sbody    = dummyFunDec.sbody; (* Not final yet *)
+		 smaxstmtid = None;
+                 sallstmts = [];
+               };
+	    !currentFunctionFDEC.svar.vdecl <- funloc;
+
+            constrExprId := 0;
+            (* Setup the environment. Add the formals to the locals. Maybe
+            * they need alpha-conv  *)
+            enterScope ();  (* Start the scope *)
+            
+            IH.clear varSizeArrays;
+            
+            (* Do not process transparent unions in function definitions.
+            * We'll do it later *)
+            transparentUnionArgs := [];
+
+            (* Fix the NAME and the STORAGE *)
+            let _ = 
+              let bt,sto,inl,attrs = doSpecList n specs in
+              !currentFunctionFDEC.svar.vinline <- inl;
+              
+              let ftyp, funattr = 
+                doType (AttrName false) bt (A.PARENTYPE(attrs, dt, a)) in
+              !currentFunctionFDEC.svar.vtype <- ftyp;
+              !currentFunctionFDEC.svar.vattr <- funattr;
+
+              (* If this is the definition of an extern inline then we change 
+               * its name, by adding the suffix __extinline. We also make it 
+               * static *)
+              let n', sto' =
+                let n' = n ^ "__extinline" in
+                if inl && sto = Extern then 
+                  n', Static
+                else begin 
+                  (* Maybe this is the body of a previous extern inline. Then 
+                  * we must take that one out of the environment because it 
+                  * is not used from here on. This will also ensure that 
+                  * then we make this functions' varinfo we will not think 
+                  * it is a duplicate definition *)
+                  (try
+                    ignore (lookupVar n'); (* if this succeeds, n' is defined*)
+                    let oldvi, _ = lookupVar n in
+                    if oldvi.vname = n' then begin 
+                      (* oldvi is an extern inline function that has been
+                         renamed to n ^ "__extinline".  Remove it from the
+                         environment. *)
+                      H.remove env n; H.remove genv n;
+                      H.remove env n'; H.remove genv n'
+                    end 
+                    else
+                      (* oldvi is not a renamed extern inline function, and
+                         we should do nothing.  The reason the lookup
+                         of n' succeeded is probably because there's
+                         an ordinary function that happens to be named,
+                         n ^ "__extinline", probably as a result of a previous
+                         pass through CIL.   See small2/extinline.c*)
+                      ()
+                   with Not_found -> ());
+                  n, sto 
+                end
+              in
+              (* Now we have the name and the storage *)
+              !currentFunctionFDEC.svar.vname <- n';
+              !currentFunctionFDEC.svar.vstorage <- sto'
+            in
+              
+            (* Add the function itself to the environment. Add it before 
+            * you do the body because the function might be recursive. Add 
+            * it also before you add the formals to the environment 
+            * because there might be a formal with the same name as the 
+            * function and we want it to take precedence. *)
+            (* Make a variable out of it and put it in the environment *)
+            !currentFunctionFDEC.svar <- 
+               fst (makeGlobalVarinfo true !currentFunctionFDEC.svar);
+
+            (* If it is extern inline then we add it to the global 
+             * environment for the original name as well. This will ensure 
+             * that all uses of this function will refer to the renamed 
+             * function *)
+            addGlobalToEnv n (EnvVar !currentFunctionFDEC.svar);
+
+            if H.mem alreadyDefined !currentFunctionFDEC.svar.vname then
+              E.s (error "There is a definition already for %s" n);
+
+(*
+            ignore (E.log "makefunvar:%s@! type=%a@! vattr=%a@!"
+                        n d_type thisFunctionVI.vtype 
+                        d_attrlist thisFunctionVI.vattr);
+*)
+
+            (* makeGlobalVarinfo might have changed the type of the function 
+             * (when combining it with the type of the prototype). So get the 
+             * type only now. *)
+
+            (**** Process the TYPE and the FORMALS ***)
+            let _ = 
+              let (returnType, formals_t, isvararg, funta) =
+                splitFunctionTypeVI !currentFunctionFDEC.svar 
+              in
+              (* Record the returnType for doStatement *)
+              currentReturnType   := returnType;
+              
+              
+              (* Create the formals and add them to the environment. *)
+	      (* sfg: extract locations for the formals from dt *)
+	      let doFormal (loc : location) (fn, ft, fa) =
+		let f = makeVarinfo false fn ft in
+		  (f.vdecl <- loc;
+		   f.vattr <- fa;
+		   alphaConvertVarAndAddToEnv true f)
+	      in
+	      let rec doFormals fl' ll' = 
+		begin
+		  match (fl', ll') with
+		    | [], _ -> [] 
+			
+		    | fl, [] -> (* no more locs available *)
+			  List.map (doFormal !currentLoc) fl 
+			
+		    | f::fl, (_,(_,_,_,l))::ll ->  
+			(* sfg: these lets seem to be necessary to
+			 *  force the right order of evaluation *)
+			let f' = doFormal (convLoc l) f in
+			let fl' = doFormals fl ll in
+			  f' :: fl'
+		end
+	      in
+	      let fmlocs = (match dt with PROTO(_, fml, _) -> fml | _ -> []) in
+	      let formals = doFormals (argsToList formals_t) fmlocs in
+
+              (* Recreate the type based on the formals. *)
+              let ftype = TFun(returnType, 
+                               Some (List.map (fun f -> (f.vname,
+                                                         f.vtype, 
+                                                         f.vattr)) formals), 
+                               isvararg, funta) in
+              (*
+              ignore (E.log "Funtype of %s: %a\n" n' d_type ftype);
+              *)
+              (* Now fix the names of the formals in the type of the function 
+              * as well *)
+              !currentFunctionFDEC.svar.vtype <- ftype;
+              !currentFunctionFDEC.sformals <- formals;
+            in
+            (* Now change the type of transparent union args back to what it 
+             * was so that the body type checks. We must do it this late 
+             * because makeGlobalVarinfo from above might choke if we give 
+             * the function a type containing transparent unions  *)
+            let _ =
+              let rec fixbackFormals (idx: int) (args: varinfo list) : unit=
+                match args with
+                  [] -> ()
+                | a :: args' ->
+                    (* Fix the type back to a transparent union type *)
+                    (try
+                      let origtype = List.assq idx !transparentUnionArgs in
+                      a.vtype <- origtype;
+                    with Not_found -> ());
+                    fixbackFormals (idx + 1) args'
+              in
+              fixbackFormals 0 !currentFunctionFDEC.sformals;
+              transparentUnionArgs := [];
+            in
+
+            (********** Now do the BODY *************)
+            let _ = 
+              let stmts = doBody body in
+              (* Finish everything *)
+              exitScope ();
+
+              (* Now fill in the computed goto statement with cases. Do this 
+               * before mkFunctionbody which resolves the gotos *)
+              (match !gotoTargetData with
+                Some (switchv, switch) ->
+                  let switche, l =
+                    match switch.skind with
+                      Switch (switche, _, _, l) -> switche, l
+                    | _ -> E.s(bug "the computed goto statement not a switch")
+                  in
+                  (* Build a default chunk that segfaults *)
+                  let default =
+                    defaultChunk
+                      l
+                      (i2c (Set ((Mem (mkCast (integer 0) intPtrType),
+                                  NoOffset),
+                                 integer 0, l)))
+                  in
+                  let bodychunk = ref default in
+                  H.iter (fun lname laddr ->
+                    bodychunk :=
+                       caseRangeChunk
+                         [integer laddr] l
+                         (gotoChunk lname l @@ !bodychunk))
+                    gotoTargetHash;
+                  (* Now recreate the switch *)
+                  let newswitch = switchChunk switche !bodychunk l in
+                  (* We must still share the old switch statement since we
+                  * have already inserted the goto's *)
+                  let newswitchkind =
+                    match newswitch.stmts with
+                      [ s]
+                        when newswitch.postins == [] && newswitch.cases == []->
+                          s.skind
+                    | _ -> E.s (bug "Unexpected result from switchChunk")
+                  in
+                  switch.skind <- newswitchkind
+                     
+              | None -> ());
+              (* Now finish the body and store it *)
+              !currentFunctionFDEC.sbody <- mkFunctionBody stmts;
+              (* Reset the global parameters *)
+              gotoTargetData := None;
+              H.clear gotoTargetHash;
+              gotoTargetNextAddr := 0;
+            in
+            
+
+	     
+(*
+              ignore (E.log "endFunction %s at %t:@! sformals=%a@!  slocals=%a@!"
+              !currentFunctionFDEC.svar.vname d_thisloc
+              (docList ~sep:(chr ',') (fun v -> text v.vname)) 
+              !currentFunctionFDEC.sformals
+              (docList ~sep:(chr ',') (fun v -> text v.vname)) 
+              !currentFunctionFDEC.slocals);
+*)
+
+            let rec dropFormals formals locals = 
+              match formals, locals with
+                [], l -> l
+              | f :: formals, l :: locals -> 
+                  if f != l then 
+                    E.s (bug "formal %s is not in locals (found instead %s)" 
+                           f.vname l.vname);
+                  dropFormals formals locals
+              | _ -> E.s (bug "Too few locals")
+            in
+            !currentFunctionFDEC.slocals 
+              <- dropFormals !currentFunctionFDEC.sformals 
+                   (List.rev !currentFunctionFDEC.slocals);
+            setMaxId !currentFunctionFDEC;
+ 
+            (* Now go over the types of the formals and pull out the formals 
+             * with transparent union type. Replace them with some shadow 
+             * parameters and then add assignments  *)
+            let _ = 
+              let newformals, newbody =
+                List.fold_right (* So that the formals come out in order *)
+                  (fun f (accform, accbody) ->
+                    match isTransparentUnion f.vtype with
+                      None -> (f :: accform, accbody)
+                    | Some fstfield ->
+                        (* A new shadow to be placed in the formals. Use 
+                         * makeTempVar to update smaxid and all others. *)
+                        let shadow = 
+                          makeTempVar !currentFunctionFDEC fstfield.ftype in
+                        (* Now take it out of the locals and replace it with 
+                        * the current formal. It is not worth optimizing this 
+                        * one.  *)
+                        !currentFunctionFDEC.slocals <-
+                           f ::
+                           (List.filter (fun x -> x.vid <> shadow.vid)
+                              !currentFunctionFDEC.slocals);
+                        (shadow :: accform,
+                         mkStmt (Instr [Set ((Var f, Field(fstfield,
+                                                           NoOffset)),
+                                             Lval (var shadow),
+                                             !currentLoc)]) :: accbody))
+                  !currentFunctionFDEC.sformals
+                  ([], !currentFunctionFDEC.sbody.bstmts)
+              in
+              !currentFunctionFDEC.sbody.bstmts <- newbody;
+              (* To make sure sharing with the type is proper *)
+              setFormals !currentFunctionFDEC newformals; 
+            in
+
+            (* Now see whether we can fall through to the end of the function 
+             * *)
+            (* weimer: Sat Dec 8 17:30:47 2001 MSVC NT kernel headers include 
+             * functions like long convert(x) { __asm { mov eax, x \n cdq } } 
+             * That set a return value via an ASM statement. As a result, I 
+             * am changing this so a final ASM statement does not count as 
+             * "fall through" for the purposes of this warning.  *)
+            (* matth: But it's better to assume assembly will fall through,
+             * since  most such blocks do.  It's probably better to print an
+             * unnecessary warning than to break CIL's invariant that
+             * return statements are inserted properly.  *)
+            let instrFallsThrough (i : instr) = match i with
+              Set _ -> true
+            | Call (None, Lval (Var e, NoOffset), _, _) -> 
+                (* See if this is exit, or if it has the noreturn attribute *)
+                if e.vname = "exit" then false 
+                else if hasAttribute "noreturn" e.vattr then false
+                else true
+            | Call _ -> true
+            | Asm _ -> true
+            in 
+            let rec stmtFallsThrough (s: stmt) : bool = 
+              match s.skind with
+                Instr(il) -> 
+                  List.fold_left (fun acc elt -> 
+                                      acc && instrFallsThrough elt) true il
+              | Return _ | Break _ | Continue _ -> false
+              | Goto _ -> false
+              | If (_, b1, b2, _) -> 
+                  blockFallsThrough b1 || blockFallsThrough b2
+              | Switch (e, b, targets, _) -> 
+                   (* See if there is a "default" case *)
+                   if not 
+                      (List.exists (fun s -> 
+                         List.exists (function Default _ -> true | _ -> false)
+                                      s.labels)
+                                   targets) then begin
+(*
+                      ignore (E.log "Switch falls through because no default");
+
+*)                      true (* We fall through because there is no default *)
+                   end else begin
+                      (* We must examine all cases. If any falls through, 
+                       * then the switch falls through. *)
+                      blockFallsThrough b || blockCanBreak b
+                   end
+(*
+              | Loop (b, _, _, _) -> 
+                  (* A loop falls through if it can break. *)
+                  blockCanBreak b
+*)
+	      | While (_, b, _) -> blockCanBreak b
+	      | DoWhile (_, b, _) -> blockCanBreak b
+	      | For (_, _, _, b, _) -> blockCanBreak b
+              | Block b -> blockFallsThrough b
+              | TryFinally (b, h, _) -> blockFallsThrough h
+              | TryExcept (b, _, h, _) -> true (* Conservative *)
+            and blockFallsThrough b = 
+              let rec fall = function
+                  [] -> true
+                | s :: rest -> 
+                    if stmtFallsThrough s then begin
+(*
+                        ignore (E.log "Stmt %a falls through\n" d_stmt s);
+*)
+                        fall rest
+                    end else begin
+(*
+                        ignore (E.log "Stmt %a DOES NOT fall through\n"
+                                      d_stmt s);
+*)
+                      (* If we are not falling thorough then maybe there 
+                      * are labels who are *)
+                        labels rest
+                    end
+              and labels = function
+                  [] -> false
+                    (* We have a label, perhaps we can jump here *)
+                  | s :: rest when s.labels <> [] -> 
+(*
+                     ignore (E.log "invoking fall %a: %a\n" 
+                                      d_loc !currentLoc d_stmt s);
+*)
+                     fall (s :: rest)
+                  | _ :: rest -> labels rest
+              in
+              let res = fall b.bstmts in
+(*
+              ignore (E.log "blockFallsThrough=%b %a\n" res d_block b);
+*)
+              res
+            (* will we leave this statement or block with a break command? *)
+            and stmtCanBreak (s: stmt) : bool = 
+              match s.skind with
+                Instr _ | Return _ | Continue _ | Goto _ -> false
+              | Break _ -> true
+              | If (_, b1, b2, _) -> 
+                  blockCanBreak b1 || blockCanBreak b2
+              | Switch _ | (*Loop _*) While _ | DoWhile _ | For _ -> 
+                  (* switches and loops catch any breaks in their bodies *)
+                  false
+              | Block b -> blockCanBreak b
+              | TryFinally (b, h, _) -> blockCanBreak b || blockCanBreak h
+              | TryExcept (b, _, h, _) -> blockCanBreak b || blockCanBreak h
+            and blockCanBreak b = 
+              List.exists stmtCanBreak b.bstmts
+            in
+            if blockFallsThrough !currentFunctionFDEC.sbody then begin
+(*
+              let retval = 
+                match unrollType !currentReturnType with
+                  TVoid _ -> None
+                | (TInt _ | TEnum _ | TFloat _ | TPtr _) as rt -> 
+                    ignore (warn "Body of function %s falls-through. Adding a return statement\n"  !currentFunctionFDEC.svar.vname);
+                    Some (mkCastT zero intType rt)
+                | _ ->
+                    ignore (warn "Body of function %s falls-through and cannot find an appropriate return value\n" !currentFunctionFDEC.svar.vname);
+                    None
+              in
+              if not (hasAttribute "noreturn" 
+                        !currentFunctionFDEC.svar.vattr) then 
+                !currentFunctionFDEC.sbody.bstmts <- 
+                  !currentFunctionFDEC.sbody.bstmts 
+                  @ [mkStmt (Return(retval, endloc))]
+*)
+            end;
+            
+            (* ignore (E.log "The env after finishing the body of %s:\n%t\n"
+                        n docEnv); *)
+            cabsPushGlobal (GFun (!currentFunctionFDEC, funloc));
+            empty
+          with E.Error as e -> raise e
+             | e -> begin
+            ignore (E.log "error in collectFunction %s: %s\n"
+                      n (Printexc.to_string e));
+            cabsPushGlobal (GAsm("error in function " ^ n, !currentLoc));
+            empty
+          end)
+        () (* argument of E.withContext *)
+    end (* FUNDEF *)
+
+  | LINKAGE (n, loc, dl) -> 
+      currentLoc := convLoc loc;
+      if n <> "C" then 
+        ignore (warn "Encountered linkage specification \"%s\"" n);
+      if not isglobal then 
+        E.s (error "Encountered linkage specification in local scope");
+      (* For now drop the linkage on the floor !!! *)
+      List.iter 
+        (fun d -> 
+          let s = doDecl isglobal d in
+          if isNotEmpty s then 
+            E.s (bug "doDecl returns non-empty statement for global"))
+        dl;
+      empty
+
+  | _ -> E.s (error "unexpected form of declaration")
+
+and doTypedef ((specs, nl): A.name_group) = 
+  try
+    (* Do the specifiers exactly once *)
+    let bt, sto, inl, attrs = doSpecList (suggestAnonName nl) specs in
+    if sto <> NoStorage || inl then
+      E.s (error "Storage or inline specifier not allowed in typedef");
+    let createTypedef ((n,ndt,a,loc) : A.name) =
+      (*    E.s (error "doTypeDef") *)
+      try
+        let newTyp, tattr =
+          doType AttrType bt (A.PARENTYPE(attrs, ndt, a))  in
+        let newTyp' = cabsTypeAddAttributes tattr newTyp in
+        (* Create a new name for the type. Use the same name space as that of 
+        * variables to avoid confusion between variable names and types. This 
+        * is actually necessary in some cases.  *)
+        let n', _  = newAlphaName true "" n in
+        let ti = { tname = n'; ttype = newTyp'; treferenced = false } in
+        (* Since we use the same name space, we might later hit a global with 
+         * the same name and we would want to change the name of the global. 
+         * It is better to change the name of the type instead. So, remember 
+         * all types whose names have changed *)              
+        H.add typedefs n' ti;              
+        let namedTyp = TNamed(ti, []) in
+        (* Register the type. register it as local because we might be in a
+        * local context  *)
+        addLocalToEnv (kindPlusName "type" n) (EnvTyp namedTyp);
+        cabsPushGlobal (GType (ti, !currentLoc))
+      with E.Error as e -> raise e
+         | e -> begin
+        ignore (E.log "Error on A.TYPEDEF (%s)\n"
+                  (Printexc.to_string e));
+        cabsPushGlobal (GAsm ("booo_typedef:" ^ n, !currentLoc))
+      end
+    in
+    List.iter createTypedef nl
+  with E.Error as e -> raise e
+     | e -> begin    
+    ignore (E.log "Error on A.TYPEDEF (%s)\n"
+              (Printexc.to_string e));
+    let fstname = 
+      match nl with
+        [] -> "<missing name>"
+      | (n, _, _, _) :: _ -> n
+    in
+    cabsPushGlobal (GAsm ("booo_typedef: " ^ fstname, !currentLoc))
+  end
+
+and doOnlyTypedef (specs: A.spec_elem list) : unit = 
+  try
+    let bt, sto, inl, attrs = doSpecList "" specs in
+    if sto <> NoStorage || inl then 
+      E.s (error "Storage or inline specifier not allowed in typedef");
+    let restyp, nattr = doType AttrType bt (A.PARENTYPE(attrs, 
+                                                        A.JUSTBASE, [])) in
+    if nattr <> [] then
+      ignore (warn "Ignoring identifier attribute");
+           (* doSpec will register the type. *)
+    (* See if we are defining a composite or enumeration type, and in that 
+     * case move the attributes from the defined type into the composite type 
+     * *)
+    let isadef = 
+      List.exists 
+        (function 
+            A.SpecType(A.Tstruct(_, Some _, _)) -> true
+          | A.SpecType(A.Tunion(_, Some _, _)) -> true
+          | A.SpecType(A.Tenum(_, Some _, _)) -> true
+          | _ -> false) specs
+    in
+    match restyp with 
+      TComp(ci, al) -> 
+        if isadef then begin
+          ci.cattr <- cabsAddAttributes ci.cattr al; 
+          (* The GCompTag was already added *)
+        end else (* Add a GCompTagDecl *)
+          cabsPushGlobal (GCompTagDecl(ci, !currentLoc))
+    | TEnum(ei, al) -> 
+        if isadef then begin
+          ei.eattr <- cabsAddAttributes ei.eattr al;
+        end else
+          cabsPushGlobal (GEnumTagDecl(ei, !currentLoc))
+    | _ -> 
+        ignore (warn "Ignoring un-named typedef that does not introduce a struct or enumeration type\n")
+            
+  with E.Error as e -> raise e
+     | e -> begin
+    ignore (E.log "Error on A.ONLYTYPEDEF (%s)\n"
+              (Printexc.to_string e));
+    cabsPushGlobal (GAsm ("booo_typedef", !currentLoc))
+  end
+
+and assignInit (lv: lval) 
+               (ie: init) 
+               (iet: typ) 
+               (acc: chunk) : chunk = 
+  match ie with
+    SingleInit e -> 
+      let (_, e'') = castTo iet (typeOfLval lv) e in 
+      acc +++ (Set(lv, e'', !currentLoc))
+  | CompoundInit (t, initl) -> 
+      foldLeftCompound
+        ~doinit:(fun off i it acc -> 
+          assignInit (addOffsetLval off lv) i it acc)
+        ~ct:t
+        ~initl:initl
+        ~acc:acc
+(*
+  | ArrayInit (bt, len, initl) -> 
+      let idx = ref ( -1 ) in
+      List.fold_left
+        (fun acc i -> 
+          assignInit (addOffsetLval (Index(integer !idx, NoOffset)) lv) i bt acc)
+        acc
+        initl
+*)
+  (* Now define the processors for body and statement *)
+and doBody (blk: A.block) : chunk = 
+  enterScope ();
+  (* Rename the labels and add them to the environment *)
+  List.iter (fun l -> ignore (genNewLocalLabel l)) blk.blabels;
+  (* See if we have some attributes *)
+  let battrs = doAttributes blk.A.battrs in
+
+  let bodychunk = 
+    afterConversion
+      (List.fold_left   (* !!! @ evaluates its arguments backwards *)
+         (fun prev s -> let res = doStatement s in 
+                        prev @@ res)
+         empty
+         blk.A.bstmts)
+  in
+  exitScope ();
+
+
+  if battrs == [] then
+    bodychunk
+  else begin
+    let b = c2block bodychunk in
+    b.battrs <- battrs;
+    s2c (mkStmt (Block b))
+  end
+      
+and doStatement (s : A.statement) : chunk = 
+  try
+    match s with
+      A.NOP _ -> skipChunk
+    | A.COMPUTATION (e, loc) ->
+        currentLoc := convLoc loc;
+        let (lasts, data) = !gnu_body_result in
+        if lasts == s then begin      (* This is the last in a GNU_BODY *)
+          let (s', e', t') = doExp false e (AExp None) in
+          data := Some (e', t');      (* Record the result *)
+          s'
+        end else
+          let (s', _, _) = doExp false e ADrop in
+            (* drop the side-effect free expression *)
+            (* And now do some peep-hole optimizations *)
+          s'
+
+    | A.BLOCK (b, loc) -> 
+        currentLoc := convLoc loc;
+        doBody b
+
+    | A.SEQUENCE (s1, s2, loc) ->
+        (doStatement s1) @@ (doStatement s2)
+
+    | A.IF(e,st,sf,loc) ->
+        let st' = doStatement st in
+        let sf' = doStatement sf in
+        currentLoc := convLoc loc;
+        doCondition false e st' sf'
+
+    | A.WHILE(e,s,loc) ->
+(*
+        startLoop true;
+        let s' = doStatement s in
+        exitLoop ();
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        loopChunk ((doCondition false e skipChunk
+                      (breakChunk loc'))
+                   @@ s')
+*)
+	(** We need to convert A.WHILE(e,s) where e may have side effects
+	     into Cil.While(e',s') where e' is side-effect free. *)
+	
+	(* Let e == (sCond , eCond) with sCond a sequence of statements
+	   and eCond a side-effect free expression. *)
+	let (sCond, eCond, _) = doExp false e (AExp None) in
+	  
+	  (* Then doStatement(A.WHILE((sCond , eCond), s))
+             = sCond ; Cil.While(eCond, (doStatement(s) ; sCond))
+	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
+	  
+          startLoop (DuplicateBeforeContinue sCond);
+          let s' = doStatement s in
+            exitLoop ();
+            let loc' = convLoc loc in
+              currentLoc := loc';
+              sCond @@ (whileChunk eCond (s' @@ sCond))
+          
+    | A.DOWHILE(e,s,loc) -> 
+(*
+        startLoop false;
+        let s' = doStatement s in
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let s'' = 
+          consLabContinue (doCondition false e skipChunk (breakChunk loc'))
+        in
+        exitLoop ();
+        loopChunk (s' @@ s'')
+*)
+	(** We need to convert A.DOWHILE(e,s) where e may have side effects
+	     into Cil.DoWhile(e',s') where e' is side-effect free. *)
+	
+	(* Let e == (sCond , eCond) with sCond a sequence of statements
+	   and eCond a side-effect free expression. *)
+	let (sCond, eCond, _) = doExp false e (AExp None) in
+	  
+	  (* Then doStatement(A.DOWHILE((sCond , eCond), s))
+             = Cil.DoWhile(eCond, (doStatement(s) ; sCond))
+	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
+	  
+          startLoop (DuplicateBeforeContinue sCond);
+          let s' = doStatement s in
+            exitLoop ();
+            let loc' = convLoc loc in
+              currentLoc := loc';
+              doWhileChunk eCond (s' @@ sCond)
+          
+    | A.FOR(fc1,e2,e3,s,loc) ->
+(*begin
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        enterScope (); (* Just in case we have a declaration *)
+        let (se1, _, _) = 
+          match fc1 with 
+            FC_EXP e1 -> doExp false e1 ADrop 
+          | FC_DECL d1 -> (doDecl false d1, zero, voidType)
+        in
+        let (se3, _, _) = doExp false e3 ADrop in
+        startLoop false;
+        let s' = doStatement s in
+        currentLoc := loc';
+        let s'' = consLabContinue se3 in
+        exitLoop ();
+        let res = 
+          match e2 with
+            A.NOTHING -> (* This means true *)
+              se1 @@ loopChunk (s' @@ s'')
+          | _ -> 
+              se1 @@ loopChunk ((doCondition false e2 skipChunk (breakChunk loc'))
+                                @@ s' @@ s'')
+        in
+        exitScope ();
+        res
+    end
+*)
+	(** We need to convert A.FOR(e1,e2,e3,s) where e1, e2 and e3 may
+	     have side effects into Cil.For(bInit,e2',bIter,s') where e2'
+	     is side-effect free. **)
+	
+	(* Let e1 == bInit be a block of statements
+	   Let e2 == (bCond , eCond) with bCond a block of statements
+	   and eCond a side-effect free expression
+	   Let e3 == bIter be a sequence of statements. *)
+	let (bInit, _, _) = match fc1 with 
+          | FC_EXP e1 -> doExp false e1 ADrop 
+          | FC_DECL d1 -> (doDecl false d1, zero, voidType) in
+	let (bCond, eCond, _) = doExp false e2 (AExp None) in
+	let eCond' = match eCond with
+	  | Const(CStr "exp_nothing") -> Cil.one
+	  | _                         -> eCond in
+	let (bIter, _, _) = doExp false e3 ADrop in
+	  
+	(* Then doStatement(A.FOR(bInit, (bCond , eCond), bIter, s))
+           = Cil.For({bInit; bCond}, eCond', {bIter; bCond}, {doStatement(s)})
+	   where doStatement(A.CONTINUE) = Cil.Continue. *)
+	  
+	  startLoop ContinueUnchanged;
+          let s' = doStatement s in
+            exitLoop ();
+            let loc' = convLoc loc in
+              currentLoc := loc';
+              (forChunk (bInit @@ bCond) eCond' (bIter @@ bCond) s')
+
+    | A.BREAK loc -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        breakChunk loc'
+
+    | A.CONTINUE loc -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+(*
+        continueOrLabelChunk loc'
+*)
+	continueDuplicateChunk loc'
+
+    | A.RETURN (A.NOTHING, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        if not (isVoidType !currentReturnType) then
+          ignore (warn "Return statement without a value in function returning %a\n" d_type !currentReturnType);
+        returnChunk None loc'
+
+    | A.RETURN (e, loc) ->
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        (* Sometimes we return the result of a void function call *)
+        if isVoidType !currentReturnType then begin
+          ignore (warn "Return statement with a value in function returning void");
+          let (se, _, _) = doExp false e ADrop in
+          se @@ returnChunk None loc'
+        end else begin
+          let (se, e', et) = 
+            doExp false e (AExp (Some !currentReturnType)) in
+          let (et'', e'') = castTo et (!currentReturnType) e' in
+          se @@ (returnChunk (Some e'') loc')
+        end
+               
+    | A.SWITCH (e, s, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let (se, e', et) = doExp false e (AExp (Some intType)) in
+        let (et'', e'') = castTo et intType e' in
+        let s' = doStatement s in
+        se @@ (switchChunk e'' s' loc')
+               
+    | A.CASE (e, s, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let (se, e', et) = doExp true e (AExp None) in
+        if isNotEmpty se then
+          E.s (error "Case statement with a non-constant");
+        caseRangeChunk [if !lowerConstants then constFold false e' else e'] 
+          loc' (doStatement s)
+            
+    | A.CASERANGE (el, eh, s, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let (sel, el', etl) = doExp false el (AExp None) in
+        let (seh, eh', etl) = doExp false eh (AExp None) in
+        if isNotEmpty sel || isNotEmpty seh then
+          E.s (error "Case statement with a non-constant");
+        let il, ih = 
+          match constFold true el', constFold true eh' with
+            Const(CInt64(il, _, _)), Const(CInt64(ih, _, _)) -> 
+              Int64.to_int il, Int64.to_int ih
+          | _ -> E.s (unimp "Cannot understand the constants in case range")
+        in
+        if il > ih then 
+          E.s (error "Empty case range");
+        let rec mkAll (i: int) = 
+          if i > ih then [] else integer i :: mkAll (i + 1)
+        in
+        caseRangeChunk (mkAll il) loc' (doStatement s)
+        
+
+    | A.DEFAULT (s, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        defaultChunk loc' (doStatement s)
+                     
+    | A.LABEL (l, s, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        (* Lookup the label because it might have been locally defined *)
+        consLabel (lookupLabel l) (doStatement s) loc' true
+                     
+    | A.GOTO (l, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        (* Maybe we need to rename this label *)
+        gotoChunk (lookupLabel l) loc'
+
+    | A.COMPGOTO (e, loc) -> begin
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        (* Do the expression *)
+        let se, e', t' = doExp false e (AExp (Some voidPtrType)) in
+        match !gotoTargetData with
+          Some (switchv, switch) -> (* We have already generated this one  *)
+            se 
+            @@ i2c(Set (var switchv, mkCast e' uintType, loc'))
+            @@ s2c(mkStmt(Goto (ref switch, loc')))
+
+        | None -> begin
+            (* Make a temporary variable *)
+            let vchunk = createLocal 
+                (TInt(IUInt, []), NoStorage, false, [])
+                (("__compgoto", A.JUSTBASE, [], loc), A.NO_INIT) 
+            in
+            if not (isEmpty vchunk) then 
+              E.s (unimp "Non-empty chunk in creating temporary for goto *");
+            let switchv, _ = 
+              try lookupVar "__compgoto" 
+              with Not_found -> E.s (bug "Cannot find temporary for goto *");
+            in
+            (* Make a switch statement. We'll fill in the statements at the 
+            * end of the function *)
+            let switch = mkStmt (Switch (Lval(var switchv), 
+                                         mkBlock [], [], loc')) in
+            (* And make a label for it since we'll goto it *)
+            switch.labels <- [Label ("__docompgoto", loc', false)];
+            gotoTargetData := Some (switchv, switch);
+            se @@ i2c (Set(var switchv, mkCast e' uintType, loc')) @@
+            s2c switch
+        end
+      end
+
+    | A.DEFINITION d ->
+        let s = doDecl false d  in 
+(*
+        ignore (E.log "Def at %a: %a\n" d_loc !currentLoc d_chunk s);
+*)
+        s
+
+
+
+    | A.ASM (asmattr, tmpls, details, loc) -> 
+        (* Make sure all the outs are variables *)
+        let loc' = convLoc loc in
+        let attr' = doAttributes asmattr in
+        currentLoc := loc';
+        let stmts : chunk ref = ref empty in
+	let (tmpls', outs', ins', clobs') =
+	  match details with
+	  | None ->
+	      let tmpls' =
+		if !msvcMode then
+		  tmpls
+		else
+		  let pattern = Str.regexp "%" in
+		  let escape = Str.global_replace pattern "%%" in
+		  List.map escape tmpls
+	      in
+	      (tmpls', [], [], [])
+	  | Some { aoutputs = outs; ainputs = ins; aclobbers = clobs } ->
+              let outs' =
+		List.map
+		  (fun (c, e) ->
+		    let (se, e', t) = doExp false e (AExp None) in
+		    let lv =
+                      match e' with
+		      | Lval lval
+		      | StartOf lval -> lval
+                      | _ -> E.s (error "Expected lval for ASM outputs")
+		    in
+		    stmts := !stmts @@ se;
+		    (c, lv)) outs
+              in
+	      (* Get the side-effects out of expressions *)
+              let ins' =
+		List.map
+		  (fun (c, e) ->
+		    let (se, e', et) = doExp false e (AExp None) in
+		    stmts := !stmts @@ se;
+		    (c, e'))
+		  ins
+              in
+	      (tmpls, outs', ins', clobs)
+	in
+        !stmts @@
+        (i2c (Asm(attr', tmpls', outs', ins', clobs', loc')))
+
+    | TRY_FINALLY (b, h, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let b': chunk = doBody b in
+        let h': chunk = doBody h in
+        if b'.cases <> [] || h'.cases <> [] then 
+          E.s (error "Try statements cannot contain switch cases");
+        
+        s2c (mkStmt (TryFinally (c2block b', c2block h', loc')))
+        
+    | TRY_EXCEPT (b, e, h, loc) -> 
+        let loc' = convLoc loc in
+        currentLoc := loc';
+        let b': chunk = doBody b in
+        (* Now do e *)
+        let ((se: chunk), e', t') = doExp false e (AExp None) in
+        let h': chunk = doBody h in
+        if b'.cases <> [] || h'.cases <> [] || se.cases <> [] then 
+          E.s (error "Try statements cannot contain switch cases");
+        (* Now take se and try to convert it to a list of instructions. This 
+         * might not be always possible *)
+        let il' = 
+          match compactStmts se.stmts with 
+            [] -> se.postins
+          | [ s ] -> begin
+              match s.skind with 
+                Instr il -> il @ se.postins
+              | _ -> E.s (error "Except expression contains unexpected statement")
+            end
+          | _ -> E.s (error "Except expression contains too many statements")
+        in
+        s2c (mkStmt (TryExcept (c2block b', (il', e'), c2block h', loc')))
+
+  with e -> begin
+    (ignore (E.log "Error in doStatement (%s)\n" (Printexc.to_string e)));
+    consLabel "booo_statement" empty (convLoc (A.get_statementloc s)) false
+  end
+
+
+(* Translate a file *)
+let convFile ((fname : string), (dl : Cabs.definition list)) : Cil.file =
+  Cil.initCIL (); (* make sure we have initialized CIL *)
+  (* Clean up the global types *)
+  E.hadErrors := false;
+  initGlobals();
+  startFile ();
+  IH.clear noProtoFunctions;
+  H.clear compInfoNameEnv;
+  H.clear enumInfoNameEnv;
+  IH.clear mustTurnIntoDef;
+  H.clear alreadyDefined;
+  H.clear staticLocals;
+  H.clear typedefs;                      
+  H.clear isomorphicStructs;
+  annonCompFieldNameId := 0;
+  if !E.verboseFlag || !Cilutil.printStages then 
+    ignore (E.log "Converting CABS->CIL\n");
+  (* Setup the built-ins, but do not add their prototypes to the file *)
+  let setupBuiltin name (resTyp, argTypes, isva) = 
+    let v = 
+      makeGlobalVar name (TFun(resTyp, 
+                               Some (List.map (fun at -> ("", at, [])) 
+                                       argTypes),
+                               isva, [])) in
+    ignore (alphaConvertVarAndAddToEnv true v)
+  in
+  H.iter setupBuiltin (if !msvcMode then msvcBuiltins else gccBuiltins);
+
+  let globalidx = ref 0 in
+  let doOneGlobal (d: A.definition) = 
+    let s = doDecl true d in
+    if isNotEmpty s then 
+      E.s (bug "doDecl returns non-empty statement for global");
+    (* See if this is one of the globals which we can leave alone. Increment 
+     * globalidx and see if we must leave this alone. *)
+    if 
+      (match d with 
+        A.DECDEF _ -> true
+      | A.FUNDEF _ -> true
+      | _ -> false) && (incr globalidx; !globalidx = !nocil) then begin
+          (* Create a file where we put the CABS output *)
+          let temp_cabs_name = "__temp_cabs" in
+          let temp_cabs = open_out temp_cabs_name in
+          (* Now print the CABS in there *)
+          Cprint.commit (); Cprint.flush ();
+          let old = !Cprint.out in (* Save the old output channel *)
+          Cprint.out := temp_cabs;
+          Cprint.print_def d;
+          Cprint.commit (); Cprint.flush ();
+          flush !Cprint.out;
+          Cprint.out := old;
+          close_out temp_cabs;
+          (* Now read everythign in *and create a GText from it *)
+          let temp_cabs = open_in temp_cabs_name in
+          let buff = Buffer.create 1024 in
+          Buffer.add_string buff "// Start of CABS form\n";
+          Buffer.add_channel buff temp_cabs (in_channel_length temp_cabs);
+          Buffer.add_string buff "// End of CABS form\n";
+          close_in temp_cabs;
+          (* Try to pop the last thing in the file *)
+          (match !theFile with 
+            _ :: rest -> theFile := rest
+          | _ -> ());
+          (* Insert in the file a GText *)
+          cabsPushGlobal (GText(Buffer.contents buff))
+    end 
+  in
+  List.iter doOneGlobal dl;
+  let globals = ref (popGlobals ()) in
+
+  IH.clear noProtoFunctions;
+  IH.clear mustTurnIntoDef;  
+  H.clear alreadyDefined;
+  H.clear compInfoNameEnv;
+  H.clear enumInfoNameEnv;
+  H.clear isomorphicStructs;
+  H.clear staticLocals;
+  H.clear typedefs;
+  H.clear env;
+  H.clear genv;
+  IH.clear callTempVars;
+
+  if false then ignore (E.log "Cabs2cil converted %d globals\n" !globalidx);
+  (* We are done *)
+  { fileName = fname;
+    globals  = !globals;
+    globinit = None;
+    globinitcalled = false;
+  } 
+
+
+    
+                      
diff --git a/cil/src/frontc/cabs2cil.mli b/cil/src/frontc/cabs2cil.mli
new file mode 100644
index 000000000..986f5a287
--- /dev/null
+++ b/cil/src/frontc/cabs2cil.mli
@@ -0,0 +1,49 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+val convFile: Cabs.file -> Cil.file
+
+(** NDC added command line parameter **)
+(* Turn on tranformation that forces correct parameter evaluation order *)
+val forceRLArgEval: bool ref
+
+(* Set this integer to the index of the global to be left in CABS form. Use 
+ * -1 to disable *)
+val nocil: int ref
+
+(* Indicates whether we're allowed to duplicate small chunks of code. *)
+val allowDuplication: bool ref
diff --git a/cil/src/frontc/cabsvisit.ml b/cil/src/frontc/cabsvisit.ml
new file mode 100644
index 000000000..b2f9784a9
--- /dev/null
+++ b/cil/src/frontc/cabsvisit.ml
@@ -0,0 +1,577 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* cabsvisit.ml *)
+(* tree visitor and rewriter for cabs *)
+
+open Cabs
+open Trace
+open Pretty
+module E = Errormsg
+
+(* basic interface for a visitor object *)
+
+(* Different visiting actions. 'a will be instantiated with exp, instr, etc. *)
+type 'a visitAction = 
+    SkipChildren                        (* Do not visit the children. Return 
+                                         * the node as it is *)
+  | ChangeTo of 'a                      (* Replace the expression with the 
+                                         * given one *)
+  | DoChildren                          (* Continue with the children of this 
+                                         * node. Rebuild the node on return 
+                                         * if any of the children changes 
+                                         * (use == test) *)
+  | ChangeDoChildrenPost of 'a * ('a -> 'a) (* First consider that the entire 
+                                          * exp is replaced by the first 
+                                          * paramenter. Then continue with 
+                                          * the children. On return rebuild 
+                                          * the node if any of the children 
+                                          * has changed and then apply the 
+                                          * function on the node *)
+
+type nameKind = 
+    NVar                                (* Variable or function prototype 
+                                           name *)
+  | NFun                                (* A function definition name *)
+  | NField                              (* The name of a field *)
+  | NType                               (* The name of a type *)
+
+(* All visit methods are called in preorder! (but you can use 
+ * ChangeDoChildrenPost to change the order) *)
+class type cabsVisitor = object
+  method vexpr: expression -> expression visitAction   (* expressions *)
+  method vinitexpr: init_expression -> init_expression visitAction   
+  method vstmt: statement -> statement list visitAction
+  method vblock: block -> block visitAction
+  method vvar: string -> string                  (* use of a variable 
+                                                        * names *)
+  method vdef: definition -> definition list visitAction
+  method vtypespec: typeSpecifier -> typeSpecifier visitAction
+  method vdecltype: decl_type -> decl_type visitAction
+
+      (* For each declaration we call vname *)
+  method vname: nameKind -> specifier -> name -> name visitAction
+  method vspec: specifier -> specifier visitAction     (* specifier *)
+  method vattr: attribute -> attribute list visitAction
+
+  method vEnterScope: unit -> unit
+  method vExitScope: unit -> unit
+end
+    
+let visitorLocation = ref { filename = ""; 
+			    lineno = -1; 
+			    byteno = -1;}
+    
+        (* a default visitor which does nothing to the tree *)
+class nopCabsVisitor : cabsVisitor = object
+  method vexpr (e:expression) = DoChildren
+  method vinitexpr (e:init_expression) = DoChildren
+  method vstmt (s: statement) = 
+    visitorLocation := get_statementloc s;
+    DoChildren
+  method vblock (b: block) = DoChildren
+  method vvar (s: string) = s
+  method vdef (d: definition) = 
+    visitorLocation := get_definitionloc d;
+    DoChildren
+  method vtypespec (ts: typeSpecifier) = DoChildren
+  method vdecltype (dt: decl_type) = DoChildren
+  method vname k (s:specifier) (n: name) = DoChildren
+  method vspec (s:specifier) = DoChildren
+  method vattr (a: attribute) = DoChildren
+      
+  method vEnterScope () = ()
+  method vExitScope () = ()
+end
+        
+        (* Map but try not to copy the list unless necessary *)
+let rec mapNoCopy (f: 'a -> 'a) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let i' = f i in
+      let resti' = mapNoCopy f resti in
+      if i' != i || resti' != resti then i' :: resti' else li 
+        
+let rec mapNoCopyList (f: 'a -> 'a list) = function
+    [] -> []
+  | (i :: resti) as li -> 
+      let il' = f i in
+      let resti' = mapNoCopyList f resti in
+      match il' with
+        [i'] when i' == i && resti' == resti -> li
+      | _ -> il' @ resti'
+                     
+let doVisit (vis: cabsVisitor)
+    (startvisit: 'a -> 'a visitAction) 
+    (children: cabsVisitor -> 'a -> 'a) 
+    (node: 'a) : 'a = 
+  let action = startvisit node in
+  match action with
+    SkipChildren -> node
+  | ChangeTo node' -> node'
+  | _ ->  
+      let nodepre = match action with
+        ChangeDoChildrenPost (node', _) -> node'
+      | _ -> node
+      in
+      let nodepost = children vis nodepre in
+      match action with
+        ChangeDoChildrenPost (_, f) -> f nodepost
+      | _ -> nodepost
+            
+(* A visitor for lists *)
+let doVisitList (vis: cabsVisitor)
+                (startvisit: 'a -> 'a list visitAction)
+                (children: cabsVisitor -> 'a -> 'a)
+                (node: 'a) : 'a list = 
+  let action = startvisit node in
+  match action with
+    SkipChildren -> [node]
+  | ChangeTo nodes' -> nodes'
+  | _ -> 
+      let nodespre = match action with
+        ChangeDoChildrenPost (nodespre, _) -> nodespre
+      | _ -> [node]
+      in
+      let nodespost = mapNoCopy (children vis) nodespre in
+      match action with
+        ChangeDoChildrenPost (_, f) -> f nodespost
+      | _ -> nodespost
+
+            
+let rec visitCabsTypeSpecifier (vis: cabsVisitor) (ts: typeSpecifier) = 
+  doVisit vis vis#vtypespec childrenTypeSpecifier ts
+    
+and childrenTypeSpecifier vis ts = 
+  let childrenFieldGroup ((s, nel) as input) = 
+    let s' = visitCabsSpecifier vis s in
+    let doOneField ((n, eo) as input) = 
+      let n' = visitCabsName vis NField s' n in
+      let eo' = 
+        match eo with
+          None -> None
+        | Some e -> let e' = visitCabsExpression vis e in
+          if e' != e then Some e' else eo
+      in
+      if n' != n || eo' != eo then (n', eo') else input
+    in
+    let nel' = mapNoCopy doOneField nel in
+    if s' != s || nel' != nel then (s', nel') else input
+  in
+  match ts with
+    Tstruct (n, Some fg, extraAttrs) ->
+      (*(trace "sm" (dprintf "visiting struct %s\n" n));*)
+      let fg' = mapNoCopy childrenFieldGroup fg in
+      if fg' != fg then Tstruct( n, Some fg', extraAttrs) else ts
+  | Tunion (n, Some fg, extraAttrs) ->
+      let fg' = mapNoCopy childrenFieldGroup fg in
+      if fg' != fg then Tunion( n, Some fg', extraAttrs) else ts
+  | Tenum (n, Some ei, extraAttrs) ->
+      let doOneEnumItem ((s, e, loc) as ei) =
+        let e' = visitCabsExpression vis e in
+        if e' != e then (s, e', loc) else ei
+      in
+      vis#vEnterScope ();
+      let ei' = mapNoCopy doOneEnumItem ei in
+      vis#vExitScope();
+      if ei' != ei then Tenum( n, Some ei', extraAttrs) else ts
+  | TtypeofE e ->
+      let e' = visitCabsExpression vis e in   
+      if e' != e then TtypeofE e' else ts
+  | TtypeofT (s, dt) -> 
+      let s' = visitCabsSpecifier vis s in
+      let dt' = visitCabsDeclType vis false dt in
+      if s != s' || dt != dt' then TtypeofT (s', dt') else ts
+  | ts -> ts
+        
+and childrenSpecElem (vis: cabsVisitor) (se: spec_elem) : spec_elem = 
+  match se with
+    SpecTypedef | SpecInline | SpecStorage _ | SpecPattern _ -> se
+  | SpecCV _ -> se    (* cop out *)
+  | SpecAttr a -> begin
+      let al' = visitCabsAttribute vis a in
+      match al' with
+        [a''] when a'' == a -> se
+      | [a''] -> SpecAttr a''
+      | _ -> E.s (E.unimp "childrenSpecElem: visitCabsAttribute returned a list")
+  end
+  | SpecType ts -> 
+      let ts' = visitCabsTypeSpecifier vis ts in
+      if ts' != ts then SpecType ts' else se
+        
+and visitCabsSpecifier (vis: cabsVisitor) (s: specifier) : specifier = 
+  doVisit vis vis#vspec childrenSpec s
+and childrenSpec vis s = mapNoCopy (childrenSpecElem vis) s 
+    
+
+and visitCabsDeclType vis (isfundef: bool) (dt: decl_type) : decl_type = 
+  doVisit vis vis#vdecltype (childrenDeclType isfundef) dt
+and childrenDeclType isfundef vis dt = 
+  match dt with
+    JUSTBASE -> dt
+  | PARENTYPE (prea, dt1, posta) -> 
+      let prea' = mapNoCopyList (visitCabsAttribute vis)  prea in
+      let dt1' = visitCabsDeclType vis isfundef dt1 in
+      let posta'= mapNoCopyList (visitCabsAttribute vis)  posta in
+      if prea' != prea || dt1' != dt1 || posta' != posta then 
+        PARENTYPE (prea', dt1', posta') else dt
+  | ARRAY (dt1, al, e) -> 
+      let dt1' = visitCabsDeclType vis isfundef dt1 in
+      let al' = mapNoCopy (childrenAttribute vis) al in
+      let e'= visitCabsExpression vis e in
+      if dt1' != dt1 || al' != al || e' != e then ARRAY(dt1', al', e') else dt
+  | PTR (al, dt1) -> 
+      let al' = mapNoCopy (childrenAttribute vis) al in
+      let dt1' = visitCabsDeclType vis isfundef dt1 in
+      if al' != al || dt1' != dt1 then PTR(al', dt1') else dt
+  | PROTO (dt1, snl, b) ->
+      (* Do not propagate isfundef further *)
+      let dt1' = visitCabsDeclType vis false dt1 in
+      let _ = vis#vEnterScope () in
+      let snl' = mapNoCopy (childrenSingleName vis NVar) snl in
+      (* Exit the scope only if not in a function definition *)
+      let _ = if not isfundef then vis#vExitScope () in
+      if dt1' != dt1 || snl' != snl then PROTO(dt1', snl', b) else dt
+         
+
+and childrenNameGroup vis (kind: nameKind) ((s, nl) as input) = 
+  let s' = visitCabsSpecifier vis s in
+  let nl' = mapNoCopy (visitCabsName vis kind s') nl in
+  if s' != s || nl' != nl then (s', nl') else input
+
+    
+and childrenInitNameGroup vis ((s, inl) as input) = 
+  let s' = visitCabsSpecifier vis s in
+  let inl' = mapNoCopy (childrenInitName vis s') inl in
+  if s' != s || inl' != inl then (s', inl') else input
+    
+and visitCabsName vis (k: nameKind) (s: specifier) 
+                      (n: name) : name = 
+  doVisit vis (vis#vname k s) (childrenName s k) n
+and childrenName (s: specifier) (k: nameKind) vis (n: name) : name = 
+  let (sn, dt, al, loc) = n in
+  let dt' = visitCabsDeclType vis (k = NFun) dt in
+  let al' = mapNoCopy (childrenAttribute vis) al in
+  if dt' != dt || al' != al then (sn, dt', al', loc) else n
+    
+and childrenInitName vis (s: specifier) (inn: init_name) : init_name = 
+  let (n, ie) = inn in
+  let n' = visitCabsName vis NVar s n in
+  let ie' = visitCabsInitExpression vis ie in
+  if n' != n || ie' != ie then (n', ie') else inn
+    
+and childrenSingleName vis (k: nameKind) (sn: single_name) : single_name =
+  let s, n = sn in
+  let s' = visitCabsSpecifier vis s in
+  let n' = visitCabsName vis k s' n in
+  if s' != s || n' != n then (s', n') else sn
+    
+and visitCabsDefinition vis (d: definition) : definition list = 
+  doVisitList vis vis#vdef childrenDefinition d
+and childrenDefinition vis d = 
+  match d with 
+    FUNDEF (sn, b, l, lend) -> 
+      let sn' = childrenSingleName vis NFun sn in
+      let b' = visitCabsBlock vis b in
+      (* End the scope that was started by childrenFunctionName *)
+      vis#vExitScope ();
+      if sn' != sn || b' != b then FUNDEF (sn', b', l, lend) else d
+        
+  | DECDEF ((s, inl), l) -> 
+      let s' = visitCabsSpecifier vis s in
+      let inl' = mapNoCopy (childrenInitName vis s') inl in
+      if s' != s || inl' != inl then DECDEF ((s', inl'), l) else d
+  | TYPEDEF (ng, l) -> 
+      let ng' = childrenNameGroup vis NType ng in
+      if ng' != ng then TYPEDEF (ng', l) else d
+  | ONLYTYPEDEF (s, l) -> 
+      let s' = visitCabsSpecifier vis s in
+      if s' != s then ONLYTYPEDEF (s', l) else d
+  | GLOBASM _ -> d
+  | PRAGMA (e, l) -> 
+      let e' = visitCabsExpression vis e in
+      if e' != e then PRAGMA (e', l) else d
+  | LINKAGE (n, l, dl) -> 
+      let dl' = mapNoCopyList (visitCabsDefinition vis) dl in
+      if dl' != dl then LINKAGE (n, l, dl') else d
+      
+  | TRANSFORMER _ -> d
+  | EXPRTRANSFORMER _ -> d
+        
+and visitCabsBlock vis (b: block) : block = 
+  doVisit vis vis#vblock childrenBlock b
+
+and childrenBlock vis (b: block) : block = 
+  let _ = vis#vEnterScope () in
+  let battrs' = mapNoCopyList (visitCabsAttribute vis) b.battrs in
+  let bstmts' = mapNoCopyList (visitCabsStatement vis) b.bstmts in
+  let _ = vis#vExitScope () in
+  if battrs' != b.battrs || bstmts' != b.bstmts then 
+    { blabels = b.blabels; battrs = battrs'; bstmts = bstmts' }
+  else
+    b
+    
+and visitCabsStatement vis (s: statement) : statement list = 
+  doVisitList vis vis#vstmt childrenStatement s
+and childrenStatement vis s = 
+  let ve e = visitCabsExpression vis e in
+  let vs l s = 
+    match visitCabsStatement vis s with
+      [s'] -> s'
+    | sl -> BLOCK ({blabels = []; battrs = []; bstmts = sl }, l)
+  in
+  match s with
+    NOP _ -> s
+  | COMPUTATION (e, l) ->
+      let e' = ve e in
+      if e' != e then COMPUTATION (e', l) else s
+  | BLOCK (b, l) -> 
+      let b' = visitCabsBlock vis b in
+      if b' != b then BLOCK (b', l) else s
+  | SEQUENCE (s1, s2, l) -> 
+      let s1' = vs l s1 in
+      let s2' = vs l s2 in
+      if s1' != s1 || s2' != s2 then SEQUENCE (s1', s2', l) else s
+  | IF (e, s1, s2, l) -> 
+      let e' = ve e in
+      let s1' = vs l s1 in
+      let s2' = vs l s2 in
+      if e' != e || s1' != s1 || s2' != s2 then IF (e', s1', s2', l) else s
+  | WHILE (e, s1, l) -> 
+      let e' = ve e in
+      let s1' = vs l s1 in
+      if e' != e || s1' != s1 then WHILE (e', s1', l) else s
+  | DOWHILE (e, s1, l) -> 
+      let e' = ve e in
+      let s1' = vs l s1 in
+      if e' != e || s1' != s1 then DOWHILE (e', s1', l) else s
+  | FOR (fc1, e2, e3, s4, l) -> 
+      let _ = vis#vEnterScope () in
+      let fc1' = 
+        match fc1 with
+          FC_EXP e1 -> 
+            let e1' = ve e1 in
+            if e1' != e1 then FC_EXP e1' else fc1
+        | FC_DECL d1 -> 
+            let d1' = 
+              match visitCabsDefinition vis d1 with
+                [d1'] -> d1'
+              | _ -> E.s (E.unimp "visitCabs: for can have only one definition")
+            in
+            if d1' != d1 then FC_DECL d1' else fc1
+      in
+      let e2' = ve e2 in
+      let e3' = ve e3 in
+      let s4' = vs l s4 in
+      let _ = vis#vExitScope () in
+      if fc1' != fc1 || e2' != e2 || e3' != e3 || s4' != s4 
+      then FOR (fc1', e2', e3', s4', l) else s
+  | BREAK _ | CONTINUE _ | GOTO _ -> s
+  | RETURN (e, l) ->
+      let e' = ve e in
+      if e' != e then RETURN (e', l) else s
+  | SWITCH (e, s1, l) -> 
+      let e' = ve e in
+      let s1' = vs l s1 in
+      if e' != e || s1' != s1 then SWITCH (e', s1', l) else s
+  | CASE (e, s1, l) -> 
+      let e' = ve e in
+      let s1' = vs l s1 in
+      if e' != e || s1' != s1 then CASE (e', s1', l) else s
+  | CASERANGE (e1, e2, s3, l) -> 
+      let e1' = ve e1 in
+      let e2' = ve e2 in
+      let s3' = vs l s3 in
+      if e1' != e1 || e2' != e2 || s3' != s3 then 
+        CASERANGE (e1', e2', s3', l) else s
+  | DEFAULT (s1, l) ->
+      let s1' = vs l s1 in
+      if s1' != s1 then DEFAULT (s1', l) else s
+  | LABEL (n, s1, l) ->
+      let s1' = vs l s1 in
+      if s1' != s1 then LABEL (n, s1', l) else s
+  | COMPGOTO (e, l) -> 
+      let e' = ve e in
+      if e' != e then COMPGOTO (e', l) else s
+  | DEFINITION d -> begin
+      match visitCabsDefinition vis d with
+          [d'] when d' == d -> s
+        | [d'] -> DEFINITION d'
+        | dl -> let l = get_definitionloc d in
+          let dl' = List.map (fun d' -> DEFINITION d') dl in
+          BLOCK ({blabels = []; battrs = []; bstmts = dl' }, l)
+    end
+  | ASM (sl, b, details, l) -> 
+      let childrenStringExp ((s, e) as input) = 
+        let e' = ve e in
+        if e' != e then (s, e') else input
+      in
+      let details' = match details with
+      | None -> details
+      | Some { aoutputs = outl; ainputs = inl; aclobbers = clobs } ->
+	  let outl' = mapNoCopy childrenStringExp outl in
+	  let inl' = mapNoCopy childrenStringExp inl in
+	  if outl' == outl && inl' == inl then
+	    details
+	  else
+	    Some { aoutputs = outl'; ainputs = inl'; aclobbers = clobs }
+      in
+      if details' != details then 
+        ASM (sl, b, details', l) else s
+  | TRY_FINALLY (b1, b2, l) -> 
+      let b1' = visitCabsBlock vis b1 in
+      let b2' = visitCabsBlock vis b2 in
+      if b1' != b1 || b2' != b2 then TRY_FINALLY(b1', b2', l) else s
+  | TRY_EXCEPT (b1, e, b2, l) -> 
+      let b1' = visitCabsBlock vis b1 in
+      let e' = visitCabsExpression vis e in
+      let b2' = visitCabsBlock vis b2 in
+      if b1' != b1 || e' != e || b2' != b2 then TRY_EXCEPT(b1', e', b2', l) else s
+      
+          
+and visitCabsExpression vis (e: expression) : expression = 
+  doVisit vis vis#vexpr childrenExpression e
+and childrenExpression vis e = 
+  let ve e = visitCabsExpression vis e in
+  match e with 
+    NOTHING | LABELADDR _ -> e
+  | UNARY (uo, e1) -> 
+      let e1' = ve e1 in
+      if e1' != e1 then UNARY (uo, e1') else e
+  | BINARY (bo, e1, e2) -> 
+      let e1' = ve e1 in
+      let e2' = ve e2 in
+      if e1' != e1 || e2' != e2 then BINARY (bo, e1', e2') else e
+  | QUESTION (e1, e2, e3) -> 
+      let e1' = ve e1 in
+      let e2' = ve e2 in
+      let e3' = ve e3 in
+      if e1' != e1 || e2' != e2 || e3' != e3 then 
+        QUESTION (e1', e2', e3') else e
+  | CAST ((s, dt), ie) -> 
+      let s' = visitCabsSpecifier vis s in
+      let dt' = visitCabsDeclType vis false dt in
+      let ie' = visitCabsInitExpression vis ie in
+      if s' != s || dt' != dt || ie' != ie then CAST ((s', dt'), ie') else e
+  | CALL (f, el) -> 
+      let f' = ve f in
+      let el' = mapNoCopy ve el in
+      if f' != f || el' != el then CALL (f', el') else e
+  | COMMA el -> 
+      let el' = mapNoCopy ve el in
+      if el' != el then COMMA (el') else e
+  | CONSTANT _ -> e
+  | VARIABLE s -> 
+      let s' = vis#vvar s in
+      if s' != s then VARIABLE s' else e
+  | EXPR_SIZEOF (e1) -> 
+      let e1' = ve e1 in
+      if e1' != e1 then EXPR_SIZEOF (e1') else e
+  | TYPE_SIZEOF (s, dt) -> 
+      let s' = visitCabsSpecifier vis s in
+      let dt' = visitCabsDeclType vis false dt in
+      if s' != s || dt' != dt then TYPE_SIZEOF (s' ,dt') else e
+  | EXPR_ALIGNOF (e1) -> 
+      let e1' = ve e1 in
+      if e1' != e1 then EXPR_ALIGNOF (e1') else e
+  | TYPE_ALIGNOF (s, dt) -> 
+      let s' = visitCabsSpecifier vis s in
+      let dt' = visitCabsDeclType vis false dt in
+      if s' != s || dt' != dt then TYPE_ALIGNOF (s' ,dt') else e
+  | INDEX (e1, e2) -> 
+      let e1' = ve e1 in
+      let e2' = ve e2 in
+      if e1' != e1 || e2' != e2 then INDEX (e1', e2') else e
+  | MEMBEROF (e1, n) -> 
+      let e1' = ve e1 in
+      if e1' != e1 then MEMBEROF (e1', n) else e
+  | MEMBEROFPTR (e1, n) -> 
+      let e1' = ve e1 in
+      if e1' != e1 then MEMBEROFPTR (e1', n) else e
+  | GNU_BODY b -> 
+      let b' = visitCabsBlock vis b in
+      if b' != b then GNU_BODY b' else e
+  | EXPR_PATTERN _ -> e
+        
+and visitCabsInitExpression vis (ie: init_expression) : init_expression = 
+  doVisit vis vis#vinitexpr childrenInitExpression ie
+and childrenInitExpression vis ie = 
+  let rec childrenInitWhat iw = 
+    match iw with
+      NEXT_INIT -> iw
+    | INFIELD_INIT (n, iw1) -> 
+        let iw1' = childrenInitWhat iw1 in
+        if iw1' != iw1 then INFIELD_INIT (n, iw1') else iw
+    | ATINDEX_INIT (e, iw1) -> 
+        let e' = visitCabsExpression vis e in
+        let iw1' = childrenInitWhat iw1 in
+        if e' != e || iw1' != iw1 then ATINDEX_INIT (e', iw1') else iw
+    | ATINDEXRANGE_INIT (e1, e2) -> 
+        let e1' = visitCabsExpression vis e1 in
+        let e2' = visitCabsExpression vis e2 in
+        if e1' != e1 || e2' != e2 then ATINDEXRANGE_INIT (e1, e2) else iw
+  in
+  match ie with 
+    NO_INIT -> ie
+  | SINGLE_INIT e -> 
+      let e' = visitCabsExpression vis e in
+      if e' != e then SINGLE_INIT e' else ie
+  | COMPOUND_INIT il -> 
+      let childrenOne ((iw, ie) as input) = 
+        let iw' = childrenInitWhat iw in
+        let ie' = visitCabsInitExpression vis ie in
+        if iw' != iw || ie' != ie then (iw', ie') else input
+      in
+      let il' = mapNoCopy childrenOne il in
+      if il' != il then COMPOUND_INIT il' else ie
+        
+
+and visitCabsAttribute vis (a: attribute) : attribute list = 
+  doVisitList vis vis#vattr childrenAttribute a
+
+and childrenAttribute vis ((n, el) as input) = 
+  let el' = mapNoCopy (visitCabsExpression vis) el in
+  if el' != el then (n, el') else input
+    
+and visitCabsAttributes vis (al: attribute list) : attribute list = 
+  mapNoCopyList (visitCabsAttribute vis) al
+
+let visitCabsFile (vis: cabsVisitor) ((fname, f): file) : file =  
+  (fname, mapNoCopyList (visitCabsDefinition vis) f)
+
+    (* end of file *)
+    
diff --git a/cil/src/frontc/cabsvisit.mli b/cil/src/frontc/cabsvisit.mli
new file mode 100644
index 000000000..d2387892b
--- /dev/null
+++ b/cil/src/frontc/cabsvisit.mli
@@ -0,0 +1,115 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* cabsvisit.mli *)
+(* interface for cabsvisit.ml *)
+
+(* Different visiting actions. 'a will be instantiated with exp, instr, etc. *)
+type 'a visitAction = 
+    SkipChildren                        (* Do not visit the children. Return 
+                                         * the node as it is *)
+  | ChangeTo of 'a                      (* Replace the expression with the 
+                                         * given one *)
+  | DoChildren                          (* Continue with the children of this 
+                                         * node. Rebuild the node on return 
+                                         * if any of the children changes 
+                                         * (use == test) *)
+  | ChangeDoChildrenPost of 'a * ('a -> 'a) (* First consider that the entire 
+                                          * exp is replaced by the first 
+                                          * paramenter. Then continue with 
+                                          * the children. On return rebuild 
+                                          * the node if any of the children 
+                                          * has changed and then apply the 
+                                          * function on the node *)
+
+type nameKind = 
+    NVar                                (** Variable or function prototype 
+                                           name *)
+  | NFun                                (** Function definition name *)
+  | NField                              (** The name of a field *)
+  | NType                               (** The name of a type *)
+
+
+(* All visit methods are called in preorder! (but you can use 
+ * ChangeDoChildrenPost to change the order) *)
+class type cabsVisitor = object
+  method vexpr: Cabs.expression -> Cabs.expression visitAction   (* expressions *)
+  method vinitexpr: Cabs.init_expression -> Cabs.init_expression visitAction   
+  method vstmt: Cabs.statement -> Cabs.statement list visitAction
+  method vblock: Cabs.block -> Cabs.block visitAction
+  method vvar: string -> string                  (* use of a variable 
+                                                        * names *)
+  method vdef: Cabs.definition -> Cabs.definition list visitAction
+  method vtypespec: Cabs.typeSpecifier -> Cabs.typeSpecifier visitAction
+  method vdecltype: Cabs.decl_type -> Cabs.decl_type visitAction
+
+      (* For each declaration we call vname *)
+  method vname: nameKind -> Cabs.specifier -> Cabs.name -> Cabs.name visitAction
+  method vspec: Cabs.specifier -> Cabs.specifier visitAction     (* specifier *)
+  method vattr: Cabs.attribute -> Cabs.attribute list visitAction
+
+
+  method vEnterScope: unit -> unit
+  method vExitScope: unit -> unit
+end
+
+
+class nopCabsVisitor: cabsVisitor
+
+
+val visitCabsTypeSpecifier: cabsVisitor -> 
+                            Cabs.typeSpecifier -> Cabs.typeSpecifier
+val visitCabsSpecifier: cabsVisitor -> Cabs.specifier -> Cabs.specifier
+
+(** Visits a decl_type. The bool argument is saying whether we are ina 
+  * function definition and thus the scope in a PROTO should extend until the 
+  * end of the function *)
+val visitCabsDeclType: cabsVisitor -> bool -> Cabs.decl_type -> Cabs.decl_type
+val visitCabsDefinition: cabsVisitor -> Cabs.definition -> Cabs.definition list
+val visitCabsBlock: cabsVisitor -> Cabs.block -> Cabs.block
+val visitCabsStatement: cabsVisitor -> Cabs.statement -> Cabs.statement list
+val visitCabsExpression: cabsVisitor -> Cabs.expression -> Cabs.expression
+val visitCabsAttributes: cabsVisitor -> Cabs.attribute list 
+                                     -> Cabs.attribute list
+val visitCabsName: cabsVisitor -> nameKind 
+                   -> Cabs.specifier -> Cabs.name -> Cabs.name
+val visitCabsFile: cabsVisitor -> Cabs.file -> Cabs.file
+
+
+
+(** Set by the visitor to the current location *)
+val visitorLocation: Cabs.cabsloc ref
diff --git a/cil/src/frontc/clexer.mli b/cil/src/frontc/clexer.mli
new file mode 100644
index 000000000..01acfd048
--- /dev/null
+++ b/cil/src/frontc/clexer.mli
@@ -0,0 +1,55 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(* This interface is generated manually. The corresponding .ml file is 
+ * generated automatically and is placed in ../obj/clexer.ml. The reason we 
+ * want this interface is to avoid confusing make with freshly generated 
+ * interface files *)
+
+
+val init: filename:string -> Lexing.lexbuf
+val finish: unit -> unit
+
+(* This is the main parser function *)
+val initial: Lexing.lexbuf -> Cparser.token
+
+
+val push_context: unit -> unit (* Start a context  *)
+val add_type: string -> unit (* Add a new string as a type name  *)
+val add_identifier: string -> unit (* Add a new string as a variable name  *)
+val pop_context: unit -> unit (* Remove all names added in this context  *)
diff --git a/cil/src/frontc/clexer.mll b/cil/src/frontc/clexer.mll
new file mode 100644
index 000000000..08f788193
--- /dev/null
+++ b/cil/src/frontc/clexer.mll
@@ -0,0 +1,664 @@
+(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(* FrontC -- lexical analyzer
+**
+** 1.0	3.22.99	Hugues Cassé	First version.
+** 2.0  George Necula 12/12/00: Many extensions
+*)
+{
+open Cparser
+open Pretty
+exception Eof
+exception InternalError of string
+module E = Errormsg
+module H = Hashtbl
+
+let matchingParsOpen = ref 0
+
+let currentLoc () = 
+  let l, f, c = E.getPosition () in
+  { Cabs.lineno   = l;
+    Cabs.filename = f;
+    Cabs.byteno   = c;}
+
+(* string -> unit *)
+let addComment c =
+  let l = currentLoc() in
+  let i = GrowArray.max_init_index Cabs.commentsGA in
+  GrowArray.setg Cabs.commentsGA (i+1) (l,c,false)
+
+let int64_to_char value =
+  if (compare value (Int64.of_int 255) > 0) || (compare value Int64.zero < 0) then
+    begin
+      let msg = Printf.sprintf "clexer:intlist_to_string: character 0x%Lx too big" value in
+      E.parse_error msg;
+    end
+  else
+    Char.chr (Int64.to_int value)
+
+(* takes a not-nul-terminated list, and converts it to a string. *)
+let rec intlist_to_string (str: int64 list):string =
+  match str with
+    [] -> ""  (* add nul-termination *)
+  | value::rest ->
+      let this_char = int64_to_char value in
+      (String.make 1 this_char) ^ (intlist_to_string rest)
+
+(* Some debugging support for line numbers *)
+let dbgToken (t: token) = 
+  if false then begin
+    ignore (E.log "%a" insert
+              (match t with 
+                IDENT (n, l) -> dprintf "IDENT(%s,%d)\n" n l.Cabs.lineno
+              | LBRACE l -> dprintf "LBRACE(%d)\n" l.Cabs.lineno
+              | RBRACE l -> dprintf "RBRACE(%d)\n" l.Cabs.lineno
+              | IF l -> dprintf "IF(%d)\n" l.Cabs.lineno
+              | SWITCH l -> dprintf "SWITCH(%d)\n" l.Cabs.lineno
+              | RETURN l -> dprintf "RETURN(%d)\n" l.Cabs.lineno
+              | _ -> nil));
+    t
+  end else
+    t
+
+
+(*
+** Keyword hashtable
+*)
+let lexicon = H.create 211
+let init_lexicon _ =
+  H.clear lexicon;
+  List.iter 
+    (fun (key, builder) -> H.add lexicon key builder)
+    [ ("auto", fun loc -> AUTO loc);
+      ("const", fun loc -> CONST loc);
+      ("__const", fun loc -> CONST loc);
+      ("__const__", fun loc -> CONST loc);
+      ("static", fun loc -> STATIC loc);
+      ("extern", fun loc -> EXTERN loc);
+      ("long", fun loc -> LONG loc);
+      ("short", fun loc -> SHORT loc);
+      ("register", fun loc -> REGISTER loc);
+      ("signed", fun loc -> SIGNED loc);
+      ("__signed", fun loc -> SIGNED loc);
+      ("unsigned", fun loc -> UNSIGNED loc);
+      ("volatile", fun loc -> VOLATILE loc);
+      ("__volatile", fun loc -> VOLATILE loc);
+      (* WW: see /usr/include/sys/cdefs.h for why __signed and __volatile
+       * are accepted GCC-isms *)
+      ("char", fun loc -> CHAR loc);
+      ("int", fun loc -> INT loc);
+      ("float", fun loc -> FLOAT loc);
+      ("double", fun loc -> DOUBLE loc);
+      ("void", fun loc -> VOID loc);
+      ("enum", fun loc -> ENUM loc);
+      ("struct", fun loc -> STRUCT loc);
+      ("typedef", fun loc -> TYPEDEF loc);
+      ("union", fun loc -> UNION loc);
+      ("break", fun loc -> BREAK loc);
+      ("continue", fun loc -> CONTINUE loc);
+      ("goto", fun loc -> GOTO loc); 
+      ("return", fun loc -> dbgToken (RETURN loc));
+      ("switch", fun loc -> dbgToken (SWITCH loc));
+      ("case", fun loc -> CASE loc); 
+      ("default", fun loc -> DEFAULT loc);
+      ("while", fun loc -> WHILE loc);  
+      ("do", fun loc -> DO loc);  
+      ("for", fun loc -> FOR loc);
+      ("if", fun loc -> dbgToken (IF loc));
+      ("else", fun _ -> ELSE);
+      (*** Implementation specific keywords ***)
+      ("__signed__", fun loc -> SIGNED loc);
+      ("__inline__", fun loc -> INLINE loc);
+      ("inline", fun loc -> INLINE loc); 
+      ("__inline", fun loc -> INLINE loc);
+      ("_inline", fun loc -> INLINE loc);
+      ("__attribute__", fun loc -> ATTRIBUTE loc);
+      ("__attribute", fun loc -> ATTRIBUTE loc);
+(*
+      ("__attribute_used__", fun loc -> ATTRIBUTE_USED loc);
+*)
+      ("__blockattribute__", fun _ -> BLOCKATTRIBUTE);
+      ("__blockattribute", fun _ -> BLOCKATTRIBUTE);
+      ("__asm__", fun loc -> ASM loc);
+      ("asm", fun loc -> ASM loc);
+      ("__typeof__", fun loc -> TYPEOF loc);
+      ("__typeof", fun loc -> TYPEOF loc);
+      ("typeof", fun loc -> TYPEOF loc); 
+      ("__alignof", fun loc -> ALIGNOF loc);
+      ("__alignof__", fun loc -> ALIGNOF loc);
+      ("__volatile__", fun loc -> VOLATILE loc);
+      ("__volatile", fun loc -> VOLATILE loc);
+
+      ("__FUNCTION__", fun loc -> FUNCTION__ loc);
+      ("__func__", fun loc -> FUNCTION__ loc); (* ISO 6.4.2.2 *)
+      ("__PRETTY_FUNCTION__", fun loc -> PRETTY_FUNCTION__ loc);
+      ("__label__", fun _ -> LABEL__);
+      (*** weimer: GCC arcana ***)
+      ("__restrict", fun loc -> RESTRICT loc);
+      ("restrict", fun loc -> RESTRICT loc);
+(*      ("__extension__", EXTENSION); *)
+      (**** MS VC ***)
+      ("__int64", fun _ -> INT64 (currentLoc ()));
+      ("__int32", fun loc -> INT loc);
+      ("_cdecl",  fun _ -> MSATTR ("_cdecl", currentLoc ())); 
+      ("__cdecl", fun _ -> MSATTR ("__cdecl", currentLoc ()));
+      ("_stdcall", fun _ -> MSATTR ("_stdcall", currentLoc ())); 
+      ("__stdcall", fun _ -> MSATTR ("__stdcall", currentLoc ()));
+      ("_fastcall", fun _ -> MSATTR ("_fastcall", currentLoc ())); 
+      ("__fastcall", fun _ -> MSATTR ("__fastcall", currentLoc ()));
+      ("__w64", fun _ -> MSATTR("__w64", currentLoc ()));
+      ("__declspec", fun loc -> DECLSPEC loc);
+      ("__forceinline", fun loc -> INLINE loc); (* !! we turn forceinline 
+                                                 * into inline *)
+      ("__try", fun loc -> TRY loc);
+      ("__except", fun loc -> EXCEPT loc);
+      ("__finally", fun loc -> FINALLY loc);
+      (* weimer: some files produced by 'GCC -E' expect this type to be
+       * defined *)
+      ("__builtin_va_list", 
+       fun _ -> NAMED_TYPE ("__builtin_va_list", currentLoc ()));
+      ("__builtin_va_arg", fun loc -> BUILTIN_VA_ARG loc);
+      ("__builtin_types_compatible_p", fun loc -> BUILTIN_TYPES_COMPAT loc);
+      ("__builtin_offsetof", fun loc -> BUILTIN_OFFSETOF loc);
+      (* On some versions of GCC __thread is a regular identifier *)
+      ("__thread", fun loc -> 
+                      if Machdep.__thread_is_keyword then 
+                         THREAD loc
+                       else 
+                         IDENT ("__thread", loc));
+    ]
+
+(* Mark an identifier as a type name. The old mapping is preserved and will 
+ * be reinstated when we exit this context *)
+let add_type name =
+   (* ignore (print_string ("adding type name " ^ name ^ "\n"));  *)
+   H.add lexicon name (fun loc -> NAMED_TYPE (name, loc))
+
+let context : string list list ref = ref []
+
+let push_context _ = context := []::!context
+
+let pop_context _ = 
+  match !context with
+    [] -> raise (InternalError "Empty context stack")
+  | con::sub ->
+		(context := sub;
+		List.iter (fun name -> 
+                           (* ignore (print_string ("removing lexicon for " ^ name ^ "\n")); *)
+                            H.remove lexicon name) con)
+
+(* Mark an identifier as a variable name. The old mapping is preserved and 
+ * will be reinstated when we exit this context  *)
+let add_identifier name =
+  match !context with
+    [] -> () (* Just ignore raise (InternalError "Empty context stack") *)
+  | con::sub ->
+      (context := (name::con)::sub;
+       (*                print_string ("adding IDENT for " ^ name ^ "\n"); *)
+       H.add lexicon name (fun loc -> 
+         dbgToken (IDENT (name, loc))))
+
+
+(*
+** Useful primitives
+*)
+let scan_ident id =
+  let here = currentLoc () in
+  try (H.find lexicon id) here
+  (* default to variable name, as opposed to type *)
+  with Not_found -> dbgToken (IDENT (id, here))
+
+
+(*
+** Buffer processor
+*)
+ 
+
+let init ~(filename: string) : Lexing.lexbuf =
+  init_lexicon ();
+  (* Inititialize the pointer in Errormsg *)
+  Lexerhack.add_type := add_type;
+  Lexerhack.push_context := push_context;
+  Lexerhack.pop_context := pop_context;
+  Lexerhack.add_identifier := add_identifier;
+  E.startParsing filename
+
+
+let finish () = 
+  E.finishParsing ()
+
+(*** Error handling ***)
+let error msg =
+  E.parse_error msg
+
+
+(*** escape character management ***)
+let scan_escape (char: char) : int64 =
+  let result = match char with
+    'n' -> '\n'
+  | 'r' -> '\r'
+  | 't' -> '\t'
+  | 'b' -> '\b'
+  | 'f' -> '\012'  (* ASCII code 12 *)
+  | 'v' -> '\011'  (* ASCII code 11 *)
+  | 'a' -> '\007'  (* ASCII code 7 *)
+  | 'e' | 'E' -> '\027'  (* ASCII code 27. This is a GCC extension *)
+  | '\'' -> '\''    
+  | '"'-> '"'     (* '"' *)
+  | '?' -> '?'
+  | '(' when not !Cprint.msvcMode -> '('
+  | '{' when not !Cprint.msvcMode -> '{'
+  | '[' when not !Cprint.msvcMode -> '['
+  | '%' when not !Cprint.msvcMode -> '%'
+  | '\\' -> '\\' 
+  | other -> error ("Unrecognized escape sequence: \\" ^ (String.make 1 other))
+  in
+  Int64.of_int (Char.code result)
+
+let scan_hex_escape str =
+  let radix = Int64.of_int 16 in
+  let the_value = ref Int64.zero in
+  (* start at character 2 to skip the \x *)
+  for i = 2 to (String.length str) - 1 do
+    let thisDigit = Cabs.valueOfDigit (String.get str i) in
+    (* the_value := !the_value * 16 + thisDigit *)
+    the_value := Int64.add (Int64.mul !the_value radix) thisDigit
+  done;
+  !the_value
+
+let scan_oct_escape str =
+  let radix = Int64.of_int 8 in
+  let the_value = ref Int64.zero in
+  (* start at character 1 to skip the \x *)
+  for i = 1 to (String.length str) - 1 do
+    let thisDigit = Cabs.valueOfDigit (String.get str i) in
+    (* the_value := !the_value * 8 + thisDigit *)
+    the_value := Int64.add (Int64.mul !the_value radix) thisDigit
+  done;
+  !the_value
+
+let lex_hex_escape remainder lexbuf =
+  let prefix = scan_hex_escape (Lexing.lexeme lexbuf) in
+  prefix :: remainder lexbuf
+
+let lex_oct_escape remainder lexbuf =
+  let prefix = scan_oct_escape (Lexing.lexeme lexbuf) in
+  prefix :: remainder lexbuf
+
+let lex_simple_escape remainder lexbuf =
+  let lexchar = Lexing.lexeme_char lexbuf 1 in
+  let prefix = scan_escape lexchar in
+  prefix :: remainder lexbuf
+
+let lex_unescaped remainder lexbuf =
+  let prefix = Int64.of_int (Char.code (Lexing.lexeme_char lexbuf 0)) in
+  prefix :: remainder lexbuf
+
+let lex_comment remainder lexbuf =
+  let ch = Lexing.lexeme_char lexbuf 0 in
+  let prefix = Int64.of_int (Char.code ch) in
+  if ch = '\n' then E.newline();
+  prefix :: remainder lexbuf
+
+let make_char (i:int64):char =
+  let min_val = Int64.zero in
+  let max_val = Int64.of_int 255 in
+  (* if i < 0 || i > 255 then error*)
+  if compare i min_val < 0 || compare i max_val > 0 then begin
+    let msg = Printf.sprintf "clexer:make_char: character 0x%Lx too big" i in
+    error msg
+  end;
+  Char.chr (Int64.to_int i)
+
+
+(* ISO standard locale-specific function to convert a wide character
+ * into a sequence of normal characters. Here we work on strings. 
+ * We convert L"Hi" to "H\000i\000" 
+  matth: this seems unused.
+let wbtowc wstr =
+  let len = String.length wstr in 
+  let dest = String.make (len * 2) '\000' in 
+  for i = 0 to len-1 do 
+    dest.[i*2] <- wstr.[i] ;
+  done ;
+  dest
+*)
+
+(* This function converst the "Hi" in L"Hi" to { L'H', L'i', L'\0' }
+  matth: this seems unused.
+let wstr_to_warray wstr =
+  let len = String.length wstr in
+  let res = ref "{ " in
+  for i = 0 to len-1 do
+    res := !res ^ (Printf.sprintf "L'%c', " wstr.[i])
+  done ;
+  res := !res ^ "}" ;
+  !res
+*)
+
+(* Pragmas get explicit end-of-line tokens.
+ * Elsewhere they are silently discarded as whitespace. *)
+let pragmaLine = ref false
+
+}
+
+let decdigit = ['0'-'9']
+let octdigit = ['0'-'7']
+let hexdigit = ['0'-'9' 'a'-'f' 'A'-'F']
+let letter = ['a'- 'z' 'A'-'Z']
+
+
+let usuffix = ['u' 'U']
+let lsuffix = "l"|"L"|"ll"|"LL"
+let intsuffix = lsuffix | usuffix | usuffix lsuffix | lsuffix usuffix 
+              | usuffix ? "i64"
+                
+
+let hexprefix = '0' ['x' 'X']
+
+let intnum = decdigit+ intsuffix?
+let octnum = '0' octdigit+ intsuffix?
+let hexnum = hexprefix hexdigit+ intsuffix?
+
+let exponent = ['e' 'E']['+' '-']? decdigit+
+let fraction  = '.' decdigit+
+let decfloat = (intnum? fraction)
+	      |(intnum exponent)
+	      |(intnum? fraction exponent)
+	      | (intnum '.') 
+              | (intnum '.' exponent) 
+
+let hexfraction = hexdigit* '.' hexdigit+ | hexdigit+
+let binexponent = ['p' 'P'] ['+' '-']? decdigit+
+let hexfloat = hexprefix hexfraction binexponent
+             | hexprefix hexdigit+   binexponent
+
+let floatsuffix = ['f' 'F' 'l' 'L']
+let floatnum = (decfloat | hexfloat) floatsuffix?
+
+let ident = (letter|'_')(letter|decdigit|'_'|'$')* 
+let blank = [' ' '\t' '\012' '\r']+
+let escape = '\\' _
+let hex_escape = '\\' ['x' 'X'] hexdigit+
+let oct_escape = '\\' octdigit octdigit? octdigit? 
+
+(* Pragmas that are not parsed by CIL.  We lex them as PRAGMA_LINE tokens *)
+let no_parse_pragma =
+               "warning" | "GCC"
+             (* Solaris-style pragmas:  *)
+             | "ident" | "section" | "option" | "asm" | "use_section" | "weak"
+             | "redefine_extname"
+             | "TCS_align"
+
+
+rule initial =
+	parse 	"/*"			{ let il = comment lexbuf in
+	                                  let sl = intlist_to_string il in
+					  addComment sl;
+                                          initial lexbuf}
+|               "//"                    { let il = onelinecomment lexbuf in
+                                          let sl = intlist_to_string il in
+                                          addComment sl;
+                                          E.newline();
+                                          initial lexbuf
+                                           }
+|		blank			{initial lexbuf}
+|               '\n'                    { E.newline ();
+                                          if !pragmaLine then
+                                            begin
+                                              pragmaLine := false;
+                                              PRAGMA_EOL
+                                            end
+                                          else
+                                            initial lexbuf }
+|               '\\' '\r' * '\n'        {
+                                          E.newline ();
+                                          initial lexbuf
+                                        }
+|		'#'			{ hash lexbuf}
+|               "_Pragma" 	        { PRAGMA (currentLoc ()) }
+|		'\''			{ CST_CHAR (chr lexbuf, currentLoc ())}
+|		"L'"			{ CST_WCHAR (chr lexbuf, currentLoc ()) }
+|		'"'			{ (* '"' *)
+(* matth: BUG:  this could be either a regular string or a wide string.
+ *  e.g. if it's the "world" in 
+ *     L"Hello, " "world"
+ *  then it should be treated as wide even though there's no L immediately
+ *  preceding it.  See test/small1/wchar5.c for a failure case. *)
+                                          try CST_STRING (str lexbuf, currentLoc ())
+                                          with e -> 
+                                             raise (InternalError 
+                                                     ("str: " ^ 
+                                                      Printexc.to_string e))}
+|		"L\""			{ (* weimer: wchar_t string literal *)
+                                          try CST_WSTRING(str lexbuf, currentLoc ())
+                                          with e -> 
+                                             raise (InternalError 
+                                                     ("wide string: " ^ 
+                                                      Printexc.to_string e))}
+|		floatnum		{CST_FLOAT (Lexing.lexeme lexbuf, currentLoc ())}
+|		hexnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
+|		octnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
+|		intnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
+|		"!quit!"		{EOF}
+|		"..."			{ELLIPSIS}
+|		"+="			{PLUS_EQ}
+|		"-="			{MINUS_EQ}
+|		"*="			{STAR_EQ}
+|		"/="			{SLASH_EQ}
+|		"%="			{PERCENT_EQ}
+|		"|="			{PIPE_EQ}
+|		"&="			{AND_EQ}
+|		"^="			{CIRC_EQ}
+|		"<<="			{INF_INF_EQ}
+|		">>="			{SUP_SUP_EQ}
+|		"<<"			{INF_INF}
+|		">>"			{SUP_SUP}
+| 		"=="			{EQ_EQ}
+| 		"!="			{EXCLAM_EQ}
+|		"<="			{INF_EQ}
+|		">="			{SUP_EQ}
+|		"="				{EQ}
+|		"<"				{INF}
+|		">"				{SUP}
+|		"++"			{PLUS_PLUS (currentLoc ())}
+|		"--"			{MINUS_MINUS (currentLoc ())}
+|		"->"			{ARROW}
+|		'+'				{PLUS (currentLoc ())}
+|		'-'				{MINUS (currentLoc ())}
+|		'*'				{STAR (currentLoc ())}
+|		'/'				{SLASH}
+|		'%'				{PERCENT}
+|		'!'			{EXCLAM (currentLoc ())}
+|		"&&"			{AND_AND (currentLoc ())}
+|		"||"			{PIPE_PIPE}
+|		'&'				{AND (currentLoc ())}
+|		'|'				{PIPE}
+|		'^'				{CIRC}
+|		'?'				{QUEST}
+|		':'				{COLON}
+|		'~'		       {TILDE (currentLoc ())}
+	
+|		'{'		       {dbgToken (LBRACE (currentLoc ()))}
+|		'}'		       {dbgToken (RBRACE (currentLoc ()))}
+|		'['				{LBRACKET}
+|		']'				{RBRACKET}
+|		'('		       {dbgToken (LPAREN (currentLoc ())) }
+|		')'				{RPAREN}
+|		';'		       {dbgToken (SEMICOLON (currentLoc ())) }
+|		','				{COMMA}
+|		'.'				{DOT}
+|		"sizeof"		{SIZEOF (currentLoc ())}
+|               "__asm"                 { if !Cprint.msvcMode then 
+                                             MSASM (msasm lexbuf, currentLoc ()) 
+                                          else (ASM (currentLoc ())) }
+
+(* If we see __pragma we eat it and the matching parentheses as well *)
+|               "__pragma"              { matchingParsOpen := 0;
+                                          let _ = matchingpars lexbuf in 
+                                          initial lexbuf 
+                                        }
+
+(* sm: tree transformation keywords *)
+|               "@transform"            {AT_TRANSFORM (currentLoc ())}
+|               "@transformExpr"        {AT_TRANSFORMEXPR (currentLoc ())}
+|               "@specifier"            {AT_SPECIFIER (currentLoc ())}
+|               "@expr"                 {AT_EXPR (currentLoc ())}
+|               "@name"                 {AT_NAME}
+
+(* __extension__ is a black. The parser runs into some conflicts if we let it
+ * pass *)
+|               "__extension__"         {initial lexbuf }
+|		ident			{scan_ident (Lexing.lexeme lexbuf)}
+|		eof			{EOF}
+|		_			{E.parse_error "Invalid symbol"}
+and comment =
+    parse 	
+      "*/"			        { [] }
+(*|     '\n'                              { E.newline (); lex_unescaped comment lexbuf }*)
+| 		_ 			{ lex_comment comment lexbuf }
+
+
+and onelinecomment = parse
+    '\n'        {[]}
+|   _           { lex_comment onelinecomment lexbuf }
+
+and matchingpars = parse
+  '\n'          { E.newline (); matchingpars lexbuf }
+| blank         { matchingpars lexbuf }
+| '('           { incr matchingParsOpen; matchingpars lexbuf }
+| ')'           { decr matchingParsOpen;
+                  if !matchingParsOpen = 0 then 
+                     ()
+                  else 
+                     matchingpars lexbuf
+                }
+|  "/*"		{ let il = comment lexbuf in
+                  let sl = intlist_to_string il in
+		  addComment sl;
+                  matchingpars lexbuf}
+|  '"'		{ (* '"' *)
+                  let _ = str lexbuf in 
+                  matchingpars lexbuf
+                 }
+| _              { matchingpars lexbuf }
+
+(* # <line number> <file name> ... *)
+and hash = parse
+  '\n'		{ E.newline (); initial lexbuf}
+| blank		{ hash lexbuf}
+| intnum	{ (* We are seeing a line number. This is the number for the 
+                   * next line *)
+                  let s = Lexing.lexeme lexbuf in
+                  begin try
+                    E.setCurrentLine (int_of_string s - 1)
+                  with Failure _ ->
+                    E.warn "Bad line number in preprocessed file: %s" s
+                  end;
+                  (* A file name must follow *)
+		  file lexbuf }
+| "line"        { hash lexbuf } (* MSVC line number info *)
+                (* For pragmas with irregular syntax, like #pragma warning, 
+                 * we parse them as a whole line. *)
+| "pragma" blank (no_parse_pragma as pragmaName)
+                { let here = currentLoc () in
+                  PRAGMA_LINE (pragmaName ^ pragma lexbuf, here)
+                }
+| "pragma"      { pragmaLine := true; PRAGMA (currentLoc ()) }
+| _	        { endline lexbuf}
+
+and file =  parse 
+        '\n'		        {E.newline (); initial lexbuf}
+|	blank			{file lexbuf}
+|	'"' [^ '\012' '\t' '"']* '"' 	{ (* '"' *)
+                                   let n = Lexing.lexeme lexbuf in
+                                   let n1 = String.sub n 1 
+                                       ((String.length n) - 2) in
+                                   E.setCurrentFile n1;
+				 endline lexbuf}
+
+|	_			{endline lexbuf}
+
+and endline = parse 
+        '\n' 			{ E.newline (); initial lexbuf}
+|   eof                         { EOF }
+|	_			{ endline lexbuf}
+
+and pragma = parse
+   '\n'                 { E.newline (); "" }
+|   _                   { let cur = Lexing.lexeme lexbuf in 
+                          cur ^ (pragma lexbuf) }  
+
+and str = parse
+        '"'             {[]} (* no nul terminiation in CST_STRING '"' *)
+|	hex_escape	{lex_hex_escape str lexbuf}
+|	oct_escape	{lex_oct_escape str lexbuf}
+|	escape		{lex_simple_escape str lexbuf}
+|	_		{lex_unescaped str lexbuf}
+
+and chr =  parse
+	'\''	        {[]}
+|	hex_escape	{lex_hex_escape chr lexbuf}
+|	oct_escape	{lex_oct_escape chr lexbuf}
+|	escape		{lex_simple_escape chr lexbuf}
+|	_		{lex_unescaped chr lexbuf}
+	
+and msasm = parse
+    blank               { msasm lexbuf }
+|   '{'                 { msasminbrace lexbuf }
+|   _                   { let cur = Lexing.lexeme lexbuf in 
+                          cur ^ (msasmnobrace lexbuf) }
+
+and msasminbrace = parse
+    '}'                 { "" }
+|   _                   { let cur = Lexing.lexeme lexbuf in 
+                          cur ^ (msasminbrace lexbuf) }  
+and msasmnobrace = parse
+   ['}' ';' '\n']       { lexbuf.Lexing.lex_curr_pos <- 
+                               lexbuf.Lexing.lex_curr_pos - 1;
+                          "" }
+|  "__asm"              { lexbuf.Lexing.lex_curr_pos <- 
+                               lexbuf.Lexing.lex_curr_pos - 5;
+                          "" }
+|  _                    { let cur = Lexing.lexeme lexbuf in 
+
+                          cur ^ (msasmnobrace lexbuf) }
+
+{
+
+}
diff --git a/cil/src/frontc/cparser.mly b/cil/src/frontc/cparser.mly
new file mode 100644
index 000000000..f1e1ef94b
--- /dev/null
+++ b/cil/src/frontc/cparser.mly
@@ -0,0 +1,1521 @@
+/*(*
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ **)
+(**
+** 1.0	3.22.99	Hugues Cassé	First version.
+** 2.0  George Necula 12/12/00: Practically complete rewrite.
+*)
+*/
+%{
+open Cabs
+module E = Errormsg
+
+let parse_error msg : unit =       (* sm: c++-mode highlight hack: -> ' <- *)
+  E.parse_error msg
+
+let print = print_string
+
+(* unit -> string option *)
+(*
+let getComments () =
+  match !comments with
+    [] -> None
+  | _ -> 
+      let r = Some(String.concat "\n" (List.rev !comments)) in
+      comments := [];
+      r
+*)
+
+let currentLoc () = 
+  let l, f, c = E.getPosition () in
+  { lineno   = l; 
+    filename = f; 
+    byteno   = c;}
+
+let cabslu = {lineno = -10; 
+	      filename = "cabs loc unknown"; 
+	      byteno = -10;}
+
+(* cabsloc -> cabsloc *)
+(*
+let handleLoc l =
+  l.clcomment <- getComments();
+  l
+*)
+
+(*
+** Expression building
+*)
+let smooth_expression lst =
+  match lst with
+    [] -> NOTHING
+  | [expr] -> expr
+  | _ -> COMMA (lst)
+
+
+let currentFunctionName = ref "<outside any function>"
+    
+let announceFunctionName ((n, decl, _, _):name) =
+  !Lexerhack.add_identifier n;
+  (* Start a context that includes the parameter names and the whole body. 
+   * Will pop when we finish parsing the function body *)
+  !Lexerhack.push_context ();
+  (* Go through all the parameter names and mark them as identifiers *)
+  let rec findProto = function
+      PROTO (d, args, _) when isJUSTBASE d -> 
+        List.iter (fun (_, (an, _, _, _)) -> !Lexerhack.add_identifier an) args
+
+    | PROTO (d, _, _) -> findProto d
+    | PARENTYPE (_, d, _) -> findProto d
+    | PTR (_, d) -> findProto d
+    | ARRAY (d, _, _) -> findProto d
+    | _ -> parse_error "Cannot find the prototype in a function definition";
+           raise Parsing.Parse_error 
+
+  and isJUSTBASE = function
+      JUSTBASE -> true
+    | PARENTYPE (_, d, _) -> isJUSTBASE d
+    | _ -> false
+  in
+  findProto decl;
+  currentFunctionName := n
+
+
+
+let applyPointer (ptspecs: attribute list list) (dt: decl_type)  
+       : decl_type = 
+  (* Outer specification first *)
+  let rec loop = function
+      [] -> dt
+    | attrs :: rest -> PTR(attrs, loop rest)
+  in
+  loop ptspecs
+
+let doDeclaration (loc: cabsloc) (specs: spec_elem list) (nl: init_name list) : definition = 
+  if isTypedef specs then begin
+    (* Tell the lexer about the new type names *)
+    List.iter (fun ((n, _, _, _), _) -> !Lexerhack.add_type n) nl;
+    TYPEDEF ((specs, List.map (fun (n, _) -> n) nl), loc)
+  end else
+    if nl = [] then
+      ONLYTYPEDEF (specs, loc)
+    else begin
+      (* Tell the lexer about the new variable names *)
+      List.iter (fun ((n, _, _, _), _) -> !Lexerhack.add_identifier n) nl;
+      DECDEF ((specs, nl), loc)  
+    end
+
+
+let doFunctionDef (loc: cabsloc)
+                  (lend: cabsloc)
+                  (specs: spec_elem list) 
+                  (n: name) 
+                  (b: block) : definition = 
+  let fname = (specs, n) in
+  FUNDEF (fname, b, loc, lend)
+
+
+let doOldParDecl (names: string list)
+                 ((pardefs: name_group list), (isva: bool)) 
+    : single_name list * bool =
+  let findOneName n =
+    (* Search in pardefs for the definition for this parameter *)
+    let rec loopGroups = function
+        [] -> ([SpecType Tint], (n, JUSTBASE, [], cabslu))
+      | (specs, names) :: restgroups ->
+          let rec loopNames = function
+              [] -> loopGroups restgroups
+            | ((n',_, _, _) as sn) :: _ when n' = n -> (specs, sn)
+            | _ :: restnames -> loopNames restnames
+          in
+          loopNames names
+    in
+    loopGroups pardefs
+  in
+  let args = List.map findOneName names in
+  (args, isva)
+
+let checkConnective (s : string) : unit =
+begin
+  (* checking this means I could possibly have more connectives, with *)
+  (* different meaning *)
+  if (s <> "to") then (
+    parse_error "transformer connective must be 'to'";
+    raise Parsing.Parse_error
+  )
+  else ()
+end
+
+let int64_to_char value =
+  if (compare value (Int64.of_int 255) > 0) || (compare value Int64.zero < 0) then
+    begin
+      let msg = Printf.sprintf "cparser:intlist_to_string: character 0x%Lx too big" value in
+      parse_error msg;
+      raise Parsing.Parse_error
+    end
+  else
+    Char.chr (Int64.to_int value)
+
+(* takes a not-nul-terminated list, and converts it to a string. *)
+let rec intlist_to_string (str: int64 list):string =
+  match str with
+    [] -> ""  (* add nul-termination *)
+  | value::rest ->
+      let this_char = int64_to_char value in
+      (String.make 1 this_char) ^ (intlist_to_string rest)
+
+let fst3 (result, _, _) = result
+let snd3 (_, result, _) = result
+let trd3 (_, _, result) = result
+
+
+(*
+   transform:  __builtin_offsetof(type, member)
+   into     :  (size_t) (&(type * ) 0)->member
+ *)
+
+let transformOffsetOf (speclist, dtype) member =
+  let rec addPointer = function
+    | JUSTBASE ->
+	PTR([], JUSTBASE)
+    | PARENTYPE (attrs1, dtype, attrs2) ->
+	PARENTYPE (attrs1, addPointer dtype, attrs2)
+    | ARRAY (dtype, attrs, expr) ->
+	ARRAY (addPointer dtype, attrs, expr)
+    | PTR (attrs, dtype) ->
+	PTR (attrs, addPointer dtype)
+    | PROTO (dtype, names, variadic) ->
+	PROTO (addPointer dtype, names, variadic)
+  in
+  let nullType = (speclist, addPointer dtype) in
+  let nullExpr = CONSTANT (CONST_INT "0") in
+  let castExpr = CAST (nullType, SINGLE_INIT nullExpr) in
+
+  let rec replaceBase = function
+    | VARIABLE field ->
+	MEMBEROFPTR (castExpr, field)
+    | MEMBEROF (base, field) ->
+	MEMBEROF (replaceBase base, field)
+    | INDEX (base, index) ->
+	INDEX (replaceBase base, index)
+    | _ ->
+	parse_error "malformed offset expression in __builtin_offsetof";
+        raise Parsing.Parse_error 
+  in
+  let memberExpr = replaceBase member in
+  let addrExpr = UNARY (ADDROF, memberExpr) in
+  (* slight cheat: hard-coded assumption that size_t == unsigned int *)
+  let sizeofType = [SpecType Tunsigned], JUSTBASE in
+  let resultExpr = CAST (sizeofType, SINGLE_INIT addrExpr) in
+  resultExpr
+
+%}
+
+%token <string * Cabs.cabsloc> IDENT
+%token <int64 list * Cabs.cabsloc> CST_CHAR
+%token <int64 list * Cabs.cabsloc> CST_WCHAR
+%token <string * Cabs.cabsloc> CST_INT
+%token <string * Cabs.cabsloc> CST_FLOAT
+%token <string * Cabs.cabsloc> NAMED_TYPE
+
+/* Each character is its own list element, and the terminating nul is not
+   included in this list. */
+%token <int64 list * Cabs.cabsloc> CST_STRING   
+%token <int64 list * Cabs.cabsloc> CST_WSTRING
+
+%token EOF
+%token<Cabs.cabsloc> CHAR INT DOUBLE FLOAT VOID INT64 INT32
+%token<Cabs.cabsloc> ENUM STRUCT TYPEDEF UNION
+%token<Cabs.cabsloc> SIGNED UNSIGNED LONG SHORT
+%token<Cabs.cabsloc> VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER
+%token<Cabs.cabsloc> THREAD
+
+%token<Cabs.cabsloc> SIZEOF ALIGNOF
+
+%token EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
+%token AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
+%token ARROW DOT
+
+%token EQ_EQ EXCLAM_EQ INF SUP INF_EQ SUP_EQ
+%token<Cabs.cabsloc> PLUS MINUS STAR
+%token SLASH PERCENT
+%token<Cabs.cabsloc> TILDE AND
+%token PIPE CIRC
+%token<Cabs.cabsloc> EXCLAM AND_AND
+%token PIPE_PIPE
+%token INF_INF SUP_SUP
+%token<Cabs.cabsloc> PLUS_PLUS MINUS_MINUS
+
+%token RPAREN 
+%token<Cabs.cabsloc> LPAREN RBRACE
+%token<Cabs.cabsloc> LBRACE
+%token LBRACKET RBRACKET
+%token COLON
+%token<Cabs.cabsloc> SEMICOLON
+%token COMMA ELLIPSIS QUEST
+
+%token<Cabs.cabsloc> BREAK CONTINUE GOTO RETURN
+%token<Cabs.cabsloc> SWITCH CASE DEFAULT
+%token<Cabs.cabsloc> WHILE DO FOR
+%token<Cabs.cabsloc> IF TRY EXCEPT FINALLY
+%token ELSE 
+
+%token<Cabs.cabsloc> ATTRIBUTE INLINE ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__
+%token LABEL__
+%token<Cabs.cabsloc> BUILTIN_VA_ARG ATTRIBUTE_USED
+%token BUILTIN_VA_LIST
+%token BLOCKATTRIBUTE 
+%token<Cabs.cabsloc> BUILTIN_TYPES_COMPAT BUILTIN_OFFSETOF
+%token<Cabs.cabsloc> DECLSPEC
+%token<string * Cabs.cabsloc> MSASM MSATTR
+%token<string * Cabs.cabsloc> PRAGMA_LINE
+%token<Cabs.cabsloc> PRAGMA
+%token PRAGMA_EOL
+
+/* sm: cabs tree transformation specification keywords */
+%token<Cabs.cabsloc> AT_TRANSFORM AT_TRANSFORMEXPR AT_SPECIFIER AT_EXPR
+%token AT_NAME
+
+/* operator precedence */
+%nonassoc 	IF
+%nonassoc 	ELSE
+
+
+%left	COMMA
+%right	EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
+                AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
+%right	QUEST COLON
+%left	PIPE_PIPE
+%left	AND_AND
+%left	PIPE
+%left 	CIRC
+%left	AND
+%left	EQ_EQ EXCLAM_EQ
+%left	INF SUP INF_EQ SUP_EQ
+%left	INF_INF SUP_SUP
+%left	PLUS MINUS
+%left	STAR SLASH PERCENT CONST RESTRICT VOLATILE
+%right	EXCLAM TILDE PLUS_PLUS MINUS_MINUS CAST RPAREN ADDROF SIZEOF ALIGNOF
+%left 	LBRACKET
+%left	DOT ARROW LPAREN LBRACE
+%right  NAMED_TYPE     /* We'll use this to handle redefinitions of
+                        * NAMED_TYPE as variables */
+%left   IDENT
+
+/* Non-terminals informations */
+%start interpret file
+%type <Cabs.definition list> file interpret globals
+
+%type <Cabs.definition> global
+
+
+%type <Cabs.attribute list> attributes attributes_with_asm asmattr
+%type <Cabs.statement> statement
+%type <Cabs.constant * cabsloc> constant
+%type <string * cabsloc> string_constant
+%type <Cabs.expression * cabsloc> expression
+%type <Cabs.expression> opt_expression
+%type <Cabs.init_expression> init_expression
+%type <Cabs.expression list * cabsloc> comma_expression
+%type <Cabs.expression list * cabsloc> paren_comma_expression
+%type <Cabs.expression list> arguments
+%type <Cabs.expression list> bracket_comma_expression
+%type <int64 list Queue.t * cabsloc> string_list 
+%type <int64 list * cabsloc> wstring_list
+
+%type <Cabs.initwhat * Cabs.init_expression> initializer
+%type <(Cabs.initwhat * Cabs.init_expression) list> initializer_list
+%type <Cabs.initwhat> init_designators init_designators_opt
+
+%type <spec_elem list * cabsloc> decl_spec_list
+%type <typeSpecifier * cabsloc> type_spec
+%type <Cabs.field_group list> struct_decl_list
+
+
+%type <Cabs.name> old_proto_decl
+%type <Cabs.single_name> parameter_decl
+%type <Cabs.enum_item> enumerator
+%type <Cabs.enum_item list> enum_list
+%type <Cabs.definition> declaration function_def
+%type <cabsloc * spec_elem list * name> function_def_start
+%type <Cabs.spec_elem list * Cabs.decl_type> type_name
+%type <Cabs.block * cabsloc * cabsloc> block
+%type <Cabs.statement list> block_element_list
+%type <string list> local_labels local_label_names
+%type <string list> old_parameter_list_ne
+
+%type <Cabs.init_name> init_declarator
+%type <Cabs.init_name list> init_declarator_list
+%type <Cabs.name> declarator
+%type <Cabs.name * expression option> field_decl
+%type <(Cabs.name * expression option) list> field_decl_list
+%type <string * Cabs.decl_type> direct_decl
+%type <Cabs.decl_type> abs_direct_decl abs_direct_decl_opt
+%type <Cabs.decl_type * Cabs.attribute list> abstract_decl
+
+ /* (* Each element is a "* <type_quals_opt>". *) */
+%type <attribute list list * cabsloc> pointer pointer_opt
+%type <Cabs.cabsloc> location
+%type <Cabs.spec_elem * cabsloc> cvspec
+%%
+
+interpret:
+  file EOF				{$1}
+;
+file: globals				{$1}
+;
+globals:
+  /* empty */                           { [] }
+| global globals                        { $1 :: $2 }
+| SEMICOLON globals                     { $2 }
+;
+
+location:
+   /* empty */                	{ currentLoc () }  %prec IDENT
+
+
+/*** Global Definition ***/
+global:
+| declaration                           { $1 }
+| function_def                          { $1 } 
+/*(* Some C header files ar shared with the C++ compiler and have linkage 
+   * specification *)*/
+| EXTERN string_constant declaration    { LINKAGE (fst $2, (*handleLoc*) (snd $2), [ $3 ]) }
+| EXTERN string_constant LBRACE globals RBRACE 
+                                        { LINKAGE (fst $2, (*handleLoc*) (snd $2), $4)  }
+| ASM LPAREN string_constant RPAREN SEMICOLON
+                                        { GLOBASM (fst $3, (*handleLoc*) $1) }
+| pragma                                { $1 }
+/* (* Old-style function prototype. This should be somewhere else, like in
+    * "declaration". For now we keep it at global scope only because in local
+    * scope it looks too much like a function call  *) */
+| IDENT LPAREN old_parameter_list_ne RPAREN old_pardef_list SEMICOLON
+                           { (* Convert pardecl to new style *)
+                             let pardecl, isva = doOldParDecl $3 $5 in 
+                             (* Make the function declarator *)
+                             doDeclaration ((*handleLoc*) (snd $1)) []
+                               [((fst $1, PROTO(JUSTBASE, pardecl,isva), [], cabslu),
+                                 NO_INIT)]
+                            }
+/* (* Old style function prototype, but without any arguments *) */
+| IDENT LPAREN RPAREN  SEMICOLON
+                           { (* Make the function declarator *)
+                             doDeclaration ((*handleLoc*)(snd $1)) []
+                               [((fst $1, PROTO(JUSTBASE,[],false), [], cabslu),
+                                 NO_INIT)]
+                            }
+/* transformer for a toplevel construct */
+| AT_TRANSFORM LBRACE global RBRACE  IDENT/*to*/  LBRACE globals RBRACE {
+    checkConnective(fst $5);
+    TRANSFORMER($3, $7, $1)
+  }
+/* transformer for an expression */
+| AT_TRANSFORMEXPR LBRACE expression RBRACE  IDENT/*to*/  LBRACE expression RBRACE {
+    checkConnective(fst $5);
+    EXPRTRANSFORMER(fst $3, fst $7, $1)
+  }
+| location error SEMICOLON { PRAGMA (VARIABLE "parse_error", $1) }
+;
+
+id_or_typename:
+    IDENT				{fst $1}
+|   NAMED_TYPE				{fst $1}
+|   AT_NAME LPAREN IDENT RPAREN         { "@name(" ^ fst $3 ^ ")" }     /* pattern variable name */
+;
+
+maybecomma:
+   /* empty */                          { () }
+|  COMMA                                { () }
+;
+
+/* *** Expressions *** */
+
+primary_expression:                     /*(* 6.5.1. *)*/
+|		IDENT
+		        {VARIABLE (fst $1), snd $1}
+|        	constant
+		        {CONSTANT (fst $1), snd $1}
+|		paren_comma_expression  
+		        {smooth_expression (fst $1), snd $1}
+|		LPAREN block RPAREN
+		        { GNU_BODY (fst3 $2), $1 }
+
+     /*(* Next is Scott's transformer *)*/
+|               AT_EXPR LPAREN IDENT RPAREN         /* expression pattern variable */
+                         { EXPR_PATTERN(fst $3), $1 }
+;
+
+postfix_expression:                     /*(* 6.5.2 *)*/
+|               primary_expression     
+                        { $1 }
+|		postfix_expression bracket_comma_expression
+			{INDEX (fst $1, smooth_expression $2), snd $1}
+|		postfix_expression LPAREN arguments RPAREN
+			{CALL (fst $1, $3), snd $1}
+|               BUILTIN_VA_ARG LPAREN expression COMMA type_name RPAREN
+                        { let b, d = $5 in
+                          CALL (VARIABLE "__builtin_va_arg", 
+                                [fst $3; TYPE_SIZEOF (b, d)]), $1 }
+|               BUILTIN_TYPES_COMPAT LPAREN type_name COMMA type_name RPAREN
+                        { let b1,d1 = $3 in
+                          let b2,d2 = $5 in
+                          CALL (VARIABLE "__builtin_types_compatible_p", 
+                                [TYPE_SIZEOF(b1,d1); TYPE_SIZEOF(b2,d2)]), $1 }
+|               BUILTIN_OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN
+                        { transformOffsetOf $3 (fst $5), $1 }
+|		postfix_expression DOT id_or_typename
+		        {MEMBEROF (fst $1, $3), snd $1}
+|		postfix_expression ARROW id_or_typename   
+		        {MEMBEROFPTR (fst $1, $3), snd $1}
+|		postfix_expression PLUS_PLUS
+		        {UNARY (POSINCR, fst $1), snd $1}
+|		postfix_expression MINUS_MINUS
+		        {UNARY (POSDECR, fst $1), snd $1}
+/* (* We handle GCC constructor expressions *) */
+|		LPAREN type_name RPAREN LBRACE initializer_list_opt RBRACE
+		        { CAST($2, COMPOUND_INIT $5), $1 }
+;
+
+offsetof_member_designator:	/* GCC extension for __builtin_offsetof */
+|		IDENT
+		        { VARIABLE (fst $1), snd $1 }
+|		offsetof_member_designator DOT IDENT
+			{ MEMBEROF (fst $1, fst $3), snd $1 }
+|		offsetof_member_designator bracket_comma_expression
+			{ INDEX (fst $1, smooth_expression $2), snd $1 }
+;
+
+unary_expression:   /*(* 6.5.3 *)*/
+|               postfix_expression
+                        { $1 }
+|		PLUS_PLUS unary_expression
+		        {UNARY (PREINCR, fst $2), $1}
+|		MINUS_MINUS unary_expression
+		        {UNARY (PREDECR, fst $2), $1}
+|		SIZEOF unary_expression
+		        {EXPR_SIZEOF (fst $2), $1}
+|	 	SIZEOF LPAREN type_name RPAREN
+		        {let b, d = $3 in TYPE_SIZEOF (b, d), $1}
+|		ALIGNOF unary_expression
+		        {EXPR_ALIGNOF (fst $2), $1}
+|	 	ALIGNOF LPAREN type_name RPAREN
+		        {let b, d = $3 in TYPE_ALIGNOF (b, d), $1}
+|		PLUS cast_expression
+		        {UNARY (PLUS, fst $2), $1}
+|		MINUS cast_expression
+		        {UNARY (MINUS, fst $2), $1}
+|		STAR cast_expression
+		        {UNARY (MEMOF, fst $2), $1}
+|		AND cast_expression				
+		        {UNARY (ADDROF, fst $2), $1}
+|		EXCLAM cast_expression
+		        {UNARY (NOT, fst $2), $1}
+|		TILDE cast_expression
+		        {UNARY (BNOT, fst $2), $1}
+|               AND_AND IDENT  { LABELADDR (fst $2), $1 }
+;
+
+cast_expression:   /*(* 6.5.4 *)*/
+|              unary_expression 
+                         { $1 }
+|		LPAREN type_name RPAREN cast_expression
+		         { CAST($2, SINGLE_INIT (fst $4)), $1 }
+;
+
+multiplicative_expression:  /*(* 6.5.5 *)*/
+|               cast_expression
+                         { $1 }
+|		multiplicative_expression STAR cast_expression
+			{BINARY(MUL, fst $1, fst $3), snd $1}
+|		multiplicative_expression SLASH cast_expression
+			{BINARY(DIV, fst $1, fst $3), snd $1}
+|		multiplicative_expression PERCENT cast_expression
+			{BINARY(MOD, fst $1, fst $3), snd $1}
+;
+
+additive_expression:  /*(* 6.5.6 *)*/
+|               multiplicative_expression
+                        { $1 }
+|		additive_expression PLUS multiplicative_expression
+			{BINARY(ADD, fst $1, fst $3), snd $1}
+|		additive_expression MINUS multiplicative_expression
+			{BINARY(SUB, fst $1, fst $3), snd $1}
+;
+
+shift_expression:      /*(* 6.5.7 *)*/
+|               additive_expression
+                         { $1 }
+|		shift_expression  INF_INF additive_expression
+			{BINARY(SHL, fst $1, fst $3), snd $1}
+|		shift_expression  SUP_SUP additive_expression
+			{BINARY(SHR, fst $1, fst $3), snd $1}
+;
+
+
+relational_expression:   /*(* 6.5.8 *)*/
+|               shift_expression
+                        { $1 }
+|		relational_expression INF shift_expression
+			{BINARY(LT, fst $1, fst $3), snd $1}
+|		relational_expression SUP shift_expression
+			{BINARY(GT, fst $1, fst $3), snd $1}
+|		relational_expression INF_EQ shift_expression
+			{BINARY(LE, fst $1, fst $3), snd $1}
+|		relational_expression SUP_EQ shift_expression
+			{BINARY(GE, fst $1, fst $3), snd $1}
+;
+
+equality_expression:   /*(* 6.5.9 *)*/
+|              relational_expression
+                        { $1 }
+|		equality_expression EQ_EQ relational_expression
+			{BINARY(EQ, fst $1, fst $3), snd $1}
+|		equality_expression EXCLAM_EQ relational_expression
+			{BINARY(NE, fst $1, fst $3), snd $1}
+;
+
+
+bitwise_and_expression:   /*(* 6.5.10 *)*/
+|               equality_expression
+                       { $1 }
+|		bitwise_and_expression AND equality_expression
+			{BINARY(BAND, fst $1, fst $3), snd $1}
+;
+
+bitwise_xor_expression:   /*(* 6.5.11 *)*/
+|               bitwise_and_expression
+                       { $1 }
+|		bitwise_xor_expression CIRC bitwise_and_expression
+			{BINARY(XOR, fst $1, fst $3), snd $1}
+;
+
+bitwise_or_expression:   /*(* 6.5.12 *)*/
+|               bitwise_xor_expression
+                        { $1 } 
+|		bitwise_or_expression PIPE bitwise_xor_expression
+			{BINARY(BOR, fst $1, fst $3), snd $1}
+;
+
+logical_and_expression:   /*(* 6.5.13 *)*/
+|               bitwise_or_expression
+                        { $1 }
+|		logical_and_expression AND_AND bitwise_or_expression
+			{BINARY(AND, fst $1, fst $3), snd $1}
+;
+
+logical_or_expression:   /*(* 6.5.14 *)*/
+|               logical_and_expression
+                        { $1 }
+|		logical_or_expression PIPE_PIPE logical_and_expression
+			{BINARY(OR, fst $1, fst $3), snd $1}
+;
+
+conditional_expression:    /*(* 6.5.15 *)*/
+|               logical_or_expression
+                         { $1 }
+|		logical_or_expression QUEST opt_expression COLON conditional_expression
+			{QUESTION (fst $1, $3, fst $5), snd $1}
+;
+
+/*(* The C spec says that left-hand sides of assignment expressions are unary 
+ * expressions. GCC allows cast expressions in there ! *)*/
+
+assignment_expression:     /*(* 6.5.16 *)*/
+|               conditional_expression
+                         { $1 }
+|		cast_expression EQ assignment_expression
+			{BINARY(ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression PLUS_EQ assignment_expression
+			{BINARY(ADD_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression MINUS_EQ assignment_expression
+			{BINARY(SUB_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression STAR_EQ assignment_expression
+			{BINARY(MUL_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression SLASH_EQ assignment_expression
+			{BINARY(DIV_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression PERCENT_EQ assignment_expression
+			{BINARY(MOD_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression AND_EQ assignment_expression
+			{BINARY(BAND_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression PIPE_EQ assignment_expression
+			{BINARY(BOR_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression CIRC_EQ assignment_expression
+			{BINARY(XOR_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression INF_INF_EQ assignment_expression	
+			{BINARY(SHL_ASSIGN, fst $1, fst $3), snd $1}
+|		cast_expression SUP_SUP_EQ assignment_expression
+			{BINARY(SHR_ASSIGN, fst $1, fst $3), snd $1}
+;
+
+expression:           /*(* 6.5.17 *)*/
+                assignment_expression
+                        { $1 }
+;
+                            
+
+constant:
+    CST_INT				{CONST_INT (fst $1), snd $1}
+|   CST_FLOAT				{CONST_FLOAT (fst $1), snd $1}
+|   CST_CHAR				{CONST_CHAR (fst $1), snd $1}
+|   CST_WCHAR				{CONST_WCHAR (fst $1), snd $1}
+|   string_constant		        {CONST_STRING (fst $1), snd $1}
+|   wstring_list			{CONST_WSTRING (fst $1), snd $1}
+;
+
+string_constant:
+/* Now that we know this constant isn't part of a wstring, convert it
+   back to a string for easy viewing. */
+    string_list                         {
+     let queue, location = $1 in
+     let buffer = Buffer.create (Queue.length queue) in
+     Queue.iter
+       (List.iter
+	  (fun value ->
+	    let char = int64_to_char value in
+	    Buffer.add_char buffer char))
+       queue;
+     Buffer.contents buffer, location
+   }
+;
+one_string_constant:
+/* Don't concat multiple strings.  For asm templates. */
+    CST_STRING                          {intlist_to_string (fst $1) }
+;
+string_list:
+    one_string                          {
+      let queue = Queue.create () in
+      Queue.add (fst $1) queue;
+      queue, snd $1
+    }
+|   string_list one_string              {
+      Queue.add (fst $2) (fst $1);
+      $1
+    }
+;
+
+wstring_list:
+    CST_WSTRING                         { $1 }
+|   wstring_list one_string             { (fst $1) @ (fst $2), snd $1 }
+|   wstring_list CST_WSTRING            { (fst $1) @ (fst $2), snd $1 }
+/* Only the first string in the list needs an L, so L"a" "b" is the same
+ * as L"ab" or L"a" L"b". */
+
+one_string: 
+    CST_STRING				{$1}
+|   FUNCTION__                          {(Cabs.explodeStringToInts 
+					    !currentFunctionName), $1}
+|   PRETTY_FUNCTION__                   {(Cabs.explodeStringToInts 
+					    !currentFunctionName), $1}
+;    
+
+init_expression:
+     expression         { SINGLE_INIT (fst $1) }
+|    LBRACE initializer_list_opt RBRACE
+			{ COMPOUND_INIT $2}
+
+initializer_list:    /* ISO 6.7.8. Allow a trailing COMMA */
+    initializer                             { [$1] }
+|   initializer COMMA initializer_list_opt  { $1 :: $3 }
+;
+initializer_list_opt:
+    /* empty */                             { [] }
+|   initializer_list                        { $1 }
+;
+initializer: 
+    init_designators eq_opt init_expression { ($1, $3) }
+|   gcc_init_designators init_expression { ($1, $2) }
+|                       init_expression { (NEXT_INIT, $1) }
+;
+eq_opt: 
+   EQ                        { () }
+   /*(* GCC allows missing = *)*/
+|  /*(* empty *)*/               { () }
+;
+init_designators: 
+    DOT id_or_typename init_designators_opt      { INFIELD_INIT($2, $3) }
+|   LBRACKET  expression RBRACKET init_designators_opt
+                                        { ATINDEX_INIT(fst $2, $4) }
+|   LBRACKET  expression ELLIPSIS expression RBRACKET
+                                        { ATINDEXRANGE_INIT(fst $2, fst $4) }
+;         
+init_designators_opt:
+   /* empty */                          { NEXT_INIT }
+|  init_designators                     { $1 }
+;
+
+gcc_init_designators:  /*(* GCC supports these strange things *)*/
+   id_or_typename COLON                 { INFIELD_INIT($1, NEXT_INIT) }
+;
+
+arguments: 
+                /* empty */         { [] }
+|               comma_expression    { fst $1 }
+;
+
+opt_expression:
+	        /* empty */
+	        	{NOTHING}
+|	        comma_expression
+	        	{smooth_expression (fst $1)}
+;
+
+comma_expression:
+	        expression                        {[fst $1], snd $1}
+|               expression COMMA comma_expression { fst $1 :: fst $3, snd $1 }
+|               error COMMA comma_expression      { $3 }
+;
+
+comma_expression_opt:
+                /* empty */         { NOTHING }
+|               comma_expression    { smooth_expression (fst $1) }
+;
+
+paren_comma_expression:
+  LPAREN comma_expression RPAREN                   { $2 }
+| LPAREN error RPAREN                              { [], $1 }
+;
+
+bracket_comma_expression:
+  LBRACKET comma_expression RBRACKET                   { fst $2 }
+| LBRACKET error RBRACKET                              { [] }
+;
+
+
+/*** statements ***/
+block: /* ISO 6.8.2 */
+    block_begin local_labels block_attrs block_element_list RBRACE
+                                         {!Lexerhack.pop_context();
+                                          { blabels = $2;
+                                            battrs = $3;
+                                            bstmts = $4 },
+					    $1, $5
+                                         } 
+|   error location RBRACE                { { blabels = [];
+                                             battrs  = [];
+                                             bstmts  = [] },
+					     $2, $3
+                                         }
+;
+block_begin:
+    LBRACE      		         {!Lexerhack.push_context (); $1}
+;
+
+block_attrs:
+   /* empty */                                              { [] }
+|  BLOCKATTRIBUTE paren_attr_list_ne
+                                        { [("__blockattribute__", $2)] }
+;
+
+/* statements and declarations in a block, in any order (for C99 support) */
+block_element_list:
+    /* empty */                          { [] }
+|   declaration block_element_list       { DEFINITION($1) :: $2 }
+|   statement block_element_list         { $1 :: $2 }
+/*(* GCC accepts a label at the end of a block *)*/
+|   IDENT COLON	                         { [ LABEL (fst $1, NOP (snd $1), 
+                                                    snd $1)] }
+|   pragma block_element_list            { $2 }
+;
+
+local_labels:
+   /* empty */                                       { [] }
+|  LABEL__ local_label_names SEMICOLON local_labels  { $2 @ $4 }
+;
+local_label_names: 
+   IDENT                                 { [ fst $1 ] }
+|  IDENT COMMA local_label_names         { fst $1 :: $3 }
+;
+
+
+
+statement:
+    SEMICOLON		{NOP ((*handleLoc*) $1) }
+|   comma_expression SEMICOLON
+	        	{COMPUTATION (smooth_expression (fst $1), (*handleLoc*)(snd $1))}
+|   block               {BLOCK (fst3 $1, (*handleLoc*)(snd3 $1))}
+|   IF paren_comma_expression statement                    %prec IF
+                	{IF (smooth_expression (fst $2), $3, NOP $1, $1)}
+|   IF paren_comma_expression statement ELSE statement
+	                {IF (smooth_expression (fst $2), $3, $5, (*handleLoc*) $1)}
+|   SWITCH paren_comma_expression statement
+                        {SWITCH (smooth_expression (fst $2), $3, (*handleLoc*) $1)}
+|   WHILE paren_comma_expression statement
+	        	{WHILE (smooth_expression (fst $2), $3, (*handleLoc*) $1)}
+|   DO statement WHILE paren_comma_expression SEMICOLON
+	        	         {DOWHILE (smooth_expression (fst $4), $2, (*handleLoc*) $1)}
+|   FOR LPAREN for_clause opt_expression
+	        SEMICOLON opt_expression RPAREN statement
+	                         {FOR ($3, $4, $6, $8, (*handleLoc*) $1)}
+|   IDENT COLON statement
+		                 {LABEL (fst $1, $3, (*handleLoc*) (snd $1))}
+|   CASE expression COLON statement
+	                         {CASE (fst $2, $4, (*handleLoc*) $1)}
+|   CASE expression ELLIPSIS expression COLON statement
+	                         {CASERANGE (fst $2, fst $4, $6, (*handleLoc*) $1)}
+|   DEFAULT COLON
+	                         {DEFAULT (NOP $1, (*handleLoc*) $1)}
+|   RETURN SEMICOLON		 {RETURN (NOTHING, (*handleLoc*) $1)}
+|   RETURN comma_expression SEMICOLON
+	                         {RETURN (smooth_expression (fst $2), (*handleLoc*) $1)}
+|   BREAK SEMICOLON     {BREAK ((*handleLoc*) $1)}
+|   CONTINUE SEMICOLON	 {CONTINUE ((*handleLoc*) $1)}
+|   GOTO IDENT SEMICOLON
+		                 {GOTO (fst $2, (*handleLoc*) $1)}
+|   GOTO STAR comma_expression SEMICOLON 
+                                 { COMPGOTO (smooth_expression (fst $3), (*handleLoc*) $1) }
+|   ASM asmattr LPAREN asmtemplate asmoutputs RPAREN SEMICOLON
+                        { ASM ($2, $4, $5, (*handleLoc*) $1) }
+|   MSASM               { ASM ([], [fst $1], None, (*handleLoc*)(snd $1))}
+|   TRY block EXCEPT paren_comma_expression block
+                        { let b, _, _ = $2 in
+                          let h, _, _ = $5 in
+                          if not !Cprint.msvcMode then 
+                            parse_error "try/except in GCC code";
+                          TRY_EXCEPT (b, COMMA (fst $4), h, (*handleLoc*) $1) }
+|   TRY block FINALLY block 
+                        { let b, _, _ = $2 in
+                          let h, _, _ = $4 in
+                          if not !Cprint.msvcMode then 
+                            parse_error "try/finally in GCC code";
+                          TRY_FINALLY (b, h, (*handleLoc*) $1) }
+
+|   error location   SEMICOLON   { (NOP $2)}
+;
+
+
+for_clause: 
+    opt_expression SEMICOLON     { FC_EXP $1 }
+|   declaration                  { FC_DECL $1 }
+;
+
+declaration:                                /* ISO 6.7.*/
+    decl_spec_list init_declarator_list SEMICOLON
+                                       { doDeclaration ((*handleLoc*)(snd $1)) (fst $1) $2 }
+|   decl_spec_list SEMICOLON	       
+                                       { doDeclaration ((*handleLoc*)(snd $1)) (fst $1) [] }
+;
+init_declarator_list:                       /* ISO 6.7 */
+    init_declarator                              { [$1] }
+|   init_declarator COMMA init_declarator_list   { $1 :: $3 }
+
+;
+init_declarator:                             /* ISO 6.7 */
+    declarator                          { ($1, NO_INIT) }
+|   declarator EQ init_expression 
+                                        { ($1, $3) }
+;
+
+decl_spec_list:                         /* ISO 6.7 */
+                                        /* ISO 6.7.1 */
+|   TYPEDEF decl_spec_list_opt          { SpecTypedef :: $2, $1  }    
+|   EXTERN decl_spec_list_opt           { SpecStorage EXTERN :: $2, $1 }
+|   STATIC  decl_spec_list_opt          { SpecStorage STATIC :: $2, $1 }
+|   AUTO   decl_spec_list_opt           { SpecStorage AUTO :: $2, $1 }
+|   REGISTER decl_spec_list_opt         { SpecStorage REGISTER :: $2, $1}
+                                        /* ISO 6.7.2 */
+|   type_spec decl_spec_list_opt_no_named { SpecType (fst $1) :: $2, snd $1 }
+                                        /* ISO 6.7.4 */
+|   INLINE decl_spec_list_opt           { SpecInline :: $2, $1 }
+|   cvspec decl_spec_list_opt           { (fst $1) :: $2, snd $1 }
+|   attribute_nocv decl_spec_list_opt   { SpecAttr (fst $1) :: $2, snd $1 }
+/* specifier pattern variable (must be last in spec list) */
+|   AT_SPECIFIER LPAREN IDENT RPAREN    { [ SpecPattern(fst $3) ], $1 }
+;
+/* (* In most cases if we see a NAMED_TYPE we must shift it. Thus we declare 
+    * NAMED_TYPE to have right associativity  *) */
+decl_spec_list_opt: 
+    /* empty */                         { [] } %prec NAMED_TYPE
+|   decl_spec_list                      { fst $1 }
+;
+/* (* We add this separate rule to handle the special case when an appearance 
+    * of NAMED_TYPE should not be considered as part of the specifiers but as 
+    * part of the declarator. IDENT has higher precedence than NAMED_TYPE  *)
+ */
+decl_spec_list_opt_no_named: 
+    /* empty */                         { [] } %prec IDENT
+|   decl_spec_list                      { fst $1 }
+;
+type_spec:   /* ISO 6.7.2 */
+    VOID            { Tvoid, $1}
+|   CHAR            { Tchar, $1 }
+|   SHORT           { Tshort, $1 }
+|   INT             { Tint, $1 }
+|   LONG            { Tlong, $1 }
+|   INT64           { Tint64, $1 }
+|   FLOAT           { Tfloat, $1 }
+|   DOUBLE          { Tdouble, $1 }
+|   SIGNED          { Tsigned, $1 }
+|   UNSIGNED        { Tunsigned, $1 }
+|   STRUCT                 id_or_typename
+                                                   { Tstruct ($2, None,    []), $1 }
+|   STRUCT just_attributes id_or_typename
+                                                   { Tstruct ($3, None,    $2), $1 }
+|   STRUCT                 id_or_typename LBRACE struct_decl_list RBRACE
+                                                   { Tstruct ($2, Some $4, []), $1 }
+|   STRUCT                                LBRACE struct_decl_list RBRACE
+                                                   { Tstruct ("", Some $3, []), $1 }
+|   STRUCT just_attributes id_or_typename LBRACE struct_decl_list RBRACE
+                                                   { Tstruct ($3, Some $5, $2), $1 }
+|   STRUCT just_attributes                LBRACE struct_decl_list RBRACE
+                                                   { Tstruct ("", Some $4, $2), $1 }
+|   UNION                  id_or_typename
+                                                   { Tunion  ($2, None,    []), $1 }
+|   UNION                  id_or_typename LBRACE struct_decl_list RBRACE
+                                                   { Tunion  ($2, Some $4, []), $1 }
+|   UNION                                 LBRACE struct_decl_list RBRACE
+                                                   { Tunion  ("", Some $3, []), $1 }
+|   UNION  just_attributes id_or_typename LBRACE struct_decl_list RBRACE
+                                                   { Tunion  ($3, Some $5, $2), $1 }
+|   UNION  just_attributes                LBRACE struct_decl_list RBRACE
+                                                   { Tunion  ("", Some $4, $2), $1 }
+|   ENUM                   id_or_typename
+                                                   { Tenum   ($2, None,    []), $1 }
+|   ENUM                   id_or_typename LBRACE enum_list maybecomma RBRACE
+                                                   { Tenum   ($2, Some $4, []), $1 }
+|   ENUM                                  LBRACE enum_list maybecomma RBRACE
+                                                   { Tenum   ("", Some $3, []), $1 }
+|   ENUM   just_attributes id_or_typename LBRACE enum_list maybecomma RBRACE
+                                                   { Tenum   ($3, Some $5, $2), $1 }
+|   ENUM   just_attributes                LBRACE enum_list maybecomma RBRACE
+                                                   { Tenum   ("", Some $4, $2), $1 }
+|   NAMED_TYPE      { Tnamed (fst $1), snd $1 }
+|   TYPEOF LPAREN expression RPAREN     { TtypeofE (fst $3), $1 }
+|   TYPEOF LPAREN type_name RPAREN      { let s, d = $3 in
+                                          TtypeofT (s, d), $1 }
+;
+struct_decl_list: /* (* ISO 6.7.2. Except that we allow empty structs. We 
+                      * also allow missing field names. *)
+                   */
+   /* empty */                           { [] }
+|  decl_spec_list                 SEMICOLON struct_decl_list
+                                         { (fst $1, 
+                                            [(missingFieldDecl, None)]) :: $3 }
+/*(* GCC allows extra semicolons *)*/
+|                                 SEMICOLON struct_decl_list
+                                         { $2 }
+|  decl_spec_list field_decl_list SEMICOLON struct_decl_list
+                                          { (fst $1, $2) 
+                                            :: $4 }
+/*(* MSVC allows pragmas in strange places *)*/
+|  pragma struct_decl_list                { $2 }
+
+|  error                          SEMICOLON struct_decl_list
+                                          { $3 } 
+;
+field_decl_list: /* (* ISO 6.7.2 *) */
+    field_decl                           { [$1] }
+|   field_decl COMMA field_decl_list     { $1 :: $3 }
+;
+field_decl: /* (* ISO 6.7.2. Except that we allow unnamed fields. *) */
+|   declarator                      { ($1, None) }
+|   declarator COLON expression     { ($1, Some (fst $3)) }    
+|              COLON expression     { (missingFieldDecl, Some (fst $2)) }
+;
+
+enum_list: /* (* ISO 6.7.2.2 *) */
+    enumerator				{[$1]}
+|   enum_list COMMA enumerator	        {$1 @ [$3]}
+|   enum_list COMMA error               { $1 } 
+;
+enumerator:	
+    IDENT			{(fst $1, NOTHING, snd $1)}
+|   IDENT EQ expression		{(fst $1, fst $3, snd $1)}
+;
+
+
+declarator:  /* (* ISO 6.7.5. Plus Microsoft declarators.*) */
+   pointer_opt direct_decl attributes_with_asm
+                                         { let (n, decl) = $2 in
+                                           (n, applyPointer (fst $1) decl, $3, (*(*handleLoc*)*)(snd $1)) }
+;
+
+
+direct_decl: /* (* ISO 6.7.5 *) */
+                                   /* (* We want to be able to redefine named
+                                    * types as variable names *) */
+|   id_or_typename                 { ($1, JUSTBASE) }
+
+|   LPAREN attributes declarator RPAREN
+                                   { let (n,decl,al,loc) = $3 in
+                                     (n, PARENTYPE($2,decl,al)) }
+
+|   direct_decl LBRACKET attributes comma_expression_opt RBRACKET
+                                   { let (n, decl) = $1 in
+                                     (n, ARRAY(decl, $3, $4)) }
+|   direct_decl LBRACKET attributes error RBRACKET
+                                   { let (n, decl) = $1 in
+                                     (n, ARRAY(decl, $3, NOTHING)) }
+|   direct_decl parameter_list_startscope rest_par_list RPAREN
+                                   { let (n, decl) = $1 in
+                                     let (params, isva) = $3 in
+                                     !Lexerhack.pop_context ();
+                                     (n, PROTO(decl, params, isva))
+                                   }
+;
+parameter_list_startscope: 
+    LPAREN                         { !Lexerhack.push_context () }
+;
+rest_par_list:
+|   /* empty */                    { ([], false) }
+|   parameter_decl rest_par_list1  { let (params, isva) = $2 in 
+                                     ($1 :: params, isva) 
+                                   }
+;
+rest_par_list1: 
+    /* empty */                         { ([], false) }
+|   COMMA ELLIPSIS                      { ([], true) }
+|   COMMA parameter_decl rest_par_list1 { let (params, isva) = $3 in 
+                                          ($2 :: params, isva)
+                                        }  
+;    
+
+
+parameter_decl: /* (* ISO 6.7.5 *) */
+   decl_spec_list declarator              { (fst $1, $2) }
+|  decl_spec_list abstract_decl           { let d, a = $2 in
+                                            (fst $1, ("", d, a, cabslu)) }
+|  decl_spec_list                         { (fst $1, ("", JUSTBASE, [], cabslu)) }
+|  LPAREN parameter_decl RPAREN           { $2 } 
+;
+
+/* (* Old style prototypes. Like a declarator *) */
+old_proto_decl:
+  pointer_opt direct_old_proto_decl   { let (n, decl, a) = $2 in
+					  (n, applyPointer (fst $1) decl, 
+                                           a, snd $1) 
+                                      }
+
+;
+
+direct_old_proto_decl:
+  direct_decl LPAREN old_parameter_list_ne RPAREN old_pardef_list
+                                   { let par_decl, isva = doOldParDecl $3 $5 in
+                                     let n, decl = $1 in
+                                     (n, PROTO(decl, par_decl, isva), [])
+                                   }
+| direct_decl LPAREN                       RPAREN
+                                   { let n, decl = $1 in
+                                     (n, PROTO(decl, [], false), [])
+                                   }
+
+/* (* appears sometimesm but generates a shift-reduce conflict. *)
+| LPAREN STAR direct_decl LPAREN old_parameter_list_ne RPAREN RPAREN LPAREN RPAREN old_pardef_list
+                                   { let par_decl, isva 
+                                             = doOldParDecl $5 $10 in
+                                     let n, decl = $3 in
+                                     (n, PROTO(decl, par_decl, isva), [])
+                                   }
+*/
+;
+
+old_parameter_list_ne:
+|  IDENT                                       { [fst $1] }
+|  IDENT COMMA old_parameter_list_ne           { let rest = $3 in
+                                                 (fst $1 :: rest) }
+;
+
+old_pardef_list: 
+   /* empty */                            { ([], false) }
+|  decl_spec_list old_pardef SEMICOLON ELLIPSIS
+                                          { ([(fst $1, $2)], true) }  
+|  decl_spec_list old_pardef SEMICOLON old_pardef_list  
+                                          { let rest, isva = $4 in
+                                            ((fst $1, $2) :: rest, isva) 
+                                          }
+;
+
+old_pardef: 
+   declarator                             { [$1] }
+|  declarator COMMA old_pardef            { $1 :: $3 }
+|  error                                  { [] }
+;
+
+
+pointer: /* (* ISO 6.7.5 *) */ 
+   STAR attributes pointer_opt  { $2 :: fst $3, $1 }
+;
+pointer_opt:
+   /**/                          { let l = currentLoc () in
+                                   ([], l) }
+|  pointer                       { $1 }
+;
+
+type_name: /* (* ISO 6.7.6 *) */
+  decl_spec_list abstract_decl { let d, a = $2 in
+                                 if a <> [] then begin
+                                   parse_error "attributes in type name";
+                                   raise Parsing.Parse_error
+                                 end;
+                                 (fst $1, d) 
+                               }
+| decl_spec_list               { (fst $1, JUSTBASE) }
+;
+abstract_decl: /* (* ISO 6.7.6. *) */
+  pointer_opt abs_direct_decl attributes  { applyPointer (fst $1) $2, $3 }
+| pointer                                 { applyPointer (fst $1) JUSTBASE, [] }
+;
+
+abs_direct_decl: /* (* ISO 6.7.6. We do not support optional declarator for 
+                     * functions. Plus Microsoft attributes. See the 
+                     * discussion for declarator. *) */
+|   LPAREN attributes abstract_decl RPAREN
+                                   { let d, a = $3 in
+                                     PARENTYPE ($2, d, a)
+                                   }
+            
+|   LPAREN error RPAREN
+                                   { JUSTBASE } 
+            
+|   abs_direct_decl_opt LBRACKET comma_expression_opt RBRACKET
+                                   { ARRAY($1, [], $3) }
+/*(* The next should be abs_direct_decl_opt but we get conflicts *)*/
+|   abs_direct_decl  parameter_list_startscope rest_par_list RPAREN
+                                   { let (params, isva) = $3 in
+                                     !Lexerhack.pop_context ();
+                                     PROTO ($1, params, isva)
+                                   } 
+;
+abs_direct_decl_opt:
+    abs_direct_decl                 { $1 }
+|   /* empty */                     { JUSTBASE }
+;
+function_def:  /* (* ISO 6.9.1 *) */
+  function_def_start block   
+          { let (loc, specs, decl) = $1 in
+            currentFunctionName := "<__FUNCTION__ used outside any functions>";
+            !Lexerhack.pop_context (); (* The context pushed by 
+                                    * announceFunctionName *)
+            doFunctionDef ((*handleLoc*) loc) (trd3 $2) specs decl (fst3 $2)
+          } 
+
+
+function_def_start:  /* (* ISO 6.9.1 *) */
+  decl_spec_list declarator   
+                            { announceFunctionName $2;
+                              (snd $1, fst $1, $2)
+                            } 
+
+/* (* Old-style function prototype *) */
+| decl_spec_list old_proto_decl 
+                            { announceFunctionName $2;
+                              (snd $1, fst $1, $2)
+                            } 
+/* (* New-style function that does not have a return type *) */
+| IDENT parameter_list_startscope rest_par_list RPAREN 
+                           { let (params, isva) = $3 in
+                             let fdec = 
+                               (fst $1, PROTO(JUSTBASE, params, isva), [], snd $1) in
+                             announceFunctionName fdec;
+                             (* Default is int type *)
+                             let defSpec = [SpecType Tint] in
+                             (snd $1, defSpec, fdec)
+                           }
+
+/* (* No return type and old-style parameter list *) */
+| IDENT LPAREN old_parameter_list_ne RPAREN old_pardef_list
+                           { (* Convert pardecl to new style *)
+                             let pardecl, isva = doOldParDecl $3 $5 in
+                             (* Make the function declarator *)
+                             let fdec = (fst $1,
+                                         PROTO(JUSTBASE, pardecl,isva), 
+                                         [], snd $1) in
+                             announceFunctionName fdec;
+                             (* Default is int type *)
+                             let defSpec = [SpecType Tint] in
+                             (snd $1, defSpec, fdec) 
+                            }
+/* (* No return type and no parameters *) */
+| IDENT LPAREN                      RPAREN
+                           { (* Make the function declarator *)
+                             let fdec = (fst $1,
+                                         PROTO(JUSTBASE, [], false), 
+                                         [], snd $1) in
+                             announceFunctionName fdec;
+                             (* Default is int type *)
+                             let defSpec = [SpecType Tint] in
+                             (snd $1, defSpec, fdec)
+                            }
+;
+
+/* const/volatile as type specifier elements */
+cvspec:
+    CONST                               { SpecCV(CV_CONST), $1 }
+|   VOLATILE                            { SpecCV(CV_VOLATILE), $1 }
+|   RESTRICT                            { SpecCV(CV_RESTRICT), $1 }
+;
+
+/*** GCC attributes ***/
+attributes:
+    /* empty */				{ []}
+|   attribute attributes	        { fst $1 :: $2 }
+;
+
+/* (* In some contexts we can have an inline assembly to specify the name to 
+    * be used for a global. We treat this as a name attribute *) */
+attributes_with_asm:
+    /* empty */                         { [] }
+|   attribute attributes_with_asm       { fst $1 :: $2 }
+|   ASM LPAREN string_constant RPAREN attributes        
+                                        { ("__asm__", 
+					   [CONSTANT(CONST_STRING (fst $3))]) :: $5 }
+;
+
+/* things like __attribute__, but no const/volatile */
+attribute_nocv:
+    ATTRIBUTE LPAREN paren_attr_list_ne RPAREN	
+                                        { ("__attribute__", $3), $1 }
+/*(*
+|   ATTRIBUTE_USED                      { ("__attribute__", 
+                                             [ VARIABLE "used" ]), $1 }
+*)*/
+|   DECLSPEC paren_attr_list_ne         { ("__declspec", $2), $1 }
+|   MSATTR                              { (fst $1, []), snd $1 }
+                                        /* ISO 6.7.3 */
+|   THREAD                              { ("__thread",[]), $1 }
+;
+
+/* __attribute__ plus const/volatile */
+attribute:
+    attribute_nocv                      { $1 }
+|   CONST                               { ("const", []), $1 }
+|   RESTRICT                            { ("restrict",[]), $1 }
+|   VOLATILE                            { ("volatile",[]), $1 }
+;
+
+/* (* sm: I need something that just includes __attribute__ and nothing more,
+ *  to support them appearing between the 'struct' keyword and the type name. 
+ * Actually, a declspec can appear there as well (on MSVC) *)  */
+just_attribute:
+    ATTRIBUTE LPAREN paren_attr_list_ne RPAREN
+                                        { ("__attribute__", $3) }
+|   DECLSPEC paren_attr_list_ne         { ("__declspec", $2) }
+;
+
+/* this can't be empty, b/c I folded that possibility into the calling
+ * productions to avoid some S/R conflicts */
+just_attributes:
+    just_attribute                      { [$1] }
+|   just_attribute just_attributes      { $1 :: $2 }
+;
+
+/** (* PRAGMAS and ATTRIBUTES *) ***/
+pragma: 
+| PRAGMA attr PRAGMA_EOL		{ PRAGMA ($2, $1) }
+| PRAGMA attr SEMICOLON PRAGMA_EOL	{ PRAGMA ($2, $1) }
+| PRAGMA_LINE                           { PRAGMA (VARIABLE (fst $1), 
+                                                  snd $1) }
+;
+
+/* (* We want to allow certain strange things that occur in pragmas, so we 
+    * cannot use directly the language of expressions *) */ 
+primary_attr: 
+    IDENT				{ VARIABLE (fst $1) }
+    /*(* The NAMED_TYPE here creates conflicts with IDENT *)*/
+|   NAMED_TYPE				{ VARIABLE (fst $1) } 
+|   LPAREN attr RPAREN                  { $2 } 
+|   IDENT IDENT                          { CALL(VARIABLE (fst $1), [VARIABLE (fst $2)]) }
+|   CST_INT                              { CONSTANT(CONST_INT (fst $1)) }
+|   string_constant                      { CONSTANT(CONST_STRING (fst $1)) }
+                                           /*(* Const when it appears in 
+                                            * attribute lists, is translated 
+                                            * to aconst *)*/
+|   CONST                                { VARIABLE "aconst" }
+|   IDENT COLON CST_INT                  { VARIABLE (fst $1 ^ ":" ^ fst $3) }
+
+|   CST_INT COLON CST_INT                { VARIABLE (fst $1 ^ ":" ^ fst $3) } 
+|   DEFAULT COLON CST_INT                { VARIABLE ("default:" ^ fst $3) }
+                          
+                                            /*(** GCC allows this as an 
+                                             * attribute for functions, 
+                                             * synonim for noreturn **)*/
+|   VOLATILE                             { VARIABLE ("__noreturn__") }
+;
+
+postfix_attr:
+    primary_attr                         { $1 }
+                                         /* (* use a VARIABLE "" so that the 
+                                             * parentheses are printed *) */
+|   IDENT LPAREN  RPAREN                 { CALL(VARIABLE (fst $1), [VARIABLE ""]) }
+|   IDENT paren_attr_list_ne             { CALL(VARIABLE (fst $1), $2) }
+
+|   postfix_attr ARROW id_or_typename    {MEMBEROFPTR ($1, $3)} 
+|   postfix_attr DOT id_or_typename      {MEMBEROF ($1, $3)}  
+;
+
+/*(* Since in attributes we use both IDENT and NAMED_TYPE as indentifiers, 
+ * that leads to conflicts for SIZEOF and ALIGNOF. In those cases we require 
+ * that their arguments be expressions, not attributes *)*/
+unary_attr:
+    postfix_attr                         { $1 }
+|   SIZEOF unary_expression              {EXPR_SIZEOF (fst $2) }
+|   SIZEOF LPAREN type_name RPAREN
+		                         {let b, d = $3 in TYPE_SIZEOF (b, d)}
+
+|   ALIGNOF unary_expression             {EXPR_ALIGNOF (fst $2) }
+|   ALIGNOF LPAREN type_name RPAREN      {let b, d = $3 in TYPE_ALIGNOF (b, d)}
+|   PLUS cast_attr                      {UNARY (PLUS, $2)}
+|   MINUS cast_attr                     {UNARY (MINUS, $2)}
+|   STAR cast_attr		        {UNARY (MEMOF, $2)}
+|   AND cast_attr
+	                                {UNARY (ADDROF, $2)}
+|   EXCLAM cast_attr    	        {UNARY (NOT, $2)}
+|   TILDE cast_attr                     {UNARY (BNOT, $2)}
+;
+
+cast_attr:
+    unary_attr                           { $1 }
+;   
+
+multiplicative_attr:
+    cast_attr                           { $1 }
+|   multiplicative_attr STAR cast_attr  {BINARY(MUL ,$1 , $3)}
+|   multiplicative_attr SLASH cast_attr	  {BINARY(DIV ,$1 , $3)}
+|   multiplicative_attr PERCENT cast_attr {BINARY(MOD ,$1 , $3)}
+;
+
+
+additive_attr:
+    multiplicative_attr                 { $1 }
+|   additive_attr PLUS multiplicative_attr  {BINARY(ADD ,$1 , $3)} 
+|   additive_attr MINUS multiplicative_attr {BINARY(SUB ,$1 , $3)}
+;
+
+shift_attr:
+    additive_attr                       { $1 }
+|   shift_attr INF_INF additive_attr	{BINARY(SHL ,$1 , $3)}
+|   shift_attr SUP_SUP additive_attr	{BINARY(SHR ,$1 , $3)}
+;
+
+relational_attr:
+    shift_attr                          { $1 }
+|   relational_attr INF shift_attr	{BINARY(LT ,$1 , $3)}
+|   relational_attr SUP shift_attr	{BINARY(GT ,$1 , $3)}
+|   relational_attr INF_EQ shift_attr	{BINARY(LE ,$1 , $3)}
+|   relational_attr SUP_EQ shift_attr	{BINARY(GE ,$1 , $3)}
+;
+
+equality_attr:
+    relational_attr                     { $1 }
+|   equality_attr EQ_EQ relational_attr	    {BINARY(EQ ,$1 , $3)}
+|   equality_attr EXCLAM_EQ relational_attr {BINARY(NE ,$1 , $3)}
+;
+
+
+bitwise_and_attr:
+    equality_attr                       { $1 }
+|   bitwise_and_attr AND equality_attr	{BINARY(BAND ,$1 , $3)}
+;
+
+bitwise_xor_attr:
+    bitwise_and_attr                       { $1 }
+|   bitwise_xor_attr CIRC bitwise_and_attr {BINARY(XOR ,$1 , $3)}
+;
+
+bitwise_or_attr: 
+    bitwise_xor_attr                      { $1 }
+|   bitwise_or_attr PIPE bitwise_xor_attr {BINARY(BOR ,$1 , $3)}
+;
+
+logical_and_attr:
+    bitwise_or_attr                             { $1 }
+|   logical_and_attr AND_AND bitwise_or_attr	{BINARY(AND ,$1 , $3)}
+;
+
+logical_or_attr:
+    logical_and_attr                           { $1 }
+|   logical_or_attr PIPE_PIPE logical_and_attr {BINARY(OR ,$1 , $3)}
+;
+
+
+attr: logical_or_attr                    { $1 }
+;
+
+attr_list_ne:
+|  attr                                  { [$1] }
+|  attr COMMA attr_list_ne               { $1 :: $3 }
+|  error COMMA attr_list_ne              { $3 }
+;
+paren_attr_list_ne: 
+   LPAREN attr_list_ne RPAREN            { $2 }
+|  LPAREN error RPAREN                   { [] }
+;
+/*** GCC ASM instructions ***/
+asmattr:
+     /* empty */                        { [] }
+|    VOLATILE  asmattr                  { ("volatile", []) :: $2 }
+|    CONST asmattr                      { ("const", []) :: $2 } 
+;
+asmtemplate: 
+    one_string_constant                          { [$1] }
+|   one_string_constant asmtemplate              { $1 :: $2 }
+;
+asmoutputs: 
+  /* empty */           { None }
+| COLON asmoperands asminputs
+                        { let (ins, clobs) = $3 in
+                          Some {aoutputs = $2; ainputs = ins; aclobbers = clobs} }
+;
+asmoperands:
+     /* empty */                        { [] }
+|    asmoperandsne                      { List.rev $1 }
+;
+asmoperandsne:
+     asmoperand                         { [$1] }
+|    asmoperandsne COMMA asmoperand     { $3 :: $1 }
+;
+asmoperand:
+     string_constant LPAREN expression RPAREN    { (fst $1, fst $3) }
+|    string_constant LPAREN error RPAREN         { (fst $1, NOTHING ) } 
+; 
+asminputs: 
+  /* empty */                { ([], []) }
+| COLON asmoperands asmclobber
+                        { ($2, $3) }
+;
+asmclobber:
+    /* empty */                         { [] }
+| COLON asmcloberlst_ne                 { $2 }
+;
+asmcloberlst_ne:
+   one_string_constant                           { [$1] }
+|  one_string_constant COMMA asmcloberlst_ne     { $1 :: $3 }
+;
+  
+%%
+
+
+
diff --git a/cil/src/frontc/cprint.ml b/cil/src/frontc/cprint.ml
new file mode 100644
index 000000000..570945c09
--- /dev/null
+++ b/cil/src/frontc/cprint.ml
@@ -0,0 +1,1014 @@
+(* 
+ *
+ * Copyright (c) 2001-2003,
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+(* cprint -- pretty printer of C program from abstract syntax
+**
+** Project:	FrontC
+** File:	cprint.ml
+** Version:	2.1e
+** Date:	9.1.99
+** Author:	Hugues Cassé
+**
+**	1.0		2.22.99	Hugues Cassé	First version.
+**	2.0		3.18.99	Hugues Cassé	Compatible with Frontc 2.1, use of CAML
+**									pretty printer.
+**	2.1		3.22.99	Hugues Cassé	More efficient custom pretty printer used.
+**	2.1a	4.12.99	Hugues Cassé	Correctly handle:
+**									char *m, *m, *p; m + (n - p)
+**	2.1b	4.15.99	Hugues Cassé	x + (y + z) stays x + (y + z) for
+**									keeping computation order.
+**	2.1c	7.23.99	Hugues Cassé	Improvement of case and default display.
+**	2.1d	8.25.99	Hugues Cassé	Rebuild escape sequences in string and
+**									characters.
+**	2.1e	9.1.99	Hugues Cassé	Fix, recognize and correctly display '\0'.
+*)
+
+(* George Necula: I changed this pretty dramatically since CABS changed *)
+open Cabs
+open Escape
+let version = "Cprint 2.1e 9.1.99 Hugues Cassé"
+
+type loc = { line : int; file : string }
+
+let lu = {line = -1; file = "loc unknown";}
+let cabslu = {lineno = -10; 
+	      filename = "cabs loc unknown"; 
+	      byteno = -10;}
+
+let curLoc = ref cabslu
+
+let msvcMode = ref false
+
+let printLn = ref true
+let printLnComment = ref false
+
+let printCounters = ref false
+let printComments = ref false
+
+(*
+** FrontC Pretty printer
+*)
+let out = ref stdout
+let width = ref 80
+let tab = ref 2
+let max_indent = ref 60
+
+let line = ref ""
+let line_len = ref 0
+let current = ref ""
+let current_len = ref 0
+let spaces = ref 0
+let follow = ref 0
+let roll = ref 0
+
+let print_tab size =
+	for i = 1 to size / 8 do
+		output_char !out '\t'
+	done;
+	for i  = 1 to size mod 8 do
+		output_char !out ' '
+	done
+
+let flush _ =
+	if !line <> "" then begin
+		print_tab (!spaces + !follow);
+		output_string !out !line;
+		line := "";
+		line_len := 0
+	end
+
+let commit _ =
+  if !current <> "" then begin
+    if !line = "" then begin
+      line := !current;
+      line_len := !current_len
+    end else begin
+      line := (!line ^ " " ^ !current);
+      line_len := !line_len + 1 + !current_len
+    end;
+    current := "";
+    current_len := 0
+  end
+
+
+let addline () =
+  curLoc := {lineno = !curLoc.lineno+1;
+             filename = !curLoc.filename;
+             byteno = -1;} (*sfg: can we do better than this?*)
+       
+       
+let new_line _ =
+  commit ();
+  if !line <> "" then begin
+    flush ();
+    addline();
+    output_char !out '\n'
+  end;
+  follow := 0
+       
+let force_new_line _ =
+  commit ();
+  flush ();
+  addline();
+  output_char !out '\n';
+  follow := 0
+       
+let indent _ =
+  new_line ();
+  spaces := !spaces + !tab;
+  if !spaces >= !max_indent then begin
+    spaces := !tab;
+    roll := !roll + 1
+  end
+      
+let indentline _ =
+  new_line ();
+  if !spaces >= !max_indent then begin
+    spaces := !tab;
+    roll := !roll + 1
+  end
+      
+let unindent _ =
+  new_line ();
+  spaces := !spaces - !tab;
+  if (!spaces <= 0) && (!roll > 0) then begin
+    spaces := ((!max_indent - 1) / !tab) * !tab;
+    roll := !roll - 1
+  end
+      
+let space _ = commit ()
+
+let print str =
+  current := !current ^ str;
+  current_len := !current_len + (String.length str);
+  if (!spaces + !follow + !line_len + 1 + !current_len) > !width
+  then begin
+    if !line_len = 0 then commit ();
+    flush ();
+    addline();
+    output_char !out '\n';
+    if !follow = 0 then follow := !tab
+  end
+
+(* sm: for some reason I couldn't just call print from frontc.... ? *)
+let print_unescaped_string str = print str
+
+let setLoc (l : cabsloc) =
+  if !printLn then  
+    if (l.lineno <> !curLoc.lineno) || l.filename <> !curLoc.filename then 
+      begin
+        let oldspaces = !spaces in
+        (* sm: below, we had '//#' instead of '#', which means printLnComment was disregarded *)
+        if !printLnComment then print "//" else print "#";
+        if !msvcMode then print "line";
+        print " ";
+        print (string_of_int l.lineno);
+        if (l.filename <> !curLoc.filename) then begin
+          print (" \"" ^ l.filename ^ "\"")
+        end;
+        spaces := oldspaces;
+        new_line();
+        curLoc := l
+      end
+
+
+
+(*
+** Useful primitives
+*)
+let print_list print_sep print_elt lst = 
+  let _ = List.fold_left
+      (fun com elt ->
+	if com then print_sep ();
+	print_elt elt;
+	true)
+      false
+      lst in
+  ()
+
+let print_commas nl fct lst =
+  print_list (fun () -> print ","; if nl then new_line() else space()) fct lst
+	
+let print_string (s:string) =
+  print ("\"" ^ escape_string s ^ "\"")
+
+let print_wstring (s: int64 list ) =
+  print ("L\"" ^ escape_wstring s ^ "\"")
+
+(*
+** Base Type Printing
+*)
+
+let rec print_specifiers (specs: spec_elem list) =
+  comprint "specifier(";
+  let print_spec_elem = function
+      SpecTypedef -> print "typedef "
+    | SpecInline -> print "__inline "
+    | SpecStorage sto ->
+        print (match sto with
+          NO_STORAGE -> (comstring "/*no storage*/")
+        | AUTO -> "auto "
+        | STATIC -> "static "
+        | EXTERN -> "extern "
+        | REGISTER -> "register ")
+    | SpecCV cv -> 
+        print (match cv with
+        | CV_CONST -> "const "
+        | CV_VOLATILE -> "volatile "
+        | CV_RESTRICT -> "restrict ")
+    | SpecAttr al -> print_attribute al; space ()
+    | SpecType bt -> print_type_spec bt
+    | SpecPattern name -> print ("@specifier(" ^ name ^ ") ")
+  in
+  List.iter print_spec_elem specs
+  ;comprint ")"
+
+
+and print_type_spec = function
+    Tvoid -> print "void "
+  | Tchar -> print "char "
+  | Tshort -> print "short "
+  | Tint -> print "int "
+  | Tlong -> print "long "
+  | Tint64 -> print "__int64 "
+  | Tfloat -> print "float "
+  | Tdouble -> print "double "
+  | Tsigned -> print "signed "
+  | Tunsigned -> print "unsigned "
+  | Tnamed s -> comprint "tnamed"; print s; space ();
+  | Tstruct (n, None, _) -> print ("struct " ^ n ^ " ")
+  | Tstruct (n, Some flds, extraAttrs) ->
+      (print_struct_name_attr "struct" n extraAttrs);
+      (print_fields flds)
+  | Tunion (n, None, _) -> print ("union " ^ n ^ " ")
+  | Tunion (n, Some flds, extraAttrs) ->
+      (print_struct_name_attr "union" n extraAttrs);
+      (print_fields flds)
+  | Tenum (n, None, _) -> print ("enum " ^ n ^ " ")
+  | Tenum (n, Some enum_items, extraAttrs) ->
+      (print_struct_name_attr "enum" n extraAttrs);
+      (print_enum_items enum_items)
+  | TtypeofE e -> print "__typeof__("; print_expression e; print ") "
+  | TtypeofT (s,d) -> print "__typeof__("; print_onlytype (s, d); print ") "
+
+
+(* print "struct foo", but with specified keyword and a list of
+ * attributes to put between keyword and name *)
+and print_struct_name_attr (keyword: string) (name: string) (extraAttrs: attribute list) =
+begin
+  if extraAttrs = [] then
+    print (keyword ^ " " ^ name)
+  else begin
+    (print (keyword ^ " "));
+    (print_attributes extraAttrs);    (* prints a final space *)
+    (print name);
+  end
+end
+
+
+(* This is the main printer for declarations. It is easy bacause the 
+ * declarations are laid out as they need to be printed. *)
+and print_decl (n: string) = function
+    JUSTBASE -> if n <> "___missing_field_name" then 
+                  print n
+                else
+                  comprint "missing field name"
+  | PARENTYPE (al1, d, al2) ->
+      print "(";
+      print_attributes al1; space ();
+      print_decl n d; space ();
+      print_attributes al2; print ")"
+  | PTR (al, d) ->
+      print "* ";
+      print_attributes al; space ();
+      print_decl n d
+  | ARRAY (d, al, e) ->
+      print_decl n d;
+      print "[";
+      print_attributes al;
+      if e <> NOTHING then print_expression e;
+      print "]"
+  | PROTO(d, args, isva) ->
+      comprint "proto(";
+      print_decl n d;
+      print "(";
+      print_params args isva;
+      print ")";
+      comprint ")"
+
+
+and print_fields (flds : field_group list) =
+  if flds = [] then print " { } "
+  else begin
+    print " {";
+    indent ();
+    List.iter
+      (fun fld -> print_field_group fld; print ";"; new_line ())
+      flds;
+    unindent ();
+    print "} "
+  end
+
+and print_enum_items items =
+  if items = [] then print " { } "
+  else begin
+    print " {";
+    indent ();
+    print_commas
+      true
+      (fun (id, exp, loc) -> print id;
+	if exp = NOTHING then ()
+	else begin
+	  space ();
+	  print "= ";
+	  print_expression exp
+	end)
+      items;
+    unindent ();
+    print "} ";
+  end
+
+  
+and print_onlytype (specs, dt) =
+  print_specifiers specs;
+  print_decl "" dt
+    
+and print_name ((n, decl, attrs, _) : name) =
+  print_decl n decl;
+  space ();
+  print_attributes attrs
+
+and print_init_name ((n, i) : init_name) =
+  print_name n;
+  if i <> NO_INIT then begin
+    space ();
+    print "= ";
+    print_init_expression i
+  end
+            
+and print_name_group (specs, names) =
+  print_specifiers specs;
+  print_commas false print_name names
+    
+and print_field_group (specs, fields) =
+  print_specifiers specs;
+  print_commas false print_field fields
+    
+
+and print_field (name, widtho) = 
+  print_name name;
+  (match widtho with 
+    None -> ()
+  | Some w -> print " : ";  print_expression w)
+
+and print_init_name_group (specs, names) =
+  print_specifiers specs;
+  print_commas false print_init_name names
+    
+and print_single_name (specs, name) =
+  print_specifiers specs;
+  print_name name
+
+and print_params (pars : single_name list) (ell : bool) =
+  print_commas false print_single_name pars;
+  if ell then print (if pars = [] then "..." else ", ...") else ()
+    
+and print_old_params pars ell =
+  print_commas false (fun id -> print id) pars;
+  if ell then print (if pars = [] then "..." else ", ...") else ()
+    
+
+(*
+** Expression printing
+**		Priorities
+**		16	variables
+**		15	. -> [] call()
+**		14  ++, -- (post)
+**		13	++ -- (pre) ~ ! - + & *(cast)
+**		12	* / %
+**		11	+ -
+**		10	<< >>
+**		9	< <= > >=
+**		8	== !=
+**		7	&
+**		6	^
+**		5	|
+**		4	&&
+**		3	||
+**		2	? :
+**		1	= ?=
+**		0	,				
+*)
+and get_operator exp =
+  match exp with
+    NOTHING -> ("", 16)
+  | UNARY (op, _) ->
+      (match op with
+	MINUS -> ("-", 13)
+      | PLUS -> ("+", 13)
+      | NOT -> ("!", 13)
+      | BNOT -> ("~", 13)
+      | MEMOF -> ("*", 13)
+      | ADDROF -> ("&", 13)
+      | PREINCR -> ("++", 13)
+      | PREDECR -> ("--", 13)
+      | POSINCR -> ("++", 14)
+      | POSDECR -> ("--", 14))
+  | LABELADDR s -> ("", 16)  (* Like a constant *)
+  | BINARY (op, _, _) ->
+      (match op with
+	MUL -> ("*", 12)
+      | DIV -> ("/", 12)
+      | MOD -> ("%", 12)
+      | ADD -> ("+", 11)
+      | SUB -> ("-", 11)
+      | SHL -> ("<<", 10)
+      | SHR -> (">>", 10)
+      | LT -> ("<", 9)
+      | LE -> ("<=", 9)
+      | GT -> (">", 9)
+      | GE -> (">=", 9)
+      | EQ -> ("==", 8)
+      | NE -> ("!=", 8)
+      | BAND -> ("&", 7)
+      | XOR -> ("^", 6)
+      | BOR -> ("|", 5)
+      | AND -> ("&&", 4)
+      | OR -> ("||", 3)
+      | ASSIGN -> ("=", 1)
+      | ADD_ASSIGN -> ("+=", 1)
+      | SUB_ASSIGN -> ("-=", 1)
+      | MUL_ASSIGN -> ("*=", 1)
+      | DIV_ASSIGN -> ("/=", 1)
+      | MOD_ASSIGN -> ("%=", 1)
+      | BAND_ASSIGN -> ("&=", 1)
+      | BOR_ASSIGN -> ("|=", 1)
+      | XOR_ASSIGN -> ("^=", 1)
+      | SHL_ASSIGN -> ("<<=", 1)
+      | SHR_ASSIGN -> (">>=", 1))
+  | QUESTION _ -> ("", 2)
+  | CAST _ -> ("", 13)
+  | CALL _ -> ("", 15)
+  | COMMA _ -> ("", 0)
+  | CONSTANT _ -> ("", 16)
+  | VARIABLE name -> ("", 16)
+  | EXPR_SIZEOF exp -> ("", 16)
+  | TYPE_SIZEOF _ -> ("", 16)
+  | EXPR_ALIGNOF exp -> ("", 16)
+  | TYPE_ALIGNOF _ -> ("", 16)
+  | INDEX (exp, idx) -> ("", 15)
+  | MEMBEROF (exp, fld) -> ("", 15)
+  | MEMBEROFPTR (exp, fld) -> ("", 15)
+  | GNU_BODY _ -> ("", 17)
+  | EXPR_PATTERN _ -> ("", 16)     (* sm: not sure about this *)
+
+and print_comma_exps exps =
+  print_commas false print_expression exps
+    
+and print_init_expression (iexp: init_expression) : unit = 
+  match iexp with 
+    NO_INIT -> ()
+  | SINGLE_INIT e -> print_expression e
+  | COMPOUND_INIT  initexps ->
+      let doinitexp = function
+          NEXT_INIT, e -> print_init_expression e
+        | i, e -> 
+            let rec doinit = function
+                NEXT_INIT -> ()
+              | INFIELD_INIT (fn, i) -> print ("." ^ fn); doinit i
+              | ATINDEX_INIT (e, i) -> 
+                  print "[";
+                  print_expression e;
+                  print "]";
+                  doinit i
+              | ATINDEXRANGE_INIT (s, e) -> 
+                  print "["; 
+                  print_expression s;
+                  print " ... ";
+                  print_expression e;
+                  print "]"
+                in
+            doinit i; print " = "; 
+            print_init_expression e
+      in
+      print "{";
+      print_commas false doinitexp initexps;
+      print "}"
+
+and print_expression (exp: expression) = print_expression_level 1 exp
+
+and print_expression_level (lvl: int) (exp : expression) =
+  let (txt, lvl') = get_operator exp in
+  let _ = if lvl > lvl' then print "(" else () in
+  let _ = match exp with
+    NOTHING -> ()
+  | UNARY (op, exp') ->
+      (match op with
+	POSINCR | POSDECR ->
+	  print_expression_level lvl' exp';
+	  print txt
+      | _ ->
+	  print txt; space (); (* Print the space to avoid --5 *)
+	  print_expression_level lvl' exp')
+  | LABELADDR l -> print ("&& " ^ l)
+  | BINARY (op, exp1, exp2) ->
+			(*if (op = SUB) && (lvl <= lvl') then print "(";*)
+      print_expression_level lvl' exp1;
+      space ();
+      print txt;
+      space ();
+			(*print_expression exp2 (if op = SUB then (lvl' + 1) else lvl');*)
+      print_expression_level (lvl' + 1) exp2 
+			(*if (op = SUB) && (lvl <= lvl') then print ")"*)
+  | QUESTION (exp1, exp2, exp3) ->
+      print_expression_level 2 exp1;
+      space ();
+      print "? ";
+      print_expression_level 2 exp2;
+      space ();
+      print ": ";
+      print_expression_level 2 exp3;
+  | CAST (typ, iexp) ->
+      print "(";
+      print_onlytype typ;
+      print ")"; 
+     (* Always print parentheses. In a small number of cases when we print 
+      * constants we don't need them  *)
+      (match iexp with
+        SINGLE_INIT e -> print_expression_level 15 e
+      | COMPOUND_INIT _ -> (* print "("; *) 
+          print_init_expression iexp 
+          (* ; print ")" *)
+      | NO_INIT -> print "<NO_INIT in cast. Should never arise>")
+
+  | CALL (VARIABLE "__builtin_va_arg", [arg; TYPE_SIZEOF (bt, dt)]) -> 
+      comprint "variable";
+      print "__builtin_va_arg";
+      print "(";
+      print_expression_level 1 arg;
+      print ",";
+      print_onlytype (bt, dt);
+      print ")"
+  | CALL (exp, args) ->
+      print_expression_level 16 exp;
+      print "(";
+      print_comma_exps args;
+      print ")"
+  | COMMA exps ->
+      print_comma_exps exps
+  | CONSTANT cst ->
+      (match cst with
+	CONST_INT i -> print i
+      | CONST_FLOAT r -> print r
+      | CONST_CHAR c -> print ("'" ^ escape_wstring c ^ "'")
+      | CONST_WCHAR c -> print ("L'" ^ escape_wstring c ^ "'")
+      | CONST_STRING s -> print_string s
+      | CONST_WSTRING ws -> print_wstring ws)
+  | VARIABLE name ->
+      comprint "variable";
+      print name
+  | EXPR_SIZEOF exp ->
+      print "sizeof(";
+      print_expression_level 0 exp;
+      print ")"
+  | TYPE_SIZEOF (bt,dt) ->
+      print "sizeof(";
+      print_onlytype (bt, dt);
+      print ")"
+  | EXPR_ALIGNOF exp ->
+      print "__alignof__(";
+      print_expression_level 0 exp;
+      print ")"
+  | TYPE_ALIGNOF (bt,dt) ->
+      print "__alignof__(";
+      print_onlytype (bt, dt);
+      print ")"
+  | INDEX (exp, idx) ->
+      print_expression_level 16 exp;
+      print "[";
+      print_expression_level 0 idx;
+      print "]"
+  | MEMBEROF (exp, fld) ->
+      print_expression_level 16 exp;
+      print ("." ^ fld)
+  | MEMBEROFPTR (exp, fld) ->
+      print_expression_level 16 exp;
+      print ("->" ^ fld)
+  | GNU_BODY (blk) ->
+      print "(";
+      print_block blk;
+      print ")"
+  | EXPR_PATTERN (name) ->
+      print ("@expr(" ^ name ^ ") ")
+  in
+  if lvl > lvl' then print ")" else ()
+    
+
+(*
+** Statement printing
+*)
+and print_statement stat =
+  match stat with
+    NOP (loc) ->
+      setLoc(loc);
+      print ";";
+      new_line ()
+  | COMPUTATION (exp, loc) ->
+      setLoc(loc);
+      print_expression exp;
+      print ";";
+      new_line ()
+  | BLOCK (blk, loc) -> print_block blk
+
+  | SEQUENCE (s1, s2, loc) ->
+      setLoc(loc);
+      print_statement s1;
+      print_statement s2;
+  | IF (exp, s1, s2, loc) ->
+      setLoc(loc);
+      print "if(";
+      print_expression_level 0 exp;
+      print ")";
+      print_substatement s1;
+      (match s2 with
+      | NOP(_) -> ()
+      | _ -> begin
+          print "else";
+          print_substatement s2;
+        end)
+  | WHILE (exp, stat, loc) ->
+      setLoc(loc);
+      print "while(";
+      print_expression_level 0 exp;
+      print ")";
+      print_substatement stat
+  | DOWHILE (exp, stat, loc) ->
+      setLoc(loc);
+      print "do";
+      print_substatement stat;
+      print "while(";
+      print_expression_level 0 exp;
+      print ");";
+      new_line ();
+  | FOR (fc1, exp2, exp3, stat, loc) ->
+      setLoc(loc);
+      print "for(";
+      (match fc1 with
+        FC_EXP exp1 -> print_expression_level 0 exp1; print ";"
+      | FC_DECL dec1 -> print_def dec1);
+      space ();
+      print_expression_level 0 exp2;
+      print ";";
+      space ();
+      print_expression_level 0 exp3;
+      print ")";
+      print_substatement stat
+  | BREAK (loc)->
+      setLoc(loc);
+      print "break;"; new_line ()
+  | CONTINUE (loc) ->
+      setLoc(loc);
+      print "continue;"; new_line ()
+  | RETURN (exp, loc) ->
+      setLoc(loc);
+      print "return";
+      if exp = NOTHING
+      then ()
+      else begin
+	print " ";
+	print_expression_level 1 exp
+      end;
+      print ";";
+      new_line ()
+  | SWITCH (exp, stat, loc) ->
+      setLoc(loc);
+      print "switch(";
+      print_expression_level 0 exp;
+      print ")";
+      print_substatement stat
+  | CASE (exp, stat, loc) ->
+      setLoc(loc);
+      unindent ();
+      print "case ";
+      print_expression_level 1 exp;
+      print ":";
+      indent ();
+      print_substatement stat
+  | CASERANGE (expl, exph, stat, loc) ->
+      setLoc(loc);
+      unindent ();
+      print "case ";
+      print_expression expl;
+      print " ... ";
+      print_expression exph;
+      print ":";
+      indent ();
+      print_substatement stat
+  | DEFAULT (stat, loc) ->
+      setLoc(loc);
+      unindent ();
+      print "default :";
+      indent ();
+      print_substatement stat
+  | LABEL (name, stat, loc) ->
+      setLoc(loc);
+      print (name ^ ":");
+      space ();
+      print_substatement stat
+  | GOTO (name, loc) ->
+      setLoc(loc);
+      print ("goto " ^ name ^ ";");
+      new_line ()
+  | COMPGOTO (exp, loc) -> 
+      setLoc(loc);
+      print ("goto *"); print_expression exp; print ";"; new_line ()
+  | DEFINITION d ->
+      print_def d
+  | ASM (attrs, tlist, details, loc) ->
+      setLoc(loc);
+      let print_asm_operand (cnstr, e) =
+        print_string cnstr; space (); print_expression_level 100 e
+      in
+      if !msvcMode then begin
+        print "__asm {";
+        print_list (fun () -> new_line()) print tlist; (* templates *)
+        print "};"
+      end else begin
+        print "__asm__ "; 
+        print_attributes attrs;
+        print "(";
+        print_list (fun () -> new_line()) print_string tlist; (* templates *)
+	begin
+	  match details with
+	  | None -> ()
+	  | Some { aoutputs = outs; ainputs = ins; aclobbers = clobs } ->
+              print ":"; space ();
+              print_commas false print_asm_operand outs;
+              if ins <> [] || clobs <> [] then begin
+		print ":"; space ();
+		print_commas false print_asm_operand ins;
+		if clobs <> [] then begin
+		  print ":"; space ();
+		  print_commas false print_string clobs
+		end;
+              end
+	end;
+        print ");"
+      end;
+      new_line ()
+  | TRY_FINALLY (b, h, loc) -> 
+      setLoc loc;
+      print "__try ";
+      print_block b;
+      print "__finally ";
+      print_block h
+
+  | TRY_EXCEPT (b, e, h, loc) -> 
+      setLoc loc;
+      print "__try ";
+      print_block b;
+      print "__except("; print_expression e; print ")";
+      print_block h
+      
+and print_block blk = 
+  new_line();
+  print "{";
+  indent ();
+  if blk.blabels <> [] then begin
+    print "__label__ ";
+    print_commas false print blk.blabels;
+    print ";";
+    new_line ();
+  end;
+  if blk.battrs <> [] then begin
+    List.iter print_attribute blk.battrs;
+    new_line ();
+  end;
+  List.iter print_statement blk.bstmts;
+  unindent ();
+  print "}";
+  new_line ()
+  
+and print_substatement stat =
+  match stat with
+    IF _
+  | SEQUENCE _
+  | DOWHILE _ ->
+      new_line ();
+      print "{";
+      indent ();
+      print_statement stat;
+      unindent ();
+      print "}";
+      new_line ();
+  | BLOCK _ ->
+      print_statement stat
+  | _ ->
+      indent ();
+      print_statement stat;
+      unindent ()
+
+
+(*
+** GCC Attributes
+*)
+and print_attribute (name,args) = 
+  if args = [] then print (
+    match name with 
+      "restrict" -> "__restrict" 
+      (* weimer: Fri Dec  7 17:12:35  2001
+       * must not print 'restrict' and the code below does allows some
+       * plain 'restrict's to slip though! *)
+    | x -> x)
+  else begin
+    print name;
+    print "("; if name = "__attribute__" then print "(";
+    (match args with
+      [VARIABLE "aconst"] -> print "const"
+    | [VARIABLE "restrict"] -> print "__restrict"
+    | _ -> print_commas false (fun e -> print_expression e) args);
+    print ")"; if name = "__attribute__" then print ")"
+  end
+
+(* Print attributes. *)
+and print_attributes attrs =
+  List.iter (fun a -> print_attribute a; space ()) attrs
+
+(*
+** Declaration printing
+*)
+and print_defs defs =
+  let prev = ref false in
+  List.iter
+    (fun def ->
+      (match def with
+	DECDEF _ -> prev := false
+      | _ ->
+	  if not !prev then force_new_line ();
+	  prev := true);
+      print_def def)
+    defs
+
+and print_def def =
+  match def with
+    FUNDEF (proto, body, loc, _) ->
+      comprint "fundef";
+      if !printCounters then begin
+        try
+          let fname =
+            match proto with
+              (_, (n, _, _, _)) -> n
+          in
+          print_def (DECDEF (([SpecType Tint],
+                              [(fname ^ "__counter", JUSTBASE, [], cabslu),
+                                NO_INIT]), loc));
+        with Not_found -> print "/* can't print the counter */"
+      end;
+      setLoc(loc);
+      print_single_name proto;
+      print_block body;
+      force_new_line ();
+
+  | DECDEF (names, loc) ->
+      comprint "decdef";
+      setLoc(loc);
+      print_init_name_group names;
+      print ";";
+      new_line ()
+
+  | TYPEDEF (names, loc) ->
+      comprint "typedef";
+      setLoc(loc);
+      print_name_group names;
+      print ";";
+      new_line ();
+      force_new_line ()
+
+  | ONLYTYPEDEF (specs, loc) ->
+      comprint "onlytypedef";
+      setLoc(loc);
+      print_specifiers specs;
+      print ";";
+      new_line ();
+      force_new_line ()
+
+  | GLOBASM (asm, loc) ->
+      setLoc(loc);
+      print "__asm__ (";  print_string asm; print ");";
+      new_line ();
+      force_new_line ()
+
+  | PRAGMA (a,loc) ->
+      setLoc(loc);
+      force_new_line ();
+      print "#pragma ";
+      let oldwidth = !width in
+      width := 1000000;  (* Do not wrap pragmas *)
+      print_expression a;
+      width := oldwidth;
+      force_new_line ()
+
+  | LINKAGE (n, loc, dl) -> 
+      setLoc (loc);
+      force_new_line ();
+      print "extern "; print_string n; print_string "  {";
+      List.iter print_def dl;
+      print_string "}";
+      force_new_line ()
+
+  | TRANSFORMER(srcdef, destdeflist, loc) ->
+      setLoc(loc);
+      print "@transform {";
+      force_new_line();
+      print "{";
+        force_new_line();
+        indent ();
+        print_def srcdef;
+        unindent();
+      print "}";
+      force_new_line();
+      print "to {";
+        force_new_line();
+        indent();
+        List.iter print_def destdeflist;
+        unindent();
+      print "}";
+      force_new_line()
+
+  | EXPRTRANSFORMER(srcexpr, destexpr, loc) ->
+      setLoc(loc);
+      print "@transformExpr { ";
+      print_expression srcexpr;
+      print " } to { ";
+      print_expression destexpr;
+      print " }";
+      force_new_line()
+
+
+(* sm: print a comment if the printComments flag is set *)
+and comprint (str : string) : unit =
+begin
+  if (!printComments) then (
+    print "/*";
+    print str;
+    print "*/ "
+  )
+  else
+    ()
+end
+
+(* sm: yield either the given string, or "", depending on printComments *)
+and comstring (str : string) : string =
+begin
+  if (!printComments) then
+    str
+  else
+    ""
+end
+
+
+(*  print abstrac_syntax -> ()
+**		Pretty printing the given abstract syntax program.
+*)
+let printFile (result : out_channel) ((fname, defs) : file) =
+  out := result;
+  print_defs defs;
+  flush ()     (* sm: should do this here *)
+
+let set_tab t = tab := t
+let set_width w = width := w
+
diff --git a/cil/src/frontc/frontc.ml b/cil/src/frontc/frontc.ml
new file mode 100644
index 000000000..459ae2c34
--- /dev/null
+++ b/cil/src/frontc/frontc.ml
@@ -0,0 +1,256 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+module E = Errormsg
+open Trace
+open Pretty
+
+(* Output management *)
+let out : out_channel option ref = ref None
+let close_me = ref false
+
+let close_output _ =
+  match !out with
+    None -> ()
+  | Some o -> begin
+      flush o;
+      if !close_me then close_out o else ();
+      close_me := false
+  end
+
+let set_output filename =
+  close_output ();
+  (try out := Some (open_out filename)
+  with (Sys_error msg) ->
+    output_string stderr ("Error while opening output: " ^ msg); exit 1);
+  close_me := true
+
+   (* Signal that we are in MS VC mode *)
+let setMSVCMode () =
+  Cprint.msvcMode := true
+
+(* filename for patching *)
+let patchFileName : string ref = ref ""      (* by default do no patching *)
+
+(* patching file contents *)
+let patchFile : Cabs.file option ref = ref None
+
+(* whether to print the patched CABS files *)
+let printPatchedFiles : bool ref = ref false
+
+(* whether to print a file of prototypes after parsing *)
+let doPrintProtos : bool ref = ref false
+
+(* this seems like something that should be built-in.. *)
+let isNone (o : 'a option) : bool =
+begin
+  match o with
+  | Some _ -> false
+  | None -> true
+end
+
+(*
+** Argument definition
+*)
+let args : (string * Arg.spec * string) list =
+[
+  "--cabsonly", Arg.String set_output, "<fname>: CABS output file name";
+  "--printComments", Arg.Unit (fun _ -> Cprint.printComments := true),
+             ": print cabs tree structure in comments in cabs output";
+  "--patchFile", Arg.String (fun pf -> patchFileName := pf),
+             "<fname>: name the file containing patching transformations";
+  "--printPatched", Arg.Unit (fun _ -> printPatchedFiles := true),
+             ": print patched CABS files after patching, to *.patched";
+  "--printProtos", Arg.Unit (fun _ -> doPrintProtos := true),
+             ": print prototypes to safec.proto.h after parsing";
+]
+
+exception ParseError of string
+exception CabsOnly
+
+(* parse, and apply patching *)
+let rec parse_to_cabs fname =
+begin
+  (* parse the patch file if it isn't parsed already *)
+  if ((!patchFileName <> "") && (isNone !patchFile)) then (
+    (* parse the patch file *)
+    patchFile := Some(parse_to_cabs_inner !patchFileName);
+    if !E.hadErrors then
+      (failwith "There were parsing errors in the patch file")
+  );
+
+  (* now parse the file we came here to parse *)
+  let cabs = parse_to_cabs_inner fname in
+  if !E.hadErrors then 
+    E.s (E.error "There were parsing errors in %s\n" fname);
+
+  (* and apply the patch file, return transformed file *)
+  let patched = match !patchFile with
+
+    | Some(pf) -> (
+        (* save old value of out so I can use it for debugging during patching *)
+        let oldOut = !out in
+
+        (* reset out so we don't try to print the patch file to it *)
+        out := None;
+
+        (trace "patch" (dprintf "newpatching %s\n" fname));
+        let result = (Stats.time "newpatch" (Patch.applyPatch pf) cabs) in
+
+        if (!printPatchedFiles) then begin                              
+          let outFname:string = fname ^ ".patched" in
+          (trace "patch" (dprintf "printing patched version of %s to %s\n"
+                                  fname outFname));
+          let o = (open_out outFname) in
+          (Cprint.printFile o result);
+          (close_out o)
+        end;
+
+        (* restore out *)
+        Cprint.flush ();
+        out := oldOut;
+
+        result
+      )
+    | None -> cabs
+  in
+
+  (* print it ... *)
+  (match !out with
+    Some o -> begin
+      (trace "sm" (dprintf "writing the cabs output\n"));
+      output_string o ("/* Generated by Frontc */\n");
+      Stats.time "printCABS" (Cprint.printFile o) patched;
+      close_output ();
+      raise CabsOnly
+    end
+  | None -> ());
+  if !E.hadErrors then
+    raise Parsing.Parse_error;
+
+  (* and return the patched source *)
+  patched
+end
+
+
+(* just parse *)
+and parse_to_cabs_inner (fname : string) =
+  try
+    if !E.verboseFlag then ignore (E.log "Frontc is parsing %s\n" fname);
+    flush !E.logChannel;
+    E.hadErrors := false;
+    let lexbuf = Clexer.init fname in
+    let cabs = Stats.time "parse" (Cparser.file Clexer.initial) lexbuf in
+    Clexer.finish ();
+    (fname, cabs)
+  with (Sys_error msg) -> begin
+    ignore (E.log "Cannot open %s : %s\n" fname msg);
+    Clexer.finish ();
+    close_output ();
+    raise (ParseError("Cannot open " ^ fname ^ ": " ^ msg ^ "\n"))
+  end
+  | Parsing.Parse_error -> begin
+      ignore (E.log "Parsing error\n");
+      Clexer.finish ();
+      close_output ();
+      raise (ParseError("Parse error"))
+  end
+  | e -> begin
+      ignore (E.log "Caught %s while parsing\n" (Printexc.to_string e));
+      Clexer.finish ();
+      raise e
+  end
+
+  
+(* print to safec.proto.h the prototypes of all functions that are defined *)
+let printPrototypes ((fname, file) : Cabs.file) : unit =
+begin
+  (*ignore (E.log "file has %d defns\n" (List.length file));*)
+
+  let chan = open_out "safec.proto.h" in
+  ignore (fprintf chan "/* generated prototypes file, %d defs */\n" (List.length file));
+  Cprint.out := chan;
+
+  let counter : int ref = ref 0 in
+
+  let rec loop (d : Cabs.definition) = begin
+    match d with
+    | Cabs.FUNDEF(name, _, loc, _) -> (
+        match name with
+        | (_, (funcname, Cabs.PROTO(_,_,_), _, _)) -> (
+            incr counter;          
+            ignore (fprintf chan "\n/* %s from %s:%d */\n"
+                                 funcname loc.Cabs.filename loc.Cabs.lineno);
+            flush chan;
+            Cprint.print_single_name name;
+            Cprint.print_unescaped_string ";";
+            Cprint.force_new_line ();
+            Cprint.flush ()
+          )
+        | _ -> ()
+      )
+
+    | _ -> ()
+  end in
+  (List.iter loop file);
+
+  ignore (fprintf chan "\n/* wrote %d prototypes */\n" !counter);
+  close_out chan;
+  ignore (E.log "printed %d prototypes from %d defns to safec.proto.h\n"
+                !counter (List.length file))
+end
+
+
+
+let parse fname =
+  (trace "sm" (dprintf "parsing %s to Cabs\n" fname));
+  let cabs = parse_to_cabs fname in
+  (* Now (return a function that will) convert to CIL *)
+  fun _ ->
+    (trace "sm" (dprintf "converting %s from Cabs to CIL\n" fname));
+    let cil = Stats.time "conv" Cabs2cil.convFile cabs in
+    if !doPrintProtos then (printPrototypes cabs);
+    cil
+
+
+
+
+
+
+
+
diff --git a/cil/src/frontc/frontc.mli b/cil/src/frontc/frontc.mli
new file mode 100644
index 000000000..50ad799c4
--- /dev/null
+++ b/cil/src/frontc/frontc.mli
@@ -0,0 +1,55 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+   (* Signal that we are in MS VC mode *)
+val setMSVCMode: unit -> unit
+
+
+   (* Parse a file in *)
+exception ParseError of string
+
+   (* Raised when the front-end is requested to print the CABS and return *)
+exception CabsOnly
+
+    (* additional command line arguments *)
+val args: (string * Arg.spec * string) list
+
+    (* the main command to parse a file. Return a thunk that can be used to 
+     * convert the AST to CIL. *)
+val parse: string -> (unit -> Cil.file)
+
diff --git a/cil/src/frontc/lexerhack.ml b/cil/src/frontc/lexerhack.ml
new file mode 100755
index 000000000..ecae28ef0
--- /dev/null
+++ b/cil/src/frontc/lexerhack.ml
@@ -0,0 +1,22 @@
+
+module E = Errormsg
+
+(* We provide here a pointer to a function. It will be set by the lexer and 
+ * used by the parser. In Ocaml lexers depend on parsers, so we we have put 
+ * such functions in a separate module. *)
+let add_identifier: (string -> unit) ref = 
+  ref (fun _ -> E.s (E.bug "You called an uninitialized add_identifier")) 
+
+let add_type: (string -> unit) ref = 
+  ref (fun _ -> E.s (E.bug "You called an uninitialized add_type")) 
+
+let push_context: (unit -> unit) ref = 
+  ref (fun _ -> E.s (E.bug "You called an uninitialized push_context")) 
+
+let pop_context: (unit -> unit) ref = 
+  ref (fun _ -> E.s (E.bug "You called an uninitialized pop_context")) 
+
+
+(* Keep here the current pattern for formatparse *)
+let currentPattern = ref ""
+
diff --git a/cil/src/frontc/patch.ml b/cil/src/frontc/patch.ml
new file mode 100644
index 000000000..fcb4ba623
--- /dev/null
+++ b/cil/src/frontc/patch.ml
@@ -0,0 +1,837 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(* patch.ml *)
+(* CABS file patching *)
+
+open Cabs
+open Trace
+open Pretty
+open Cabsvisit
+
+(* binding of a unification variable to a syntactic construct *)
+type binding =
+  | BSpecifier of string * spec_elem list
+  | BName of string * string
+  | BExpr of string * expression
+
+(* thrown when unification fails *)
+exception NoMatch
+
+(* thrown when an attempt to find the associated binding fails *)
+exception BadBind of string
+
+(* trying to isolate performance problems; will hide all the *)
+(* potentially expensive debugging output behind "if verbose .." *)
+let verbose : bool = true
+
+
+(* raise NoMatch if x and y are not equal *)
+let mustEq (x : 'a) (y : 'a) : unit =
+begin
+  if (x <> y) then (
+    if verbose then
+      (trace "patchDebug" (dprintf "mismatch by structural disequality\n"));
+    raise NoMatch
+  )
+end
+
+(* why isn't this in the core Ocaml library? *)
+let identity x = x
+
+
+let isPatternVar (s : string) : bool =
+begin
+  ((String.length s) >= 1) && ((String.get s 0) = '@')
+end
+
+(* 's' is actually "@name(blah)"; extract the 'blah' *)
+let extractPatternVar (s : string) : string =
+  (*(trace "patch" (dprintf "extractPatternVar %s\n" s));*)
+  (String.sub s 6 ((String.length s) - 7))
+
+
+(* a few debugging printers.. *)
+let printExpr (e : expression) =
+begin
+  if (verbose && traceActive "patchDebug") then (
+    Cprint.print_expression e; Cprint.force_new_line ();
+    Cprint.flush ()
+  )
+end
+
+let printSpec (spec: spec_elem list) =
+begin
+  if (verbose && traceActive "patchDebug") then (
+    Cprint.print_specifiers spec;  Cprint.force_new_line ();
+    Cprint.flush ()
+  )
+end
+
+let printSpecs (pat : spec_elem list) (tgt : spec_elem list) =
+begin
+  (printSpec pat);
+  (printSpec tgt)
+end
+
+let printDecl (pat : name) (tgt : name) =
+begin
+  if (verbose && traceActive "patchDebug") then (
+    Cprint.print_name pat;  Cprint.force_new_line ();
+    Cprint.print_name tgt;  Cprint.force_new_line ();
+    Cprint.flush ()
+  )
+end
+
+let printDeclType (pat : decl_type) (tgt : decl_type) =
+begin
+  if (verbose && traceActive "patchDebug") then (
+    Cprint.print_decl "__missing_field_name" pat;  Cprint.force_new_line ();
+    Cprint.print_decl "__missing_field_name" tgt;  Cprint.force_new_line ();
+    Cprint.flush ()
+  )
+end
+
+let printDefn (d : definition) =
+begin
+  if (verbose && traceActive "patchDebug") then (
+    Cprint.print_def d;
+    Cprint.flush ()
+  )
+end
+
+
+(* class to describe how to modify the tree for subtitution *)
+class substitutor (bindings : binding list) = object(self)
+  inherit nopCabsVisitor as super
+
+  (* look in the binding list for a given name *)
+  method findBinding (name : string) : binding =
+  begin
+    try
+      (List.find
+        (fun b ->
+          match b with
+          | BSpecifier(n, _) -> n=name
+          | BName(n, _) -> n=name
+          | BExpr(n, _) -> n=name)
+        bindings)
+    with
+      Not_found -> raise (BadBind ("name not found: " ^ name))
+  end
+
+  method vexpr (e:expression) : expression visitAction =
+  begin
+    match e with
+    | EXPR_PATTERN(name) -> (
+        match (self#findBinding name) with
+        | BExpr(_, expr) -> ChangeTo(expr)    (* substitute bound expression *)
+        | _ -> raise (BadBind ("wrong type: " ^ name))
+      )
+    | _ -> DoChildren
+  end
+  
+  (* use of a name *)
+  method vvar (s:string) : string =
+  begin
+    if (isPatternVar s) then (
+      let nameString = (extractPatternVar s) in
+      match (self#findBinding nameString) with
+      | BName(_, str) -> str        (* substitute *)
+      | _ -> raise (BadBind ("wrong type: " ^ nameString))
+    )
+    else
+      s
+  end
+
+  (* binding introduction of a name *)
+  method vname (k: nameKind) (spec: specifier) (n: name) : name visitAction =
+  begin
+    match n with (s (*variable name*), dtype, attrs, loc) -> (
+      let replacement = (self#vvar s) in    (* use replacer from above *)
+      if (s <> replacement) then
+        ChangeTo(replacement, dtype, attrs, loc)
+      else
+        DoChildren                          (* no replacement *)
+    )
+  end
+
+  method vspec (specList: specifier) : specifier visitAction =
+  begin
+    if verbose then (trace "patchDebug" (dprintf "substitutor: vspec\n"));
+    (printSpec specList);
+
+    (* are any of the specifiers SpecPatterns?  we have to check the entire *)
+    (* list, not just the head, because e.g. "typedef @specifier(foo)" has *)
+    (* "typedef" as the head of the specifier list *)
+    if (List.exists (fun elt -> match elt with
+                                | SpecPattern(_) -> true
+                                | _ -> false)
+                    specList) then begin
+      (* yes, replace the existing list with one got by *)
+      (* replacing all occurrences of SpecPatterns *)
+      (trace "patchDebug" (dprintf "at least one spec pattern\n"));
+      ChangeTo
+        (List.flatten
+          (List.map
+            (* for each specifier element, yield the specifier list *)
+            (* to which it maps; then we'll flatten the final result *)
+            (fun elt ->
+              match elt with
+              | SpecPattern(name) -> (
+                  match (self#findBinding name) with
+                  | BSpecifier(_, replacement) -> (
+                      (trace "patchDebug" (dprintf "replacing pattern %s\n" name));
+                      replacement                                                  
+                    )
+                  | _ -> raise (BadBind ("wrong type: " ^ name))
+                )
+              | _ -> [elt]    (* leave this one alone *)
+            )
+            specList
+          )
+        )
+    end
+    else
+      (* none of the specifiers in specList are patterns *)
+      DoChildren
+  end
+
+  method vtypespec (tspec: typeSpecifier) : typeSpecifier visitAction =
+  begin
+    match tspec with
+    | Tnamed(str) when (isPatternVar str) ->
+        ChangeTo(Tnamed(self#vvar str))
+    | Tstruct(str, fields, extraAttrs) when (isPatternVar str) -> (
+        (trace "patchDebug" (dprintf "substituting %s\n" str));
+        ChangeDoChildrenPost(Tstruct((self#vvar str), fields, extraAttrs), identity)
+      )
+    | Tunion(str, fields, extraAttrs) when (isPatternVar str) ->
+        (trace "patchDebug" (dprintf "substituting %s\n" str));
+        ChangeDoChildrenPost(Tunion((self#vvar str), fields, extraAttrs), identity)
+    | _ -> DoChildren
+  end
+
+end
+
+
+(* why can't I have forward declarations in the language?!! *)
+let unifyExprFwd : (expression -> expression -> binding list) ref
+  = ref (fun e e -> [])
+
+
+(* substitution for expressions *)
+let substExpr (bindings : binding list) (expr : expression) : expression =
+begin            
+  if verbose then
+    (trace "patchDebug" (dprintf "substExpr with %d bindings\n" (List.length bindings)));
+  (printExpr expr);
+
+  (* apply the transformation *)
+  let result = (visitCabsExpression (new substitutor bindings :> cabsVisitor) expr) in
+  (printExpr result);
+
+  result
+end
+
+let d_loc (_:unit) (loc: cabsloc) : doc =
+  text loc.filename ++ chr ':' ++ num loc.lineno
+
+
+(* class to describe how to modify the tree when looking for places *)
+(* to apply expression transformers *)
+class exprTransformer (srcpattern : expression) (destpattern : expression)
+                      (patchline : int) (srcloc : cabsloc) = object(self)
+  inherit nopCabsVisitor as super
+
+  method vexpr (e:expression) : expression visitAction =
+  begin
+    (* see if the source pattern matches this subexpression *)
+    try (
+      let bindings = (!unifyExprFwd srcpattern e) in
+
+      (* match! *)
+      (trace "patch" (dprintf "expr match: patch line %d, src %a\n"
+                              patchline d_loc srcloc));
+      ChangeTo(substExpr bindings destpattern)
+    )
+
+    with NoMatch -> (
+      (* doesn't apply *)
+      DoChildren
+    )
+  end
+
+  (* other constructs left unchanged *)
+end
+
+
+let unifyList (pat : 'a list) (tgt : 'a list)
+              (unifyElement : 'a -> 'a -> binding list) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifyList (pat len %d, tgt len %d)\n"
+                                 (List.length pat) (List.length tgt)));
+
+  (* walk down the lists *)
+  let rec loop pat tgt : binding list =
+    match pat, tgt with
+    | [], [] -> []
+    | (pelt :: prest), (telt :: trest) ->
+         (unifyElement pelt telt) @
+         (loop prest trest)
+    | _,_ -> (
+        (* no match *)
+        if verbose then (
+          (trace "patchDebug" (dprintf "mismatching list length\n"));
+        );
+        raise NoMatch
+     )
+  in
+  (loop pat tgt)
+end
+
+
+let gettime () : float =
+  (Unix.times ()).Unix.tms_utime
+
+let rec applyPatch (patchFile : file) (srcFile : file) : file =
+begin
+  let patch : definition list = (snd patchFile) in
+  let srcFname : string = (fst srcFile) in
+  let src : definition list = (snd srcFile) in
+
+  (trace "patchTime" (dprintf "applyPatch start: %f\n" (gettime ())));
+  if (traceActive "patchDebug") then
+    Cprint.out := stdout      (* hack *)
+  else ();
+
+  (* more hackery *)
+  unifyExprFwd := unifyExpr;
+
+  (* patch a single source definition, yield transformed *)
+  let rec patchDefn (patch : definition list) (d : definition) : definition list =
+  begin
+    match patch with
+    | TRANSFORMER(srcpattern, destpattern, loc) :: rest -> (
+        if verbose then
+          (trace "patchDebug"
+            (dprintf "considering applying defn pattern at line %d to src at %a\n"
+                     loc.lineno d_loc (get_definitionloc d)));
+
+        (* see if the source pattern matches the definition 'd' we have *)
+        try (
+          let bindings = (unifyDefn srcpattern d) in
+
+          (* we have a match!  apply the substitutions *)
+          (trace "patch" (dprintf "defn match: patch line %d, src %a\n"
+                                  loc.lineno d_loc (get_definitionloc d)));
+
+          (List.map (fun destElt -> (substDefn bindings destElt)) destpattern)
+        )
+
+        with NoMatch -> (
+          (* no match, continue down list *)
+          (*(trace "patch" (dprintf "no match\n"));*)
+          (patchDefn rest d)
+        )
+      )
+
+    | EXPRTRANSFORMER(srcpattern, destpattern, loc) :: rest -> (
+        if verbose then
+          (trace "patchDebug"
+            (dprintf "considering applying expr pattern at line %d to src at %a\n"
+                     loc.lineno d_loc (get_definitionloc d)));
+
+        (* walk around in 'd' looking for expressions to modify *)
+        let dList = (visitCabsDefinition
+                      ((new exprTransformer srcpattern destpattern
+                                            loc.lineno (get_definitionloc d))
+                       :> cabsVisitor)
+                      d
+                    ) in
+
+        (* recursively invoke myself to try additional patches *)
+        (* since visitCabsDefinition might return a list, I'll try my *)
+        (* addtional patches on every yielded definition, then collapse *)
+        (* all of them into a single list *)
+        (List.flatten (List.map (fun d -> (patchDefn rest d)) dList))
+      )
+
+    | _ :: rest -> (
+        (* not a transformer; just keep going *)
+        (patchDefn rest d)
+      )
+    | [] -> (
+        (* reached the end of the patch file with no match *)
+        [d]     (* have to wrap it in a list ... *)
+      )
+  end in
+
+  (* transform all the definitions *)
+  let result : definition list =
+    (List.flatten (List.map (fun d -> (patchDefn patch d)) src)) in
+
+  (*Cprint.print_defs result;*)
+
+  if (traceActive "patchDebug") then (
+    (* avoid flush bug? yes *)
+    Cprint.force_new_line ();
+    Cprint.flush ()
+  );
+
+  (trace "patchTime" (dprintf "applyPatch finish: %f\n" (gettime ())));
+  (srcFname, result)
+end
+
+
+(* given a definition pattern 'pat', and a target concrete defintion 'tgt', *)
+(* determine if they can be unified; if so, return the list of bindings of *)
+(* unification variables in pat; otherwise raise NoMatch *)
+and unifyDefn (pat : definition) (tgt : definition) : binding list =
+begin
+  match pat, tgt with
+  | DECDEF((pspecifiers, pdeclarators), _),
+    DECDEF((tspecifiers, tdeclarators), _) -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "unifyDefn of DECDEFs\n"));
+      (unifySpecifiers pspecifiers tspecifiers) @
+      (unifyInitDeclarators pdeclarators tdeclarators)
+    )
+
+  | TYPEDEF((pspec, pdecl), _),
+    TYPEDEF((tspec, tdecl), _) -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "unifyDefn of TYPEDEFs\n"));
+      (unifySpecifiers pspec tspec) @
+      (unifyDeclarators pdecl tdecl)
+    )
+
+  | ONLYTYPEDEF(pspec, _),
+    ONLYTYPEDEF(tspec, _) -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "unifyDefn of ONLYTYPEDEFs\n"));
+      (unifySpecifiers pspec tspec)
+    )
+
+  | _, _ -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "mismatching definitions\n"));
+      raise NoMatch
+    )
+end
+
+and unifySpecifier (pat : spec_elem) (tgt : spec_elem) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifySpecifier\n"));
+  (printSpecs [pat] [tgt]);
+
+  if (pat = tgt) then [] else
+
+  match pat, tgt with
+  | SpecType(tspec1), SpecType(tspec2) ->
+      (unifyTypeSpecifier tspec1 tspec2)
+  | SpecPattern(name), _ ->
+      (* record that future occurrances of @specifier(name) will yield this specifier *)
+      if verbose then
+        (trace "patchDebug" (dprintf "found specifier match for %s\n" name));
+      [BSpecifier(name, [tgt])]
+  | _,_ -> (
+      (* no match *)
+      if verbose then (
+        (trace "patchDebug" (dprintf "mismatching specifiers\n"));
+      );
+      raise NoMatch
+   )
+end
+
+and unifySpecifiers (pat : spec_elem list) (tgt : spec_elem list) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifySpecifiers\n"));
+  (printSpecs pat tgt);
+
+  (* canonicalize the specifiers by sorting them *)
+  let pat' = (List.stable_sort compare pat) in
+  let tgt' = (List.stable_sort compare tgt) in
+
+  (* if they are equal, they match with no further checking *)
+  if (pat' = tgt') then [] else
+
+  (* walk down the lists; don't walk the sorted lists because the *)
+  (* pattern must always be last, if it occurs *)
+  let rec loop pat tgt : binding list =
+    match pat, tgt with
+    | [], [] -> []
+    | [SpecPattern(name)], _ ->
+        (* final SpecPattern matches anything which comes after *)
+        (* record that future occurrences of @specifier(name) will yield this specifier *)
+        if verbose then
+          (trace "patchDebug" (dprintf "found specifier match for %s\n" name));
+        [BSpecifier(name, tgt)]
+    | (pspec :: prest), (tspec :: trest) ->
+         (unifySpecifier pspec tspec) @
+         (loop prest trest)
+    | _,_ -> (
+        (* no match *)
+        if verbose then (
+          (trace "patchDebug" (dprintf "mismatching specifier list length\n"));
+        );
+        raise NoMatch
+     )
+  in
+  (loop pat tgt)
+end
+
+and unifyTypeSpecifier (pat: typeSpecifier) (tgt: typeSpecifier) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifyTypeSpecifier\n"));
+
+  if (pat = tgt) then [] else
+
+  match pat, tgt with
+  | Tnamed(s1), Tnamed(s2) -> (unifyString s1 s2)
+  | Tstruct(name1, None, _), Tstruct(name2, None, _) ->
+      (unifyString name1 name2)
+  | Tstruct(name1, Some(fields1), _), Tstruct(name2, Some(fields2), _) ->
+      (* ignoring extraAttrs b/c we're just trying to come up with a list
+       * of substitutions, and there's no unify_attributes function, and
+       * I don't care at this time about checking that they are equal .. *)
+      (unifyString name1 name2) @
+      (unifyList fields1 fields2 unifyField)
+  | Tunion(name1, None, _), Tstruct(name2, None, _) ->
+      (unifyString name1 name2)
+  | Tunion(name1, Some(fields1), _), Tunion(name2, Some(fields2), _) ->
+      (unifyString name1 name2) @
+      (unifyList fields1 fields2 unifyField)
+  | Tenum(name1, None, _), Tenum(name2, None, _) ->
+      (unifyString name1 name2)
+  | Tenum(name1, Some(items1), _), Tenum(name2, Some(items2), _) ->
+      (mustEq items1 items2);    (* enum items *)
+      (unifyString name1 name2)
+  | TtypeofE(exp1), TtypeofE(exp2) ->
+      (unifyExpr exp1 exp2)
+  | TtypeofT(spec1, dtype1), TtypeofT(spec2, dtype2) ->
+      (unifySpecifiers spec1 spec2) @
+      (unifyDeclType dtype1 dtype2)
+  | _ -> (
+      if verbose then (trace "patchDebug" (dprintf "mismatching typeSpecifiers\n"));
+      raise NoMatch
+    )
+end
+
+and unifyField (pat : field_group) (tgt : field_group) : binding list =
+begin
+  match pat,tgt with (spec1, list1), (spec2, list2) -> (
+    (unifySpecifiers spec1 spec2) @
+    (unifyList list1 list2 unifyNameExprOpt)
+  )
+end
+
+and unifyNameExprOpt (pat : name * expression option)
+                     (tgt : name * expression option) : binding list =
+begin
+  match pat,tgt with
+  | (name1, None), (name2, None) -> (unifyName name1 name2)
+  | (name1, Some(exp1)), (name2, Some(exp2)) ->
+      (unifyName name1 name2) @
+      (unifyExpr exp1 exp2)
+  | _,_ -> []
+end
+
+and unifyName (pat : name) (tgt : name) : binding list =
+begin
+  match pat,tgt with (pstr, pdtype, pattrs, ploc), (tstr, tdtype, tattrs, tloc) ->
+    (mustEq pattrs tattrs);
+    (unifyString pstr tstr) @
+    (unifyDeclType pdtype tdtype)
+end
+
+and unifyInitDeclarators (pat : init_name list) (tgt : init_name list) : binding list =
+begin
+  (*
+    if verbose then
+      (trace "patchDebug" (dprintf "unifyInitDeclarators, pat %d, tgt %d\n"
+                                   (List.length pat) (List.length tgt)));
+  *)
+
+  match pat, tgt with
+  | ((pdecl, piexpr) :: prest),
+    ((tdecl, tiexpr) :: trest) ->
+      (unifyDeclarator pdecl tdecl) @
+      (unifyInitExpr piexpr tiexpr) @
+      (unifyInitDeclarators prest trest)
+  | [], [] -> []
+  | _, _ -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "mismatching init declarators\n"));
+      raise NoMatch
+    )
+end
+
+and unifyDeclarators (pat : name list) (tgt : name list) : binding list =
+  (unifyList pat tgt unifyDeclarator)
+
+and unifyDeclarator (pat : name) (tgt : name) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifyDeclarator\n"));
+  (printDecl pat tgt);
+
+  match pat, tgt with
+  | (pname, pdtype, pattr, ploc),
+    (tname, tdtype, tattr, tloc) ->
+      (mustEq pattr tattr);
+      (unifyDeclType pdtype tdtype) @
+      (unifyString pname tname)
+end
+
+and unifyDeclType (pat : decl_type) (tgt : decl_type) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifyDeclType\n"));
+  (printDeclType pat tgt);
+
+  match pat, tgt with
+  | JUSTBASE, JUSTBASE -> []
+  | PARENTYPE(pattr1, ptype, pattr2),
+    PARENTYPE(tattr1, ttype, tattr2) ->
+      (mustEq pattr1 tattr1);
+      (mustEq pattr2 tattr2);
+      (unifyDeclType ptype ttype)
+  | ARRAY(ptype, pattr, psz),
+    ARRAY(ttype, tattr, tsz) ->
+      (mustEq pattr tattr);
+      (unifyDeclType ptype ttype) @
+      (unifyExpr psz tsz)
+  | PTR(pattr, ptype),
+    PTR(tattr, ttype) ->
+      (mustEq pattr tattr);
+      (unifyDeclType ptype ttype)
+  | PROTO(ptype, pformals, pva),
+    PROTO(ttype, tformals, tva) ->
+      (mustEq pva tva);
+      (unifyDeclType ptype ttype) @
+      (unifySingleNames pformals tformals)
+  | _ -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "mismatching decl_types\n"));
+      raise NoMatch
+    )
+end
+
+and unifySingleNames (pat : single_name list) (tgt : single_name list) : binding list =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "unifySingleNames, pat %d, tgt %d\n"
+                                 (List.length pat) (List.length tgt)));
+
+  match pat, tgt with
+  | [], [] -> []
+  | (pspec, pdecl) :: prest,
+    (tspec, tdecl) :: trest ->
+      (unifySpecifiers pspec tspec) @
+      (unifyDeclarator pdecl tdecl) @
+      (unifySingleNames prest trest)
+  | _, _ -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "mismatching single_name lists\n"));
+      raise NoMatch
+    )
+end
+
+and unifyString (pat : string) (tgt : string) : binding list =
+begin
+  (* equal? match with no further ado *)
+  if (pat = tgt) then [] else
+
+  (* is the pattern a variable? *)
+  if (isPatternVar pat) then
+    (* pat is actually "@name(blah)"; extract the 'blah' *)
+    let varname = (extractPatternVar pat) in
+
+    (* when substituted, this name becomes 'tgt' *)
+    if verbose then
+      (trace "patchDebug" (dprintf "found name match for %s\n" varname));
+    [BName(varname, tgt)]
+
+  else (
+    if verbose then
+      (trace "patchDebug" (dprintf "mismatching names: %s and %s\n" pat tgt));
+    raise NoMatch
+  )
+end
+
+and unifyExpr (pat : expression) (tgt : expression) : binding list =
+begin
+  (* if they're equal, that's good enough *)
+  if (pat = tgt) then [] else
+
+  (* shorter name *)
+  let ue = unifyExpr in
+
+  (* because of the equality check above, I can omit some cases *)
+  match pat, tgt with
+  | UNARY(pop, pexpr),
+    UNARY(top, texpr) ->
+      (mustEq pop top);
+      (ue pexpr texpr)
+  | BINARY(pop, pexp1, pexp2),
+    BINARY(top, texp1, texp2) ->
+      (mustEq pop top);
+      (ue pexp1 texp1) @
+      (ue pexp2 texp2)
+  | QUESTION(p1, p2, p3),
+    QUESTION(t1, t2, t3) ->
+      (ue p1 t1) @
+      (ue p2 t2) @
+      (ue p3 t3)
+  | CAST((pspec, ptype), piexpr),
+    CAST((tspec, ttype), tiexpr) ->
+      (mustEq ptype ttype);
+      (unifySpecifiers pspec tspec) @
+      (unifyInitExpr piexpr tiexpr)
+  | CALL(pfunc, pargs),
+    CALL(tfunc, targs) ->
+      (ue pfunc tfunc) @
+      (unifyExprs pargs targs)
+  | COMMA(pexprs),
+    COMMA(texprs) ->
+      (unifyExprs pexprs texprs)
+  | EXPR_SIZEOF(pexpr),
+    EXPR_SIZEOF(texpr) ->
+      (ue pexpr texpr)
+  | TYPE_SIZEOF(pspec, ptype),
+    TYPE_SIZEOF(tspec, ttype) ->
+      (mustEq ptype ttype);
+      (unifySpecifiers pspec tspec)
+  | EXPR_ALIGNOF(pexpr),
+    EXPR_ALIGNOF(texpr) ->
+      (ue pexpr texpr)
+  | TYPE_ALIGNOF(pspec, ptype),
+    TYPE_ALIGNOF(tspec, ttype) ->
+      (mustEq ptype ttype);
+      (unifySpecifiers pspec tspec)
+  | INDEX(parr, pindex),
+    INDEX(tarr, tindex) ->
+      (ue parr tarr) @
+      (ue pindex tindex)
+  | MEMBEROF(pexpr, pfield),
+    MEMBEROF(texpr, tfield) ->
+      (mustEq pfield tfield);
+      (ue pexpr texpr)
+  | MEMBEROFPTR(pexpr, pfield),
+    MEMBEROFPTR(texpr, tfield) ->
+      (mustEq pfield tfield);
+      (ue pexpr texpr)
+  | GNU_BODY(pblock),
+    GNU_BODY(tblock) ->
+      (mustEq pblock tblock);
+      []
+  | EXPR_PATTERN(name), _ ->
+      (* match, and contribute binding *)
+      if verbose then
+        (trace "patchDebug" (dprintf "found expr match for %s\n" name));
+      [BExpr(name, tgt)]
+  | a, b ->
+      if (verbose && traceActive "patchDebug") then (
+        (trace "patchDebug" (dprintf "mismatching expression\n"));
+        (printExpr a);
+        (printExpr b)
+      );
+      raise NoMatch
+end
+
+and unifyInitExpr (pat : init_expression) (tgt : init_expression) : binding list =
+begin
+  (*
+    Cprint.print_init_expression pat;  Cprint.force_new_line ();
+    Cprint.print_init_expression tgt;  Cprint.force_new_line ();
+    Cprint.flush ();
+  *)
+
+  match pat, tgt with
+  | NO_INIT, NO_INIT -> []
+  | SINGLE_INIT(pe), SINGLE_INIT(te) ->
+      (unifyExpr pe te)
+  | COMPOUND_INIT(plist),
+    COMPOUND_INIT(tlist) -> (
+      let rec loop plist tlist =
+        match plist, tlist with
+        | ((pwhat, piexpr) :: prest),
+          ((twhat, tiexpr) :: trest) ->
+            (mustEq pwhat twhat);
+            (unifyInitExpr piexpr tiexpr) @
+            (loop prest trest)
+        | [], [] -> []
+        | _, _ -> (
+            if verbose then
+              (trace "patchDebug" (dprintf "mismatching compound init exprs\n"));
+            raise NoMatch
+          )
+      in
+      (loop plist tlist)
+    )
+  | _,_ -> (
+      if verbose then
+        (trace "patchDebug" (dprintf "mismatching init exprs\n"));
+      raise NoMatch
+    )
+end
+
+and unifyExprs (pat : expression list) (tgt : expression list) : binding list =
+  (unifyList pat tgt unifyExpr)
+
+
+(* given the list of bindings 'b', substitute them into 'd' to yield a new definition *)
+and substDefn (bindings : binding list) (defn : definition) : definition =
+begin
+  if verbose then
+    (trace "patchDebug" (dprintf "substDefn with %d bindings\n" (List.length bindings)));
+  (printDefn defn);
+
+  (* apply the transformation *)
+  match (visitCabsDefinition (new substitutor bindings :> cabsVisitor) defn) with
+  | [d] -> d    (* expect a singleton list *)
+  | _ -> (failwith "didn't get a singleton list where I expected one")
+end
+
+
+(* end of file *)
diff --git a/cil/src/frontc/patch.mli b/cil/src/frontc/patch.mli
new file mode 100644
index 000000000..4f32870e7
--- /dev/null
+++ b/cil/src/frontc/patch.mli
@@ -0,0 +1,42 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+
+(* patch.mli *)
+(* interface for patch.ml *)
+
+val applyPatch : Cabs.file -> Cabs.file -> Cabs.file
diff --git a/cil/src/libmaincil.ml b/cil/src/libmaincil.ml
new file mode 100644
index 000000000..952c01325
--- /dev/null
+++ b/cil/src/libmaincil.ml
@@ -0,0 +1,108 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* libmaincil *)
+(* this is a replacement for maincil.ml, for the case when we're
+ * creating a C-callable library (libcil.a); all it does is register
+ * a couple of functions and initialize CIL *)
+
+
+module E = Errormsg
+
+open Cil
+
+
+(* print a Cil 'file' to stdout *)
+let unparseToStdout (cil : file) : unit =
+begin
+  dumpFile defaultCilPrinter stdout cil
+end;;
+
+(* a visitor to unroll all types - may need to do some magic to keep attributes *)
+class unrollVisitorClass = object (self)
+  inherit nopCilVisitor
+
+  (* variable declaration *)
+  method vvdec (vi : varinfo) : varinfo visitAction = 
+    begin
+      vi.vtype <- unrollTypeDeep vi.vtype;
+      (*ignore (E.log "varinfo for %s in file '%s' line %d byte %d\n" vi.vname vi.vdecl.file vi.vdecl.line vi.vdecl.byte);*)
+      SkipChildren
+    end
+    
+  (* global: need to unroll fields of compinfo *)
+  method vglob (g : global) : global list visitAction =
+    begin
+      match g with
+          GCompTag(ci, loc) as g ->
+            let doFieldinfo (fi : fieldinfo) : unit = 
+              fi.ftype <- unrollTypeDeep fi.ftype 
+            in begin                
+                ignore(List.map doFieldinfo ci.cfields);
+                (*ChangeTo [g]*)
+                SkipChildren
+              end              
+        | _ -> DoChildren
+    end
+end;;
+
+
+let unrollVisitor = new unrollVisitorClass;;
+
+(* open and parse a C file into a Cil 'file', unroll all typedefs *)
+let parseOneFile (fname: string) : file =
+  let ast : file = Frontc.parse fname () in
+    begin
+      visitCilFile unrollVisitor ast;
+      ast
+    end
+;;
+
+let getDummyTypes () : typ * typ =
+  ( TPtr(TVoid [], []), TInt(IInt, []) )
+;;
+
+(* register some functions - these may be called from C code *)
+Callback.register "cil_parse" parseOneFile;
+Callback.register "cil_unparse" unparseToStdout;
+(* Callback.register "unroll_type_deep" unrollTypeDeep; *)
+Callback.register "get_dummy_types" getDummyTypes;
+
+(* initalize CIL *)
+initCIL ();
+
+
diff --git a/cil/src/machdep.c b/cil/src/machdep.c
new file mode 100644
index 000000000..113486538
--- /dev/null
+++ b/cil/src/machdep.c
@@ -0,0 +1,220 @@
+/*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "../config.h"
+
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#ifdef _GNUCC
+#define LONGLONG long long
+#define CONST_STRING_LITERALS "true"
+#define VERSION __VERSION__
+#define VERSION_MAJOR __GNUC__
+#define VERSION_MINOR __GNUC_MINOR__
+#endif
+
+#ifdef _MSVC
+#define LONGLONG __int64
+#define CONST_STRING_LITERALS "false"
+#define VERSION "0"
+#define VERSION_MAJOR 0
+#define VERSION_MINOR 0
+#endif
+
+/* The type for the machine dependency structure is generated from the
+   Makefile */
+int main() {
+  fprintf(stderr, "Generating machine dependency information for CIL\n");
+
+  printf("(* Generated by code in %s *)\n", __FILE__);
+  printf("\t version_major    = %d;\n", VERSION_MAJOR);
+  printf("\t version_minor    = %d;\n", VERSION_MINOR);
+  printf("\t version          = \"%s\";\n", VERSION);
+  // Size of certain types
+  printf("\t sizeof_short     = %d;\n", sizeof(short));
+  printf("\t sizeof_int       = %d;\n", sizeof(int));
+  printf("\t sizeof_long      = %d;\n", sizeof(long));
+  printf("\t sizeof_longlong  = %d;\n", sizeof(LONGLONG));
+  printf("\t sizeof_ptr       = %d;\n", sizeof(int *));
+  printf("\t sizeof_enum      = %d;\n", sizeof(enum e { ONE, TWO }));
+  printf("\t sizeof_float     = %d;\n", sizeof(float));
+  printf("\t sizeof_double    = %d;\n", sizeof(double));
+  printf("\t sizeof_longdouble  = %d;\n", sizeof(long double));
+  printf("\t sizeof_sizeof    = %d;\n", sizeof(sizeof(int)));
+  printf("\t sizeof_wchar     = %d;\n", sizeof(wchar_t));
+  printf("\t sizeof_void      = %d;\n", sizeof(void));
+  printf("\t sizeof_fun       = %d;\n",
+#ifdef __GNUC__
+         sizeof(main)
+#else
+         0
+#endif
+           );
+
+  // The alignment of a short
+  {
+    struct shortstruct {
+      char c;
+      short s;
+    };
+    printf("\t alignof_short = %d;\n",
+           (int)(&((struct shortstruct*)0)->s));
+  }
+
+  // The alignment of an int
+  {
+    struct intstruct {
+      char c;
+      int i;
+    };
+    printf("\t alignof_int = %d;\n",
+           (int)(&((struct intstruct*)0)->i));
+  }
+  
+  // The alignment of a long
+  {
+    struct longstruct {
+      char c;
+      long l;
+    };
+    printf("\t alignof_long = %d;\n",
+           (int)(&((struct longstruct*)0)->l));
+  }
+
+  // The alignment of long long
+  {
+    struct longlong {
+      char c;
+      LONGLONG ll;
+    };
+    printf("\t alignof_longlong = %d;\n",
+           (int)(&((struct longlong*)0)->ll));
+  }
+
+  // The alignment of a ptr
+  {
+    struct ptrstruct {
+      char c; 
+      int * p;
+    };
+    printf("\t alignof_ptr = %d;\n",
+           (int)(&((struct ptrstruct*)0)->p));
+  }
+
+  // The alignment of an enum
+  {
+    struct enumstruct {
+      char c; 
+      enum e2 { THREE, FOUR, FIVE } e;
+    };
+    printf("\t alignof_enum = %d;\n",
+           (int)(&((struct enumstruct*)0)->e));
+  }
+
+  // The alignment of a float
+  {
+    struct floatstruct {
+      char c;
+      float f;
+    };
+    printf("\t alignof_float = %d;\n",
+           (int)(&((struct floatstruct*)0)->f));
+  }
+  
+  // The alignment of double
+  {
+    struct s1 {
+      char c;
+      double d;
+    };
+    printf("\t alignof_double = %d;\n",
+           (int)(&((struct s1*)0)->d));
+  }    
+
+  // The alignment of long  double
+  {
+    struct s1 {
+      char c;
+      long double ld;
+    };
+    printf("\t alignof_longdouble = %d;\n",
+           (int)(&((struct s1*)0)->ld));
+  }    
+
+  printf("\t alignof_str = %d;\n",
+#ifdef __GNUC__
+         __alignof("a string")
+#else
+         0
+#endif
+         );
+
+  printf("\t alignof_fun = %d;\n",
+#ifdef __GNUC__
+         __alignof(main)
+#else
+         0
+#endif
+         );
+
+  // Whether char is unsigned
+  printf("\t char_is_unsigned = %s;\n", 
+         ((char)0xff) > 0 ? "true" : "false");
+
+
+  // Whether string literals contain constant characters
+  puts("\t const_string_literals = " CONST_STRING_LITERALS ";");
+
+
+  // endianity
+  {
+    int e = 0x11223344;
+    printf("\t little_endian = %s;\n",
+           (0x44 == *(char*)&e) ? "true" :
+           ((0x11 == *(char*)&e) ? "false" : (exit(1), "false")));
+  }
+
+  exit(0);
+} 
diff --git a/cil/src/main.ml b/cil/src/main.ml
new file mode 100644
index 000000000..bbdb7309c
--- /dev/null
+++ b/cil/src/main.ml
@@ -0,0 +1,288 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* maincil *)
+(* this module is the program entry point for the 'cilly' program, *)
+(* which reads a C program file, parses it, translates it to the CIL *)
+(* intermediate language, and then renders that back into C *)
+
+
+module F = Frontc
+module C = Cil
+module CK = Check
+module E = Errormsg
+open Pretty
+open Trace
+
+type outfile = 
+    { fname: string;
+      fchan: out_channel } 
+let outChannel : outfile option ref = ref None
+let mergedChannel : outfile option ref = ref None
+
+
+let parseOneFile (fname: string) : C.file =
+  (* PARSE and convert to CIL *)
+  if !Cilutil.printStages then ignore (E.log "Parsing %s\n" fname);
+  let cil = F.parse fname () in
+  
+  if (not !Epicenter.doEpicenter) then (
+    (* sm: remove unused temps to cut down on gcc warnings  *)
+    (* (Stats.time "usedVar" Rmtmps.removeUnusedTemps cil);  *)
+    (trace "sm" (dprintf "removing unused temporaries\n"));
+    (Rmtmps.removeUnusedTemps cil)
+  );
+  cil
+
+(** These are the statically-configured features. To these we append the 
+  * features defined in Feature_config.ml (from Makefile) *)
+  
+let makeCFGFeature : C.featureDescr = 
+  { C.fd_name = "makeCFG";
+    C.fd_enabled = Cilutil.makeCFG;
+    C.fd_description = "make the program look more like a CFG" ;
+    C.fd_extraopt = [];
+    C.fd_doit = (fun f -> 
+      ignore (Partial.calls_end_basic_blocks f) ; 
+      ignore (Partial.globally_unique_vids f) ; 
+      Cil.iterGlobals f (fun glob -> match glob with
+        Cil.GFun(fd,_) -> Cil.prepareCFG fd ;
+                      (* jc: blockinggraph depends on this "true" arg *)
+                      ignore (Cil.computeCFGInfo fd true)
+      | _ -> ()) 
+    );
+    C.fd_post_check = true;
+  } 
+
+let features : C.featureDescr list = 
+  [ Epicenter.feature;
+    Simplify.feature;
+    Canonicalize.feature;
+    Callgraph.feature;
+    Logwrites.feature;
+    Heapify.feature1;
+    Heapify.feature2;
+    Oneret.feature;
+    makeCFGFeature; (* ww: make CFG *must* come before Partial *) 
+    Partial.feature;
+    Simplemem.feature;
+    Sfi.feature;
+    Dataslicing.feature;
+    Logcalls.feature;
+    Ptranal.feature;
+    Liveness.feature;
+  ] 
+  @ Feature_config.features 
+
+let rec processOneFile (cil: C.file) =
+  begin
+
+    if !Cilutil.doCheck then begin
+      ignore (E.log "First CIL check\n");
+      ignore (CK.checkFile [] cil);
+    end;
+
+    (* Scan all the features configured from the Makefile and, if they are 
+     * enabled then run them on the current file *)
+    List.iter 
+      (fun fdesc -> 
+        if ! (fdesc.C.fd_enabled) then begin
+          if !E.verboseFlag then 
+            ignore (E.log "Running CIL feature %s (%s)\n" 
+                      fdesc.C.fd_name fdesc.C.fd_description);
+          (* Run the feature, and see how long it takes. *)
+          Stats.time fdesc.C.fd_name
+            fdesc.C.fd_doit cil;
+          (* See if we need to do some checking *)
+          if !Cilutil.doCheck && fdesc.C.fd_post_check then begin
+            ignore (E.log "CIL check after %s\n" fdesc.C.fd_name);
+            ignore (CK.checkFile [] cil);
+          end
+        end)
+      features;
+
+
+    (match !outChannel with
+      None -> ()
+    | Some c -> Stats.time "printCIL" 
+	(C.dumpFile (!C.printerForMaincil) c.fchan c.fname) cil);
+
+    if !E.hadErrors then
+      E.s (E.error "Error while processing file; see above for details.");
+
+  end
+        
+(***** MAIN *****)  
+let rec theMain () =
+  let usageMsg = "Usage: cilly [options] source-files" in
+  (* Processign of output file arguments *)
+  let openFile (what: string) (takeit: outfile -> unit) (fl: string) = 
+    if !E.verboseFlag then
+      ignore (Printf.printf "Setting %s to %s\n" what fl);
+    (try takeit { fname = fl;
+                  fchan = open_out fl }
+    with _ ->
+      raise (Arg.Bad ("Cannot open " ^ what ^ " file " ^ fl)))
+  in
+  let outName = ref "" in
+  (* sm: enabling this by default, since I think usually we
+   * want 'cilly' transformations to preserve annotations; I
+   * can easily add a command-line flag if someone sometimes
+   * wants these suppressed *)
+  C.print_CIL_Input := true;
+
+  (*********** COMMAND LINE ARGUMENTS *****************)
+  (* Construct the arguments for the features configured from the Makefile *)
+  let blankLine = ("", Arg.Unit (fun _ -> ()), "") in
+  let featureArgs = 
+    List.fold_right
+      (fun fdesc acc ->
+	if !(fdesc.C.fd_enabled) then
+          (* The feature is enabled by default *)
+          blankLine ::
+          ("--dont" ^ fdesc.C.fd_name, Arg.Clear(fdesc.C.fd_enabled), 
+           " Disable " ^ fdesc.C.fd_description) ::
+          fdesc.C.fd_extraopt @ acc
+	else
+          (* Disabled by default *)
+          blankLine ::
+          ("--do" ^ fdesc.C.fd_name, Arg.Set(fdesc.C.fd_enabled), 
+           " Enable " ^ fdesc.C.fd_description) ::
+          fdesc.C.fd_extraopt @ acc
+      )
+      features
+      [blankLine]
+  in
+  let featureArgs = 
+    ("", Arg.Unit (fun () -> ()), "\n\t\tCIL Features") :: featureArgs 
+  in
+    
+  let argDescr = Ciloptions.options @ 
+        [ 
+          "--out", Arg.String (openFile "output" 
+                                 (fun oc -> outChannel := Some oc)),
+              "the name of the output CIL file.  The cilly script sets this for you.";
+          "--mergedout", Arg.String (openFile "merged output"
+                                       (fun oc -> mergedChannel := Some oc)),
+              "specify the name of the merged file";
+        ]
+        @ F.args @ featureArgs in
+  begin
+    (* this point in the code is the program entry point *)
+
+    Stats.reset (Stats.has_performance_counters ());
+
+    (* parse the command-line arguments *)
+    Arg.parse argDescr Ciloptions.recordFile usageMsg;
+    Cil.initCIL ();
+
+    Ciloptions.fileNames := List.rev !Ciloptions.fileNames;
+
+    if !Cilutil.testcil <> "" then begin
+      Testcil.doit !Cilutil.testcil
+    end else
+      (* parse each of the files named on the command line, to CIL *)
+      let files = List.map parseOneFile !Ciloptions.fileNames in
+
+      (* if there's more than one source file, merge them together; *)
+      (* now we have just one CIL "file" to deal with *)
+      let one =
+        match files with
+          [one] -> one
+        | [] -> E.s (E.error "No arguments for CIL\n")
+        | _ ->
+            let merged =
+              Stats.time "merge" (Mergecil.merge files)
+                (if !outName = "" then "stdout" else !outName) in
+            if !E.hadErrors then
+              E.s (E.error "There were errors during merging\n");
+            (* See if we must save the merged file *)
+            (match !mergedChannel with
+              None -> ()
+            | Some mc -> begin
+                let oldpci = !C.print_CIL_Input in
+                C.print_CIL_Input := true;
+                Stats.time "printMerged"
+                  (C.dumpFile !C.printerForMaincil mc.fchan mc.fname) merged;
+                C.print_CIL_Input := oldpci
+            end);
+            merged
+      in
+
+      if !E.hadErrors then
+        E.s (E.error "Cabs2cil had some errors");
+
+      (* process the CIL file (merged if necessary) *)
+      processOneFile one
+  end
+;;
+                                        (* Define a wrapper for main to 
+                                         * intercept the exit *)
+let failed = ref false 
+
+let cleanup () = 
+  if !E.verboseFlag || !Cilutil.printStats then
+    Stats.print stderr "Timings:\n";
+  if !E.logChannel != stderr then 
+    close_out (! E.logChannel);  
+  (match ! outChannel with Some c -> close_out c.fchan | _ -> ())
+
+
+(* Without this handler, cilly.asm.exe will quit silently with return code 0
+   when a segfault happens. *)
+let handleSEGV code =
+  if !Cil.currentLoc == Cil.locUnknown then
+    E.log  "**** Segmentation fault (possibly a stack overflow)\n"
+  else begin
+    E.log ("**** Segmentation fault (possibly a stack overflow) "^^
+           "while processing %a\n")
+      Cil.d_loc !Cil.currentLoc
+  end;
+  exit code
+
+let _ = Sys.set_signal Sys.sigsegv (Sys.Signal_handle handleSEGV);
+
+;;
+
+begin 
+  try 
+    theMain (); 
+  with F.CabsOnly -> (* this is OK *) ()
+end;
+cleanup ();
+exit (if !failed then 1 else 0)
+
diff --git a/cil/src/mergecil.ml b/cil/src/mergecil.ml
new file mode 100644
index 000000000..dee519edc
--- /dev/null
+++ b/cil/src/mergecil.ml
@@ -0,0 +1,1770 @@
+(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
+
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+ 
+(* mergecil.ml *)
+(* This module is responsible for merging multiple CIL source trees into
+ * a single, coherent CIL tree which contains the union of all the
+ * definitions in the source files.  It effectively acts like a linker,
+ * but at the source code level instead of the object code level. *)
+
+
+module P = Pretty
+open Cil
+module E = Errormsg
+module H = Hashtbl
+module A = Alpha
+open Trace
+
+let debugMerge = false
+let debugInlines = false
+
+let ignore_merge_conflicts = ref false
+
+(* Try to merge structure with the same name. However, do not complain if 
+ * they are not the same *)
+let mergeSynonyms = true
+
+
+(** Whether to use path compression *)
+let usePathCompression = false
+
+(* Try to merge definitions of inline functions. They can appear in multiple 
+ * files and we would like them all to be the same. This can slow down the 
+ * merger an order of magnitude !!! *)
+let mergeInlines = true
+
+let mergeInlinesRepeat = mergeInlines && true
+
+let mergeInlinesWithAlphaConvert = mergeInlines && true
+
+(* when true, merge duplicate definitions of externally-visible functions;
+ * this uses a mechanism which is faster than the one for inline functions,
+ * but only probabilistically accurate *)
+let mergeGlobals = true
+
+
+(* Return true if 's' starts with the prefix 'p' *)
+let prefix p s = 
+  let lp = String.length p in
+  let ls = String.length s in
+  lp <= ls && String.sub s 0 lp = p
+
+
+
+(* A name is identified by the index of the file in which it occurs (starting 
+ * at 0 with the first file) and by the actual name. We'll keep name spaces 
+ * separate *)
+
+(* We define a data structure for the equivalence classes *)
+type 'a node = 
+    { nname: string;   (* The actual name *)
+      nfidx: int;      (* The file index *)
+      ndata: 'a;       (* Data associated with the node *)
+      mutable nloc: (location * int) option;  
+      (* location where defined and index within the file of the definition. 
+       * If None then it means that this node actually DOES NOT appear in the 
+       * given file. In rare occasions we need to talk in a given file about 
+       * types that are not defined in that file. This happens with undefined 
+       * structures but also due to cross-contamination of types in a few of 
+       * the cases of combineType (see the definition of combineTypes). We 
+       * try never to choose as representatives nodes without a definition. 
+       * We also choose as representative the one that appears earliest *)
+      mutable nrep: 'a node;  (* A pointer to another node in its class (one 
+                               * closer to the representative). The nrep node 
+                               * is always in an earlier file, except for the 
+                               * case where a name is undefined in one file 
+                               * and defined in a later file. If this pointer 
+                               * points to the node itself then this is the 
+                               * representative.  *)
+      mutable nmergedSyns: bool (* Whether we have merged the synonyms for 
+                                 * the node of this name *)
+    } 
+
+let d_nloc () (lo: (location * int) option) : P.doc = 
+  match lo with 
+    None -> P.text "None"
+  | Some (l, idx) -> P.dprintf "Some(%d at %a)" idx d_loc l
+
+(* Make a node with a self loop. This is quite tricky. *)
+let mkSelfNode (eq: (int * string, 'a node) H.t) (* The equivalence table *)
+               (syn: (string, 'a node) H.t) (* The synonyms table *)
+               (fidx: int) (name: string) (data: 'a) 
+               (l: (location * int) option) = 
+  let res = { nname = name; nfidx = fidx; ndata = data; nloc = l;
+              nrep  = Obj.magic 1; nmergedSyns = false; } in
+  res.nrep <- res; (* Make the self cycle *)
+  H.add eq (fidx, name) res; (* Add it to the proper table *)
+  if mergeSynonyms && not (prefix "__anon" name) then 
+    H.add syn name res; 
+  res
+
+let debugFind = false
+
+(* Find the representative with or without path compression *)
+let rec find (pathcomp: bool) (nd: 'a node) = 
+  if debugFind then
+    ignore (E.log "  find %s(%d)\n" nd.nname nd.nfidx);
+  if nd.nrep == nd then begin
+    if debugFind then
+      ignore (E.log "  = %s(%d)\n" nd.nname nd.nfidx);
+    nd
+  end else begin
+    let res = find pathcomp nd.nrep in
+    if usePathCompression && pathcomp && nd.nrep != res then 
+      nd.nrep <- res; (* Compress the paths *)
+    res
+  end
+
+
+(* Union two nodes and return the new representative. We prefer as the 
+ * representative a node defined earlier. We try not to use as 
+ * representatives nodes that are not defined in their files. We return a 
+ * function for undoing the union. Make sure that between the union and the 
+ * undo you do not do path compression *)
+let union (nd1: 'a node) (nd2: 'a node) : 'a node * (unit -> unit) = 
+  (* Move to the representatives *)
+  let nd1 = find true nd1 in
+  let nd2 = find true nd2 in 
+  if nd1 == nd2 then begin
+    (* It can happen that we are trying to union two nodes that are already 
+     * equivalent. This is because between the time we check that two nodes 
+     * are not already equivalent and the time we invoke the union operation 
+     * we check type isomorphism which might change the equivalence classes *)
+(*
+    ignore (warn "unioning already equivalent nodes for %s(%d)" 
+              nd1.nname nd1.nfidx);
+*)
+    nd1, fun x -> x
+  end else begin
+    let rep, norep = (* Choose the representative *)
+      if (nd1.nloc != None) =  (nd2.nloc != None) then 
+        (* They have the same defined status. Choose the earliest *)
+        if nd1.nfidx < nd2.nfidx then nd1, nd2 
+        else if nd1.nfidx > nd2.nfidx then nd2, nd1
+        else (* In the same file. Choose the one with the earliest index *) begin
+          match nd1.nloc, nd2.nloc with 
+            Some (_, didx1), Some (_, didx2) -> 
+              if didx1 < didx2 then nd1, nd2 else
+              if didx1 > didx2 then nd2, nd1 
+              else begin
+              ignore (warn 
+                        "Merging two elements (%s and %s) in the same file (%d) with the same idx (%d) within the file" 
+                        nd1.nname nd2.nname nd1.nfidx didx1);
+                nd1, nd2
+              end
+          | _, _ -> (* both none. Does not matter which one we choose. Should 
+              * not happen though. *)
+              (* sm: it does happen quite a bit when, e.g. merging STLport with
+               * some client source; I'm disabling the warning since it supposedly
+               * is harmless anyway, so is useless noise *)
+              (* sm: re-enabling on claim it now will probably not happen *)
+              ignore (warn "Merging two undefined elements in the same file: %s and %s\n" nd1.nname nd2.nname);
+              nd1, nd2
+        end
+      else (* One is defined, the other is not. Choose the defined one *)
+        if nd1.nloc != None then nd1, nd2 else nd2, nd1
+    in
+    let oldrep = norep.nrep in
+    norep.nrep <- rep; 
+    rep, (fun () -> norep.nrep <- oldrep)
+  end
+(*      
+let union (nd1: 'a node) (nd2: 'a node) : 'a node * (unit -> unit) = 
+  if nd1 == nd2 && nd1.nname = "!!!intEnumInfo!!!" then begin
+    ignore (warn "unioning two identical nodes for %s(%d)" 
+              nd1.nname nd1.nfidx);
+    nd1, fun x -> x
+  end else
+    union nd1 nd2
+*)
+(* Find the representative for a node and compress the paths in the process *)
+let findReplacement
+    (pathcomp: bool)
+    (eq: (int * string, 'a node) H.t)
+    (fidx: int)
+    (name: string) : ('a * int) option =
+  if debugFind then 
+    ignore (E.log "findReplacement for %s(%d)\n" name fidx);
+  try
+    let nd = H.find eq (fidx, name) in
+    if nd.nrep == nd then begin
+      if debugFind then 
+        ignore (E.log "  is a representative\n");
+      None (* No replacement if this is the representative of its class *)
+    end else 
+      let rep = find pathcomp nd in
+      if rep != rep.nrep then 
+        E.s (bug "find does not return the representative\n");
+      if debugFind then 
+        ignore (E.log "  RES = %s(%d)\n" rep.nname rep.nfidx);
+      Some (rep.ndata, rep.nfidx)
+  with Not_found -> begin
+    if debugFind then 
+      ignore (E.log "  not found in the map\n");
+    None
+  end
+
+(* Make a node if one does not already exist. Otherwise return the 
+ * representative *)
+let getNode    (eq: (int * string, 'a node) H.t)
+               (syn: (string, 'a node) H.t)
+               (fidx: int) (name: string) (data: 'a) 
+               (l: (location * int) option) = 
+  let debugGetNode = false in
+  if debugGetNode then 
+    ignore (E.log "getNode(%s(%d), %a)\n"
+              name fidx d_nloc l);
+  try
+    let res = H.find eq (fidx, name) in
+
+    (match res.nloc, l with 
+      (* Maybe we have a better location now *)
+      None, Some _ -> res.nloc <- l
+    | Some (old_l, old_idx), Some (l, idx) -> 
+        if old_idx != idx then 
+          ignore (warn "Duplicate definition of node %s(%d) at indices %d(%a) and %d(%a)"
+                    name fidx old_idx d_loc old_l idx d_loc l)
+        else
+          ()
+
+    | _, _ -> ());
+    if debugGetNode then 
+      ignore (E.log "  node already found\n");
+    find false res (* No path compression *)
+  with Not_found -> begin
+    let res = mkSelfNode eq syn fidx name data l in
+    if debugGetNode then 
+      ignore (E.log "   made a new one\n");
+    res
+  end
+
+
+
+(* Dump a graph *)
+let dumpGraph (what: string) (eq: (int * string, 'a node) H.t) : unit = 
+  ignore (E.log "Equivalence graph for %s is:\n" what);
+  H.iter (fun (fidx, name) nd -> 
+    ignore (E.log "  %s(%d) %s-> " 
+              name fidx (if nd.nloc = None then "(undef)" else ""));
+    if nd.nrep == nd then 
+      ignore (E.log "*\n")
+    else
+      ignore (E.log " %s(%d)\n" nd.nrep.nname nd.nrep.nfidx ))
+    eq
+
+
+
+
+(* For each name space we define a set of equivalence classes *)
+let vEq: (int * string, varinfo node) H.t = H.create 111 (* Vars *)
+let sEq: (int * string, compinfo node) H.t = H.create 111 (* Struct + union *)
+let eEq: (int * string, enuminfo node) H.t = H.create 111 (* Enums *)
+let tEq: (int * string, typeinfo node) H.t = H.create 111 (* Type names*)
+let iEq: (int * string, varinfo node) H.t = H.create 111 (* Inlines *)
+        
+(* Sometimes we want to merge synonyms. We keep some tables indexed by names. 
+ * Each name is mapped to multiple exntries *)
+let vSyn: (string, varinfo node) H.t = H.create 111 (* Not actually used *)
+let iSyn: (string, varinfo node) H.t = H.create 111 (* Inlines *)
+let sSyn: (string, compinfo node) H.t = H.create 111
+let eSyn: (string, enuminfo node) H.t = H.create 111
+let tSyn: (string, typeinfo node) H.t = H.create 111
+
+(** A global environment for variables. Put in here only the non-static 
+  * variables, indexed by their name.  *)
+let vEnv : (string, varinfo node) H.t = H.create 111
+
+
+(* A set of inline functions indexed by their printout ! *)
+let inlineBodies : (P.doc, varinfo node) H.t = H.create 111
+
+(** A number of alpha conversion tables. We ought to keep one table for each 
+ * name space. Unfortunately, because of the way the C lexer works, type 
+ * names must be different from variable names!! We one alpha table both for 
+ * variables and types. *)
+let vtAlpha : (string, location A.alphaTableData ref) H.t 
+    = H.create 57 (* Variables and 
+                                                             * types *)
+let sAlpha : (string, location A.alphaTableData ref) H.t 
+    = H.create 57 (* Structures and 
+                                                             * unions have 
+                                                             * the same name 
+                                                             * space *)
+let eAlpha : (string, location A.alphaTableData ref) H.t 
+    = H.create 57 (* Enumerations *)
+
+
+(** Keep track, for all global function definitions, of the names of the formal 
+ * arguments. They might change during merging of function types if the 
+ * prototype occurs after the function definition and uses different names. 
+ * We'll restore the names at the end *)
+let formalNames: (int * string, string list) H.t = H.create 111
+
+
+(* Accumulate here the globals in the merged file *)
+let theFileTypes = ref []
+let theFile      = ref []
+
+(* add 'g' to the merged file *)
+let mergePushGlobal (g: global) : unit = 
+  pushGlobal g ~types:theFileTypes ~variables:theFile
+    
+let mergePushGlobals gl = List.iter mergePushGlobal gl
+
+
+(* The index of the current file being scanned *)
+let currentFidx = ref 0
+
+let currentDeclIdx = ref 0 (* The index of the definition in a file. This is 
+                            * maintained both in pass 1 and in pass 2. Make 
+                            * sure you count the same things in both passes. *)
+(* Keep here the file names *)
+let fileNames : (int, string) H.t = H.create 113
+
+
+
+(* Remember the composite types that we have already declared *)
+let emittedCompDecls: (string, bool) H.t = H.create 113
+(* Remember the variables also *)
+let emittedVarDecls: (string, bool) H.t = H.create 113
+
+(* also keep track of externally-visible function definitions;
+ * name maps to declaration, location, and semantic checksum *)
+let emittedFunDefn: (string, fundec * location * int) H.t = H.create 113
+(* and same for variable definitions; name maps to GVar fields *)
+let emittedVarDefn: (string, varinfo * init option * location) H.t = H.create 113
+
+(** A mapping from the new names to the original names. Used in PASS2 when we 
+ * rename variables. *)
+let originalVarNames: (string, string) H.t = H.create 113
+
+(* Initialize the module *)
+let init () = 
+  H.clear sAlpha;
+  H.clear eAlpha;
+  H.clear vtAlpha;
+
+  H.clear vEnv;
+
+  H.clear vEq;
+  H.clear sEq;
+  H.clear eEq;
+  H.clear tEq;
+  H.clear iEq;
+
+  H.clear vSyn;
+  H.clear sSyn;
+  H.clear eSyn;
+  H.clear tSyn;
+  H.clear iSyn;
+
+  theFile := [];
+  theFileTypes := [];
+
+  H.clear formalNames;
+  H.clear inlineBodies;
+
+  currentFidx := 0;
+  currentDeclIdx := 0;
+  H.clear fileNames;
+
+  H.clear emittedVarDecls;
+  H.clear emittedCompDecls;
+  
+  H.clear emittedFunDefn;
+  H.clear emittedVarDefn;
+
+  H.clear originalVarNames
+
+
+(* Some enumerations have to be turned into an integer. We implement this by
+ * introducing a special enumeration type which we'll recognize later to be
+ * an integer *)
+let intEnumInfo =
+  { ename = "!!!intEnumInfo!!!"; (* This is otherwise invalid *)
+    eitems = [];
+    eattr = [];
+    ereferenced = false;
+  }
+(* And add it to the equivalence graph *)
+let intEnumInfoNode =
+  getNode eEq eSyn 0 intEnumInfo.ename intEnumInfo
+                     (Some (locUnknown, 0))
+
+    (* Combine the types. Raises the Failure exception with an error message.
+     * isdef says whether the new type is for a definition *)
+type combineWhat =
+    CombineFundef (* The new definition is for a function definition. The old
+                   * is for a prototype *)
+  | CombineFunarg (* Comparing a function argument type with an old prototype
+                   * arg *)
+  | CombineFunret (* Comparing the return of a function with that from an old
+                   * prototype *)
+  | CombineOther
+
+
+let rec combineTypes (what: combineWhat) 
+                     (oldfidx: int)  (oldt: typ) 
+                     (fidx: int) (t: typ)  : typ = 
+  match oldt, t with
+  | TVoid olda, TVoid a -> TVoid (addAttributes olda a)
+  | TInt (oldik, olda), TInt (ik, a) -> 
+      let combineIK oldk k = 
+        if oldk == k then oldk else
+        (* GCC allows a function definition to have a more precise integer 
+         * type than a prototype that says "int" *)
+        if not !msvcMode && oldk = IInt && bitsSizeOf t <= 32 
+           && (what = CombineFunarg || what = CombineFunret) 
+        then 
+          k
+        else (
+          let msg =
+            P.sprint ~width:80
+              (P.dprintf
+                 "(different integer types %a and %a)"
+                 d_type oldt d_type t) in
+          raise (Failure msg)
+        )
+      in
+      TInt (combineIK oldik ik, addAttributes olda a)
+
+  | TFloat (oldfk, olda), TFloat (fk, a) -> 
+      let combineFK oldk k = 
+        if oldk == k then oldk else
+        (* GCC allows a function definition to have a more precise integer 
+         * type than a prototype that says "double" *)
+        if not !msvcMode && oldk = FDouble && k = FFloat  
+           && (what = CombineFunarg || what = CombineFunret) 
+        then 
+          k
+        else
+          raise (Failure "(different floating point types)")
+      in
+      TFloat (combineFK oldfk fk, addAttributes olda a)
+
+  | TEnum (oldei, olda), TEnum (ei, a) ->
+      (* Matching enumerations always succeeds. But sometimes it maps both 
+       * enumerations to integers *)
+      matchEnumInfo oldfidx oldei fidx ei;
+      TEnum (oldei, addAttributes olda a) 
+
+
+        (* Strange one. But seems to be handled by GCC *)
+  | TEnum (oldei, olda) , TInt(IInt, a) -> TEnum(oldei, 
+                                                 addAttributes olda a)
+
+        (* Strange one. But seems to be handled by GCC. Warning. Here we are 
+         * leaking types from new to old  *)
+  | TInt(IInt, olda), TEnum (ei, a) -> TEnum(ei, addAttributes olda a)
+        
+  | TComp (oldci, olda) , TComp (ci, a) ->
+      matchCompInfo oldfidx oldci fidx ci;
+      (* If we get here we were successful *)
+      TComp (oldci, addAttributes olda a) 
+
+  | TArray (oldbt, oldsz, olda), TArray (bt, sz, a) -> 
+      let combbt = combineTypes CombineOther oldfidx oldbt fidx bt in
+      let combinesz = 
+        match oldsz, sz with
+          None, Some _ -> sz
+        | Some _, None -> oldsz
+        | None, None -> oldsz
+        | Some oldsz', Some sz' ->
+            let samesz = 
+              match constFold true oldsz', constFold true sz' with 
+                Const(CInt64(oldi, _, _)), Const(CInt64(i, _, _)) -> oldi = i
+              | _, _ -> false
+            in
+            if samesz then oldsz else
+            raise (Failure "(different array sizes)")
+      in
+      TArray (combbt, combinesz, addAttributes olda a)
+        
+  | TPtr (oldbt, olda), TPtr (bt, a) -> 
+      TPtr (combineTypes CombineOther oldfidx oldbt fidx bt, 
+            addAttributes olda a)
+
+        (* WARNING: In this case we are leaking types from new to old !! *)
+  | TFun (_, _, _, [Attr("missingproto",_)]), TFun _ -> t
+
+
+  | TFun _, TFun (_, _, _, [Attr("missingproto",_)]) -> oldt
+        
+  | TFun (oldrt, oldargs, oldva, olda), TFun (rt, args, va, a) ->
+      let newrt = 
+        combineTypes 
+          (if what = CombineFundef then CombineFunret else CombineOther) 
+          oldfidx oldrt fidx rt 
+      in
+      if oldva != va then 
+        raise (Failure "(diferent vararg specifiers)");
+      (* If one does not have arguments, believe the one with the 
+      * arguments *)
+      let newargs = 
+        if oldargs = None then args else
+        if args = None then oldargs else
+        let oldargslist = argsToList oldargs in
+        let argslist = argsToList args in
+        if List.length oldargslist <> List.length argslist then 
+          raise (Failure "(different number of arguments)")
+        else begin
+          (* Go over the arguments and update the old ones with the 
+          * adjusted types *)
+          Some 
+            (List.map2 
+               (fun (on, ot, oa) (an, at, aa) -> 
+                 let n = if an <> "" then an else on in
+                 let t = 
+                   combineTypes 
+                     (if what = CombineFundef then 
+                       CombineFunarg else CombineOther) 
+                     oldfidx ot fidx at
+                 in
+                 let a = addAttributes oa aa in
+                 (n, t, a))
+               oldargslist argslist)
+        end
+      in
+      TFun (newrt, newargs, oldva, addAttributes olda a)
+        
+  | TBuiltin_va_list olda, TBuiltin_va_list a -> 
+      TBuiltin_va_list (addAttributes olda a)
+
+  | TNamed (oldt, olda), TNamed (t, a) -> 
+      matchTypeInfo oldfidx oldt fidx t;
+      (* If we get here we were able to match *)
+      TNamed(oldt, addAttributes olda a) 
+        
+        (* Unroll first the new type *)
+  | _, TNamed (t, a) -> 
+      let res = combineTypes what oldfidx oldt fidx t.ttype in
+      typeAddAttributes a res
+        
+        (* And unroll the old type as well if necessary *)
+  | TNamed (oldt, a), _ -> 
+      let res = combineTypes what oldfidx oldt.ttype fidx t in
+      typeAddAttributes a res
+        
+  | _ -> (
+      (* raise (Failure "(different type constructors)") *)
+      let msg:string = (P.sprint 1000 (P.dprintf "(different type constructors: %a vs. %a)"
+                                                 d_type oldt  d_type t)) in
+      raise (Failure msg)
+    )                                       
+
+
+(* Match two compinfos and throw a Failure if they do not match *)
+and matchCompInfo (oldfidx: int) (oldci: compinfo) 
+                     (fidx: int)    (ci: compinfo) : unit = 
+  if oldci.cstruct <> ci.cstruct then 
+    raise (Failure "(different struct/union types)");
+  (* See if we have a mapping already *)
+  (* Make the nodes if not already made. Actually return the 
+  * representatives *)
+  let oldcinode = getNode sEq sSyn oldfidx oldci.cname oldci None in
+  let    cinode = getNode sEq sSyn    fidx    ci.cname    ci None in 
+  if oldcinode == cinode then (* We already know they are the same *)
+        ()
+  else begin
+    (* Replace with the representative data *)
+    let oldci = oldcinode.ndata in
+    let oldfidx = oldcinode.nfidx in
+    let ci = cinode.ndata in
+    let fidx = cinode.nfidx in
+    
+    let old_len = List.length oldci.cfields in
+    let len = List.length ci.cfields in
+    (* It is easy to catch here the case when the new structure is undefined 
+     * and the old one was defined. We just reuse the old *)
+    (* More complicated is the case when the old one is not defined but the 
+     * new one is. We still reuse the old one and we'll take care of defining 
+     * it later with the new fields. 
+     * GN: 7/10/04, I could not find when is "later", so I added it below *)
+    if len <> 0 && old_len <> 0 && old_len <> len then (
+      let curLoc = !currentLoc in     (* d_global blows this away.. *)
+      (trace "merge" (P.dprintf "different # of fields\n%d: %a\n%d: %a\n"
+                                old_len  d_global (GCompTag(oldci,locUnknown))
+                                    len  d_global (GCompTag(ci,locUnknown))
+                     ));            
+      currentLoc := curLoc;
+      let msg = Printf.sprintf 
+	  "(different number of fields in %s and %s: %d != %d.)" 
+	  oldci.cname ci.cname old_len len in
+      raise (Failure msg)
+    );
+    (* We check that they are defined in the same way. While doing this there 
+     * might be recursion and we have to watch for going into an infinite 
+     * loop. So we add the assumption that they are equal *)
+    let newrep, undo = union oldcinode cinode in
+    (* We check the fields but watch for Failure. We only do the check when 
+     * the lengths are the same. Due to the code above this the other 
+     * possibility is that one of the length is 0, in which case we reuse the 
+     * old compinfo. *)
+    (* But what if the old one is the empty one ? *)
+    if old_len = len then begin
+      (try
+        List.iter2 
+          (fun oldf f ->
+            if oldf.fbitfield <> f.fbitfield then 
+              raise (Failure "(different bitfield info)");
+            if oldf.fattr <> f.fattr then 
+              raise (Failure "(different field attributes)");
+            (* Make sure the types are compatible *)
+            let newtype = 
+              combineTypes CombineOther oldfidx oldf.ftype fidx f.ftype
+            in
+            (* Change the type in the representative *)
+            oldf.ftype <- newtype;
+          ) 
+          oldci.cfields ci.cfields
+      with Failure reason -> begin
+        (* Our assumption was wrong. Forget the isomorphism *)
+        undo ();
+        let msg = 
+          P.sprint ~width:80
+            (P.dprintf
+               "\n\tFailed assumption that %s and %s are isomorphic %s@!%a@!%a"
+               (compFullName oldci) (compFullName ci) reason 
+               dn_global (GCompTag(oldci,locUnknown))
+               dn_global (GCompTag(ci,locUnknown)))
+               in
+        raise (Failure msg)
+      end)
+    end else begin
+      (* We will reuse the old one. One of them is empty. If the old one is 
+       * empty, copy over the fields from the new one. Won't this result in 
+       * all sorts of undefined types??? *)
+      if old_len = 0 then 
+        oldci.cfields <- ci.cfields;
+    end;
+    (* We get here when we succeeded checking that they are equal, or one of 
+     * them was empty *)
+    newrep.ndata.cattr <- addAttributes oldci.cattr ci.cattr;
+    ()
+  end
+
+(* Match two enuminfos and throw a Failure if they do not match *)
+and matchEnumInfo (oldfidx: int) (oldei: enuminfo) 
+                   (fidx: int)    (ei: enuminfo) : unit = 
+  (* Find the node for this enum, no path compression. *)
+  let oldeinode = getNode eEq eSyn oldfidx oldei.ename oldei None in
+  let einode    = getNode eEq eSyn fidx ei.ename ei None in
+  if oldeinode == einode then (* We already know they are the same *)
+    ()
+  else begin
+    (* Replace with the representative data *)
+    let oldei = oldeinode.ndata in
+    let ei = einode.ndata in
+    (* Try to match them. But if you cannot just make them both integers *)
+    try
+      (* We do not have a mapping. They better be defined in the same way *)
+      if List.length oldei.eitems <> List.length ei.eitems then 
+        raise (Failure "(different number of enumeration elements)");
+      (* We check that they are defined in the same way. This is a fairly 
+      * conservative check. *)
+      List.iter2 
+        (fun (old_iname, old_iv, _) (iname, iv, _) -> 
+          if old_iname <> iname then 
+            raise (Failure "(different names for enumeration items)");
+          let samev = 
+            match constFold true old_iv, constFold true iv with 
+              Const(CInt64(oldi, _, _)), Const(CInt64(i, _, _)) -> oldi = i
+            | _ -> false
+          in
+          if not samev then 
+            raise (Failure "(different values for enumeration items)"))
+        oldei.eitems ei.eitems;
+      (* Set the representative *)
+      let newrep, _ = union oldeinode einode in
+      (* We get here if the enumerations match *)
+      newrep.ndata.eattr <- addAttributes oldei.eattr ei.eattr;
+      ()
+    with Failure msg -> begin
+      (* Get here if you cannot merge two enumeration nodes *)
+      if oldeinode != intEnumInfoNode then begin
+        let _ = union oldeinode intEnumInfoNode in ()
+      end;
+      if einode != intEnumInfoNode then begin
+        let _ = union einode intEnumInfoNode in ()
+      end;
+    end
+  end
+
+      
+(* Match two typeinfos and throw a Failure if they do not match *)
+and matchTypeInfo (oldfidx: int) (oldti: typeinfo) 
+                   (fidx: int)      (ti: typeinfo) : unit = 
+  if oldti.tname = "" || ti.tname = "" then 
+    E.s (bug "matchTypeInfo for anonymous type\n");
+  (* Find the node for this enum, no path compression. *)
+  let oldtnode = getNode tEq tSyn oldfidx oldti.tname oldti None in
+  let    tnode = getNode tEq tSyn    fidx ti.tname    ti None in
+  if oldtnode == tnode then (* We already know they are the same *)
+    ()
+  else begin
+    (* Replace with the representative data *)
+    let oldti = oldtnode.ndata in
+    let oldfidx = oldtnode.nfidx in
+    let ti = tnode.ndata in
+    let fidx = tnode.nfidx in
+    (* Check that they are the same *)
+    (try
+      ignore (combineTypes CombineOther oldfidx oldti.ttype fidx ti.ttype);
+    with Failure reason -> begin
+      let msg = 
+        P.sprint ~width:80
+          (P.dprintf
+             "\n\tFailed assumption that %s and %s are isomorphic %s"
+             oldti.tname ti.tname reason) in
+      raise (Failure msg)
+    end);
+    let _ = union oldtnode tnode in
+    ()
+  end
+
+(* Scan all files and do two things *)
+(* 1. Initialize the alpha renaming tables with the names of the globals so 
+ * that when we come in the second pass to generate new names, we do not run 
+ * into conflicts.  *)
+(* 2. For all declarations of globals unify their types. In the process 
+ * construct a set of equivalence classes on type names, structure and 
+ * enumeration tags  *)
+(* 3. We clean the referenced flags *)
+
+let rec oneFilePass1 (f:file) : unit = 
+  H.add fileNames !currentFidx f.fileName;
+  if debugMerge || !E.verboseFlag then 
+    ignore (E.log "Pre-merging (%d) %s\n" !currentFidx f.fileName);
+  currentDeclIdx := 0;
+  if f.globinitcalled || f.globinit <> None then
+    E.s (E.warn "Merging file %s has global initializer" f.fileName);
+
+  (* We scan each file and we look at all global varinfo. We see if globals 
+   * with the same name have been encountered before and we merge those types 
+   * *)
+  let matchVarinfo (vi: varinfo) (l: location * int) = 
+    ignore (Alpha.registerAlphaName vtAlpha None vi.vname !currentLoc);
+    (* Make a node for it and put it in vEq *)
+    let vinode = mkSelfNode vEq vSyn !currentFidx vi.vname vi (Some l) in
+    try
+      let oldvinode = find true (H.find vEnv vi.vname) in 
+      let oldloc, _ = 
+        match oldvinode.nloc with
+          None -> E.s (bug "old variable is undefined")
+        | Some l -> l
+      in
+      let oldvi     = oldvinode.ndata in
+      (* There is an old definition. We must combine the types. Do this first 
+       * because it might fail *)
+      let newtype = 
+        try
+          combineTypes CombineOther 
+            oldvinode.nfidx oldvi.vtype  
+            !currentFidx vi.vtype;
+        with (Failure reason) -> begin
+          (* Go ahead *)
+          let f = if !ignore_merge_conflicts then warn else error in
+          ignore (f "Incompatible declaration for %s (from %s(%d)).@! Previous was at %a (from %s (%d)) %s " 
+                    vi.vname (H.find fileNames !currentFidx) !currentFidx
+                    d_loc oldloc 
+                    (H.find fileNames oldvinode.nfidx) oldvinode.nfidx 
+                    reason);
+          raise Not_found
+        end
+      in
+      let newrep, _ = union oldvinode vinode in 
+      (* We do not want to turn non-"const" globals into "const" one. That 
+       * can happen if one file declares the variable a non-const while 
+       * others declare it as "const". *)
+      if hasAttribute "const" (typeAttrs vi.vtype) != 
+         hasAttribute "const" (typeAttrs oldvi.vtype) then begin
+        newrep.ndata.vtype <- typeRemoveAttributes ["const"] newtype;
+      end else begin
+        newrep.ndata.vtype <- newtype;
+      end;
+      (* clean up the storage.  *)
+      let newstorage = 
+        if vi.vstorage = oldvi.vstorage || vi.vstorage = Extern then 
+          oldvi.vstorage 
+        else if oldvi.vstorage = Extern then vi.vstorage 
+        (* Sometimes we turn the NoStorage specifier into Static for inline 
+         * functions *)
+        else if oldvi.vstorage = Static && 
+                vi.vstorage = NoStorage then Static 
+        else begin
+          ignore (warn "Inconsistent storage specification for %s. Now is %a and previous was %a at %a" 
+                    vi.vname d_storage vi.vstorage d_storage oldvi.vstorage 
+                    d_loc oldloc);
+          vi.vstorage
+        end
+      in
+      newrep.ndata.vstorage <- newstorage;
+      newrep.ndata.vattr <- addAttributes oldvi.vattr vi.vattr;
+      ()
+    with Not_found -> (* Not present in the previous files. Remember it for 
+                       * later  *)
+      H.add vEnv vi.vname vinode
+
+  in
+  List.iter
+    (function 
+      | GVarDecl (vi, l) | GVar (vi, _, l) -> 
+          currentLoc := l;
+          incr currentDeclIdx;
+          vi.vreferenced <- false;
+          if vi.vstorage <> Static then begin
+            matchVarinfo vi (l, !currentDeclIdx);
+          end
+
+      | GFun (fdec, l) -> 
+          currentLoc := l;
+          incr currentDeclIdx;
+          (* Save the names of the formal arguments *)
+          let _, args, _, _ = splitFunctionTypeVI fdec.svar in
+          H.add formalNames (!currentFidx, fdec.svar.vname) 
+            (List.map (fun (fn, _, _) -> fn) (argsToList args));
+          fdec.svar.vreferenced <- false;
+          (* Force inline functions to be static. *) 
+          (* GN: This turns out to be wrong. inline functions are external, 
+           * unless specified to be static. *)
+          (*
+          if fdec.svar.vinline && fdec.svar.vstorage = NoStorage then 
+            fdec.svar.vstorage <- Static;
+          *)
+          if fdec.svar.vstorage <> Static then begin
+            matchVarinfo fdec.svar (l, !currentDeclIdx)
+          end else begin
+            if fdec.svar.vinline && mergeInlines then 
+              (* Just create the nodes for inline functions *)
+              ignore (getNode iEq iSyn !currentFidx 
+                        fdec.svar.vname fdec.svar (Some (l, !currentDeclIdx)))
+          end
+              (* Make nodes for the defined type and structure tags *)
+      | GType (t, l) ->
+          incr currentDeclIdx;
+          t.treferenced <- false; 
+          if t.tname <> "" then (* The empty names are just for introducing 
+                                 * undefined comp tags *)
+            ignore (getNode tEq tSyn !currentFidx t.tname t 
+                      (Some (l, !currentDeclIdx)))
+          else begin (* Go inside and clean the referenced flag for the 
+                      * declared tags *)
+            match t.ttype with 
+              TComp (ci, _) -> 
+                ci.creferenced <- false;
+                (* Create a node for it *)
+                ignore (getNode sEq sSyn !currentFidx ci.cname ci None)
+                
+            | TEnum (ei, _) -> 
+                ei.ereferenced <- false;
+                ignore (getNode eEq eSyn !currentFidx ei.ename ei None);
+
+            | _ -> E.s (bug "Anonymous Gtype is not TComp")
+          end
+
+      | GCompTag (ci, l) -> 
+          incr currentDeclIdx;
+          ci.creferenced <- false;
+          ignore (getNode sEq sSyn !currentFidx ci.cname ci 
+                    (Some (l, !currentDeclIdx)))
+      | GEnumTag (ei, l) -> 
+          incr currentDeclIdx;
+          ei.ereferenced <- false;
+          ignore (getNode eEq eSyn !currentFidx ei.ename ei 
+                    (Some (l, !currentDeclIdx)))
+
+      | _ -> ())
+    f.globals
+
+
+(* Try to merge synonyms. Do not give an error if they fail to merge *)
+let doMergeSynonyms 
+    (syn : (string, 'a node) H.t)
+    (eq : (int * string, 'a node) H.t)
+    (compare : int -> 'a -> int -> 'a -> unit) (* A comparison function that 
+                                                * throws Failure if no match *)
+    : unit = 
+  H.iter (fun n node -> 
+    if not node.nmergedSyns then begin
+      (* find all the nodes for the same name *)
+      let all = H.find_all syn n in
+      let rec tryone (classes: 'a node list) (* A number of representatives 
+                                              * for this name *)
+                     (nd: 'a node) : 'a node list (* Returns an expanded set 
+                                                   * of classes *) = 
+        nd.nmergedSyns <- true;
+        (* Compare in turn with all the classes we have so far *)
+        let rec compareWithClasses = function
+            [] -> [nd](* No more classes. Add this as a new class *)
+          | c :: restc -> 
+              try
+                compare c.nfidx c.ndata  nd.nfidx nd.ndata;
+                (* Success. Stop here the comparison *)
+                c :: restc
+              with Failure _ -> (* Failed. Try next class *)
+                c :: (compareWithClasses restc)
+        in
+        compareWithClasses classes
+      in
+      (* Start with an empty set of classes for this name *)
+      let _ = List.fold_left tryone [] all in 
+      ()
+    end)
+    syn
+
+
+let matchInlines (oldfidx: int) (oldi: varinfo) 
+                 (fidx: int) (i: varinfo) = 
+  let oldinode = getNode iEq iSyn oldfidx oldi.vname oldi None in
+  let    inode = getNode iEq iSyn    fidx    i.vname    i None in
+  if oldinode == inode then 
+    () 
+  else begin
+    (* Replace with the representative data *)
+    let oldi = oldinode.ndata in
+    let oldfidx = oldinode.nfidx in
+    let i = inode.ndata in
+    let fidx = inode.nfidx in
+    (* There is an old definition. We must combine the types. Do this first 
+     * because it might fail *)
+    oldi.vtype <- 
+       combineTypes CombineOther 
+         oldfidx oldi.vtype fidx i.vtype;
+    (* We get here if we have success *)
+    (* Combine the attributes as well *)
+    oldi.vattr <- addAttributes oldi.vattr i.vattr;
+    (* Do not union them yet because we do not know that they are the same. 
+     * We have checked only the types so far *)
+    ()
+  end
+
+(************************************************************
+ *
+ *  PASS 2
+ *
+ *
+ ************************************************************)  
+
+(** Keep track of the functions we have used already in the file. We need 
+  * this to avoid removing an inline function that has been used already. 
+  * This can only occur if the inline function is defined after it is used 
+  * already; a bad style anyway *)
+let varUsedAlready: (string, unit) H.t = H.create 111
+
+(** A visitor that renames uses of variables and types *)      
+class renameVisitorClass = object (self)
+  inherit nopCilVisitor 
+      
+      (* This is either a global variable which we took care of, or a local 
+       * variable. Must do its type and attributes. *)
+  method vvdec (vi: varinfo) = DoChildren
+
+      (* This is a variable use. See if we must change it *)
+  method vvrbl (vi: varinfo) : varinfo visitAction = 
+    if not vi.vglob then DoChildren else
+    if vi.vreferenced then begin 
+      H.add varUsedAlready vi.vname ();
+      DoChildren 
+    end else begin
+      match findReplacement true vEq !currentFidx vi.vname with
+        None -> DoChildren
+      | Some (vi', oldfidx) -> 
+          if debugMerge then 
+              ignore (E.log "Renaming use of var %s(%d) to %s(%d)\n"
+                        vi.vname !currentFidx vi'.vname oldfidx);
+          vi'.vreferenced <- true; 
+          H.add varUsedAlready vi'.vname ();
+          ChangeTo vi'
+    end
+
+          
+        (* The use of a type. Change only those types whose underlying info 
+         * is not a root. *)
+  method vtype (t: typ) = 
+    match t with 
+      TComp (ci, a) when not ci.creferenced -> begin
+        match findReplacement true sEq !currentFidx ci.cname with
+          None -> DoChildren
+        | Some (ci', oldfidx) -> 
+            if debugMerge then 
+              ignore (E.log "Renaming use of %s(%d) to %s(%d)\n"
+                        ci.cname !currentFidx ci'.cname oldfidx);
+            ChangeTo (TComp (ci', visitCilAttributes (self :> cilVisitor) a))
+      end
+    | TEnum (ei, a) when not ei.ereferenced -> begin
+        match findReplacement true eEq !currentFidx ei.ename with
+          None -> DoChildren
+        | Some (ei', _) -> 
+            if ei' == intEnumInfo then 
+              (* This is actually our friend intEnumInfo *)
+              ChangeTo (TInt(IInt, visitCilAttributes (self :> cilVisitor) a))
+            else
+              ChangeTo (TEnum (ei', visitCilAttributes (self :> cilVisitor) a))
+      end
+
+    | TNamed (ti, a) when not ti.treferenced -> begin
+        match findReplacement true tEq !currentFidx ti.tname with
+          None -> DoChildren
+        | Some (ti', _) -> 
+            ChangeTo (TNamed (ti', visitCilAttributes (self :> cilVisitor) a))
+    end
+        
+    | _ -> DoChildren
+
+  (* The Field offset might need to be changed to use new compinfo *)
+  method voffs = function
+      Field (f, o) -> begin
+        (* See if the compinfo was changed *)
+        if f.fcomp.creferenced then 
+          DoChildren
+        else begin
+          match findReplacement true sEq !currentFidx f.fcomp.cname with
+            None -> DoChildren (* We did not replace it *)
+          | Some (ci', oldfidx) -> begin
+              (* First, find out the index of the original field *)
+              let rec indexOf (i: int) = function
+                  [] -> 
+                    E.s (bug "Cannot find field %s in %s(%d)\n"
+                           f.fname (compFullName f.fcomp) !currentFidx)
+                | f' :: rest when f' == f -> i
+                | _ :: rest -> indexOf (i + 1) rest
+              in
+              let index = indexOf 0 f.fcomp.cfields in
+              if List.length ci'.cfields <= index then 
+                E.s (bug "Too few fields in replacement %s(%d) for %s(%d)\n"
+                       (compFullName ci') oldfidx
+                       (compFullName f.fcomp) !currentFidx);
+              let f' = List.nth ci'.cfields index in 
+              ChangeDoChildrenPost (Field (f', o), fun x -> x)
+          end
+        end
+      end
+    | _ -> DoChildren
+
+  method vinitoffs o =
+    (self#voffs o)      (* treat initializer offsets same as lvalue offsets *)
+
+end
+
+let renameVisitor = new renameVisitorClass
+
+
+(** A visitor that renames uses of inline functions that were discovered in 
+ * pass 2 to be used before they are defined. This is like the renameVisitor 
+ * except it only looks at the variables (thus it is a bit more efficient) 
+ * and it also renames forward declarations of the inlines to be removed. *)
+
+class renameInlineVisitorClass = object (self)
+  inherit nopCilVisitor 
+      
+      (* This is a variable use. See if we must change it *)
+  method vvrbl (vi: varinfo) : varinfo visitAction = 
+    if not vi.vglob then DoChildren else
+    if vi.vreferenced then begin (* Already renamed *)
+      DoChildren 
+    end else begin
+      match findReplacement true vEq !currentFidx vi.vname with
+        None -> DoChildren
+      | Some (vi', oldfidx) -> 
+          if debugMerge then 
+              ignore (E.log "Renaming var %s(%d) to %s(%d)\n"
+                        vi.vname !currentFidx vi'.vname oldfidx);
+          vi'.vreferenced <- true; 
+          ChangeTo vi'
+    end
+
+  (* And rename some declarations of inlines to remove. We cannot drop this 
+   * declaration (see small1/combineinline6) *)
+  method vglob = function
+      GVarDecl(vi, l) when vi.vinline -> begin
+        (* Get the original name *)
+        let origname = 
+          try H.find originalVarNames vi.vname 
+          with Not_found -> vi.vname
+        in
+        (* Now see if this must be replaced *)
+        match findReplacement true vEq !currentFidx origname with
+          None -> DoChildren
+        | Some (vi', _) -> ChangeTo [GVarDecl (vi', l)]
+      end
+    | _ -> DoChildren
+
+end
+let renameInlinesVisitor = new renameInlineVisitorClass
+
+
+(* sm: First attempt at a semantic checksum for function bodies.
+ * Ideally, two function's checksums would be equal only when their
+ * bodies were provably equivalent; but I'm using a much simpler and
+ * less accurate heuristic here.  It should be good enough for the
+ * purpose I have in mind, which is doing duplicate removal of
+ * multiply-instantiated template functions. *)
+let functionChecksum (dec: fundec) : int =
+begin
+  (* checksum the structure of the statements (only) *)
+  let rec stmtListSum (lst : stmt list) : int =
+    (List.fold_left (fun acc s -> acc + (stmtSum s)) 0 lst)
+  and stmtSum (s: stmt) : int =
+    (* strategy is to just throw a lot of prime numbers into the
+     * computation in hopes of avoiding accidental collision.. *)
+    match s.skind with
+    | Instr(l) -> 13 + 67*(List.length l)
+    | Return(_) -> 17
+    | Goto(_) -> 19
+    | Break(_) -> 23
+    | Continue(_) -> 29
+    | If(_,b1,b2,_) -> 31 + 37*(stmtListSum b1.bstmts) 
+                          + 41*(stmtListSum b2.bstmts)
+    | Switch(_,b,_,_) -> 43 + 47*(stmtListSum b.bstmts)
+                            (* don't look at stmt list b/c is not part of tree *)
+(*
+    | Loop(b,_,_,_) -> 49 + 53*(stmtListSum b.bstmts)
+*)
+    | While(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
+    | DoWhile(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
+    | For(_,_,_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
+    | Block(b) -> 59 + 61*(stmtListSum b.bstmts)
+    | TryExcept (b, (il, e), h, _) -> 
+        67 + 83*(stmtListSum b.bstmts) + 97*(stmtListSum h.bstmts)
+    | TryFinally (b, h, _) -> 
+        103 + 113*(stmtListSum b.bstmts) + 119*(stmtListSum h.bstmts)
+  in
+  
+  (* disabled 2nd and 3rd measure because they appear to get different
+   * values, for the same code, depending on whether the code was just
+   * parsed into CIL or had previously been parsed into CIL, printed
+   * out, then re-parsed into CIL *)
+  let a,b,c,d,e =
+    (List.length dec.sformals),        (* # formals *)
+    0 (*(List.length dec.slocals)*),         (* # locals *)
+    0 (*dec.smaxid*),                        (* estimate of internal statement count *)
+    (List.length dec.sbody.bstmts),    (* number of statements at outer level *)
+    (stmtListSum dec.sbody.bstmts) in  (* checksum of statement structure *)
+  (*(trace "sm" (P.dprintf "sum: %s is %d %d %d %d %d\n"*)
+  (*                       dec.svar.vname a b c d e));*)
+  2*a + 3*b + 5*c + 7*d + 11*e
+end
+
+
+(* sm: equality for initializers, etc.; this is like '=', except
+ * when we reach shared pieces (like references into the type
+ * structure), we use '==', to prevent circularity *)
+(* update: that's no good; I'm using this to find things which
+ * are equal but from different CIL trees, so nothing will ever
+ * be '=='.. as a hack I'll just change those places to 'true',
+ * so these functions are not now checking proper equality..
+ * places where equality is not complete are marked "INC" *)
+let rec equalInits (x: init) (y: init) : bool =
+begin
+  match x,y with
+  | SingleInit(xe), SingleInit(ye) -> (equalExps xe ye)
+  | CompoundInit(xt, xoil), CompoundInit(yt, yoil) ->
+      (*(xt == yt) &&*)  (* INC *)       (* types need to be identically equal *)
+      let rec equalLists xoil yoil : bool =
+        match xoil,yoil with
+        | ((xo,xi) :: xrest), ((yo,yi) :: yrest) ->
+            (equalOffsets xo yo) &&
+            (equalInits xi yi) &&
+            (equalLists xrest yrest)
+        | [], [] -> true
+        | _, _ -> false
+      in
+      (equalLists xoil yoil)
+  | _, _ -> false
+end
+
+and equalOffsets (x: offset) (y: offset) : bool =
+begin
+  match x,y with
+  | NoOffset, NoOffset -> true
+  | Field(xfi,xo), Field(yfi,yo) ->
+      (xfi.fname = yfi.fname) &&     (* INC: same fieldinfo name.. *)
+      (equalOffsets xo yo)
+  | Index(xe,xo), Index(ye,yo) ->
+      (equalExps xe ye) &&
+      (equalOffsets xo yo)
+  | _,_ -> false
+end
+
+and equalExps (x: exp) (y: exp) : bool =
+begin
+  match x,y with
+  | Const(xc), Const(yc) ->        xc = yc   ||    (* safe to use '=' on literals *)
+    (
+      (* CIL changes (unsigned)0 into 0U during printing.. *)
+      match xc,yc with
+      | CInt64(xv,_,_),CInt64(yv,_,_) ->
+          (Int64.to_int xv) = 0   &&     (* ok if they're both 0 *)
+          (Int64.to_int yv) = 0
+      | _,_ -> false
+    )
+  | Lval(xl), Lval(yl) ->          (equalLvals xl yl)
+  | SizeOf(xt), SizeOf(yt) ->      true (*INC: xt == yt*)  (* identical types *)
+  | SizeOfE(xe), SizeOfE(ye) ->    (equalExps xe ye)
+  | AlignOf(xt), AlignOf(yt) ->    true (*INC: xt == yt*)
+  | AlignOfE(xe), AlignOfE(ye) ->  (equalExps xe ye)
+  | UnOp(xop,xe,xt), UnOp(yop,ye,yt) ->
+      xop = yop &&
+      (equalExps xe ye) &&
+      true  (*INC: xt == yt*)
+  | BinOp(xop,xe1,xe2,xt), BinOp(yop,ye1,ye2,yt) ->
+      xop = yop &&
+      (equalExps xe1 ye1) &&
+      (equalExps xe2 ye2) &&
+      true  (*INC: xt == yt*)
+  | CastE(xt,xe), CastE(yt,ye) ->
+      (*INC: xt == yt &&*)
+      (equalExps xe ye)
+  | AddrOf(xl), AddrOf(yl) ->      (equalLvals xl yl)
+  | StartOf(xl), StartOf(yl) ->    (equalLvals xl yl)
+  
+  (* initializers that go through CIL multiple times sometimes lose casts they
+   * had the first time; so allow a different of a cast *)
+  | CastE(xt,xe), ye ->
+      (equalExps xe ye)
+  | xe, CastE(yt,ye) ->
+      (equalExps xe ye)
+
+  | _,_ -> false
+end
+
+and equalLvals (x: lval) (y: lval) : bool =
+begin
+  match x,y with
+  | (Var(xv),xo), (Var(yv),yo) ->
+      (* I tried, I really did.. the problem is I see these names
+       * before merging collapses them, so __T123 != __T456,
+       * so whatever *)
+      (*(xv.vname = vy.vname) &&      (* INC: same varinfo names.. *)*)
+      (equalOffsets xo yo)
+
+  | (Mem(xe),xo), (Mem(ye),yo) ->
+      (equalExps xe ye) &&
+      (equalOffsets xo yo)
+  | _,_ -> false
+end
+
+let equalInitOpts (x: init option) (y: init option) : bool =
+begin
+  match x,y with
+  | None,None -> true
+  | Some(xi), Some(yi) -> (equalInits xi yi)
+  | _,_ -> false
+end
+
+
+  (* Now we go once more through the file and we rename the globals that we 
+   * keep. We also scan the entire body and we replace references to the 
+   * representative types or variables. We set the referenced flags once we 
+   * have replaced the names. *)
+let oneFilePass2 (f: file) = 
+  if debugMerge || !E.verboseFlag then 
+    ignore (E.log "Final merging phase (%d): %s\n" 
+              !currentFidx f.fileName);
+  currentDeclIdx := 0; (* Even though we don't need it anymore *)
+  H.clear varUsedAlready;
+  H.clear originalVarNames;
+  (* If we find inline functions that are used before being defined, and thus 
+   * before knowing that we can throw them away, then we mark this flag so 
+   * that we can make another pass over the file *)
+  let repeatPass2 = ref false in
+  (* Keep a pointer to the contents of the file so far *)
+  let savedTheFile = !theFile in
+
+  let processOneGlobal (g: global) : unit = 
+      (* Process a varinfo. Reuse an old one, or rename it if necessary *)
+    let processVarinfo (vi: varinfo) (vloc: location) : varinfo =  
+      if vi.vreferenced then 
+        vi (* Already done *)
+      else begin
+        (* Maybe it is static. Rename it then *)
+        if vi.vstorage = Static then begin
+          let newName, _ = A.newAlphaName vtAlpha None vi.vname !currentLoc in
+          (* Remember the original name *)
+          H.add originalVarNames newName vi.vname;
+          if debugMerge then ignore (E.log "renaming %s at %a to %s\n"
+                                           vi.vname d_loc vloc newName);
+          vi.vname <- newName;
+          vi.vid <- newVID ();
+          vi.vreferenced <- true;
+          vi
+        end else begin
+          (* Find the representative *)
+          match findReplacement true vEq !currentFidx vi.vname with
+            None -> vi (* This is the representative *)
+          | Some (vi', _) -> (* Reuse some previous one *)
+              vi'.vreferenced <- true; (* Mark it as done already *)
+              vi'.vaddrof <- vi.vaddrof || vi'.vaddrof;
+              vi'
+        end
+      end
+    in
+    try
+      match g with 
+      | GVarDecl (vi, l) as g -> 
+          currentLoc := l;
+          incr currentDeclIdx;
+          let vi' = processVarinfo vi l in
+          if vi != vi' then (* Drop this declaration *) ()
+          else if H.mem emittedVarDecls vi'.vname then (* No need to keep it *)
+            ()
+          else begin
+            H.add emittedVarDecls vi'.vname true; (* Remember that we emitted
+                                                   * it  *)
+            mergePushGlobals (visitCilGlobal renameVisitor g)
+          end
+
+      | GVar (vi, init, l) ->
+          currentLoc := l;
+          incr currentDeclIdx;
+          let vi' = processVarinfo vi l in
+          (* We must keep this definition even if we reuse this varinfo,
+           * because maybe the previous one was a declaration *)
+          H.add emittedVarDecls vi.vname true; (* Remember that we emitted it*)
+
+          let emitIt:bool = (not mergeGlobals) ||
+            try
+              let prevVar, prevInitOpt, prevLoc =
+                (H.find emittedVarDefn vi'.vname) in
+              (* previously defined; same initializer? *)
+              if (equalInitOpts prevInitOpt init.init)
+                || (init.init = None) then (
+                (trace "mergeGlob"
+                  (P.dprintf "dropping global var %s at %a in favor of the one at %a\n"
+                             vi'.vname  d_loc l  d_loc prevLoc));
+                false  (* do not emit *)
+              )
+              else if prevInitOpt = None then (
+                (* We have an initializer, but the previous one didn't.
+                   We should really convert the previous global from GVar
+                   to GVarDecl, but that's not convenient to do here. *)
+                true
+              )
+              else ( 
+                (* Both GVars have initializers. *)
+                (E.s (error "global var %s at %a has different initializer than %a\n"
+                              vi'.vname  d_loc l  d_loc prevLoc));
+              )
+            with Not_found -> (
+              (* no previous definition *)
+              (H.add emittedVarDefn vi'.vname (vi', init.init, l));
+              true     (* emit it *)
+            )
+          in
+
+          if emitIt then
+            mergePushGlobals (visitCilGlobal renameVisitor (GVar(vi', init, l)))
+            
+      | GFun (fdec, l) as g -> 
+          currentLoc := l;
+          incr currentDeclIdx;
+          (* We apply the renaming *)
+          fdec.svar <- processVarinfo fdec.svar l;
+          (* Get the original name. *)
+          let origname = 
+            try H.find originalVarNames fdec.svar.vname 
+            with Not_found -> fdec.svar.vname
+          in
+          (* Go in there and rename everything as needed *)
+          let fdec' = 
+            match visitCilGlobal renameVisitor g with 
+              [GFun(fdec', _)] -> fdec' 
+            | _ -> E.s (unimp "renameVisitor for GFun returned something else")
+          in
+          let g' = GFun(fdec', l) in
+          (* Now restore the parameter names *)
+          let _, args, _, _ = splitFunctionTypeVI fdec'.svar in
+          let oldnames, foundthem = 
+            try H.find formalNames (!currentFidx, origname), true
+            with Not_found -> begin
+              ignore (warnOpt "Cannot find %s in formalNames" origname);
+              [], false
+            end
+          in
+          if foundthem then begin
+            let argl = argsToList args in
+            if List.length oldnames <> List.length argl then 
+              E.s (unimp "After merging the function has more arguments");
+            List.iter2
+              (fun oldn a -> if oldn <> "" then a.vname <- oldn)
+              oldnames fdec.sformals;
+            (* Reflect them in the type *)
+            setFormals fdec fdec.sformals
+          end;
+          (** See if we can remove this inline function *)
+          if fdec'.svar.vinline && mergeInlines then begin
+            let printout = 
+              (* Temporarily turn of printing of lines *)
+              let oldprintln = !lineDirectiveStyle in
+              lineDirectiveStyle := None;
+              (* Temporarily set the name to all functions in the same way *)
+              let newname = fdec'.svar.vname in
+              fdec'.svar.vname <- "@@alphaname@@";
+              (* If we must do alpha conversion then temporarily set the 
+               * names of the local variables and formals in a standard way *)
+              let nameId = ref 0 in 
+              let oldNames : string list ref = ref [] in
+              let renameOne (v: varinfo) = 
+                oldNames := v.vname :: !oldNames; 
+                incr nameId;
+                v.vname <- "___alpha" ^ string_of_int !nameId
+              in
+              let undoRenameOne (v: varinfo) = 
+                match !oldNames with 
+                  n :: rest -> 
+                    oldNames := rest;
+                    v.vname <- n
+                | _ -> E.s (bug "undoRenameOne")
+              in
+              (* Remember the original type *)
+              let origType = fdec'.svar.vtype in
+              if mergeInlinesWithAlphaConvert then begin
+                (* Rename the formals *)
+                List.iter renameOne fdec'.sformals;
+                (* Reflect in the type *)
+                setFormals fdec' fdec'.sformals;
+                (* Now do the locals *)
+                List.iter renameOne fdec'.slocals
+              end;
+              (* Now print it *)
+              let res = d_global () g' in
+              lineDirectiveStyle := oldprintln;
+              fdec'.svar.vname <- newname;
+              if mergeInlinesWithAlphaConvert then begin
+                (* Do the locals in reverse order *)
+                List.iter undoRenameOne (List.rev fdec'.slocals);
+                (* Do the formals in reverse order *)
+                List.iter undoRenameOne (List.rev fdec'.sformals);
+                (* Restore the type *)
+                fdec'.svar.vtype <- origType;
+              end;
+              res
+            in
+            (* Make a node for this inline function using the original name. *)
+            let inode = 
+              getNode vEq vSyn !currentFidx origname fdec'.svar 
+                (Some (l, !currentDeclIdx))
+            in
+            if debugInlines then begin
+              ignore (E.log "getNode %s(%d) with loc=%a. declidx=%d\n"
+                        inode.nname inode.nfidx
+                        d_nloc inode.nloc
+                        !currentDeclIdx);
+              ignore (E.log 
+                        "Looking for previous definition of inline %s(%d)\n"
+                        origname !currentFidx); 
+            end;
+            try
+              let oldinode = H.find inlineBodies printout in
+              if debugInlines then
+                ignore (E.log "  Matches %s(%d)\n" 
+                          oldinode.nname oldinode.nfidx);
+              (* There is some other inline function with the same printout. 
+               * We should reuse this, but watch for the case when the inline 
+               * was already used. *)
+              if H.mem varUsedAlready fdec'.svar.vname then begin
+                if mergeInlinesRepeat then begin
+                  repeatPass2 := true
+                end else begin
+                  ignore (warn "Inline function %s because it is used before it is defined" fdec'.svar.vname);
+                  raise Not_found 
+                end
+              end;
+              let _ = union oldinode inode in
+              (* Clean up the vreferenced bit in the new inline, so that we 
+               * can rename it. Reset the name to the original one so that 
+               * we can find the replacement name. *)
+              fdec'.svar.vreferenced <- false;
+              fdec'.svar.vname <- origname;
+              () (* Drop this definition *)
+            with Not_found -> begin
+              if debugInlines then ignore (E.log " Not found\n");
+              H.add inlineBodies printout inode;
+              mergePushGlobal g'
+            end
+          end else begin
+            (* either the function is not inline, or we're not attempting to 
+             * merge inlines *)
+            if (mergeGlobals &&
+                not fdec'.svar.vinline &&
+                fdec'.svar.vstorage <> Static) then 
+              begin
+                (* sm: this is a non-inline, non-static function.  I want to
+                * consider dropping it if a same-named function has already
+                * been put into the merged file *)
+                let curSum = (functionChecksum fdec') in
+                (*(trace "mergeGlob" (P.dprintf "I see extern function %s, sum is %d\n"*)
+              (*                              fdec'.svar.vname curSum));*)
+                try
+                  let prevFun, prevLoc, prevSum =
+                    (H.find emittedFunDefn fdec'.svar.vname) in
+                  (* previous was found *)
+                  if (curSum = prevSum) then
+                    (trace "mergeGlob"
+                       (P.dprintf "dropping duplicate def'n of func %s at %a in favor of that at %a\n"
+                          fdec'.svar.vname  d_loc l  d_loc prevLoc))
+                  else begin
+                    (* the checksums differ, so print a warning but keep the
+                     * older one to avoid a link error later.  I think this is 
+		     * a reasonable approximation of what ld does. *)
+                    (ignore (warn "def'n of func %s at %a (sum %d) conflicts with the one at %a (sum %d); keeping the one at %a.\n"
+                               fdec'.svar.vname  d_loc l  curSum  d_loc prevLoc
+			       prevSum d_loc prevLoc))
+                  end
+                with Not_found -> begin
+                  (* there was no previous definition *)
+                  (mergePushGlobal g');
+                  (H.add emittedFunDefn fdec'.svar.vname (fdec', l, curSum))
+                end
+              end else begin
+                (* not attempting to merge global functions, or it was static 
+                 * or inline *)
+                mergePushGlobal g'
+              end
+          end
+              
+      | GCompTag (ci, l) as g -> begin
+          currentLoc := l;
+          incr currentDeclIdx;
+          if ci.creferenced then 
+            () 
+          else begin
+            match findReplacement true sEq !currentFidx ci.cname with
+              None -> 
+                (* A new one, we must rename it and keep the definition *)
+                (* Make sure this is root *)
+                (try 
+                  let nd = H.find sEq (!currentFidx, ci.cname) in
+                  if nd.nrep != nd then 
+                    E.s (bug "Setting creferenced for struct %s(%d) which is not root!\n"
+                           ci.cname !currentFidx);
+                with Not_found -> begin
+                  E.s (bug "Setting creferenced for struct %s(%d) which is not in the sEq!\n"
+                         ci.cname !currentFidx);
+                end);
+                let newname, _ = 
+                  A.newAlphaName sAlpha None ci.cname !currentLoc in
+                ci.cname <- newname;
+                ci.creferenced <- true; 
+                ci.ckey <- H.hash (compFullName ci);
+                (* Now we should visit the fields as well *)
+                H.add emittedCompDecls ci.cname true; (* Remember that we 
+                                                       * emitted it  *)
+                mergePushGlobals (visitCilGlobal renameVisitor g)
+            | Some (oldci, oldfidx) -> begin
+                (* We are not the representative. Drop this declaration 
+                 * because we'll not be using it. *)
+                ()
+            end
+          end  
+      end
+      | GEnumTag (ei, l) as g -> begin
+          currentLoc := l;
+          incr currentDeclIdx;
+          if ei.ereferenced then 
+            () 
+          else begin
+            match findReplacement true eEq !currentFidx ei.ename with 
+              None -> (* We must rename it *)
+                let newname, _ = 
+                  A.newAlphaName eAlpha None ei.ename !currentLoc in
+                ei.ename <- newname;
+                ei.ereferenced <- true;
+                (* And we must rename the items to using the same name space 
+                 * as the variables *)
+                ei.eitems <- 
+                   List.map
+                     (fun (n, i, loc) -> 
+                       let newname, _ = 
+                         A.newAlphaName vtAlpha None n !currentLoc in
+                       newname, i, loc)
+                     ei.eitems;
+                mergePushGlobals (visitCilGlobal renameVisitor g);
+            | Some (ei', _) -> (* Drop this since we are reusing it from 
+                                * before *)
+                ()
+          end
+      end
+      | GCompTagDecl (ci, l) -> begin
+          currentLoc := l; (* This is here just to introduce an undefined 
+                            * structure. But maybe the structure was defined 
+                            * already.  *)
+          (* Do not increment currentDeclIdx because it is not incremented in 
+           * pass 1*)
+          if H.mem emittedCompDecls ci.cname then 
+            () (* It was already declared *)
+          else begin
+            H.add emittedCompDecls ci.cname true;
+            (* Keep it as a declaration *)
+            mergePushGlobal g;
+          end
+      end
+
+      | GEnumTagDecl (ei, l) -> 
+          currentLoc := l;
+          (* Do not increment currentDeclIdx because it is not incremented in 
+           * pass 1*)
+          (* Keep it as a declaration *)
+          mergePushGlobal g
+          
+
+      | GType (ti, l) as g -> begin
+          currentLoc := l;
+          incr currentDeclIdx;
+          if ti.treferenced then 
+            () 
+          else begin
+            match findReplacement true tEq !currentFidx ti.tname with 
+              None -> (* We must rename it and keep it *)
+                let newname, _ = 
+                  A.newAlphaName vtAlpha None ti.tname !currentLoc in
+                ti.tname <- newname;
+                ti.treferenced <- true;
+                mergePushGlobals (visitCilGlobal renameVisitor g);
+            | Some (ti', _) ->(* Drop this since we are reusing it from 
+                * before *)
+                  ()
+          end
+      end
+      | g -> mergePushGlobals (visitCilGlobal renameVisitor g)
+  with e -> begin
+    let globStr:string = (P.sprint 1000 (P.dprintf 
+      "error when merging global %a: %s"
+      d_global g  (Printexc.to_string e))) in
+    ignore (E.log "%s\n" globStr);
+    (*"error when merging global: %s\n" (Printexc.to_string e);*)
+    mergePushGlobal (GText (P.sprint 80 
+                              (P.dprintf "/* error at %t:" d_thisloc)));
+    mergePushGlobal g;
+    mergePushGlobal (GText ("*************** end of error*/"));
+    raise e    
+  end
+  in
+  (* Now do the real PASS 2 *)
+  List.iter processOneGlobal f.globals;
+  (* See if we must re-visit the globals in this file because an inline that 
+   * is being removed was used before we saw the definition and we decided to 
+   * remove it *)
+  if mergeInlinesRepeat && !repeatPass2 then begin
+    if debugMerge || !E.verboseFlag then 
+      ignore (E.log "Repeat final merging phase (%d): %s\n" 
+                !currentFidx f.fileName);
+    (* We are going to rescan the globals we have added while processing this 
+     * file. *)
+    let theseGlobals : global list ref = ref [] in
+    (* Scan a list of globals until we hit a given tail *)
+    let rec scanUntil (tail: 'a list) (l: 'a list) = 
+      if tail == l then ()
+      else
+        match l with 
+        | [] -> E.s (bug "mergecil: scanUntil could not find the marker\n")
+        | g :: rest -> 
+            theseGlobals := g :: !theseGlobals;
+            scanUntil tail rest
+    in
+    (* Collect in theseGlobals all the globals from this file *)
+    theseGlobals := [];
+    scanUntil savedTheFile !theFile;
+    (* Now reprocess them *)
+    theFile := savedTheFile;
+    List.iter (fun g -> 
+                 theFile := (visitCilGlobal renameInlinesVisitor g) @ !theFile)
+      !theseGlobals;
+    (* Now check if we have inlines that we could not remove
+    H.iter (fun name _ -> 
+      if not (H.mem inlinesRemoved name) then 
+        ignore (warn "Could not remove inline %s. I have no idea why!\n"
+                  name))
+      inlinesToRemove *)
+  end
+
+
+let merge (files: file list) (newname: string) : file = 
+  init ();
+  
+  (* Make the first pass over the files *)
+  currentFidx := 0;
+  List.iter (fun f -> oneFilePass1 f; incr currentFidx) files;
+
+  (* Now maybe try to force synonyms to be equal *)
+  if mergeSynonyms then begin
+    doMergeSynonyms sSyn sEq matchCompInfo;
+    doMergeSynonyms eSyn eEq matchEnumInfo;
+    doMergeSynonyms tSyn tEq matchTypeInfo;
+    if mergeInlines then begin 
+      (* Copy all the nodes from the iEq to vEq as well. This is needed 
+       * because vEq will be used for variable renaming *)
+      H.iter (fun k n -> H.add vEq k n) iEq;
+      doMergeSynonyms iSyn iEq matchInlines;
+    end
+  end;
+
+  (* Now maybe dump the graph *)
+  if debugMerge then begin
+    dumpGraph "type" tEq;
+    dumpGraph "struct and union" sEq;
+    dumpGraph "enum" eEq;
+    dumpGraph "variable" vEq;
+    if mergeInlines then dumpGraph "inline" iEq;
+  end;
+  (* Make the second pass over the files. This is when we start rewriting the 
+   * file *)
+  currentFidx := 0;
+  List.iter (fun f -> oneFilePass2 f; incr currentFidx) files;
+
+  (* Now reverse the result and return the resulting file *)
+  let rec revonto acc = function
+      [] -> acc
+    | x :: t -> revonto (x :: acc) t
+  in
+  let res = 
+    { fileName = newname;
+      globals  = revonto (revonto [] !theFile) !theFileTypes;
+      globinit = None;
+      globinitcalled = false;} in
+  init (); (* Make the GC happy *)
+  (* We have made many renaming changes and sometimes we have just guessed a 
+   * name wrong. Make sure now that the local names are unique. *)
+  uniqueVarNames res; 
+  res
+
+
+
+
+
diff --git a/cil/src/mergecil.mli b/cil/src/mergecil.mli
new file mode 100644
index 000000000..a864c69a9
--- /dev/null
+++ b/cil/src/mergecil.mli
@@ -0,0 +1,42 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(** Set this to true to ignore the merge conflicts *)
+val ignore_merge_conflicts: bool ref
+
+(** Merge a number of CIL files *)
+val merge: Cil.file list -> string -> Cil.file
diff --git a/cil/src/rmtmps.ml b/cil/src/rmtmps.ml
new file mode 100644
index 000000000..b7dea931c
--- /dev/null
+++ b/cil/src/rmtmps.ml
@@ -0,0 +1,778 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* rmtmps.ml *)
+(* implementation for rmtmps.mli *)
+
+open Pretty
+open Cil
+module H = Hashtbl
+module E = Errormsg
+module U = Util
+
+(* Set on the command-line: *)
+let keepUnused = ref false
+let rmUnusedInlines = ref false
+
+
+let trace = Trace.trace "rmtmps"
+
+
+
+(***********************************************************************
+ *
+ *  Clearing of "referenced" bits
+ *
+ *)
+
+
+let clearReferencedBits file =
+  let considerGlobal global =
+    match global with
+    | GType (info, _) ->
+	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
+	info.treferenced <- false
+
+    | GEnumTag (info, _)
+    | GEnumTagDecl (info, _) ->
+	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
+	info.ereferenced <- false
+
+    | GCompTag (info, _)
+    | GCompTagDecl (info, _) ->
+	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
+	info.creferenced <- false
+
+    | GVar ({vname = name} as info, _, _)
+    | GVarDecl ({vname = name} as info, _) ->
+	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
+	info.vreferenced <- false
+
+    | GFun ({svar = info} as func, _) ->
+	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
+	info.vreferenced <- false;
+	let clearMark local =
+	  trace (dprintf "clearing mark: local %s\n" local.vname);
+	  local.vreferenced <- false
+	in
+	List.iter clearMark func.slocals
+
+    | _ ->
+	()
+  in
+  iterGlobals file considerGlobal
+
+
+(***********************************************************************
+ *
+ *  Scanning and categorization of pragmas
+ *
+ *)
+
+
+(* collections of names of things to keep *)
+type collection = (string, unit) H.t
+type keepers = {
+    typedefs : collection;
+    enums : collection;
+    structs : collection;
+    unions : collection;
+    defines : collection;
+  }
+
+
+(* rapid transfer of control when we find a malformed pragma *)
+exception Bad_pragma
+
+let ccureddeepcopystring = "ccureddeepcopy"
+(* Save this length so we don't recompute it each time. *)
+let ccureddeepcopystring_length = String.length ccureddeepcopystring
+
+(* CIL and CCured define several pragmas which prevent removal of
+ * various global symbols.  Here we scan for those pragmas and build
+ * up collections of the corresponding symbols' names.
+ *)
+
+let categorizePragmas file =
+
+  (* names of things which should be retained *)
+  let keepers = {
+    typedefs = H.create 0;
+    enums = H.create 0;
+    structs = H.create 0;
+    unions = H.create 0;
+    defines = H.create 1
+  } in
+  
+  (* populate these name collections in light of each pragma *)
+  let considerPragma =
+
+    let badPragma location pragma =
+      ignore (warnLoc location "Invalid argument to pragma %s" pragma)
+    in
+    
+    function
+      | GPragma (Attr ("cilnoremove" as directive, args), location) ->
+	  (* a very flexible pragma: can retain typedefs, enums,
+	   * structs, unions, or globals (functions or variables) *)
+	  begin
+	    let processArg arg =
+	      try
+		match arg with
+		| AStr specifier ->
+		    (* isolate and categorize one symbol name *)
+		    let collection, name =
+		      (* Two words denotes a typedef, enum, struct, or
+		       * union, as in "type foo" or "enum bar".  A
+		       * single word denotes a global function or
+		       * variable. *)
+		      let whitespace = Str.regexp "[ \t]+" in
+		      let words = Str.split whitespace specifier in
+		      match words with
+		      | ["type"; name] ->
+			  keepers.typedefs, name
+		      | ["enum"; name] ->
+			  keepers.enums, name
+		      | ["struct"; name] ->
+			  keepers.structs, name
+		      | ["union"; name] ->
+			  keepers.unions, name
+		      | [name] ->
+			  keepers.defines, name
+		      | _ ->
+			  raise Bad_pragma
+		    in
+		    H.add collection name ()
+		| _ ->
+		    raise Bad_pragma
+	      with Bad_pragma ->
+		badPragma location directive
+	    in
+	    List.iter processArg args
+	  end
+      | GVarDecl (v, _) -> begin
+          (* Look for alias attributes, e.g. Linux modules *)
+          match filterAttributes "alias" v.vattr with
+              [] -> ()  (* ordinary prototype. *)
+            | [Attr("alias", [AStr othername])] ->
+                H.add keepers.defines othername ()
+           | _ -> E.s (error "Bad alias attribute at %a" d_loc !currentLoc)
+        end          
+
+      (*** Begin CCured-specific checks:  ***)
+      (* these pragmas indirectly require that we keep the function named in
+	  -- the first arguments of boxmodelof and ccuredwrapperof, and
+	  -- the third argument of ccureddeepcopy*. *)
+      | GPragma (Attr("ccuredwrapper" as directive, attribute :: _), location) ->
+	  begin
+	    match attribute with
+	    | AStr name ->
+		H.add keepers.defines name ()
+	    | _ ->
+		badPragma location directive
+	  end
+      | GPragma (Attr("ccuredvararg", funcname :: (ASizeOf t) :: _), location) ->
+	  begin
+	    match t with
+	    | TComp(c,_) when c.cstruct -> (* struct *)
+		H.add keepers.structs c.cname ()
+	    | TComp(c,_) -> (* union *)
+		H.add keepers.unions c.cname ()
+	    | TNamed(ti,_) ->
+		H.add keepers.typedefs ti.tname ()
+	    | TEnum(ei, _) ->
+		H.add keepers.enums ei.ename ()
+	    | _ ->
+		()
+	  end
+      | GPragma (Attr(directive, _ :: _ :: attribute :: _), location)
+           when String.length directive > ccureddeepcopystring_length
+	       && (Str.first_chars directive ccureddeepcopystring_length)
+	           = ccureddeepcopystring ->
+	  begin
+	    match attribute with
+	    | AStr name ->
+		H.add keepers.defines name ()
+	    | _ ->
+		badPragma location directive
+	  end
+      (** end CCured-specific stuff **)
+      |	_ ->
+	  ()
+  in
+  iterGlobals file considerPragma;
+  keepers
+
+
+
+(***********************************************************************
+ *
+ *  Function body elimination from pragmas
+ *
+ *)
+
+
+(* When performing global slicing, any functions not explicitly marked
+ * as pragma roots are reduced to mere declarations.  This leaves one
+ * with a reduced source file that still compiles to object code, but
+ * which contains the bodies of only explicitly retained functions.
+ *)
+
+let amputateFunctionBodies keptGlobals file =
+  let considerGlobal = function
+    | GFun ({svar = {vname = name} as info}, location)
+      when not (H.mem keptGlobals name) ->
+	trace (dprintf "slicing: reducing to prototype: function %s\n" name);
+	GVarDecl (info, location)
+    | other ->
+	other
+  in
+  mapGlobals file considerGlobal
+
+
+
+(***********************************************************************
+ *
+ *  Root collection from pragmas
+ *
+ *)
+
+
+let isPragmaRoot keepers = function
+  | GType ({tname = name}, _) ->
+      H.mem keepers.typedefs name
+  | GEnumTag ({ename = name}, _)
+  | GEnumTagDecl ({ename = name}, _) ->
+      H.mem keepers.enums name
+  | GCompTag ({cname = name; cstruct = structure}, _)
+  | GCompTagDecl ({cname = name; cstruct = structure}, _) ->
+      let collection = if structure then keepers.structs else keepers.unions in
+      H.mem collection name
+  | GVar ({vname = name}, _, _)
+  | GVarDecl ({vname = name}, _)
+  | GFun ({svar = {vname = name}}, _) ->
+      H.mem keepers.defines name
+  | _ ->
+      false
+
+
+
+(***********************************************************************
+ *
+ *  Common root collecting utilities
+ *
+ *)
+
+
+let traceRoot reason global =
+  trace (dprintf "root (%s): %a@!" reason d_shortglobal global);
+  true
+
+
+let traceNonRoot reason global =
+  trace (dprintf "non-root (%s): %a@!" reason d_shortglobal global);
+  false
+
+
+let hasExportingAttribute funvar =
+  let rec isExportingAttribute = function
+    | Attr ("constructor", []) -> true
+    | Attr ("destructor", []) -> true
+    | _ -> false
+  in
+  List.exists isExportingAttribute funvar.vattr
+
+
+
+(***********************************************************************
+ *
+ *  Root collection from external linkage
+ *
+ *)
+
+
+(* Exported roots are those global symbols which are visible to the
+ * linker and dynamic loader.  For variables, this consists of
+ * anything that is not "static".  For functions, this consists of:
+ *
+ * - functions bearing a "constructor" or "destructor" attribute
+ * - functions declared extern but not inline
+ * - functions declared neither inline nor static
+ *
+ * gcc incorrectly (according to C99) makes inline functions visible to
+ * the linker.  So we can only remove inline functions on MSVC.
+ *)
+
+let isExportedRoot global =
+  let result, reason = match global with
+  | GVar ({vstorage = Static}, _, _) ->
+      false, "static variable"
+  | GVar _ ->
+      true, "non-static variable"
+  | GFun ({svar = v}, _) -> begin 
+      if hasExportingAttribute v then 
+	true, "constructor or destructor function"
+      else if v.vstorage = Static then 
+        false, "static function"
+      else if v.vinline && v.vstorage != Extern
+              && (!msvcMode || !rmUnusedInlines) then 
+        false, "inline function"
+      else
+	true, "other function"
+  end
+  | GVarDecl(v,_) when hasAttribute "alias" v.vattr ->
+      true, "has GCC alias attribute"
+  | _ ->
+      false, "neither function nor variable"
+  in
+  trace (dprintf "isExportedRoot %a -> %b, %s@!" 
+           d_shortglobal global result reason);
+  result
+
+
+
+(***********************************************************************
+ *
+ *  Root collection for complete programs
+ *
+ *)
+
+
+(* Exported roots are "main()" and functions bearing a "constructor"
+ * or "destructor" attribute.  These are the only things which must be
+ * retained in a complete program.
+ *)
+
+let isCompleteProgramRoot global =
+  let result = match global with
+  | GFun ({svar = {vname = "main"; vstorage = vstorage}}, _) ->
+      vstorage <> Static
+  | GFun (fundec, _)
+    when hasExportingAttribute fundec.svar ->
+      true
+  | _ ->
+      false
+  in
+  trace (dprintf "complete program root -> %b for %a@!" result d_shortglobal global);
+  result
+
+
+(***********************************************************************
+ *
+ *  Transitive reachability closure from roots
+ *
+ *)
+
+
+(* This visitor recursively marks all reachable types and variables as used. *)
+class markReachableVisitor 
+    ((globalMap: (string, Cil.global) H.t),
+     (currentFunc: fundec option ref)) = object (self)
+  inherit nopCilVisitor
+
+  method vglob = function
+    | GType (typeinfo, _) ->
+	typeinfo.treferenced <- true;
+	DoChildren
+    | GCompTag (compinfo, _)
+    | GCompTagDecl (compinfo, _) ->
+	compinfo.creferenced <- true;
+	DoChildren
+    | GEnumTag (enuminfo, _)
+    | GEnumTagDecl (enuminfo, _) ->
+	enuminfo.ereferenced <- true;
+	DoChildren
+    | GVar (varinfo, _, _)
+    | GVarDecl (varinfo, _)
+    | GFun ({svar = varinfo}, _) ->
+	varinfo.vreferenced <- true;
+	DoChildren
+    | _ ->
+	SkipChildren
+
+  method vinst = function
+      Asm (_, tmpls, _, _, _, _) when !msvcMode -> 
+          (* If we have inline assembly on MSVC, we cannot tell which locals 
+           * are referenced. Keep thsem all *)
+        (match !currentFunc with 
+          Some fd -> 
+            List.iter (fun v -> 
+              let vre = Str.regexp_string (Str.quote v.vname) in 
+              if List.exists (fun tmp -> 
+                try ignore (Str.search_forward vre tmp 0); true
+                with Not_found -> false)
+                  tmpls 
+              then
+                v.vreferenced <- true) fd.slocals
+        | _ -> assert false);
+        DoChildren
+    | _ -> DoChildren
+
+  method vvrbl v =
+    if not v.vreferenced then
+      begin
+	let name = v.vname in
+	if v.vglob then
+	  trace (dprintf "marking transitive use: global %s\n" name)
+	else
+	  trace (dprintf "marking transitive use: local %s\n" name);
+	
+        (* If this is a global, we need to keep everything used in its
+	 * definition and declarations. *)
+	if v.vglob then
+	  begin
+	    trace (dprintf "descending: global %s\n" name);
+	    let descend global =
+	      ignore (visitCilGlobal (self :> cilVisitor) global)
+	    in
+	    let globals = Hashtbl.find_all globalMap name in
+	    List.iter descend globals
+	  end
+	else
+	  v.vreferenced <- true;
+      end;
+    SkipChildren
+
+  method vexpr (e: exp) = 
+    match e with 
+      Const (CEnum (_, _, ei)) -> ei.ereferenced <- true;
+                                  DoChildren
+    | _ -> DoChildren
+
+  method vtype typ =
+    let old : bool =
+      let visitAttrs attrs =
+	ignore (visitCilAttributes (self :> cilVisitor) attrs)
+      in
+      let visitType typ =
+	ignore (visitCilType (self :> cilVisitor) typ)
+      in
+      match typ with
+      | TEnum(e, attrs) ->
+	  let old = e.ereferenced in
+	  if not old then
+	    begin
+	      trace (dprintf "marking transitive use: enum %s\n" e.ename);
+	      e.ereferenced <- true;
+	      visitAttrs attrs;
+	      visitAttrs e.eattr
+	    end;
+	  old
+
+      | TComp(c, attrs) ->
+	  let old = c.creferenced in
+          if not old then
+            begin
+	      trace (dprintf "marking transitive use: compound %s\n" c.cname);
+	      c.creferenced <- true;
+
+              (* to recurse, we must ask explicitly *)
+	      let recurse f = visitType f.ftype in
+	      List.iter recurse c.cfields;
+	      visitAttrs attrs;
+	      visitAttrs c.cattr
+	    end;
+	  old
+
+      | TNamed(ti, attrs) ->
+	  let old = ti.treferenced in
+          if not old then
+	    begin
+	      trace (dprintf "marking transitive use: typedef %s\n" ti.tname);
+	      ti.treferenced <- true;
+	      
+	      (* recurse deeper into the type referred-to by the typedef *)
+	      (* to recurse, we must ask explicitly *)
+	      visitType ti.ttype;
+	      visitAttrs attrs
+	    end;
+	  old
+
+      | _ ->
+          (* for anything else, just look inside it *)
+	  false
+    in
+    if old then
+      SkipChildren
+    else
+      DoChildren
+end
+
+
+let markReachable file isRoot =
+  (* build a mapping from global names back to their definitions & 
+   * declarations *)
+  let globalMap = Hashtbl.create 137 in
+  let considerGlobal global =
+    match global with
+    | GFun ({svar = info}, _)
+    | GVar (info, _, _)
+    | GVarDecl (info, _) ->
+	Hashtbl.add globalMap info.vname global
+    | _ ->
+	()
+  in
+  iterGlobals file considerGlobal;
+
+  let currentFunc = ref None in 
+
+  (* mark everything reachable from the global roots *)
+  let visitor = new markReachableVisitor (globalMap, currentFunc) in
+  let visitIfRoot global =
+    if isRoot global then
+      begin
+	trace (dprintf "traversing root global: %a\n" d_shortglobal global);
+        (match global with 
+          GFun(fd, _) -> currentFunc := Some fd
+        | _ -> currentFunc := None);
+	ignore (visitCilGlobal visitor global)
+      end
+    else
+      trace (dprintf "skipping non-root global: %a\n" d_shortglobal global)
+  in
+  iterGlobals file visitIfRoot
+
+
+(**********************************************************************
+ *
+ * Marking and removing of unused labels
+ *
+ **********************************************************************)
+
+(* We keep only one label, preferably one that was not introduced by CIL. 
+ * Scan a list of labels and return the data for the label that should be 
+ * kept, and the remaining filtered list of labels *)
+let labelsToKeep (ll: label list) : (string * location * bool) * label list = 
+  let rec loop (sofar: string * location * bool) = function
+      [] -> sofar, []
+    | l :: rest -> 
+        let newlabel, keepl = 
+          match l with
+          | Case _ | Default _ -> sofar, true 
+          | Label (ln, lloc, isorig) -> begin
+              match isorig, sofar with 
+              | false, ("", _, _) -> 
+                  (* keep this one only if we have no label so far *)
+                  (ln, lloc, isorig), false
+              | false, _ -> sofar, false
+              | true, (_, _, false) -> 
+                  (* this is an original label; prefer it to temporary or 
+                   * missing labels *)
+                  (ln, lloc, isorig), false
+              | true, _ -> sofar, false
+          end
+        in
+        let newlabel', rest' = loop newlabel rest in
+        newlabel', (if keepl then l :: rest' else rest')
+  in
+  loop ("", locUnknown, false) ll
+
+class markUsedLabels (labelMap: (string, unit) H.t) = object
+  inherit nopCilVisitor
+
+  method vstmt (s: stmt) = 
+    match s.skind with 
+      Goto (dest, _) -> 
+        let (ln, _, _), _ = labelsToKeep !dest.labels in
+        if ln = "" then 
+          E.s (E.bug "rmtmps: destination of statement does not have labels");
+        (* Mark it as used *)
+        H.replace labelMap ln ();
+        DoChildren
+
+    | _ -> DoChildren
+
+   (* No need to go into expressions or instructions *)
+  method vexpr _ = SkipChildren
+  method vinst _ = SkipChildren
+  method vtype _ = SkipChildren
+end
+
+class removeUnusedLabels (labelMap: (string, unit) H.t) = object
+  inherit nopCilVisitor
+
+  method vstmt (s: stmt) = 
+    let (ln, lloc, lorig), lrest = labelsToKeep s.labels in
+    s.labels <-
+       (if ln <> "" && H.mem labelMap ln then (* We had labels *)
+         (Label(ln, lloc, lorig) :: lrest)
+       else
+         lrest);
+    DoChildren
+
+   (* No need to go into expressions or instructions *)
+  method vexpr _ = SkipChildren
+  method vinst _ = SkipChildren
+  method vtype _ = SkipChildren
+end
+
+(***********************************************************************
+ *
+ *  Removal of unused symbols
+ *
+ *)
+
+
+(* regular expression matching names of uninteresting locals *)
+let uninteresting =
+  let names = [
+    (* Cil.makeTempVar *)
+    "__cil_tmp";
+    
+    (* sm: I don't know where it comes from but these show up all over. *)
+    (* this doesn't seem to do what I wanted.. *)
+    "iter";
+
+    (* various macros in glibc's <bits/string2.h> *)		   
+    "__result";
+    "__s"; "__s1"; "__s2";
+    "__s1_len"; "__s2_len";
+    "__retval"; "__len";
+
+    (* various macros in glibc's <ctype.h> *)
+    "__c"; "__res";
+
+    (* We remove the __malloc variables *)
+  ] in
+
+  (* optional alpha renaming *)
+  let alpha = "\\(___[0-9]+\\)?" in
+  
+  let pattern = "\\(" ^ (String.concat "\\|" names) ^ "\\)" ^ alpha ^ "$" in
+  Str.regexp pattern
+
+
+let removeUnmarked file =
+  let removedLocals = ref [] in
+  
+  let filterGlobal global =
+    match global with
+    (* unused global types, variables, and functions are simply removed *)
+    | GType ({treferenced = false}, _)
+    | GCompTag ({creferenced = false}, _)
+    | GCompTagDecl ({creferenced = false}, _)
+    | GEnumTag ({ereferenced = false}, _)
+    | GEnumTagDecl ({ereferenced = false}, _)
+    | GVar ({vreferenced = false}, _, _)
+    | GVarDecl ({vreferenced = false}, _)
+    | GFun ({svar = {vreferenced = false}}, _) ->
+	trace (dprintf "removing global: %a\n" d_shortglobal global);
+	false
+
+    (* retained functions may wish to discard some unused locals *)
+    | GFun (func, _) ->
+	let rec filterLocal local =
+	  if not local.vreferenced then
+	    begin
+	      (* along the way, record the interesting locals that were removed *)
+	      let name = local.vname in
+	      trace (dprintf "removing local: %s\n" name);
+	      if not (Str.string_match uninteresting name 0) then
+		removedLocals := (func.svar.vname ^ "::" ^ name) :: !removedLocals;
+	    end;
+	  local.vreferenced
+	in
+	func.slocals <- List.filter filterLocal func.slocals;
+        (* We also want to remove unused labels. We do it all here, including 
+         * marking the used labels *)
+        let usedLabels:(string, unit) H.t = H.create 13 in
+        ignore (visitCilBlock (new markUsedLabels usedLabels) func.sbody);
+        (* And now we scan again and we remove them *)
+        ignore (visitCilBlock (new removeUnusedLabels usedLabels) func.sbody);
+	true
+
+    (* all other globals are retained *)
+    | _ ->
+	trace (dprintf "keeping global: %a\n" d_shortglobal global);
+	true
+  in
+  file.globals <- List.filter filterGlobal file.globals;
+  !removedLocals
+
+
+(***********************************************************************
+ *
+ *  Exported interface
+ *
+ *)
+
+
+type rootsFilter = global -> bool
+
+let isDefaultRoot = isExportedRoot
+
+let rec removeUnusedTemps ?(isRoot : rootsFilter = isDefaultRoot) file =
+  if !keepUnused || Trace.traceActive "disableTmpRemoval" then
+    Trace.trace "disableTmpRemoval" (dprintf "temp removal disabled\n")
+  else
+    begin
+      if !E.verboseFlag then 
+        ignore (E.log "Removing unused temporaries\n" );
+
+      if Trace.traceActive "printCilTree" then
+	dumpFile defaultCilPrinter stdout "stdout" file;
+
+      (* digest any pragmas that would create additional roots *)
+      let keepers = categorizePragmas file in
+
+      (* if slicing, remove the bodies of non-kept functions *)
+      if !Cilutil.sliceGlobal then
+	amputateFunctionBodies keepers.defines file;
+
+      (* build up the root set *)
+      let isRoot global =
+	isPragmaRoot keepers global ||
+	isRoot global
+      in
+
+      (* mark everything reachable from the global roots *)
+      clearReferencedBits file;
+      markReachable file isRoot;
+
+      (* take out the trash *)
+      let removedLocals = removeUnmarked file in
+
+      (* print which original source variables were removed *)
+      if false && removedLocals != [] then
+	let count = List.length removedLocals in
+	if count > 2000 then 
+	  ignore (E.warn "%d unused local variables removed" count)
+	else
+	  ignore (E.warn "%d unused local variables removed:@!%a"
+		    count (docList ~sep:(chr ',' ++ break) text) removedLocals)
+    end
diff --git a/cil/src/rmtmps.mli b/cil/src/rmtmps.mli
new file mode 100644
index 000000000..e29f0c6bd
--- /dev/null
+++ b/cil/src/rmtmps.mli
@@ -0,0 +1,82 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ *  Ben Liblit          <liblit@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* rmtmps.mli *)
+(* remove unused things from cil files:               *)
+(*   - local temporaries introduced but not used      *)
+(*   - global declarations that are not used          *)
+(*   - types that are not used                        *)
+(*   - labels that are not used (gn)                  *)
+
+
+(* Some clients may wish to augment or replace the standard strategy
+ * for finding the initially reachable roots.  The optional
+ * "isRoot" argument to Rmtmps.removeUnusedTemps grants this
+ * flexibility.  If given, it should name a function which will return
+ * true if a given global should be treated as a retained root.
+ * 
+ * Function Rmtmps.isDefaultRoot encapsulates the default root
+ * collection, which consists of those global variables and functions
+ * which are visible to the linker and runtime loader.  A client's
+ * root filter can use this if the goal is to augment rather than
+ * replace the standard logic.  Function Rmtmps.isExportedRoot is an
+ * alternate name for this same function.
+ * 
+ * Function Rmtmps.isCompleteProgramRoot is an example of an alternate
+ * root collection.  This function assumes that it is operating on a
+ * complete program rather than just one object file.  It treats
+ * "main()" as a root, as well as any function carrying the
+ * "constructor" or "destructor" attribute.  All other globals are
+ * candidates for removal, regardless of their linkage.
+ * 
+ * Note that certain CIL- and CCured-specific pragmas induce
+ * additional global roots.  This functionality is always present, and
+ * is not subject to replacement by "filterRoots".
+ *)
+
+type rootsFilter = Cil.global -> bool
+val isDefaultRoot : rootsFilter
+val isExportedRoot : rootsFilter
+val isCompleteProgramRoot : rootsFilter
+
+(* process a complete Cil file *)
+val removeUnusedTemps: ?isRoot:rootsFilter -> Cil.file -> unit
+
+
+val keepUnused: bool ref (* Set this to true to turn off this module *)
+val rmUnusedInlines: bool ref (* Delete unused inline funcs in gcc mode? *)
diff --git a/cil/src/testcil.ml b/cil/src/testcil.ml
new file mode 100644
index 000000000..0c0ef0184
--- /dev/null
+++ b/cil/src/testcil.ml
@@ -0,0 +1,440 @@
+(*
+ *
+ * Copyright (c) 2001-2002, 
+ *  George C. Necula    <necula@cs.berkeley.edu>
+ *  Scott McPeak        <smcpeak@cs.berkeley.edu>
+ *  Wes Weimer          <weimer@cs.berkeley.edu>
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. The names of the contributors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *)
+
+(* A test for CIL *)
+open Pretty
+open Cil
+module E = Errormsg
+
+let lu = locUnknown
+
+(* If you have trouble try to reproduce the problem on a smaller type. Try 
+ * limiting the maxNesting and integerKinds *)
+let integerKinds = [ IChar; ISChar; IUChar; IInt; IUInt; IShort; IUShort;
+                     ILong; IULong; ILongLong; IULongLong ] 
+let floatKinds = [ FFloat; FDouble ] 
+    
+let baseTypes = 
+       (List.map (fun ik -> (1, fun _ -> TInt(ik, []))) integerKinds)
+     @ (List.map (fun fk -> (1, fun _ -> TFloat(fk, []))) floatKinds)
+
+
+(* Make a random struct *)
+let maxNesting  = ref 3  (* Maximum number of levels for struct nesting *)
+let maxFields   = ref 8  (* The maximum number of fields in a struct *)
+let useBitfields = ref false
+let useZeroBitfields = ref true
+
+
+
+(* Collect here the globals *)
+let globals: global list ref = ref []
+let addGlobal (g:global) = globals := g :: !globals
+let getGlobals () = List.rev !globals
+ 
+(* Collect here the statements for main *)
+let statements: stmt list ref = ref []
+let addStatement (s: stmt) = statements := s :: !statements
+let getStatements () = List.rev !statements
+
+(* Keep here the main function *)
+let main: fundec ref = ref dummyFunDec
+let mainRetVal: varinfo ref = ref dummyFunDec.svar
+
+let assertId = ref 0 
+let addAssert (b: exp) (extra: stmt list) : unit = 
+  incr assertId;
+  addStatement (mkStmt (If(UnOp(LNot, b, intType),
+                           mkBlock (extra @ 
+                                    [mkStmt (Return (Some (integer !assertId),
+                                                     lu))]),
+                           mkBlock [], lu)))
+
+let addSetRetVal (b: exp) (extra: stmt list) : unit = 
+  addStatement 
+    (mkStmt (If(UnOp(LNot, b, intType),
+                mkBlock (extra @ 
+                         [mkStmtOneInstr (Set(var !mainRetVal, one, lu))]),
+                mkBlock [], lu)))
+
+
+let printfFun: fundec = 
+  let fdec = emptyFunction "printf" in
+  fdec.svar.vtype <- 
+     TFun(intType, Some [ ("format", charPtrType, [])], true, []);
+  fdec
+
+
+let memsetFun: fundec = 
+  let fdec = emptyFunction "memset" in
+  fdec.svar.vtype <- 
+     TFun(voidPtrType, Some [ ("start", voidPtrType, []);
+                              ("v", intType, []);
+                              ("len", uintType, [])], false, []);
+  fdec
+
+let checkOffsetFun: fundec = 
+  let fdec = emptyFunction "checkOffset" in
+  fdec.svar.vtype <- 
+     TFun(voidType, Some [ ("start", voidPtrType, []);
+                           ("len", uintType, []);
+                           ("expected_start", intType, []);
+                           ("expected_width", intType, []);
+                           ("name", charPtrType, []) ], false, []);
+  fdec
+
+let checkSizeOfFun: fundec = 
+  let fdec = emptyFunction "checkSizeOf" in
+  fdec.svar.vtype <- 
+     TFun(voidType, Some [ ("len", uintType, []);
+                           ("expected", intType, []);
+                           ("name", charPtrType, []) ], false, []);
+  fdec
+
+
+let doPrintf format args = 
+  mkStmtOneInstr (Call(None, Lval(var printfFun.svar),
+                       (Const(CStr format)) :: args, lu))
+
+
+(* Select among the choices, each with a given weight *)
+type 'a selection = int * (unit -> 'a)
+let select (choices: 'a selection list) : 'a = 
+  (* Find the total weight *)
+  let total = List.fold_left (fun sum (w, _) -> sum + w) 0 choices in
+  if total = 0 then E.s (E.bug "Total for choices = 0\n");
+  (* Pick a random number *)
+  let thechoice = Random.int total in
+  (* Now get the choice *)
+  let rec loop thechoice = function
+      [] -> E.s (E.bug "Ran out of choices\n")
+    | (w, c) :: rest -> 
+        if thechoice < w then c () else loop (thechoice - w) rest
+  in
+  loop thechoice choices
+
+
+(* Generate a new name *)
+let nameId = ref 0
+let newName (base: string) = 
+  incr nameId;
+  base ^ (string_of_int !nameId)
+
+
+(********** Testing of SIZEOF ***********)
+
+(* The current selection of types *)
+let typeChoices : typ selection list ref = ref [] 
+
+let baseTypeChoices : typ selection list ref = ref []
+
+
+let currentNesting = ref 0
+let mkCompType (iss: bool) =  
+  if !currentNesting >= !maxNesting then (* Replace it with an int *)
+    select !baseTypeChoices
+  else begin
+    incr currentNesting;
+    let ci = 
+      mkCompInfo iss (newName "comp") 
+        (fun _ -> 
+          let nrFields = 1 + (Random.int !maxFields) in
+          let rec mkFields (i: int) =
+            if i = nrFields then [] else begin
+              let ft = select !typeChoices in
+              let fname = "f" ^ string_of_int i in
+              let fname', width = 
+                if not !useBitfields || not (isIntegralType ft) 
+                                     || (Random.int 8 >= 6) then 
+                  fname, None 
+                else begin
+                  let tw = bitsSizeOf ft in (* Assume this works for TInt *)
+                  let w = (if !useZeroBitfields then 0 else 1) + 
+                          Random.int (3 * tw / 4) in
+                  (if w = 0 then "___missing_field_name" else fname), Some w
+                end
+              in
+              (fname', ft, width, [], lu) :: mkFields (i + 1) 
+            end
+          in
+          mkFields 0)
+        []
+    in
+    decr currentNesting;
+    (* Register it with the file *)
+    addGlobal (GCompTag(ci, lu));
+    TComp(ci, [])
+  end
+
+(* Make a pointer type. They are all equal so make one to void *)
+let mkPtrType () = TPtr(TVoid([]), [])
+
+(* Make an array type. *)
+let mkArrayType () = 
+  if !currentNesting >= !maxNesting then 
+    select !baseTypeChoices
+  else begin
+    incr currentNesting;
+    let at = TArray(select !typeChoices, Some (integer (1 + (Random.int 32))),
+                    []) in
+    decr currentNesting;
+    at
+  end
+  
+
+let testSizeOf () = 
+  let doOne (i: int) = 
+(*    ignore (E.log "doOne %d\n" i); *)
+    (* Make a random type *)
+    let t = select !typeChoices in
+    (* Create a global with that type *)
+    let g = makeGlobalVar (newName "g") t in
+    addGlobal (GVar(g, {init=None}, lu));
+    addStatement (mkStmtOneInstr(Call(None, Lval(var memsetFun.svar),
+                                      [ mkAddrOrStartOf (var g); zero;
+                                        SizeOfE(Lval(var g))], lu)));
+    try
+(*      if i = 0 then ignore (E.log "0: %a\n" d_plaintype t); *)
+      let bsz = 
+        try bitsSizeOf t  (* This is what we are testing *)
+        with e -> begin
+          ignore (E.log "Exception %s caught while computing bitsSizeOf(%a)\n"
+                    (Printexc.to_string e) d_type t);
+          raise (Failure "")
+        end
+      in
+(*      ignore (E.log "1 "); *)
+      if bsz mod 8 <> 0 then begin
+        ignore (E.log "bitsSizeOf did not return a multiple of 8\n");
+        raise (Failure "");
+      end;
+(*      ignore (E.log "2 "); *)
+      (* Check the offset of all fields in there *)
+      let rec checkOffsets (lv: lval) (lvt: typ) = 
+        match lvt with
+          TComp(c, _) -> 
+            List.iter 
+              (fun f -> 
+                if f.fname <> "___missing_field_name" then 
+                  checkOffsets (addOffsetLval (Field(f, NoOffset)) lv) f.ftype)
+              c.cfields
+        | TArray (bt, Some len, _) -> 
+            let leni = 
+              match isInteger len with
+                Some i64 -> Int64.to_int i64
+              | None -> E.s (E.bug "Array length is not a constant")
+            in
+            let i = Random.int leni in
+            checkOffsets (addOffsetLval (Index(integer i, NoOffset)) lv) bt
+
+        | _ -> (* Now a base type *)
+            let _, off = lv in 
+            let start, width = bitsOffset t off in
+            let setLv (v: exp) = 
+              match lvt with
+                TFloat (FFloat, _) -> 
+                  Set((Mem (mkCast (AddrOf lv) intPtrType), NoOffset),
+                      v, lu)
+              | TFloat (FDouble, _) -> 
+                  Set((Mem (mkCast (AddrOf lv) 
+                              (TPtr(TInt(IULongLong, []), []))), NoOffset),
+                      mkCast v (TInt(IULongLong, [])), lu)
+
+              | (TPtr _ | TInt((IULongLong|ILongLong), _)) -> 
+                  Set(lv, mkCast v lvt, lu)
+              | _ -> Set(lv, v, lu)
+            in
+            let ucharPtrType = TPtr(TInt(IUChar, []), []) in
+            let s = 
+              mkStmt (Instr ([ setLv mone;
+                               Call(None, Lval(var checkOffsetFun.svar),
+                                    [ mkCast (mkAddrOrStartOf (var g))
+                                             ucharPtrType;
+                                      SizeOfE (Lval(var g));
+                                      integer start; 
+                                      integer width;
+                                      (Const(CStr(sprint 80 
+                                                    (d_lval () lv))))],lu);
+                               setLv zero])) in
+            addStatement s
+      in
+      checkOffsets (var g) t;
+(*      ignore (E.log "3 ");*)
+      (* Now check the size of *)
+      let s = mkStmtOneInstr (Call(None, Lval(var checkSizeOfFun.svar),
+                                   [ SizeOfE (Lval (var g));
+                                     integer (bitsSizeOf t);
+                                     mkString g.vname ], lu)) in
+      addStatement s;
+(*      ignore (E.log "10\n"); *)
+    with _ -> ()
+  in
+
+  (* Make the composite choices more likely *)
+  typeChoices := 
+     [ (1, mkPtrType); 
+       (5, mkArrayType);
+       (5, fun _ -> mkCompType true);
+       (5, fun _ -> mkCompType false); ]
+     @ baseTypes;
+  baseTypeChoices := baseTypes;
+  useBitfields := false;
+  maxFields := 4;
+  for i = 0 to 100 do 
+    doOne i
+  done;
+                   
+  (* Now test the bitfields. *)
+  typeChoices :=  [ (1, fun _ -> mkCompType true) ];
+  baseTypeChoices := [(1, fun _ -> TInt(IInt, []))];
+  useBitfields := true;
+
+  for i = 0 to 100 do
+    doOne i
+  done;
+
+  (* Now make it a bit more complicated *)
+  baseTypeChoices := 
+     List.map (fun ik -> (1, fun _ -> TInt(ik, []))) 
+       [IInt; ILong; IUInt; IULong ];
+  useBitfields := true;
+  for i = 0 to 100 do
+    doOne i
+  done;
+
+  (* An really complicated now *)
+  baseTypeChoices := baseTypes;
+  useBitfields := true;
+  for i = 0 to 100 do 
+    doOne i
+  done;
+
+  ()
+
+
+(* Now the main tester. Pass to it the name of a command "cmd" that when 
+ * invoked will compile "testingcil.c" and run the result *)
+let createFile () = 
+
+  assertId := 0;
+  nameId := 0;
+
+  (* Start a new file *)
+  globals := [];
+  statements := [];
+
+  (* Now make a main function *)
+  main := emptyFunction "main";
+  !main.svar.vtype <- TFun(intType, None, false, []);
+  mainRetVal := makeGlobalVar "retval" intType;
+
+  addGlobal (GVar(!mainRetVal, {init=None}, lu));
+  addGlobal (GText("#include \"testcil.h\"\n"));
+  addStatement (mkStmtOneInstr(Set(var !mainRetVal, zero, lu)));
+
+  (* Add prototype for printf *)
+  addGlobal (GVar(printfFun.svar, {init=None}, lu));
+  addGlobal (GVar(memsetFun.svar, {init=None}, lu));
+
+  (* now fill in the composites and the code of main. For simplicity we add 
+   * the statements of main in reverse order *)
+
+  testSizeOf ();
+
+
+  (* Now add a return 0 at the end *)
+  addStatement (mkStmt (Return(Some (Lval(var !mainRetVal)), lu)));
+  
+  
+  (* Add main at the end *)
+  addGlobal (GFun(!main, lu));
+  !main.sbody.bstmts <- getStatements ();
+
+  (* Now build the CIL.file *)
+  let file = 
+    { fileName = "testingcil.c";
+      globals  = getGlobals ();
+      globinit = None;
+      globinitcalled = false;
+    } 
+  in
+  (* Print the file *)
+  let oc = open_out "testingcil.c" in
+  dumpFile defaultCilPrinter oc "testingcil.c" file;
+  close_out oc
+
+  
+
+
+
+(* initialization code for the tester *)
+let randomStateFile = "testcil.random"  (* The name of a file where we store 
+                                         * the state of the random number 
+                                         * generator last time *)
+let doit (command: string) = 
+  while true do
+    (* Initialize the random no generator *)
+    begin
+      try
+        let randomFile = open_in randomStateFile in
+        (* The file exists so restore the Random state *)
+        Random.set_state (Marshal.from_channel randomFile);
+        ignore (E.log "!! Restoring Random state from %s\n" randomStateFile);
+        close_in randomFile;
+        (* Leave the file there until we succeed *)
+      with _ -> begin
+        (* The file does not exist *)
+        Random.self_init ();
+        (* Save the state of the generator *)
+        let randomFile = open_out randomStateFile in
+        Marshal.to_channel randomFile (Random.get_state()) [] ;
+        close_out randomFile;
+      end
+    end;
+    createFile ();
+    (* Now compile and run the file *)
+    ignore (E.log "Running %s\n" command);
+    let err = Sys.command command in
+    if err <> 0 then
+      E.s (E.bug "Failed to run the command: %s (errcode=%d)" command err)
+    else begin
+      ignore (E.log "Successfully ran one more round. Press CTRL-C to stop\n");
+      (* Delete the file *)
+      Sys.remove randomStateFile
+    end
+  done
+
diff --git a/cil/test/small1/func.c b/cil/test/small1/func.c
new file mode 100644
index 000000000..a0f4e4e56
--- /dev/null
+++ b/cil/test/small1/func.c
@@ -0,0 +1,24 @@
+int (*pfun1)(int (*)(int), int);
+int (*pfun2)(int (*)(int), int);
+
+typedef int (*intfun)(int);
+intfun arrfun[5];
+
+int testf(int k) {
+  return k;
+}
+
+int foo(int (*bar)(int), int n) {
+
+  pfun1 = foo;
+  pfun1 = & foo;
+  pfun1 = * * * pfun2;
+
+  pfun1 = arrfun[4];
+  
+  pfun2(* * testf, 5);
+
+  return 1;
+}
+
+
diff --git a/cil/test/small1/hello.c b/cil/test/small1/hello.c
new file mode 100644
index 000000000..cbe8ad07a
--- /dev/null
+++ b/cil/test/small1/hello.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+
+
+int main() {
+  printf("Hello world\n");
+  return 0;
+}
diff --git a/cil/test/small1/init.c b/cil/test/small1/init.c
new file mode 100644
index 000000000..4578b5be8
--- /dev/null
+++ b/cil/test/small1/init.c
@@ -0,0 +1,177 @@
+#ifndef __NULLTERM
+#define __NULLTERM
+#define __SIZED
+#endif
+#include "testharness.h"
+
+extern int strcmp(const char*, const char*);
+
+/* run this with COMPATMODE=1 if compiling directly, since neither GCC nor 
+ * MSVCC fully support the C standard */
+static char *usageplocal = "Usage";
+static char usageescape = 'C';
+
+char *usagep = "Usage non-local";
+char *usagep1 = { "Usage in a brace" };
+int  g = { 6 } ;
+
+char usages[] = "Usage string";
+char strange[] = { "several" };
+
+char *null = (void*)0;
+
+
+typedef struct s {
+  char *name;
+  int   data;
+} STR;
+
+extern int afunc(int x);
+int (*fptr)(int) = afunc;
+
+STR a[] = {
+  {"first", 0},
+  {"second", 1},
+  {& usages[2], 2},
+  { & usageescape, 3},
+  { usages, 4},
+};
+
+
+typedef struct {
+  struct {
+    char * a1[10];
+    char * a2;
+    char   strbuff[20] __NULLTERM;
+  } f1;
+  struct {
+    int * i1;
+  } f2[5] __SIZED;
+} NESTED;
+
+NESTED glob1;
+
+int glob3;
+int * glob2 = & glob3;
+
+int afunc(int a) {
+  NESTED loc1;
+  char   locbuff[30] __NULLTERM;
+  char   indexbuff[10] __SIZED;
+
+  loc1.f1.a2 = glob1.f1.a2;
+  
+  return * loc1.f2[3].i1 + (locbuff[0] - indexbuff[0]);
+}
+
+
+
+// now initialization for union
+union  {
+  struct {
+    int a;
+    int *b;
+  } u1;
+  int c;
+} uarray[] = { 1, 0, 2, 0, 3, 0 };
+
+
+// now some examples from the standard
+int z[4][3] =
+{ { 1 }, { 2 }, { 3 }, { 4 } };
+
+struct str1 { int a[3]; int b;};
+
+struct str1 w[] =
+{ { 1 }, { 2 } };
+
+
+short q[4][3][2] = {
+  { 1 } ,
+  { 2, 3 },
+  { 4, 5, 6}
+};
+
+short q1[4][3][2] = {
+  1, 0, 0, 0, 0, 0,
+  2, 3, 0, 0, 0, 0,
+  4, 5, 6, 0, 0, 0,
+};
+
+
+
+#ifdef _GNUCC
+int a1[10] = {
+  1, 3, 5, 7, 9, [6] = 8, 6, 4, 2};
+
+
+enum { member_one, member_two, member_three };
+char *nm[] = {
+  [member_two] = "member_two",
+  [member_three] = "member_three",
+};
+
+
+#endif
+
+
+
+#define ERROR(n) { printf("Incorrect init: %d\n", n); exit(1); }
+// Test the initialization
+int main() {
+  int i;
+
+  struct str1 astr = w[0];
+    
+  if(strcmp(a[0].name, "first")) {
+    ERROR(0);
+  }
+  if(sizeof(uarray) / sizeof(uarray[0]) != 3) {
+    ERROR(1);
+  } 
+  if(uarray[2].u1.a != 3) {
+    ERROR(2);
+  }
+
+  if(z[2][0] != 3 ||
+     z[2][1] != 0) {
+    ERROR(4);
+  }
+
+  if(sizeof(w) / sizeof(w[0]) != 2 ||
+     w[1].a[0] != 2) {
+    ERROR(5);
+  }
+  {
+    short * ps = (short*)q, * ps1 = (short*)q1;
+    for(i=0;i<sizeof(q) / sizeof(short); i++, ps ++, ps1 ++) {
+      if(*ps != *ps1) {
+        ERROR(6);
+      }
+    }
+  }
+
+#ifdef _GNUCC
+  if(a1[1] != 3 ||
+     a1[5] != 0 ||
+     a1[6] != 8 ||
+     a1[7] != 6) {
+    ERROR(7);
+  }
+
+
+  if(strcmp(nm[1], "member_two") ||
+     strcmp(nm[2], "member_three") ||
+     sizeof(nm) != 3 * sizeof(nm[0])) {
+    ERROR(8);
+  }
+
+#endif
+
+  
+  printf("Initialization test succeeded\n");
+  return 0;
+}
+
+
+
diff --git a/cil/test/small1/init1.c b/cil/test/small1/init1.c
new file mode 100644
index 000000000..e6334df9d
--- /dev/null
+++ b/cil/test/small1/init1.c
@@ -0,0 +1,17 @@
+extern void exit(int);
+
+struct {
+  struct {
+    int *f1;
+    int *f2;
+  } s1;
+  struct {
+    int *f3;
+  } s2;
+} memory[10] = { 1 };
+
+int main() {
+  if(memory[0].s1.f1 != (int*)1)
+    exit(1);
+  exit(0);
+}
diff --git a/cil/test/small1/testharness.h b/cil/test/small1/testharness.h
new file mode 100644
index 000000000..a1057e343
--- /dev/null
+++ b/cil/test/small1/testharness.h
@@ -0,0 +1,17 @@
+#ifndef printf
+  /* sm: this works with gcc-2.95 */
+  extern int printf(const char * format, ...);
+# ifdef CCURED
+   #pragma ccuredvararg("printf", printf(1))
+# endif
+#else
+  /* but in gcc-3 headers it's a macro.. */
+  #include <stdio.h>        /* printf */
+#endif
+
+extern void exit(int);
+
+/* Always call E with a non-zero number */
+#define E(n) { printf("Error %d\n", n); exit(n); }
+#define SUCCESS { printf("Success\n"); exit(0); }
+
diff --git a/cil/test/small1/vararg1.c b/cil/test/small1/vararg1.c
new file mode 100644
index 000000000..cc710a7b7
--- /dev/null
+++ b/cil/test/small1/vararg1.c
@@ -0,0 +1,47 @@
+
+/* VA.C: The program below illustrates passing a variable
+ * number of arguments using the following macros:
+ *      va_start            va_arg              va_end
+ *      va_list             va_dcl (UNIX only)
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+int average( int first, ... );
+union vararg_average {
+  int ints;                   /* We only pass ints to this one */
+};
+
+#include "testharness.h"
+
+int main( void )
+{
+   /* Call with 3 integers (-1 is used as terminator). */
+  if(average( 2, 3, 4, -1 ) != 3) E(1);
+  if(average( 5, 7, 9, 11, 13, -1 ) != 9) E(2);
+  if(average( -1 ) != 0) E(3);
+
+   SUCCESS;
+}
+
+
+
+/* Returns the average of a variable list of integers. */
+int average( int first, ... )
+{
+   int count = 0, sum = 0, i = first;
+   va_list marker;
+
+   va_start( marker, first );     /* Initialize variable arguments. */
+   while( i != -1 )
+   {
+      sum += i;
+      count++;
+      i = va_arg( marker, int);
+   }
+   va_end( marker );              /* Reset variable arguments.      */
+   return( sum ? (sum / count) : 0 );
+}
+
+// Put this intentionally at the end
+#pragma ccuredvararg("average", sizeof(union vararg_average))
diff --git a/cil/test/small1/wchar1.c b/cil/test/small1/wchar1.c
new file mode 100644
index 000000000..3306e571b
--- /dev/null
+++ b/cil/test/small1/wchar1.c
@@ -0,0 +1,24 @@
+#include "testharness.h"
+#include <stddef.h>
+
+int main() {
+  wchar_t *wbase = L"Hello" L", world";
+  char * w = (char *)wbase;
+  char * s =  "Hello" ", world";
+  int i;
+
+  // See if this is little or big endian
+  short foo = 0x0011;
+  char little_endian = (int) * (char*)&foo;
+
+  for (i=0; i < 10; i++) {
+    if (w[i * sizeof(wchar_t)] != (little_endian ? s[i] : 0)) {
+      E(1); 
+    } 
+    if (w[i * sizeof(wchar_t) + (sizeof(wchar_t)-1)]
+        != (little_endian ? 0 : s[i])) {
+      E(2);
+    } 
+  }
+  SUCCESS;
+}
diff --git a/configure b/configure
index 0d71d2785..fc255b274 100755
--- a/configure
+++ b/configure
@@ -12,20 +12,28 @@
 #                                                                     #
 #######################################################################
 
-cildistrib=cil-1.3.5.tar.gz
 prefix=/usr/local
 bindir='$(PREFIX)/bin'
 libdir='$(PREFIX)/lib/compcert'
 target=''
 
-usage='Usage: ./configure [options] <target>
+prompt() {
+    echo "$1 [$x] ? " | tr -d '\n'
+    read y
+    case "$y" in
+        "") ;;
+      none) x="";;
+         *) x="$y";;
+    esac
+}
+
+usage='Usage: ./configure [options] target
 
 Supported targets:
-  macosx           (PowerPC, MacOS X)
+  ppc-macosx       (PowerPC, MacOS X)
   ppc-linux        (PowerPC, Linux)
-  ppc-linux-cross  (PowerPC, Linux, cross-compilation)
   arm-linux        (ARM, Linux)
-  arm-linux-cross  (ARM, Linux, cross-compilation)
+  manual           (edit configuration file by hand)
 
 Options:
   -prefix <dir>    Install in <dir>/bin and <dir>/lib/compcert
@@ -51,14 +59,13 @@ while : ; do
   shift
 done
 
-if test -z "$target"; then echo "$usage" 1>&2; exit 2; fi
-
 # Per-target configuration
 
 case "$target" in
-  macosx)
+  ppc-macosx)
     arch="powerpc"
     variant="macosx"
+    system="macosx"
     cc="gcc -arch ppc"
     cprepro="gcc -arch ppc -U__GNUC__ -E"
     casm="gcc -arch ppc -c"
@@ -67,37 +74,29 @@ case "$target" in
   ppc-linux)
     arch="powerpc"
     variant="eabi"
+    system="linux"
     cc="gcc"
     cprepro="gcc -U__GNUC__ -E"
     casm="gcc -c"
     clinker="gcc"
     libmath="-lm";;
-  ppc-linux-cross)
-    arch="powerpc"
-    variant="eabi"
-    cc="ppc-linux-gcc"
-    cprepro="ppc-linux-gcc -U__GNUC__ -E"
-    casm="ppc-linux-gcc -c"
-    clinker="ppc-linux-gcc"
-    libmath="-lm";;
   arm-linux)
     arch="arm"
     variant="linux"
+    system="linux"
     cc="gcc"
     cprepro="gcc -U__GNUC__ -E"
     casm="gcc -c"
     clinker="gcc"
     libmath="-lm";;
-  arm-linux-cross)
-    arch="arm"
-    variant="linux"
-    cc="arm-linux-gcc"
-    cprepro="arm-linux-gcc -U__GNUC__ -E"
-    casm="arm-linux-gcc -c"
-    clinker="arm-linux-gcc"
-    libmath="-lm";;
+  manual)
+    ;;
+  "")
+    echo "No target specified." 1>&2
+    echo "$usage" 1>&2
+    exit 2;;
   *)
-    echo "Unsupported configuration '$target'" 1>&2
+    echo "Unknown target '$target'." 1>&2
     echo "$usage" 1>&2
     exit 2;;
 esac
@@ -109,20 +108,58 @@ cat > Makefile.config <<EOF
 PREFIX=$prefix
 BINDIR=$bindir
 LIBDIR=$libdir
+EOF
+
+if test "$target" != "manual"; then
+cat >> Makefile.config <<EOF
 ARCH=$arch
 VARIANT=$variant
+SYSTEM=$system
 CC=$cc
 CPREPRO=$cprepro
 CASM=$casm
 CLINKER=$clinker
 LIBMATH=$libmath
 EOF
+else
+cat >> Makefile.config <<'EOF'
+
+# Target architecture
+# ARCH=powerpc
+# ARCH=arm
+ARCH=
+
+# Target ABI
+# VARIANT=macosx   # for PowerPC / MacOS X
+# VARIANT=eabi     # for PowerPC / Linux and other SVR4 or EABI platforms
+# VARIANT=linux    # for ARM
+VARIANT=
+
+# Target operating system and development environment
+# See $(ARCH)/PrintAsm.ml for possible choices
+SYSTEM=
+
+# C compiler for compiling library files
+CC=gcc
+
+# Preprocessor for .c files
+CPREPRO=gcc -U__GNUC__ -E
+
+# Assembler for assembling .s files
+CASM=gcc -c
+
+# Linker
+CLINKER=gcc
+
+# Math library
+LIBMATH=-lm
+
+# CIL configuration target -- do not change
+EOF
+fi
 
 # Extract and configure Cil
 
-set -e
-tar xzf $cildistrib
-for i in cil.patch/*; do patch -p1 < $i; done
 (cd cil && ./configure)
 
 # Extract 'ARCHOS' info from Cil configuration
@@ -131,14 +168,31 @@ grep '^ARCHOS=' cil/config.log >> Makefile.config
 
 # Summarize configuration
 
+if test "$target" = "manual"; then
+cat <<EOF
+
+Please finish the configuration by editing file ./Makefile.config
+
+EOF
+
+else
+
+bindirexp=`echo "$bindir" | sed -e "s|\\\$(PREFIX)|$prefix|"`
+libdirexp=`echo "$libdir" | sed -e "s|\\\$(PREFIX)|$prefix|"`
+
 cat <<EOF
 
 CompCert configuration:
     Target architecture........... $arch ($variant)
+    OS and development env........ $system
     C compiler.................... $cc
     C preprocessor................ $cprepro
     Assembler..................... $casm
     Linker........................ $clinker
     Math library.................. $libmath
+    Binaries installed in......... $bindirexp
+    Library files installed in.... $libdirexp
+
+EOF
 
-EOF
\ No newline at end of file
+fi
-- 
GitLab