Merge the only thing on trunk that isn't already in httpd24threading into httpd24threading ahead of merging everything back to trunk. This is purely for the sake of my sanity...

git-svn-id: https://svn.apache.org/repos/asf/perl/modperl/branches/httpd24threading@1602081 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/Changes b/Changes
index 597d9d0..5348828 100644
--- a/Changes
+++ b/Changes
@@ -12,6 +12,29 @@
 
 =item 2.0.9-dev
 
+Make sure modperl_interp_select uses r->server rather than the passed s
+parameter to find the interpreter pool to pull an interpreter from. This
+fixes an issue with vhosts with a separate interpreter pool and runtime
+dir-config merges that used to pull the interpreter from the wrong pool.
+[Torsten Foertsch]
+
+PerlInterpScope is now more advisory. Using $(c|r)->pnotes will bind
+the current interpreter to that object for it's lifetime.
+$(c|r)->pnotes_kill() can be used to prematurely drop pnotes and
+remove this binding. [Torsten Foertsch]
+
+Now correctly invokes PerlCleanupHandlers, even if they are the only
+handler type configured for that request [Torsten Foertsch]
+
+For threaded MPMs, change interpreter managment to a new, reference-counted
+allocation model. [Torsten Foertsch]
+
+Expose modperl_interp_pool_t via ModPerl::InterpPool, modperl_tipool_t
+via ModPerl::TiPool and modperl_tipool_config_t via ModPerl::TiPoolConfig
+[Torsten Foertsch]
+
+Expose modperl_interp_t via ModPerl::Interpreter [Torsten Foertsch]
+
 Fix t/compat/apache_file.t on Windows. Apache::File->tmpfile() wants TMPDIR
 or TEMP from the environment, or else defaults to /tmp. The latter is no
 good on Windows, so make sure the environment variables are passed through.
diff --git a/Makefile.PL b/Makefile.PL
index 132d194..7eade0b 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -8,6 +8,7 @@
 
 use constant MIN_HTTPD_VERSION_DYNAMIC => '2.0.47';
 use constant MIN_HTTPD_VERSION_STATIC  => '2.0.51';
+use constant MIN_HTTPD_24_VERSION => '2.4.0';
 
 my($old_modperl_version, $old_modperl_pm, $old_Apache2_pm);
 
@@ -412,9 +413,13 @@
 sub tables_dir {
     my $httpd_version = shift;
 
-    my $tables_version = 'current';
-    #XXX: support versioning
-    #$httpd_version =~ /-dev$/ ? 'current' : $httpd_version;
+    my $tables_version='';
+    if ($httpd_version lt MIN_HTTPD_24_VERSION) {
+        $tables_version='current';
+    }
+    else {
+        $tables_version='current24';
+    }
 
     my $tables_dir = "xs/tables/$tables_version";
 }
@@ -484,8 +489,8 @@
 
     open my $fh, 'Changes';
     while (<$fh>) {
-        if (/^=item.*-(dev|rc\d+)/) {
-            $VERSION .= "-$1";
+        if (/^=item\s+\Q$VERSION\E-(\w+)/) {
+            $VERSION .= "$1";
             last;
         }
         last if /^=item/;
@@ -504,19 +509,44 @@
     $perl_version =~ s/5.00(\d)(?:00(\d))?/"5.$1." . ($2||0)/e;
     my $perl_threads = Apache2::Build::PERL_HAS_ITHREADS ? "w/" : "w/o";
     my $perl_string = "Using Perl $perl_version $perl_threads ithreads";
-    my $mpm = $build->mpm_name();
+    my $httpd_version = $build->httpd_version;
+    my $mpm = "";
+    my $build_threaded = 0;
+
+    # For httpd-2.4, we can't use mpm_is_threaded(), because MPMs are loadable
+    # modules. We therefore treat httpd as a whole project as threaded. It is
+    # still possible to disable threading by using MP_NO_THREADS=1
+    if ($httpd_version lt MIN_HTTPD_24_VERSION) {
+        $build_threaded = $build->mpm_is_threaded();
+        $mpm = $build->mpm_name();
+    }
+    else {
+        if ($build->{MP_NO_THREADS}) {
+            $build_threaded = 0;
+        }
+        else {
+            $build_threaded = 1;
+        }
+    }
 
     # certain mpms require perl 5.8.0+ w/ithreads
-    if ($build->mpm_is_threaded()) {
+    if ($build_threaded) {
         my @fail;
         push @fail, "Perl 5.8 or higher"
             unless $] >= 5.008;
         push @fail, "Perl built with ithreads (build perl with -Duseithreads)"
             unless Apache2::Build::PERL_HAS_ITHREADS();
         if (@fail) {
-            error "$perl_string and '$mpm' mpm httpd.",
-                "Failed requirements:",
-                join "", map {"  - $_\n"} @fail;
+            if ($httpd_version lt MIN_HTTPD_24_VERSION) {
+                error "$perl_string and '$mpm' mpm httpd.",
+                    "Failed requirements:",
+                    join "", map {"  - $_\n"} @fail;
+            }
+            else {
+                error "$perl_string and httpd-2.4.",
+                    "Failed requirements:",
+                    join "", map {"  - $_\n"} @fail;
+            }
             exit 1;
         }
     }
@@ -526,8 +556,14 @@
         if ($build->should_build_apache && !Apache2::Build::PERL_HAS_ITHREADS) {
             # before 5.8.2, perl_shutdown is incomplete
             if ($] < 5.008_002) {
-                error "static $mpm mpm requires a threaded ".
-                      "perl 5.6.1-5.8.1 or any perl 5.8.2+";
+                if ($httpd_version lt MIN_HTTPD_24_VERSION) {
+                    error "static $mpm mpm requires a threaded ".
+                        "perl 5.6.1-5.8.1 or any perl 5.8.2+";
+                }
+                else {
+                    error "httpd-2.4 requires a threaded ".
+                        "perl 5.6.1-5.8.1 or any perl 5.8.2+";
+                }
                 exit 1;
             }
         }
@@ -548,7 +584,7 @@
     if ($Config{usemultiplicity} xor $Config{useithreads}) {
         error "mod_perl does not currently support multiplicity without ".
 	      "ithreads.";
-        if ($build->mpm_is_threaded()) {
+        if ($build_threaded) {
 	    error "Please recompile Perl with -Duseithreads and ".
 	          "-Dusemultiplicity";
         } else {
@@ -770,8 +806,24 @@
             $ap_bindir = File::Spec->catdir($build->{MP_AP_PREFIX}, 'bin')
                 if $build->{MP_AP_PREFIX};
         }
+        my $modperl_libexecdir = '';
+        if ($build->is_dynamic) {
+            # need to add the location of mod_perl.so to the PATH
+            my $lib = $build->modperl_libpath() || '';
+            if ($lib) {
+                $modperl_libexecdir = File::Basename::dirname($lib);
+            }
+            else {
+                $modperl_libexecdir = File::Spec->catdir($build->{cwd},
+                                                         'src/modules/perl')
+                    if $build->{cwd};
+            }
+        }
+        my $extra_path = '';
+        $extra_path .= ";$ap_bindir" if $ap_bindir;
+        $extra_path .= ";$modperl_libexecdir" if $modperl_libexecdir;
         $preamble = <<EOF;
-PATH = \$(PATH);$ap_bindir
+PATH = \$(PATH)$extra_path
 EOF
     }
     else {
diff --git a/ModPerl-Registry/lib/ModPerl/PerlRun.pm b/ModPerl-Registry/lib/ModPerl/PerlRun.pm
index ea97cfb..9dc3ce9 100644
--- a/ModPerl-Registry/lib/ModPerl/PerlRun.pm
+++ b/ModPerl-Registry/lib/ModPerl/PerlRun.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/ModPerl-Registry/lib/ModPerl/PerlRunPrefork.pm b/ModPerl-Registry/lib/ModPerl/PerlRunPrefork.pm
index 481c1b9..445e599 100644
--- a/ModPerl-Registry/lib/ModPerl/PerlRunPrefork.pm
+++ b/ModPerl-Registry/lib/ModPerl/PerlRunPrefork.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package ModPerl::PerlRunPrefork;
 
 use strict;
diff --git a/ModPerl-Registry/lib/ModPerl/Registry.pm b/ModPerl-Registry/lib/ModPerl/Registry.pm
index 3bbfeff..9d7904e 100644
--- a/ModPerl-Registry/lib/ModPerl/Registry.pm
+++ b/ModPerl-Registry/lib/ModPerl/Registry.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/ModPerl-Registry/lib/ModPerl/RegistryBB.pm b/ModPerl-Registry/lib/ModPerl/RegistryBB.pm
index e1c7f28..d3667a8 100644
--- a/ModPerl-Registry/lib/ModPerl/RegistryBB.pm
+++ b/ModPerl-Registry/lib/ModPerl/RegistryBB.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm b/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm
index 9b055a7..cf50007 100644
--- a/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm
+++ b/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/ModPerl-Registry/lib/ModPerl/RegistryLoader.pm b/ModPerl-Registry/lib/ModPerl/RegistryLoader.pm
index f06bd6a..37b8aa7 100644
--- a/ModPerl-Registry/lib/ModPerl/RegistryLoader.pm
+++ b/ModPerl-Registry/lib/ModPerl/RegistryLoader.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/ModPerl-Registry/lib/ModPerl/RegistryPrefork.pm b/ModPerl-Registry/lib/ModPerl/RegistryPrefork.pm
index afdf148..9c41e77 100644
--- a/ModPerl-Registry/lib/ModPerl/RegistryPrefork.pm
+++ b/ModPerl-Registry/lib/ModPerl/RegistryPrefork.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package ModPerl::RegistryPrefork;
 
 use strict;
diff --git a/ModPerl-Registry/t/206.t b/ModPerl-Registry/t/206.t
index 65ce1f5..7b72728 100644
--- a/ModPerl-Registry/t/206.t
+++ b/ModPerl-Registry/t/206.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/304.t b/ModPerl-Registry/t/304.t
index c53d5e3..dda87c9 100644
--- a/ModPerl-Registry/t/304.t
+++ b/ModPerl-Registry/t/304.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/404.t b/ModPerl-Registry/t/404.t
index d603048..4b4271a 100644
--- a/ModPerl-Registry/t/404.t
+++ b/ModPerl-Registry/t/404.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/500.t b/ModPerl-Registry/t/500.t
index 90be1e9..a96e97f 100644
--- a/ModPerl-Registry/t/500.t
+++ b/ModPerl-Registry/t/500.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/bad_scripts.t b/ModPerl-Registry/t/bad_scripts.t
index 5bb7552..8135484 100644
--- a/ModPerl-Registry/t/bad_scripts.t
+++ b/ModPerl-Registry/t/bad_scripts.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/basic.t b/ModPerl-Registry/t/basic.t
index faf2950..dcdc174 100644
--- a/ModPerl-Registry/t/basic.t
+++ b/ModPerl-Registry/t/basic.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/bin_resp.t b/ModPerl-Registry/t/bin_resp.t
index 61e8c73..5ffd780 100644
--- a/ModPerl-Registry/t/bin_resp.t
+++ b/ModPerl-Registry/t/bin_resp.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/cgi-bin/206.pl b/ModPerl-Registry/t/cgi-bin/206.pl
index 1d5efca..0aeac2b 100755
--- a/ModPerl-Registry/t/cgi-bin/206.pl
+++ b/ModPerl-Registry/t/cgi-bin/206.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
        print <<_OUT_;
 Status: 206 Partial Content
 Content-Type: text/html; charset=UTF-8
diff --git a/ModPerl-Registry/t/cgi-bin/304.pl b/ModPerl-Registry/t/cgi-bin/304.pl
index 1eb4676..8238112 100755
--- a/ModPerl-Registry/t/cgi-bin/304.pl
+++ b/ModPerl-Registry/t/cgi-bin/304.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/cgi-bin/404.pl b/ModPerl-Registry/t/cgi-bin/404.pl
index 6c6b6d1..ec1314f 100755
--- a/ModPerl-Registry/t/cgi-bin/404.pl
+++ b/ModPerl-Registry/t/cgi-bin/404.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings;
 
diff --git a/ModPerl-Registry/t/cgi-bin/basic.pl b/ModPerl-Registry/t/cgi-bin/basic.pl
index d373efb..2176f3c 100755
--- a/ModPerl-Registry/t/cgi-bin/basic.pl
+++ b/ModPerl-Registry/t/cgi-bin/basic.pl
@@ -1,4 +1,5 @@
 #!perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # test all the basic functionality
 
diff --git a/ModPerl-Registry/t/cgi-bin/bin_resp_start_0.pl b/ModPerl-Registry/t/cgi-bin/bin_resp_start_0.pl
index d9a77aa..4734b84 100755
--- a/ModPerl-Registry/t/cgi-bin/bin_resp_start_0.pl
+++ b/ModPerl-Registry/t/cgi-bin/bin_resp_start_0.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/ModPerl-Registry/t/cgi-bin/cgi.pl b/ModPerl-Registry/t/cgi-bin/cgi.pl
index 8c31ba1..ef4941c 100755
--- a/ModPerl-Registry/t/cgi-bin/cgi.pl
+++ b/ModPerl-Registry/t/cgi-bin/cgi.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use CGI qw/:standard :html3/;
 
 print header(-type=>'text/html');
diff --git a/ModPerl-Registry/t/cgi-bin/closure.pl b/ModPerl-Registry/t/cgi-bin/closure.pl
index a4c6e73..495dd7a 100755
--- a/ModPerl-Registry/t/cgi-bin/closure.pl
+++ b/ModPerl-Registry/t/cgi-bin/closure.pl
@@ -1,4 +1,5 @@
 #!perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 BEGIN {
     use Apache::TestUtil qw/t_server_log_warn_is_expected/;
diff --git a/ModPerl-Registry/t/cgi-bin/content_type.pl b/ModPerl-Registry/t/cgi-bin/content_type.pl
index aa7f065..ceb3678 100755
--- a/ModPerl-Registry/t/cgi-bin/content_type.pl
+++ b/ModPerl-Registry/t/cgi-bin/content_type.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 my $r = shift;
 $r->content_type('text/plain');
 $r->print('ok');
diff --git a/ModPerl-Registry/t/cgi-bin/env.pl b/ModPerl-Registry/t/cgi-bin/env.pl
index 2dfc9b9..d5990c5 100755
--- a/ModPerl-Registry/t/cgi-bin/env.pl
+++ b/ModPerl-Registry/t/cgi-bin/env.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test env vars
 
 print "Content-type: text/plain\n\n";
diff --git a/ModPerl-Registry/t/cgi-bin/env_val.pl b/ModPerl-Registry/t/cgi-bin/env_val.pl
index f908c3c..5632183 100755
--- a/ModPerl-Registry/t/cgi-bin/env_val.pl
+++ b/ModPerl-Registry/t/cgi-bin/env_val.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test env vars
 
 print "Content-type: text/plain\n\n";
diff --git a/ModPerl-Registry/t/cgi-bin/exit.pl b/ModPerl-Registry/t/cgi-bin/exit.pl
index 66f0b3a..90810ca 100755
--- a/ModPerl-Registry/t/cgi-bin/exit.pl
+++ b/ModPerl-Registry/t/cgi-bin/exit.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # XXX: exit should work by stopping the script, but not quitting the
 # interpreter, though it's not trivial to make an automated test since
 # what you really want to check whether the process didn't quit after
diff --git a/ModPerl-Registry/t/cgi-bin/flush.pl b/ModPerl-Registry/t/cgi-bin/flush.pl
index 1b6a2f3..b21f2cb 100755
--- a/ModPerl-Registry/t/cgi-bin/flush.pl
+++ b/ModPerl-Registry/t/cgi-bin/flush.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/cgi-bin/ithreads_io_n_tie.pl b/ModPerl-Registry/t/cgi-bin/ithreads_io_n_tie.pl
index 4209335..50d5f71 100755
--- a/ModPerl-Registry/t/cgi-bin/ithreads_io_n_tie.pl
+++ b/ModPerl-Registry/t/cgi-bin/ithreads_io_n_tie.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/cgi-bin/local-conf.pl b/ModPerl-Registry/t/cgi-bin/local-conf.pl
index 608e24f..e4e8dc9 100644
--- a/ModPerl-Registry/t/cgi-bin/local-conf.pl
+++ b/ModPerl-Registry/t/cgi-bin/local-conf.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 $test_require = 'it works';
 
 1;
diff --git a/ModPerl-Registry/t/cgi-bin/missing_headers.pl b/ModPerl-Registry/t/cgi-bin/missing_headers.pl
index fd9c190..5dad82d 100755
--- a/ModPerl-Registry/t/cgi-bin/missing_headers.pl
+++ b/ModPerl-Registry/t/cgi-bin/missing_headers.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi-bin/not_executable.pl b/ModPerl-Registry/t/cgi-bin/not_executable.pl
index 90de9ac..d9ed3ba 100644
--- a/ModPerl-Registry/t/cgi-bin/not_executable.pl
+++ b/ModPerl-Registry/t/cgi-bin/not_executable.pl
@@ -1,4 +1,5 @@
 #!perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # this test should return forbidden, since it should be not-executable
 
diff --git a/ModPerl-Registry/t/cgi-bin/nph-foo.pl b/ModPerl-Registry/t/cgi-bin/nph-foo.pl
index 82c1bd7..a46836a 100755
--- a/ModPerl-Registry/t/cgi-bin/nph-foo.pl
+++ b/ModPerl-Registry/t/cgi-bin/nph-foo.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 my $r = shift;
 
diff --git a/ModPerl-Registry/t/cgi-bin/perlrun_decl.pm b/ModPerl-Registry/t/cgi-bin/perlrun_decl.pm
index 618ed86..748b1af 100644
--- a/ModPerl-Registry/t/cgi-bin/perlrun_decl.pm
+++ b/ModPerl-Registry/t/cgi-bin/perlrun_decl.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package perlrun_decl;
 
 use warnings;
diff --git a/ModPerl-Registry/t/cgi-bin/perlrun_extload.pl b/ModPerl-Registry/t/cgi-bin/perlrun_extload.pl
index 9b0fc01..72269de 100755
--- a/ModPerl-Registry/t/cgi-bin/perlrun_extload.pl
+++ b/ModPerl-Registry/t/cgi-bin/perlrun_extload.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use warnings;
 use strict;
 
diff --git a/ModPerl-Registry/t/cgi-bin/perlrun_nondecl.pl b/ModPerl-Registry/t/cgi-bin/perlrun_nondecl.pl
index 50e7b8e..da36515 100644
--- a/ModPerl-Registry/t/cgi-bin/perlrun_nondecl.pl
+++ b/ModPerl-Registry/t/cgi-bin/perlrun_nondecl.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # we use this file to test how the files w/o package declaration,
 # required from perlrun, work
 
diff --git a/ModPerl-Registry/t/cgi-bin/prefork.pl b/ModPerl-Registry/t/cgi-bin/prefork.pl
index 48c0ca7..ae66b87 100755
--- a/ModPerl-Registry/t/cgi-bin/prefork.pl
+++ b/ModPerl-Registry/t/cgi-bin/prefork.pl
@@ -1,4 +1,5 @@
 #!perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # test that prefork runs from the directory the script lives in
 
diff --git a/ModPerl-Registry/t/cgi-bin/r_inherited.pl b/ModPerl-Registry/t/cgi-bin/r_inherited.pl
index 0bab26e..a6eee27 100755
--- a/ModPerl-Registry/t/cgi-bin/r_inherited.pl
+++ b/ModPerl-Registry/t/cgi-bin/r_inherited.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings;
 
diff --git a/ModPerl-Registry/t/cgi-bin/redirect-cookie.pl b/ModPerl-Registry/t/cgi-bin/redirect-cookie.pl
index 571972e..41fd912 100755
--- a/ModPerl-Registry/t/cgi-bin/redirect-cookie.pl
+++ b/ModPerl-Registry/t/cgi-bin/redirect-cookie.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test env vars
 
 use Apache2::URI ();
diff --git a/ModPerl-Registry/t/cgi-bin/redirect.pl b/ModPerl-Registry/t/cgi-bin/redirect.pl
index 59dad64..7c92679 100755
--- a/ModPerl-Registry/t/cgi-bin/redirect.pl
+++ b/ModPerl-Registry/t/cgi-bin/redirect.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test env vars
 
 use Apache2::URI ();
diff --git a/ModPerl-Registry/t/cgi-bin/require.pl b/ModPerl-Registry/t/cgi-bin/require.pl
index d005d9f..43bd7eb 100755
--- a/ModPerl-Registry/t/cgi-bin/require.pl
+++ b/ModPerl-Registry/t/cgi-bin/require.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test the require
 
 use Apache::Test ();
diff --git a/ModPerl-Registry/t/cgi-bin/runtime_error.pl b/ModPerl-Registry/t/cgi-bin/runtime_error.pl
index 36f7a49..9cf74a1 100755
--- a/ModPerl-Registry/t/cgi-bin/runtime_error.pl
+++ b/ModPerl-Registry/t/cgi-bin/runtime_error.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi-bin/runtime_error_n_status_change.pl b/ModPerl-Registry/t/cgi-bin/runtime_error_n_status_change.pl
index 8edc863..1687d2d 100755
--- a/ModPerl-Registry/t/cgi-bin/runtime_error_n_status_change.pl
+++ b/ModPerl-Registry/t/cgi-bin/runtime_error_n_status_change.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi-bin/runtime_error_plus_body.pl b/ModPerl-Registry/t/cgi-bin/runtime_error_plus_body.pl
index 89b7c96..c53f5dd 100755
--- a/ModPerl-Registry/t/cgi-bin/runtime_error_plus_body.pl
+++ b/ModPerl-Registry/t/cgi-bin/runtime_error_plus_body.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi-bin/special_blocks.pl b/ModPerl-Registry/t/cgi-bin/special_blocks.pl
index 2a62433..d1d66f9 100755
--- a/ModPerl-Registry/t/cgi-bin/special_blocks.pl
+++ b/ModPerl-Registry/t/cgi-bin/special_blocks.pl
@@ -1,4 +1,5 @@
 #!perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # test BEGIN/END blocks
 
diff --git a/ModPerl-Registry/t/cgi-bin/status_change.pl b/ModPerl-Registry/t/cgi-bin/status_change.pl
index 5182a39..4475d5a 100755
--- a/ModPerl-Registry/t/cgi-bin/status_change.pl
+++ b/ModPerl-Registry/t/cgi-bin/status_change.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache2::Const -compile => qw(NOT_FOUND);
 
 my $r = shift;
diff --git a/ModPerl-Registry/t/cgi-bin/syntax_error.pl b/ModPerl-Registry/t/cgi-bin/syntax_error.pl
index 44ead63..1716354 100755
--- a/ModPerl-Registry/t/cgi-bin/syntax_error.pl
+++ b/ModPerl-Registry/t/cgi-bin/syntax_error.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi-bin/use_error.pl b/ModPerl-Registry/t/cgi-bin/use_error.pl
index 725f8bd..00188c8 100755
--- a/ModPerl-Registry/t/cgi-bin/use_error.pl
+++ b/ModPerl-Registry/t/cgi-bin/use_error.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 BEGIN {
     use Apache::TestUtil;
     t_server_log_error_is_expected();
diff --git a/ModPerl-Registry/t/cgi.t b/ModPerl-Registry/t/cgi.t
index 771f241..b9133c5 100644
--- a/ModPerl-Registry/t/cgi.t
+++ b/ModPerl-Registry/t/cgi.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/closure.t b/ModPerl-Registry/t/closure.t
index 842ef11..dad160f 100644
--- a/ModPerl-Registry/t/closure.t
+++ b/ModPerl-Registry/t/closure.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/conf/modperl_extra_startup.pl b/ModPerl-Registry/t/conf/modperl_extra_startup.pl
index 42718a5..5511694 100644
--- a/ModPerl-Registry/t/conf/modperl_extra_startup.pl
+++ b/ModPerl-Registry/t/conf/modperl_extra_startup.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/dirindex.t b/ModPerl-Registry/t/dirindex.t
index 73ad546..30520a7 100644
--- a/ModPerl-Registry/t/dirindex.t
+++ b/ModPerl-Registry/t/dirindex.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/fatalstobrowser.t b/ModPerl-Registry/t/fatalstobrowser.t
index 4cf18e7..400d259 100644
--- a/ModPerl-Registry/t/fatalstobrowser.t
+++ b/ModPerl-Registry/t/fatalstobrowser.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/flush.t b/ModPerl-Registry/t/flush.t
index b095815..d126ea8 100644
--- a/ModPerl-Registry/t/flush.t
+++ b/ModPerl-Registry/t/flush.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/ithreads.t b/ModPerl-Registry/t/ithreads.t
index 32cc23c..7d91ce9 100644
--- a/ModPerl-Registry/t/ithreads.t
+++ b/ModPerl-Registry/t/ithreads.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/nph.t b/ModPerl-Registry/t/nph.t
index 3b15fd6..f9b29e2 100644
--- a/ModPerl-Registry/t/nph.t
+++ b/ModPerl-Registry/t/nph.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/perlrun_extload.t b/ModPerl-Registry/t/perlrun_extload.t
index 357e44c..e99fd65 100644
--- a/ModPerl-Registry/t/perlrun_extload.t
+++ b/ModPerl-Registry/t/perlrun_extload.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/prefork.t b/ModPerl-Registry/t/prefork.t
index 3ea4e73..00376a3 100644
--- a/ModPerl-Registry/t/prefork.t
+++ b/ModPerl-Registry/t/prefork.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/redirect.t b/ModPerl-Registry/t/redirect.t
index 303fc8c..b4e304e 100644
--- a/ModPerl-Registry/t/redirect.t
+++ b/ModPerl-Registry/t/redirect.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/regex.t b/ModPerl-Registry/t/regex.t
index 8dd298e..4aba470 100644
--- a/ModPerl-Registry/t/regex.t
+++ b/ModPerl-Registry/t/regex.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/rewrite_env.t b/ModPerl-Registry/t/rewrite_env.t
index d683828..b3e439d 100644
--- a/ModPerl-Registry/t/rewrite_env.t
+++ b/ModPerl-Registry/t/rewrite_env.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/ModPerl-Registry/t/special_blocks.t b/ModPerl-Registry/t/special_blocks.t
index d795425..2868064 100644
--- a/ModPerl-Registry/t/special_blocks.t
+++ b/ModPerl-Registry/t/special_blocks.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/build/config.pl b/build/config.pl
index 9d49334..7b9e09c 100644
--- a/build/config.pl
+++ b/build/config.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use FindBin qw($Bin);
diff --git a/build/source_scan.pl b/build/source_scan.pl
index 25db3bb..3a6da0e 100644
--- a/build/source_scan.pl
+++ b/build/source_scan.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 #requires C::Scan 0.75+
 
 use lib qw(lib Apache-Test/lib);
diff --git a/build/xs_generate.pl b/build/xs_generate.pl
index 28849b0..74761b5 100644
--- a/build/xs_generate.pl
+++ b/build/xs_generate.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use lib qw(lib Apache-Test/lib);
 
 use Apache::TestConfig (); # needed to resolve circular use dependency
diff --git a/lib/APR/XSLoader.pm b/lib/APR/XSLoader.pm
index 4036891..fc390f2 100644
--- a/lib/APR/XSLoader.pm
+++ b/lib/APR/XSLoader.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/Build.pm b/lib/Apache2/Build.pm
index 5e296fa..2668ad2 100644
--- a/lib/Apache2/Build.pm
+++ b/lib/Apache2/Build.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -282,7 +283,7 @@
 sub mpm_is_threaded {
     my $self = shift;
     my $mpm_name = $self->mpm_name();
-    return $threaded_mpms{$mpm_name} || 0;
+    return exists $threaded_mpms{$mpm_name} ? 1 : 0;
 }
 
 sub mpm_name {
@@ -290,6 +291,11 @@
 
     return $self->{mpm_name} if $self->{mpm_name};
 
+    if ($self->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/) {
+	delete $threaded_mpms{dynamic} if $self->mp_nonthreaded_ok;
+	return $self->{mpm_name} = 'dynamic' if ($1*1000+$2)*1000+$3>=2003000;
+    }
+
     # XXX: hopefully apxs will work on win32 one day
     return $self->{mpm_name} = 'winnt' if WIN32;
 
@@ -1154,18 +1160,7 @@
 
 sub apr_generation {
     my ($self) = @_;
-
-    my $httpd_v = $self->httpd_version_as_int;
-
-    if ($httpd_v =~ m/2[4-9]\d+/) {
-        return 2;
-    }
-    elsif ($httpd_v =~ m/2[1-3]\d+/) {
-        return 1;
-    }
-    else {
-        return;
-    }
+    return $self->httpd_version_as_int =~ m/2[1-9]\d+/ ? 1 : 0;
 }
 
 # returns an array of apr/apu linking flags (--link-ld --libs) if found
@@ -1225,8 +1220,7 @@
         $self->{$key} = $self->{$mp_key};
     }
 
-    my $apr_generation = $self->apr_generation;
-    my $config = $apr_generation ? "$what-${apr_generation}-config" : "$what-config";
+    my $config = $self->apr_generation ? "$what-1-config" : "$what-config";
 
     if (!$self->{$key}) {
         my @tries = ();
@@ -2213,7 +2207,8 @@
     # with it is that we didn't have such a case yet, but may need to
     # deal with it later
 
-    return $perl_lfs64 ^ $apr_lfs64;
+    return 0;
+    # $perl_lfs64 ^ $apr_lfs64;
 }
 
 # if perl is built with uselargefiles, but apr not, the build won't
diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm
index 94f9a05..7dada94 100644
--- a/lib/Apache2/ParseSource.pm
+++ b/lib/Apache2/ParseSource.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -73,6 +74,9 @@
     'CORE_PRIVATE',   #so we get all of apache
     'MP_SOURCE_SCAN', #so we can avoid some c-scan barfing
     '_NETINET_TCP_H', #c-scan chokes on netinet/tcp.h
+    '_BYTESWAP_H', #c-scan chokes on byteswap.h
+    '_BITS_BYTESWAP_H', #c-scan chokes on byteswap.h
+    'Expat_INCLUDED', #c-scan chokes on expath.h
  #   'APR_OPTIONAL_H', #c-scan chokes on apr_optional.h
     'apr_table_do_callback_fn_t=void', #c-scan chokes on function pointers
 );
@@ -252,6 +256,7 @@
         remotehost => [qw{REMOTE_}],
         satisfy    => [qw{SATISFY_}],
         types      => [qw{DIR_MAGIC_TYPE}],
+        auth       => [qw{AUTHN_ AUTHZ AP_AUTH_ AUTH_ AUTHZ_}],
     },
     'APR::Const' => {
         common    => [qw{APR_SUCCESS}],
@@ -284,7 +289,7 @@
 }
 
 my %enums_wanted = (
-    'Apache2::Const' => { map { $_, 1 } qw(cmd_how input_mode filter_type conn_keepalive) },
+    'Apache2::Const' => { map { $_, 1 } qw(cmd_how input_mode filter_type conn_keepalive authn_status authz_status) },
     'APR::Const' => { map { $_, 1 } qw(apr_shutdown_how apr_read_type apr_lockmech) },
 );
 
@@ -411,6 +416,8 @@
     my $c = $self->{c};
 
     my $fdecls = $c->get($key);
+    my $inlines = $c->get('parsed_inlines');
+    push @{$fdecls}, @{$inlines};
 
     my %seen;
     my $wanted = $self->wanted_functions;
@@ -533,7 +540,16 @@
 
     my ($subdir) = (split '::', $name)[0];
 
-    my $tdir = 'xs/tables/current';
+    my $tdir = '';
+    my $build = Apache2::Build->new(init => 1);
+    my $httpd_version = $build->httpd_version;
+    if ($httpd_version lt '2.4.0') {
+        $tdir='xs/tables/current';
+    }
+    else {
+        $tdir='xs/tables/current24';
+    }
+
     if (-d "$tdir/$subdir") {
         $file = "$tdir/$subdir/$file";
     }
diff --git a/lib/Apache2/PerlSections.pm b/lib/Apache2/PerlSections.pm
index 64523a1..69cd6b8 100644
--- a/lib/Apache2/PerlSections.pm
+++ b/lib/Apache2/PerlSections.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/PerlSections/Dump.pm b/lib/Apache2/PerlSections/Dump.pm
index 1481e3e..4366410 100644
--- a/lib/Apache2/PerlSections/Dump.pm
+++ b/lib/Apache2/PerlSections/Dump.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/Resource.pm b/lib/Apache2/Resource.pm
index 8b5508a..679d578 100644
--- a/lib/Apache2/Resource.pm
+++ b/lib/Apache2/Resource.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/SourceTables.pm b/lib/Apache2/SourceTables.pm
index 10d01fe..b82ba13 100644
--- a/lib/Apache2/SourceTables.pm
+++ b/lib/Apache2/SourceTables.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/Status.pm b/lib/Apache2/Status.pm
index b91cd29..65c3208 100644
--- a/lib/Apache2/Status.pm
+++ b/lib/Apache2/Status.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/XSLoader.pm b/lib/Apache2/XSLoader.pm
index 0863910..0c848a1 100644
--- a/lib/Apache2/XSLoader.pm
+++ b/lib/Apache2/XSLoader.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/compat.pm b/lib/Apache2/compat.pm
index 358e646..35f186a 100644
--- a/lib/Apache2/compat.pm
+++ b/lib/Apache2/compat.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Apache2/porting.pm b/lib/Apache2/porting.pm
index f021b92..2432604 100644
--- a/lib/Apache2/porting.pm
+++ b/lib/Apache2/porting.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/Bundle/Apache2.pm b/lib/Bundle/Apache2.pm
index 6a8c823..7b9ec42 100644
--- a/lib/Bundle/Apache2.pm
+++ b/lib/Bundle/Apache2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/BuildMM.pm b/lib/ModPerl/BuildMM.pm
index 1c729e2..df1e0c2 100644
--- a/lib/ModPerl/BuildMM.pm
+++ b/lib/ModPerl/BuildMM.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/BuildOptions.pm b/lib/ModPerl/BuildOptions.pm
index e99e09b..3f56d31 100644
--- a/lib/ModPerl/BuildOptions.pm
+++ b/lib/ModPerl/BuildOptions.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -264,4 +265,4 @@
 LIBNAME        0    Name of the modperl dso library (default is  mod_perl)
 COMPAT_1X      0    Compile-time mod_perl 1.0 backcompat (default is  on)
 APR_LIB        0    Lib used to build APR::* on Win32 (default is aprext)
-
+NO_THREADS     0    Build mod_perl without thread support with httpd >= 2.4
diff --git a/lib/ModPerl/CScan.pm b/lib/ModPerl/CScan.pm
index a7314c9..4985ef0 100644
--- a/lib/ModPerl/CScan.pm
+++ b/lib/ModPerl/CScan.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package ModPerl::CScan;
 
 require Exporter;
@@ -136,6 +137,8 @@
       vdecl_hash => { filter => [ \&vdecl_hash, 'vdecls', 'mdecls' ], },
       parsed_fdecls => { filter => [ \&do_declarations, 'fdecls',
                                      'typedef_hash', 'keywords'], },
+      parsed_inlines => { filter => [ \&do_declarations, 'inlines',
+                                     'typedef_hash', 'keywords'], },
       keywords_rex => { filter => [ sub { my @k = keys %{ shift() };
                                           local $" = '|';
                                           my $r = "(?:@k)";
diff --git a/lib/ModPerl/Code.pm b/lib/ModPerl/Code.pm
index 8d6fb3b..f79baec 100644
--- a/lib/ModPerl/Code.pm
+++ b/lib/ModPerl/Code.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -142,7 +143,7 @@
     Dir => [qw(NONE PARSE_HEADERS SETUP_ENV MERGE_HANDLERS GLOBAL_REQUEST UNSET)],
     Req => [qw(NONE SET_GLOBAL_REQUEST PARSE_HEADERS SETUP_ENV
                CLEANUP_REGISTERED PERL_SET_ENV_DIR PERL_SET_ENV_SRV)],
-    Interp => [qw(NONE IN_USE PUTBACK CLONED BASE)],
+    Interp => [qw(NONE IN_USE CLONED BASE)],
     Handler => [qw(NONE PARSED METHOD OBJECT ANON AUTOLOAD DYNAMIC FAKE)],
 );
 
@@ -891,6 +892,15 @@
             if ($name eq 'DECLINE_CMD' ||
                 $name eq 'DIR_MAGIC_TYPE' ||
                 $name eq 'CRLF' ||
+                $name eq 'AUTHN_PROVIDER_GROUP' ||
+                $name eq 'AUTHZ_PROVIDER_GROUP' ||
+                $name eq 'AUTHN_PROVIDER_VERSION' ||
+                $name eq 'AUTHZ_PROVIDER_VERSION' ||
+                $name eq 'AUTHN_DEFAULT_PROVIDER' ||
+                $name eq 'AUTHN_PROVIDER_NAME_NOTE' ||
+                $name eq 'AUTHZ_PROVIDER_NAME_NOTE' ||
+                $name eq 'AUTHN_PREFIX' ||
+                $name eq 'AUTHZ_PREFIX' ||
                 $name eq 'CRLF_ASCII') {
                 print $c_fh <<EOF;
               return newSVpv($alias{$name}, 0);
diff --git a/lib/ModPerl/Config.pm b/lib/ModPerl/Config.pm
index 0e88fa2..89b0f51 100644
--- a/lib/ModPerl/Config.pm
+++ b/lib/ModPerl/Config.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/FunctionMap.pm b/lib/ModPerl/FunctionMap.pm
index baf25e9..e611132 100644
--- a/lib/ModPerl/FunctionMap.pm
+++ b/lib/ModPerl/FunctionMap.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/MM.pm b/lib/ModPerl/MM.pm
index 2b48921..597a743 100644
--- a/lib/ModPerl/MM.pm
+++ b/lib/ModPerl/MM.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/Manifest.pm b/lib/ModPerl/Manifest.pm
index 1e856bc..a9a27a8 100644
--- a/lib/ModPerl/Manifest.pm
+++ b/lib/ModPerl/Manifest.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/MapUtil.pm b/lib/ModPerl/MapUtil.pm
index 1aa219f..8eba238 100644
--- a/lib/ModPerl/MapUtil.pm
+++ b/lib/ModPerl/MapUtil.pm
@@ -46,7 +46,14 @@
 
 sub function_table {
     return $function_table if @$function_table;
-    push @INC, "xs/tables/current";
+    my $build = Apache2::Build->new(init => 1);
+    my $httpd_version = $build->httpd_version;
+    if ($httpd_version lt '2.4.0' || ! -d "xs/tables/current24") {
+        push @INC, "xs/tables/current";
+    }
+    else {
+        push @INC, "xs/tables/current24";
+    }
     require Apache2::FunctionTable;
     require ModPerl::FunctionTable;
     require APR::FunctionTable;
@@ -103,15 +110,28 @@
         # #_end_
         if (/^\s*#\s*_(if|unless|els(?:e|if)|end)_(?:\s(.+))?/) {
             my ($cmd, $param) = ($1, $2);
+            if (defined $param) {
+                while ($param=~s!\\$!!) {
+                    my $l=<$fh>;
+                    die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n"
+                        unless defined $l;
+                    chomp $l;
+                    $param.=$l;
+                }
+            }
             if ($cmd eq 'if') {
-                unshift @condition, 0+!!eval $param;
+                unshift @condition,
+                    0+!!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+                die $@ if $@;
             }
             elsif ($cmd eq 'elsif') {
                 die "parse error ($ModPerl::MapUtil::MapFile line $.)".
                     " #_elsif_ without #_if_"
                     unless @condition;
                 if ($condition[0] == 0) {
-                    $condition[0]+=!!eval $param;
+                    $condition[0]+=
+                        !!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+                    die $@ if $@;
                 } else {
                     $condition[0]++;
                 }
@@ -123,7 +143,9 @@
                 $condition[0]+=1;
             }
             elsif ($cmd eq 'unless') {
-                unshift @condition, 0+!eval $param;
+                unshift @condition,
+                    0+!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+                die $@ if $@;
             }
             elsif ($cmd eq 'end') {
                 shift @condition;
@@ -133,6 +155,15 @@
 
         if (/^\s*#\s*_(eval)_(?:\s(.+))?/) {
             my ($cmd, $param) = ($1, $2);
+            if (defined $param) {
+                while ($param=~s!\\$!!) {
+                    my $l=<$fh>;
+                    die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n"
+                        unless defined $l;
+                    chomp $l;
+                    $param.=$l;
+                }
+            }
             if ($cmd eq 'eval') {
                 eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
                 die $@ if $@;
diff --git a/lib/ModPerl/ParseSource.pm b/lib/ModPerl/ParseSource.pm
index dbeb964..4b8ccb7 100644
--- a/lib/ModPerl/ParseSource.pm
+++ b/lib/ModPerl/ParseSource.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/StructureMap.pm b/lib/ModPerl/StructureMap.pm
index 25030a9..2d4c47b 100644
--- a/lib/ModPerl/StructureMap.pm
+++ b/lib/ModPerl/StructureMap.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/TestReport.pm b/lib/ModPerl/TestReport.pm
index ea132c6..f2b9825 100644
--- a/lib/ModPerl/TestReport.pm
+++ b/lib/ModPerl/TestReport.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/TestRun.pm b/lib/ModPerl/TestRun.pm
index ad1aa5a..eb37692 100644
--- a/lib/ModPerl/TestRun.pm
+++ b/lib/ModPerl/TestRun.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/TypeMap.pm b/lib/ModPerl/TypeMap.pm
index 50aece4..5548cca 100644
--- a/lib/ModPerl/TypeMap.pm
+++ b/lib/ModPerl/TypeMap.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/ModPerl/WrapXS.pm b/lib/ModPerl/WrapXS.pm
index 58d4a07..be3282b 100644
--- a/lib/ModPerl/WrapXS.pm
+++ b/lib/ModPerl/WrapXS.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/lib/mod_perl2.pm b/lib/mod_perl2.pm
index da90e1f..9a87c2f 100644
--- a/lib/mod_perl2.pm
+++ b/lib/mod_perl2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/src/modules/perl/mod_perl.c b/src/modules/perl/mod_perl.c
index 4641d6a..a73001a 100644
--- a/src/modules/perl/mod_perl.c
+++ b/src/modules/perl/mod_perl.c
@@ -216,8 +216,10 @@
         server_rec *base_server = modperl_global_get_server_rec();
         const char *desc = modperl_server_desc(s, p);
         if (base_server == s) {
+            MP_init_status = 1; /* temporarily reset MP_init_status */
             MP_TRACE_i(MP_FUNC,
                        "starting the parent perl for the base server", desc);
+            MP_init_status = 2;
         }
         else {
             MP_TRACE_i(MP_FUNC,
@@ -392,6 +394,7 @@
     }
 
     PERL_SET_CONTEXT(perl);
+    modperl_thx_interp_set(perl, base_scfg->mip->parent);
 
 #endif /* USE_ITHREADS */
 
@@ -440,12 +443,12 @@
 {
     server_rec *s;
     PerlInterpreter *base_perl;
-#ifdef MP_TRACE
+#if defined(MP_TRACE) || defined(USE_ITHREADS)
     modperl_config_srv_t *base_scfg = modperl_config_srv_get(base_server);
+#endif
 
     MP_TRACE_d_do(MpSrv_dump_flags(base_scfg,
                                    base_server->server_hostname));
-#endif /* MP_TRACE */
 
 #ifndef USE_ITHREADS
     if (modperl_threaded_mpm()) {
@@ -467,6 +470,7 @@
     /* after other parent perls were started in vhosts, make sure that
      * the context is set to the base_perl */
     PERL_SET_CONTEXT(base_perl);
+    modperl_thx_interp_set(base_perl, base_scfg->mip->parent);
 #endif
 
 }
@@ -612,8 +616,6 @@
         return OK;
     }
 
-    MP_TRACE_i(MP_FUNC, "mod_perl hook init");
-
     MP_init_status = 1; /* now starting */
 
     modperl_restart_count_inc(s);
@@ -653,6 +655,10 @@
 int modperl_hook_pre_config(apr_pool_t *p, apr_pool_t *plog,
                             apr_pool_t *ptemp)
 {
+#if AP_MODULE_MAGIC_AT_LEAST(20110329,0)
+    ap_reserve_module_slots_directive("PerlLoadModule");
+#endif
+
     /* we can't have PerlPreConfigHandler without first configuring mod_perl */
 
     /* perl 5.8.1+ */
@@ -737,7 +743,22 @@
 {
     MP_dRCFG;
 
+#ifdef USE_ITHREADS
+    /* XXX: this is necessary to make modperl_interp_pool_select() work
+     * which is used at runtime only to merge dir-configs by
+     * modperl_module_config_merge().
+     *
+     * Since most requests won't need it it would be good to add some logic
+     * (cheaper logic in terms of CPU cycles) to identify those cases and
+     * avoid the hash operation.
+     */
+    MP_TRACE_i(MP_FUNC, "setting userdata MODPERL_R in pool %#lx to %lx",
+               (unsigned long)r->pool, (unsigned long)r);
+    (void)apr_pool_userdata_set((void *)r, "MODPERL_R", NULL, r->pool);
+#endif
+
     modperl_config_req_init(r, rcfg);
+    modperl_config_req_cleanup_register(r, rcfg);
 
     /* set the default for cgi header parsing On as early as possible
      * so $r->content_type in any phase after header_parser could turn
@@ -751,6 +772,12 @@
 
 static int modperl_hook_post_read_request(request_rec *r)
 {
+#ifdef USE_ITHREADS
+    MP_TRACE_i(MP_FUNC, "%s %s:%d%s",
+               r->method, r->connection->local_addr->hostname,
+               r->connection->local_addr->port, r->unparsed_uri);
+#endif
+
     /* if 'PerlOptions +GlobalRequest' is outside a container */
     modperl_global_request_cfg_set(r);
 
@@ -907,6 +934,11 @@
     MP_CMD_DIR_ITERATE("PerlRequire", requires, "PerlRequire"),
     MP_CMD_SRV_ITERATE("PerlConfigRequire", config_requires, "PerlConfigRequire"),
     MP_CMD_SRV_ITERATE("PerlPostConfigRequire", post_config_requires, "PerlPostConfigRequire"),
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+    MP_CMD_SRV_TAKE2("PerlAddAuthzProvider", authz_provider, "PerlAddAuthzProvider"),
+    MP_CMD_SRV_TAKE2("PerlAddAuthnProvider", authn_provider, "PerlAddAuthnProvider"),
+#endif
     MP_CMD_DIR_ITERATE("PerlOptions", options, "Perl Options"),
     MP_CMD_DIR_ITERATE("PerlInitHandler", init_handlers, "Subroutine name"),
     MP_CMD_DIR_TAKE2("PerlSetVar", set_var, "PerlSetVar"),
@@ -1009,27 +1041,14 @@
 int modperl_response_handler(request_rec *r)
 {
     MP_dDCFG;
-#ifdef USE_ITHREADS
-    MP_dRCFG;
-#endif
     apr_status_t retval, rc;
-
-#ifdef USE_ITHREADS
-    pTHX;
-    modperl_interp_t *interp;
-#endif
+    MP_dINTERP;
 
     if (!strEQ(r->handler, "modperl")) {
         return DECLINED;
     }
 
-#ifdef USE_ITHREADS
-    interp = modperl_interp_select(r, r->connection, r->server);
-    aTHX = interp->perl;
-    if (MpInterpPUTBACK(interp)) {
-        rcfg->interp = interp;
-    }
-#endif
+    MP_INTERPa(r, r->connection, r->server);
 
     /* default is -SetupEnv, add if PerlOption +SetupEnv */
     if (MpDirSETUP_ENV(dcfg)) {
@@ -1042,13 +1061,7 @@
         retval = rc;
     }
 
-#ifdef USE_ITHREADS
-    if (MpInterpPUTBACK(interp)) {
-        /* PerlInterpScope handler */
-        rcfg->interp = NULL;
-        modperl_interp_unselect(interp);
-    }
-#endif
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     return retval;
 }
@@ -1059,22 +1072,13 @@
     GV *h_stdin, *h_stdout;
     apr_status_t retval, rc;
     MP_dRCFG;
-#ifdef USE_ITHREADS
-    pTHX;
-    modperl_interp_t *interp;
-#endif
+    MP_dINTERP;
 
     if (!strEQ(r->handler, "perl-script")) {
         return DECLINED;
     }
 
-#ifdef USE_ITHREADS
-    interp = modperl_interp_select(r, r->connection, r->server);
-    aTHX = interp->perl;
-    if (MpInterpPUTBACK(interp)) {
-        rcfg->interp = interp;
-    }
-#endif
+    MP_INTERPa(r, r->connection, r->server);
 
     modperl_perl_global_request_save(aTHX_ r);
 
@@ -1106,13 +1110,7 @@
     modperl_io_restore_stdout(aTHX_ h_stdout);
     FREETMPS;LEAVE;
 
-#ifdef USE_ITHREADS
-    if (MpInterpPUTBACK(interp)) {
-        /* PerlInterpScope handler */
-        modperl_interp_unselect(interp);
-        rcfg->interp = NULL;
-    }
-#endif
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     /* flush output buffer after interpreter is putback */
     rc = modperl_response_finish(r);
@@ -1150,3 +1148,10 @@
     modperl_cmds,              /* table of config file commands       */
     modperl_register_hooks,    /* register hooks */
 };
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/mod_perl.h b/src/modules/perl/mod_perl.h
index c8338d1..e11e7a8 100644
--- a/src/modules/perl/mod_perl.h
+++ b/src/modules/perl/mod_perl.h
@@ -198,3 +198,10 @@
 #endif /* end of #ifdef USE_ITHREADS */
 
 #endif /*  MOD_PERL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_apache_compat.c b/src/modules/perl/modperl_apache_compat.c
index d7dc922..1c1700b 100644
--- a/src/modules/perl/modperl_apache_compat.c
+++ b/src/modules/perl/modperl_apache_compat.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define AP_DECLARE_EXPORT
 #include "mod_perl.h"
 
 /* back compat adjustements for older Apache versions
@@ -69,3 +70,10 @@
 }
 
 #endif /* since-APACHE-2.3.0 */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_apache_compat.h b/src/modules/perl/modperl_apache_compat.h
index dcab578..0d7058b 100644
--- a/src/modules/perl/modperl_apache_compat.h
+++ b/src/modules/perl/modperl_apache_compat.h
@@ -66,9 +66,9 @@
 #define MP_HTTPD_OVERRIDE_HTACCESS (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)
 
 #define MP_HTTPD_OVERRIDE_OPTS_UNSET (-1)
-
 #if AP_SERVER_MAJORVERSION_NUMBER>2 || \
     (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+
 /* 2.4 API */
 #define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \
                                         OPT_ALL | \
@@ -95,10 +95,17 @@
 
 #define ap_unixd_config unixd_config
 
-#endif
+#endif /* 2.4 vs. 2.2 API */
 
 #ifndef PROXYREQ_RESPONSE
 #define PROXYREQ_RESPONSE (3)
 #endif
 
 #endif /* MODPERL_APACHE_COMPAT_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h
index fe97c8f..a06cc2b 100644
--- a/src/modules/perl/modperl_apache_includes.h
+++ b/src/modules/perl/modperl_apache_includes.h
@@ -43,4 +43,17 @@
 APLOG_USE_MODULE(perl);
 #endif
 
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+#include "ap_provider.h"
+#include "mod_auth.h"
+#endif
+
 #endif /* MODPERL_APACHE_INCLUDES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_apr_compat.h b/src/modules/perl/modperl_apr_compat.h
index c37e332..e9d5da4 100644
--- a/src/modules/perl/modperl_apr_compat.h
+++ b/src/modules/perl/modperl_apr_compat.h
@@ -153,3 +153,10 @@
 #endif
 
 #endif /* MODPERL_APR_COMPAT_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_apr_includes.h b/src/modules/perl/modperl_apr_includes.h
index 3da4b74..ec6e3d6 100644
--- a/src/modules/perl/modperl_apr_includes.h
+++ b/src/modules/perl/modperl_apr_includes.h
@@ -42,3 +42,10 @@
 #endif
 
 #endif /* MODPERL_APR_INCLUDES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_bucket.c b/src/modules/perl/modperl_bucket.c
index 21b5a97..ef2f948 100644
--- a/src/modules/perl/modperl_bucket.c
+++ b/src/modules/perl/modperl_bucket.c
@@ -157,3 +157,10 @@
     bucket->free = apr_bucket_free;
     return modperl_bucket_sv_make(aTHX_ bucket, sv, offset, len);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_bucket.h b/src/modules/perl/modperl_bucket.h
index f5334ed..f01506a 100644
--- a/src/modules/perl/modperl_bucket.h
+++ b/src/modules/perl/modperl_bucket.h
@@ -21,3 +21,10 @@
                                      apr_off_t offset, apr_size_t len);
 
 #endif /* MODPERL_BUCKET_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_callback.c b/src/modules/perl/modperl_callback.c
index 7555e0f..04f4317 100644
--- a/src/modules/perl/modperl_callback.c
+++ b/src/modules/perl/modperl_callback.c
@@ -88,8 +88,7 @@
                 name = handler->name;
             }
 
-            MP_TRACE_h(MP_FUNC, "[%s %s] lookup of %s failed",
-                       modperl_pid_tid(p),
+            MP_TRACE_h(MP_FUNC, "[%s] lookup of %s failed",
                        modperl_server_desc(s, p), name);
             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
                          "lookup of '%s' failed", name);
@@ -148,10 +147,7 @@
                                   apr_pool_t *ptemp,
                                   modperl_hook_run_mode_e run_mode)
 {
-#ifdef USE_ITHREADS
-    pTHX;
-    modperl_interp_t *interp = NULL;
-#endif
+    MP_dINTERP;
     MP_dSCFG(s);
     MP_dDCFG;
     MP_dRCFG;
@@ -184,28 +180,7 @@
         return DECLINED;
     }
 
-#ifdef USE_ITHREADS
-    if (r && !c && modperl_interp_scope_connection(scfg)) {
-        c = r->connection;
-    }
-    if (r || c) {
-        interp = modperl_interp_select(r, c, s);
-        aTHX = interp->perl;
-    }
-    else {
-        /* Child{Init,Exit}, OpenLogs */
-        aTHX = scfg->mip->parent->perl;
-        PERL_SET_CONTEXT(aTHX);
-    }
-#endif
-
-    /* XXX: would like to do this in modperl_hook_create_request()
-     * but modperl_interp_select() is what figures out if
-     * PerlInterpScope eq handler, in which case we do not register
-     * a cleanup.  modperl_hook_create_request() is also currently always
-     * run even if modperl isn't handling any part of the request
-     */
-    modperl_config_req_cleanup_register(r, rcfg);
+    MP_INTERPa(r, c, s);
 
     switch (type) {
       case MP_HANDLER_TYPE_PER_SRV:
@@ -254,8 +229,7 @@
 
     modperl_callback_current_callback_set(desc);
 
-    MP_TRACE_h(MP_FUNC, "[%s] running %d %s handlers",
-               modperl_pid_tid(p), av->nelts, desc);
+    MP_TRACE_h(MP_FUNC, "running %d %s handlers", av->nelts, desc);
     handlers = (modperl_handler_t **)av->elts;
 
     for (i=0; i<av->nelts; i++) {
@@ -357,8 +331,7 @@
 
     SvREFCNT_dec((SV*)av_args);
 
-    /* PerlInterpScope handler */
-    MP_INTERP_PUTBACK(interp);
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     return status;
 }
@@ -415,3 +388,10 @@
                                          NULL, NULL, s,
                                          pconf, plog, ptemp, run_mode);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_callback.h b/src/modules/perl/modperl_callback.h
index 8c5a3dc..8441b2d 100644
--- a/src/modules/perl/modperl_callback.h
+++ b/src/modules/perl/modperl_callback.h
@@ -66,3 +66,10 @@
                            modperl_hook_run_mode_e run_mode);
 
 #endif /* MODPERL_CALLBACK_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_cgi.c b/src/modules/perl/modperl_cgi.c
index cbff0d8..66743e6 100644
--- a/src/modules/perl/modperl_cgi.c
+++ b/src/modules/perl/modperl_cgi.c
@@ -101,3 +101,10 @@
 
     return status;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_cgi.h b/src/modules/perl/modperl_cgi.h
index 86190ea..4924257 100644
--- a/src/modules/perl/modperl_cgi.h
+++ b/src/modules/perl/modperl_cgi.h
@@ -36,3 +36,10 @@
                                        apr_size_t *len, const char **body);
 
 #endif /* MODPERL_CGI_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_cmd.c b/src/modules/perl/modperl_cmd.c
index 48bb58d..33db5f1 100644
--- a/src/modules/perl/modperl_cmd.c
+++ b/src/modules/perl/modperl_cmd.c
@@ -69,17 +69,15 @@
      */
     if (*name == '-') {
         MP_TRACE_h(MP_FUNC,
-                   "[%s] warning: filter handler %s will be not autoloaded. "
+                   "warning: filter handler %s will be not autoloaded. "
                    "Unless the module defining this handler is explicitly "
-                   "preloaded, filter attributes will be ignored.\n",
-                   modperl_pid_tid(p), h->name);
+                   "preloaded, filter attributes will be ignored.");
     }
     else {
         MpHandlerAUTOLOAD_On(h);
         MP_TRACE_h(MP_FUNC,
-                   "[%s] filter handler %s will be autoloaded (to make "
-                   "the filter attributes available)\n",
-                   modperl_pid_tid(p), h->name);
+                   "filter handler %s will be autoloaded (to make "
+                   "the filter attributes available)", h->name);
     }
 
     if (!*handlers) {
@@ -417,6 +415,35 @@
     return modperl_cmd_post_read_request_handlers(parms, mconfig, arg);
 }
 
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+
+MP_CMD_SRV_DECLARE2(authz_provider)
+{
+    apr_pool_t *p = parms->pool;
+    char *name = apr_pstrdup(p, arg1);
+    char *cb = apr_pstrdup(p, arg2);
+
+    modperl_register_auth_provider_name(p, AUTHZ_PROVIDER_GROUP, name,
+                                        AUTHZ_PROVIDER_VERSION, cb, NULL,
+                                        AP_AUTH_INTERNAL_PER_CONF);
+    return NULL;
+}
+
+MP_CMD_SRV_DECLARE2(authn_provider)
+{
+    apr_pool_t *p = parms->pool;
+    char *name = apr_pstrdup(p, arg1);
+    char *cb = apr_pstrdup(p, arg2);
+
+    modperl_register_auth_provider_name(p, AUTHN_PROVIDER_GROUP, name,
+                                        AUTHN_PROVIDER_VERSION, cb, NULL,
+                                        AP_AUTH_INTERNAL_PER_CONF);
+    return NULL;
+}
+
+#endif
+
 static const char *modperl_cmd_parse_args(apr_pool_t *p,
                                           const char *args,
                                           apr_table_t **t)
@@ -558,6 +585,11 @@
                           arg, NULL);
     }
 
+#ifdef USE_ITHREADS
+    MP_TRACE_i(MP_FUNC, "using interp %lx to execute perl section:\n%s",
+               scfg->mip->parent, arg);
+#endif
+
     {
         SV *server = MP_PERLSECTIONS_SERVER_SV;
         SV *code = newSVpv(arg, 0);
@@ -833,3 +865,10 @@
 MP_CMD_INTERP_POOL_IMP(max_requests);
 
 #endif /* USE_ITHREADS */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_cmd.h b/src/modules/perl/modperl_cmd.h
index d8629e9..79d3fd3 100644
--- a/src/modules/perl/modperl_cmd.h
+++ b/src/modules/perl/modperl_cmd.h
@@ -42,6 +42,11 @@
 MP_CMD_SRV_DECLARE(requires);
 MP_CMD_SRV_DECLARE(config_requires);
 MP_CMD_SRV_DECLARE(post_config_requires);
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+MP_CMD_SRV_DECLARE2(authz_provider);
+MP_CMD_SRV_DECLARE2(authn_provider);
+#endif
 MP_CMD_SRV_DECLARE2(set_var);
 MP_CMD_SRV_DECLARE2(add_var);
 MP_CMD_SRV_DECLARE2(set_env);
@@ -115,6 +120,10 @@
    AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \
       RSRC_CONF, desc )
 
+#define MP_CMD_SRV_ITERATE_ON_READ(name, item, desc) \
+   AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \
+      RSRC_CONF|EXEC_ON_READ, desc )
+
 #define MP_CMD_SRV_ITERATE2(name, item, desc) \
    AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \
       RSRC_CONF, desc )
@@ -148,3 +157,10 @@
       OR_ALL|EXEC_ON_READ, desc )
 
 #endif /* MODPERL_CMD_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_debug.c b/src/modules/perl/modperl_common_debug.c
index 91ac194..4ae508e 100644
--- a/src/modules/perl/modperl_common_debug.c
+++ b/src/modules/perl/modperl_common_debug.c
@@ -17,3 +17,10 @@
 /* This file must not contain any symbols from apache/mod_perl
  *  (apr and perl are OK) */
 #include "modperl_common_includes.h"
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_debug.h b/src/modules/perl/modperl_common_debug.h
index 204acbe..342986b 100644
--- a/src/modules/perl/modperl_common_debug.h
+++ b/src/modules/perl/modperl_common_debug.h
@@ -19,3 +19,10 @@
 
 
 #endif /* MODPERL_COMMON_DEBUG_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_includes.h b/src/modules/perl/modperl_common_includes.h
index d201688..971b2bd 100644
--- a/src/modules/perl/modperl_common_includes.h
+++ b/src/modules/perl/modperl_common_includes.h
@@ -25,3 +25,10 @@
 #include "modperl_common_types.h"
 
 #endif /* MODPERL_COMMON_INCLUDES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_log.c b/src/modules/perl/modperl_common_log.c
index 19107be..3335257 100644
--- a/src/modules/perl/modperl_common_log.c
+++ b/src/modules/perl/modperl_common_log.c
@@ -16,6 +16,7 @@
 
 #include "modperl_common_includes.h"
 #include "modperl_common_log.h"
+#include "modperl_debug.h"
 
 #undef getenv /* from XSUB.h */
 
@@ -48,7 +49,36 @@
         return;
     }
 
-    if (func) {
+    /* for more information on formatting codes see
+       http://apr.apache.org/docs/apr/1.4/group__apr__lib.html#gad2cd3594aeaafd45931d1034965f48c1
+     */
+
+    /* PERL_GET_CONTEXT yields nonsense until the first interpreter is
+     * created. Hence the modperl_is_running() question. */
+    if (modperl_threaded_mpm()) {
+        if (modperl_threads_started()) {
+            apr_os_thread_t tid = apr_os_thread_current();
+            apr_file_printf(logfile, "[pid=%lu, tid=%pt, perl=%pp] ",
+                            (unsigned long)getpid(), &tid,
+                            modperl_is_running() ? PERL_GET_CONTEXT : NULL);
+        }
+        else {
+            apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
+                            (unsigned long)getpid(),
+                            modperl_is_running() ? PERL_GET_CONTEXT : NULL);
+        }
+    }
+    else {
+#ifdef USE_ITHREADS
+        apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
+                        (unsigned long)getpid(),
+                        modperl_is_running() ? PERL_GET_CONTEXT : NULL);
+#else
+        apr_file_printf(logfile, "[pid=%lu] ", (unsigned long)getpid());
+#endif
+    }
+
+    if (func && *func) {
         apr_file_printf(logfile, "%s: ", func);
     }
 
@@ -90,3 +120,10 @@
 
     MP_TRACE_any_do(MP_TRACE_dump_flags());
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_log.h b/src/modules/perl/modperl_common_log.h
index 522138d..46c9491 100644
--- a/src/modules/perl/modperl_common_log.h
+++ b/src/modules/perl/modperl_common_log.h
@@ -58,3 +58,10 @@
 void modperl_trace_level_set(apr_file_t *logfile, const char *level);
 
 #endif /* MODPERL_COMMON_LOG_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_types.h b/src/modules/perl/modperl_common_types.h
index 292a050..bb4eb6c 100644
--- a/src/modules/perl/modperl_common_types.h
+++ b/src/modules/perl/modperl_common_types.h
@@ -26,3 +26,10 @@
 } modperl_uri_t;
 
 #endif /* MODPERL_COMMON_TYPES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_util.c b/src/modules/perl/modperl_common_util.c
index ba64e95..c5f285f 100644
--- a/src/modules/perl/modperl_common_util.c
+++ b/src/modules/perl/modperl_common_util.c
@@ -152,3 +152,10 @@
     uri->pool = p;
     return uri;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_common_util.h b/src/modules/perl/modperl_common_util.h
index 3dcdaf1..55f1600 100644
--- a/src/modules/perl/modperl_common_util.h
+++ b/src/modules/perl/modperl_common_util.h
@@ -110,3 +110,10 @@
 SV *modperl_perl_gensym(pTHX_ char *pack);
 
 #endif /* MODPERL_COMMON_UTIL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_config.c b/src/modules/perl/modperl_config.c
index f6a9529..7b29df7 100644
--- a/src/modules/perl/modperl_config.c
+++ b/src/modules/perl/modperl_config.c
@@ -374,9 +374,14 @@
 apr_status_t modperl_config_req_cleanup(void *data)
 {
     request_rec *r = (request_rec *)data;
-    MP_dTHX;
+    apr_status_t rc;
+    MP_dINTERPa(r, NULL, NULL);
 
-    return modperl_config_request_cleanup(aTHX_ r);
+    rc = modperl_config_request_cleanup(aTHX_ r);
+
+    MP_INTERP_PUTBACK(interp, aTHX);
+
+    return rc;
 }
 
 void *modperl_get_perl_module_config(ap_conf_vector_t *cv)
@@ -674,3 +679,10 @@
     }
 
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_config.h b/src/modules/perl/modperl_config.h
index 8cb6210..9139e20 100644
--- a/src/modules/perl/modperl_config.h
+++ b/src/modules/perl/modperl_config.h
@@ -36,7 +36,7 @@
 char **modperl_config_srv_argv_init(modperl_config_srv_t *scfg, int *argc);
 
 #define modperl_config_srv_argv_push(arg)               \
-    *(const char **)apr_array_push(scfg->argv) = arg
+    *(const char **)apr_array_push(scfg->argv) = (arg)
 
 apr_status_t modperl_config_request_cleanup(pTHX_ request_rec *r);
 
@@ -49,9 +49,9 @@
 #define modperl_config_req_cleanup_register(r, rcfg)           \
     if (r && !MpReqCLEANUP_REGISTERED(rcfg)) {                 \
         apr_pool_t *p;                           \
-        apr_pool_create(&p, r->pool);                   \
+        apr_pool_create(&p, (r)->pool);                 \
         apr_pool_cleanup_register(p,                   \
-                                  (void*)r,                    \
+                                  (void*)(r),                  \
                                   modperl_config_req_cleanup,  \
                                   apr_pool_cleanup_null);      \
         MpReqCLEANUP_REGISTERED_On(rcfg);                      \
@@ -62,27 +62,27 @@
 
 #if defined(MP_IN_XS) && defined(WIN32)
 #   define modperl_get_module_config(v)         \
-    modperl_get_perl_module_config(v)
+    modperl_get_perl_module_config((v))
 
 #   define modperl_set_module_config(v, c)      \
-    modperl_set_perl_module_config(v, c)
+    modperl_set_perl_module_config((v), (c))
 #else
 #   define modperl_get_module_config(v)         \
-    ap_get_module_config(v, &perl_module)
+    ap_get_module_config((v), &perl_module)
 
 #   define modperl_set_module_config(v, c)      \
-    ap_set_module_config(v, &perl_module, c)
+    ap_set_module_config((v), &perl_module, (c))
 #endif
 
 #define modperl_config_req_init(r, rcfg)                    \
-    if (!rcfg) {                                            \
-        rcfg = modperl_config_req_new(r);                   \
-        modperl_set_module_config(r->request_config, rcfg); \
+    if (!(rcfg)) {                                          \
+        (rcfg) = modperl_config_req_new(r);                 \
+        modperl_set_module_config((r)->request_config, (rcfg)); \
     }
 
 #define modperl_config_req_get(r)                               \
     (r ? (modperl_config_req_t *)                               \
-     modperl_get_module_config(r->request_config) : NULL)
+     modperl_get_module_config((r)->request_config) : NULL)
 
 #define MP_dRCFG \
     modperl_config_req_t *rcfg = modperl_config_req_get(r)
@@ -90,23 +90,23 @@
 #define modperl_config_con_init(c, ccfg)                 \
     if (!ccfg) {                                         \
         ccfg = modperl_config_con_new(c);                \
-        modperl_set_module_config(c->conn_config, ccfg); \
+        modperl_set_module_config((c)->conn_config, (ccfg)); \
     }
 
 #define modperl_config_con_get(c)                               \
     (c ? (modperl_config_con_t *)                               \
-     modperl_get_module_config(c->conn_config) : NULL)
+     modperl_get_module_config((c)->conn_config) : NULL)
 
 #define MP_dCCFG \
     modperl_config_con_t *ccfg = modperl_config_con_get(c)
 
 #define modperl_config_dir_get(r)                               \
     (r ? (modperl_config_dir_t *)                               \
-     modperl_get_module_config(r->per_dir_config) : NULL)
+     modperl_get_module_config((r)->per_dir_config) : NULL)
 
 #define modperl_config_dir_get_defaults(s)              \
     (modperl_config_dir_t *)                            \
-        modperl_get_module_config(s->lookup_defaults)
+        modperl_get_module_config((s)->lookup_defaults)
 
 #define MP_dDCFG \
     modperl_config_dir_t *dcfg = modperl_config_dir_get(r)
@@ -118,24 +118,6 @@
 #define MP_dSCFG(s)                                             \
     modperl_config_srv_t *scfg = modperl_config_srv_get(s)
 
-#ifdef USE_ITHREADS
-#   define MP_dSCFG_dTHX            \
-    dTHXa(scfg->mip->parent->perl); \
-    PERL_SET_CONTEXT(aTHX)
-#else
-#   define MP_dSCFG_dTHX dTHXa(scfg->perl)
-#endif
-
-/* hopefully this macro will not need to be used often */
-#ifdef USE_ITHREADS
-#   define MP_dTHX                                              \
-    modperl_interp_t *interp =                                  \
-        modperl_interp_select(r, r->connection, r->server);     \
-    dTHXa(interp->perl)
-#else
-#   define MP_dTHX dNOOP
-#endif
-
 int modperl_config_apply_PerlModule(server_rec *s,
                                     modperl_config_srv_t *scfg,
                                     PerlInterpreter *perl, apr_pool_t *p);
@@ -174,3 +156,10 @@
 
 
 #endif /* MODPERL_CONFIG_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_const.c b/src/modules/perl/modperl_const.c
index 0c0e3bd..209226b 100644
--- a/src/modules/perl/modperl_const.c
+++ b/src/modules/perl/modperl_const.c
@@ -131,3 +131,10 @@
 
     XSRETURN_EMPTY;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_const.h b/src/modules/perl/modperl_const.h
index a8b95f1..f6ef50c 100644
--- a/src/modules/perl/modperl_const.h
+++ b/src/modules/perl/modperl_const.h
@@ -31,3 +31,10 @@
          __FILE__)
 
 #endif /* MODPERL_CONST_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_debug.c b/src/modules/perl/modperl_debug.c
index 8c0d616..8b880d9 100644
--- a/src/modules/perl/modperl_debug.c
+++ b/src/modules/perl/modperl_debug.c
@@ -21,28 +21,6 @@
     return apr_psprintf(p, "%s:%u", s->server_hostname, s->port);
 }
 
-/* used in debug traces */
-MP_INLINE char *modperl_pid_tid(apr_pool_t *p)
-{
-    if (modperl_threaded_mpm()) {
-        return apr_psprintf(p, "%lu"
-#if APR_HAS_THREADS
-                            "/%lu"
-#endif /* APR_HAS_THREADS */
-                            , (unsigned long)getpid()
-#if APR_HAS_THREADS
-                            , modperl_threads_started()
-                            ? (unsigned long)apr_os_thread_current()
-                            : 0
-#endif /* APR_HAS_THREADS */
-            );
-    }
-    else {
-        return apr_psprintf(p, "%lu", (unsigned long)getpid());
-    }
-}
-
-    
 #ifdef MP_TRACE
 void modperl_apr_table_dump(pTHX_ apr_table_t *table, char *name)
 {
@@ -97,3 +75,10 @@
 
 }
 #endif
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_debug.h b/src/modules/perl/modperl_debug.h
index 930e581..da7fc4b 100644
--- a/src/modules/perl/modperl_debug.h
+++ b/src/modules/perl/modperl_debug.h
@@ -19,8 +19,19 @@
 
 #include "mod_perl.h"
 
+#ifdef MP_DEBUG
+#  define MP_ASSERT(exp) ap_assert(exp)
+#else
+#  define MP_ASSERT(exp) ((void)0)
+#endif
+
+#ifdef USE_ITHREADS
+#  define MP_ASSERT_CONTEXT(perl) MP_ASSERT((perl) == PERL_GET_CONTEXT)
+#else
+#  define MP_ASSERT_CONTEXT(perl) ((void)0)
+#endif
+
 char *modperl_server_desc(server_rec *s, apr_pool_t *p);
-MP_INLINE char *modperl_pid_tid(apr_pool_t *p);
 
 #ifdef MP_TRACE
 void modperl_apr_table_dump(pTHX_ apr_table_t *table, char *name);
@@ -29,3 +40,10 @@
 #endif
 
 #endif /* MODPERL_DEBUG_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_env.c b/src/modules/perl/modperl_env.c
index e700501..769fd2c 100644
--- a/src/modules/perl/modperl_env.c
+++ b/src/modules/perl/modperl_env.c
@@ -232,15 +232,15 @@
         }
     }
 
-    MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s]"
+    MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s]"
                "\n\t@ENV{keys scfg->SetEnv} = values scfg->SetEnv;",
-               modperl_pid_tid(p), modperl_interp_address(aTHX),
+               modperl_interp_address(aTHX),
                modperl_server_desc(s, p));
     modperl_env_table_populate(aTHX_ scfg->SetEnv);
 
-    MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s]"
+    MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s]"
                "\n\t@ENV{keys scfg->PassEnv} = values scfg->PassEnv;",
-               modperl_pid_tid(p), modperl_interp_address(aTHX),
+               modperl_interp_address(aTHX),
                modperl_server_desc(s, p));
     modperl_env_table_populate(aTHX_ scfg->PassEnv);
 }
@@ -270,9 +270,9 @@
          * collisions with per-server PerlSetEnv entries are
          * resolved via the nature of a Perl hash
          */
-        MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s]"
+        MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s]"
                    "\n\t@ENV{keys dcfg->SetEnv} = values dcfg->SetEnv;",
-                   modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+                   modperl_interp_address(aTHX),
                    modperl_server_desc(r->server, r->pool));
         modperl_env_table_populate(aTHX_ dcfg->SetEnv);
 
@@ -303,9 +303,9 @@
      */
 
     if (!apr_is_empty_table(scfg->SetEnv)) {
-        MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s]"
+        MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s]"
                    "\n\t@ENV{keys scfg->SetEnv} = values scfg->SetEnv;",
-                   modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+                   modperl_interp_address(aTHX),
                    modperl_server_desc(r->server, r->pool));
         modperl_env_table_populate(aTHX_ scfg->SetEnv);
 
@@ -313,9 +313,9 @@
     }
 
     if (!apr_is_empty_table(scfg->PassEnv)) {
-        MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s]"
+        MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s]"
                    "\n\t@ENV{keys scfg->PassEnv} = values scfg->PassEnv;",
-                   modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+                   modperl_interp_address(aTHX),
                    modperl_server_desc(r->server, r->pool));
         modperl_env_table_populate(aTHX_ scfg->PassEnv);
 
@@ -363,9 +363,9 @@
      * phases from populating %ENV with new subprocess_env table entries
      */
 
-    MP_TRACE_e(MP_FUNC, "\t[%s/0x%lx/%s%s]"
+    MP_TRACE_e(MP_FUNC, "\t[0x%lx/%s%s]"
                "\n\t@ENV{keys r->subprocess_env} = values r->subprocess_env;",
-               modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+               modperl_interp_address(aTHX),
                modperl_server_desc(r->server, r->pool), r->uri);
 
     /* we can eliminate some of the cost by only doing CGI variables once
@@ -397,8 +397,8 @@
     }
 
     MP_TRACE_e(MP_FUNC,
-               "\n\t[%s/0x%lx/%s%s]\n\tdelete @ENV{keys r->subprocess_env};",
-               modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+               "\n\t[0x%lx/%s%s]\n\tdelete @ENV{keys r->subprocess_env};",
+               modperl_interp_address(aTHX),
                modperl_server_desc(r->server, r->pool), r->uri);
     modperl_env_table_unpopulate(aTHX_ r->subprocess_env);
 
@@ -411,8 +411,8 @@
     EnvMgLenSet(-1);
 
 #ifdef MP_PERL_HV_GMAGICAL_AWARE
-    MP_TRACE_e(MP_FUNC, "[%s/0x%lx] tie %%ENV, $r\t (%s%s)",
-               modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+    MP_TRACE_e(MP_FUNC, "[0x%lx] tie %%ENV, $r\t (%s%s)",
+               modperl_interp_address(aTHX),
                modperl_server_desc(r->server, r->pool), r->uri);
     SvGMAGICAL_on((SV*)ENVHV);
 #endif
@@ -423,8 +423,8 @@
     EnvMgObjSet(NULL);
 
 #ifdef MP_PERL_HV_GMAGICAL_AWARE
-    MP_TRACE_e(MP_FUNC, "[%s/0x%lx] untie %%ENV; # from r\t (%s%s)",
-               modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+    MP_TRACE_e(MP_FUNC, "[0x%lx] untie %%ENV; # from r\t (%s%s)",
+               modperl_interp_address(aTHX),
                modperl_server_desc(r->server, r->pool), r->uri);
     SvGMAGICAL_off((SV*)ENVHV);
 #endif
@@ -480,8 +480,7 @@
                 apr_table_set(r->subprocess_env,
                               hv_iterkey(entry, &keylen),
                               SvPV(hv_iterval((HV*)sv, entry), n_a));
-                MP_TRACE_e(MP_FUNC, "[%s/0x%lx] localizing: %s => %s",
-                           modperl_pid_tid(r->pool),
+                MP_TRACE_e(MP_FUNC, "[0x%lx] localizing: %s => %s",
                            modperl_interp_address(aTHX),
                            hv_iterkey(entry, &keylen),
                            SvPV(hv_iterval((HV*)sv, entry), n_a));
@@ -493,17 +492,14 @@
         HE *entry;
         STRLEN n_a;
 
-        MP_TRACE_e(MP_FUNC,
-                   "\n\t[%lu/0x%lx] populating %%ENV:",
-                   (unsigned long)getpid(), modperl_interp_address(aTHX));
+        MP_TRACE_e(MP_FUNC, "\n\t[0x%lx] populating %%ENV:",
+                   modperl_interp_address(aTHX));
 
         hv_iterinit((HV*)sv);
 
         while ((entry = hv_iternext((HV*)sv))) {
                 I32 keylen;
                 MP_TRACE_e(MP_FUNC, "$ENV{%s} = \"%s\";",
-                           modperl_pid_tid(r->pool),
-                           modperl_interp_address(aTHX),
                            hv_iterkey(entry, &keylen),
                            SvPV(hv_iterval((HV*)sv, entry), n_a));
             }
@@ -520,14 +516,12 @@
 
     if (r) {
         apr_table_clear(r->subprocess_env);
-        MP_TRACE_e(MP_FUNC,
-                   "[%s/0x%lx] clearing all magic off r->subprocess_env",
-                   modperl_pid_tid(r->pool), modperl_interp_address(aTHX));
+        MP_TRACE_e(MP_FUNC, "[0x%lx] clearing all magic off r->subprocess_env",
+                   modperl_interp_address(aTHX));
     }
     else {
-        MP_TRACE_e(MP_FUNC,
-                   "[%s/0x%lx] %%ENV = ();",
-                   modperl_pid_tid(r->pool), modperl_interp_address(aTHX));
+        MP_TRACE_e(MP_FUNC, "[0x%lx] %%ENV = ();",
+                   modperl_interp_address(aTHX));
         return MP_PL_vtbl_call(env, clear);
     }
 
@@ -542,8 +536,7 @@
         MP_dENV_KEY;
         MP_dENV_VAL;
         apr_table_set(r->subprocess_env, key, val);
-        MP_TRACE_e(MP_FUNC, "[%s/0x%lx] r->subprocess_env set: %s => %s",
-                   modperl_pid_tid(r->pool),
+        MP_TRACE_e(MP_FUNC, "[0x%lx] r->subprocess_env set: %s => %s",
                    modperl_interp_address(aTHX), key, val);
     }
     else {
@@ -551,8 +544,7 @@
         MP_dENV_KEY;
         MP_dENV_VAL;
         MP_TRACE_e(MP_FUNC,
-                   "[%lu/0x%lx] $ENV{%s} = \"%s\";",
-                   (unsigned long)getpid(),
+                   "[0x%lx] $ENV{%s} = \"%s\";",
                    modperl_interp_address(aTHX), key, val);
 #endif
         return MP_PL_vtbl_call(envelem, set);
@@ -568,15 +560,13 @@
     if (r) {
         MP_dENV_KEY;
         apr_table_unset(r->subprocess_env, key);
-        MP_TRACE_e(MP_FUNC, "[%s/0x%lx] r->subprocess_env unset: %s",
-                   modperl_pid_tid(r->pool),
+        MP_TRACE_e(MP_FUNC, "[0x%lx] r->subprocess_env unset: %s",
                    modperl_interp_address(aTHX), key);
     }
     else {
 #ifdef MP_TRACE
         MP_dENV_KEY;
-        MP_TRACE_e(MP_FUNC, "[%lu/0x%lx] delete $ENV{%s};",
-                   (unsigned long)getpid(),
+        MP_TRACE_e(MP_FUNC, "[0x%lx] delete $ENV{%s};",
                    modperl_interp_address(aTHX), key);
 #endif
         return MP_PL_vtbl_call(envelem, clear);
@@ -597,15 +587,13 @@
         if ((val = apr_table_get(r->subprocess_env, key))) {
             sv_setpv(sv, val);
             MP_TRACE_e(MP_FUNC,
-                       "[%s/0x%lx] r->subprocess_env get: %s => %s",
-                       modperl_pid_tid(r->pool),
+                       "[0x%lx] r->subprocess_env get: %s => %s",
                        modperl_interp_address(aTHX), key, val);
         }
         else {
             sv_setsv(sv, &PL_sv_undef);
             MP_TRACE_e(MP_FUNC,
-                       "[%s/0x%lx] r->subprocess_env get: %s => undef",
-                       modperl_pid_tid(r->pool),
+                       "[0x%lx] r->subprocess_env get: %s => undef",
                        modperl_interp_address(aTHX), key);
         }
     }
@@ -614,8 +602,7 @@
 #ifdef MP_TRACE
         MP_dENV_KEY;
         MP_TRACE_e(MP_FUNC,
-                   "[%lu/0x%lx] there is no svt_get in PL_vtbl_envelem: %s",
-                   (unsigned long)getpid(),
+                   "[0x%lx] there is no svt_get in PL_vtbl_envelem: %s",
                    modperl_interp_address(aTHX), key);
 #endif
     }
@@ -658,3 +645,10 @@
     StructCopy(&MP_PERL_vtbl_env, &PL_vtbl_env, MGVTBL);
     StructCopy(&MP_PERL_vtbl_envelem, &PL_vtbl_envelem, MGVTBL);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_env.h b/src/modules/perl/modperl_env.h
index ecb126e..406e345 100644
--- a/src/modules/perl/modperl_env.h
+++ b/src/modules/perl/modperl_env.h
@@ -63,3 +63,10 @@
 void modperl_env_unload(void);
 
 #endif /* MODPERL_ENV_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_error.c b/src/modules/perl/modperl_error.c
index b80ab0a..2f83216 100644
--- a/src/modules/perl/modperl_error.c
+++ b/src/modules/perl/modperl_error.c
@@ -93,3 +93,10 @@
 
     Perl_croak(aTHX_ (char *)NULL);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_error.h b/src/modules/perl/modperl_error.h
index cbd693f..cd5fd69 100644
--- a/src/modules/perl/modperl_error.h
+++ b/src/modules/perl/modperl_error.h
@@ -62,3 +62,10 @@
     } STMT_END
 
 #endif /* MODPERL_ERROR_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_filter.c b/src/modules/perl/modperl_filter.c
index 73a8ae8..ceaa73e 100644
--- a/src/modules/perl/modperl_filter.c
+++ b/src/modules/perl/modperl_filter.c
@@ -282,13 +282,14 @@
     /* mod_perl filter ctx cleanup */
     if (ctx->data){
 #ifdef USE_ITHREADS
-        dTHXa(ctx->perl);
+        dTHXa(ctx->interp->perl);
+        MP_ASSERT_CONTEXT(aTHX);
 #endif
         if (SvOK(ctx->data) && SvREFCNT(ctx->data)) {
             SvREFCNT_dec(ctx->data);
             ctx->data = NULL;
         }
-        ctx->perl = NULL;
+        MP_INTERP_PUTBACK(ctx->interp, aTHX);
     }
 
     return APR_SUCCESS;
@@ -440,7 +441,7 @@
     apr_pool_t  *p = r ? r->pool : c->pool;
     modperl_filter_t *filter = modperl_filter_new(f, NULL, mode, 0, 0, 0);
 
-    MP_dINTERP_SELECT(r, c, s);
+    MP_dINTERPa(r, c, s);
 
     MP_TRACE_h(MP_FUNC, "running filter init handler %s",
                modperl_handler_name(handler));
@@ -464,7 +465,7 @@
     FILTER_FREE(filter);
     SvREFCNT_dec((SV*)args);
 
-    MP_INTERP_PUTBACK(interp);
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     MP_TRACE_f(MP_FUNC, MP_FILTER_NAME_FORMAT
                "return: %d", modperl_handler_name(handler), status);
@@ -485,7 +486,7 @@
     server_rec  *s = r ? r->server : c->base_server;
     apr_pool_t  *p = r ? r->pool : c->pool;
 
-    MP_dINTERP_SELECT(r, c, s);
+    MP_dINTERPa(r, c, s);
 
     MP_FILTER_SAVE_ERRSV(errsv);
 
@@ -555,7 +556,7 @@
 
     MP_FILTER_RESTORE_ERRSV(errsv);
 
-    MP_INTERP_PUTBACK(interp);
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     MP_TRACE_f(MP_FUNC, MP_FILTER_NAME_FORMAT
                "return: %d", modperl_handler_name(handler), status);
@@ -1291,3 +1292,10 @@
     }
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_filter.h b/src/modules/perl/modperl_filter.h
index cc36cbb..939f054 100644
--- a/src/modules/perl/modperl_filter.h
+++ b/src/modules/perl/modperl_filter.h
@@ -114,3 +114,10 @@
                                 SV *callback, const char *type);
 
 #endif /* MODPERL_FILTER_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_global.c b/src/modules/perl/modperl_global.c
index 9cc95f6..750110c 100644
--- a/src/modules/perl/modperl_global.c
+++ b/src/modules/perl/modperl_global.c
@@ -303,3 +303,10 @@
 }
 
 MP_TLS_IMPL(request_rec, request_rec *)
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_global.h b/src/modules/perl/modperl_global.h
index fbf0aee..8d4f05a 100644
--- a/src/modules/perl/modperl_global.h
+++ b/src/modules/perl/modperl_global.h
@@ -81,3 +81,10 @@
 MP_TLS_DECL(request_rec, request_rec *);
 
 #endif /* MODPERL_GLOBAL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_gtop.c b/src/modules/perl/modperl_gtop.c
index dda0a83..170cfd1 100644
--- a/src/modules/perl/modperl_gtop.c
+++ b/src/modules/perl/modperl_gtop.c
@@ -145,3 +145,10 @@
 }
 
 #endif /* MP_USE_GTOP */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_gtop.h b/src/modules/perl/modperl_gtop.h
index a1c7e80..61554de 100644
--- a/src/modules/perl/modperl_gtop.h
+++ b/src/modules/perl/modperl_gtop.h
@@ -72,3 +72,10 @@
 #endif /* MP_USE_GTOP */
 
 #endif /* MODPERL_GTOP_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_handler.c b/src/modules/perl/modperl_handler.c
index 9eaf38e..fe935d7 100644
--- a/src/modules/perl/modperl_handler.c
+++ b/src/modules/perl/modperl_handler.c
@@ -39,8 +39,7 @@
     /* not necessary due to apr_pcalloc */
     /* handler->cv = NULL; */
     handler->name = name;
-    MP_TRACE_h(MP_FUNC, "[%s] new handler %s",
-               modperl_pid_tid(p), handler->name);
+    MP_TRACE_h(MP_FUNC, "new handler %s", handler->name);
 
     return handler;
 }
@@ -105,8 +104,7 @@
     anon->len  = strlen(anon->name);
     PERL_HASH(anon->hash, anon->name, anon->len);
 
-    MP_TRACE_h(MP_FUNC, "[%s] new anon handler: '%s'",
-               modperl_pid_tid(p), anon->name);
+    MP_TRACE_h(MP_FUNC, "new anon handler: '%s'", anon->name);
     return anon;
 }
 
@@ -175,8 +173,7 @@
     handler->cv   = cv;
     handler->name = NULL;
 
-    MP_TRACE_h(MP_FUNC, "[%s] new cached cv anon handler",
-               modperl_pid_tid(p));
+    MP_TRACE_h(MP_FUNC, "new cached cv anon handler");
 #endif
 
     return handler;
@@ -223,9 +220,8 @@
         MpHandlerAUTOLOAD_On(handler);
 
         MP_TRACE_h(MP_FUNC,
-                   "[%s %s] handler %s hasn't yet been resolved, "
-                   "attempting to resolve using %s pool 0x%lx\n",
-                   modperl_pid_tid(p),
+                   "[%s] handler %s hasn't yet been resolved, "
+                   "attempting to resolve using %s pool 0x%lx",
                    modperl_server_desc(s, p),
                    modperl_handler_name(handler),
                    duped ? "current" : "server conf",
@@ -349,9 +345,15 @@
 #define set_desc(dtype)                                 \
     if (desc) *desc = modperl_handler_desc_##dtype(idx)
 
+/* We should be able to use PERL_GET_CONTEXT here. The rcfg condition
+ * makes sure there is a request being processed. The action > GET part
+ * means it is a $r->set_handlers or $r->push_handlers operation. This
+ * can only happen if called by perl code.
+ */
 #define check_modify(dtype)                                     \
     if ((action > MP_HANDLER_ACTION_GET) && rcfg) {             \
-        MP_dSCFG_dTHX;                                          \
+        dTHXa(PERL_GET_CONTEXT);                                \
+        MP_ASSERT(aTHX+0);                                      \
         Perl_croak(aTHX_ "too late to modify %s handlers",      \
                    modperl_handler_desc_##dtype(idx));          \
     }
@@ -631,3 +633,10 @@
 
     return TRUE;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_handler.h b/src/modules/perl/modperl_handler.h
index f0cb08d..af3a8dd 100644
--- a/src/modules/perl/modperl_handler.h
+++ b/src/modules/perl/modperl_handler.h
@@ -85,3 +85,10 @@
                                       modperl_handler_action_e action);
 
 #endif /* MODPERL_HANDLER_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_interp.c b/src/modules/perl/modperl_interp.c
index 05ae2c9..430a2af 100644
--- a/src/modules/perl/modperl_interp.c
+++ b/src/modules/perl/modperl_interp.c
@@ -38,12 +38,7 @@
 
     MpInterpCLONED_On(interp);
 
-    PERL_SET_CONTEXT(aTHX);
-
-    /* XXX: hack for bug fixed in 5.6.1 */
-    if (PL_scopestack_ix == 0) {
-        ENTER;
-    }
+    MP_ASSERT_CONTEXT(aTHX);
 
     /* clear @DynaLoader::dl_librefs so we only dlclose() those
      * which are opened by the clone
@@ -61,7 +56,7 @@
     memset(interp, '\0', sizeof(*interp));
 
     interp->mip = mip;
-    interp->refcnt = 0; /* for use by APR::Pool->cleanup_register */
+    interp->refcnt = 0;
 
     if (perl) {
 #ifdef MP_USE_GTOP
@@ -79,14 +74,7 @@
 
         interp->perl = perl_clone(perl, clone_flags);
 
-#if MP_PERL_VERSION(5, 8, 0) && \
-    defined(USE_REENTRANT_API) && defined(HAS_CRYPT_R) && defined(__GLIBC__)
-        {
-            dTHXa(interp->perl);
-            /* workaround 5.8.0 bug */
-            PL_reentrant_buffer->_crypt_struct.current_saltbits = 0;
-        }
-#endif
+        MP_ASSERT_CONTEXT(interp->perl);
 
         {
             PTR_TBL_t *source = modperl_module_config_table_get(perl, FALSE);
@@ -101,7 +89,9 @@
 
         /*
          * we keep the PL_ptr_table past perl_clone so it can be used
-         * within modperl_svptr_table_clone.
+         * within modperl_svptr_table_clone. Perl_sv_dup() uses it.
+         * Don't confuse our svptr_table with Perl's ptr_table. They
+         * are different things, although they use the same type.
          */
         if ((clone_flags & CLONEf_KEEP_PTR_TABLE)) {
             dTHXa(interp->perl);
@@ -268,32 +258,48 @@
     scfg->mip = mip;
 }
 
+#ifdef MP_TRACE
+static apr_status_t modperl_interp_pool_cleanup(void *data)
+{
+    MP_TRACE_i(MP_FUNC, "unselecting: (0x%lx)->refcnt=%ld",
+               data, ((modperl_interp_t*)data)->refcnt);
+
+    return modperl_interp_unselect(data);
+}
+#endif
+
 apr_status_t modperl_interp_unselect(void *data)
 {
     modperl_interp_t *interp = (modperl_interp_t *)data;
     modperl_interp_pool_t *mip = interp->mip;
 
-    if (interp->refcnt != 0) {
+    MP_ASSERT(interp && MpInterpIN_USE(interp));
+    MP_TRACE_i(MP_FUNC, "unselect(interp=%pp): refcnt=%d",
+               interp, interp->refcnt);
+
+    if (interp->refcnt > 1) {
         --interp->refcnt;
-        MP_TRACE_i(MP_FUNC, "interp=0x%lx, refcnt=%d",
+        MP_TRACE_i(MP_FUNC, "interp=0x%lx, refcnt=%d -- interp still in use",
                    (unsigned long)interp, interp->refcnt);
         return APR_SUCCESS;
     }
 
-    if (interp->request) {
-        /* ithreads + a threaded mpm + PerlInterpScope handler */
-        request_rec *r = interp->request;
-        MP_dRCFG;
-        modperl_config_request_cleanup(interp->perl, r);
-        MpReqCLEANUP_REGISTERED_Off(rcfg);
-    }
-
     MpInterpIN_USE_Off(interp);
-    MpInterpPUTBACK_Off(interp);
 
     modperl_thx_interp_set(interp->perl, NULL);
+#ifdef MP_DEBUG
+    PERL_SET_CONTEXT(NULL);
+#endif
 
-    modperl_tipool_putback_data(mip->tipool, data, interp->num_requests);
+    if (interp == mip->parent) {
+        MP_TRACE_i(MP_FUNC, "parent interp=%pp freed", interp);
+    }
+    else {
+        interp->ccfg->interp = NULL;
+        modperl_tipool_putback_data(mip->tipool, data, interp->num_requests);
+        MP_TRACE_i(MP_FUNC, "interp=%pp freed, tipool(size=%ld, in_use=%ld)",
+                   interp, mip->tipool->size, mip->tipool->in_use);
+    }
 
     return APR_SUCCESS;
 }
@@ -321,13 +327,9 @@
 }
 
 void modperl_interp_pool_set(apr_pool_t *p,
-                             modperl_interp_t *interp,
-                             int cleanup)
+                             modperl_interp_t *interp)
 {
-    /* same as get_interp but optional cleanup  */
-    (void)apr_pool_userdata_set((void *)interp, MP_INTERP_KEY,
-                                cleanup ? modperl_interp_unselect : NULL,
-                                p);
+    (void)apr_pool_userdata_set((void *)interp, MP_INTERP_KEY, NULL, p);
 }
 
 /*
@@ -339,73 +341,134 @@
                                              server_rec *s)
 {
     int is_startup = (p == s->process->pconf);
-    MP_dSCFG(s);
     modperl_interp_t *interp = NULL;
 
-    if (scfg && (is_startup || !modperl_threaded_mpm())) {
-        MP_TRACE_i(MP_FUNC, "using parent interpreter at %s",
-                   is_startup ? "startup" : "request time (non-threaded MPM)");
+    if (is_startup) {
+        MP_dSCFG(s);
+        if (scfg) {
+            MP_TRACE_i(MP_FUNC, "using parent interpreter at startup");
 
-        if (!scfg->mip) {
-            /* we get here if directive handlers are invoked
-             * before server merge.
-             */
-            modperl_init_vhost(s, p, NULL);
-        }
+            if (!scfg->mip) {
+                /* we get here if directive handlers are invoked
+                 * before server merge.
+                 */
+                modperl_init_vhost(s, p, NULL);
+                if (!scfg->mip) {
+                    /* FIXME: We get here if global "server_rec" == s, scfg->mip
+                     * is not created then. I'm not sure if that's bug or 
+                     * bad/good design decicision. For now just return NULL.
+                     */
+                    return NULL;
+                }
+            }
 
-        interp = scfg->mip->parent;
-    }
-    else {
-        if (!(interp = modperl_interp_pool_get(p))) {
-            interp = modperl_interp_get(s);
-            modperl_interp_pool_set(p, interp, TRUE);
-
-            MP_TRACE_i(MP_FUNC, "set interp in request time pool 0x%lx",
-                       (unsigned long)p);
+            interp = scfg->mip->parent;
         }
         else {
-            MP_TRACE_i(MP_FUNC, "found interp in request time pool 0x%lx",
-                       (unsigned long)p);
-        }
-    }
+            if (!(interp = modperl_interp_pool_get(p))) {
+        	interp = modperl_interp_get(s);
+                modperl_interp_pool_set(p, interp);
 
-    return interp;
+                MP_TRACE_i(MP_FUNC, "set interp %pp in pconf pool %pp",
+                           interp, p);
+            }
+            else {
+                MP_TRACE_i(MP_FUNC, "found interp %pp in pconf pool %pp",
+                           interp, p);
+            }
+        }
+
+        MpInterpIN_USE_On(interp);
+        interp->refcnt++;
+        /* set context (THX) for this thread */
+        PERL_SET_CONTEXT(interp->perl);
+        /* let the perl interpreter point back to its interp */
+        modperl_thx_interp_set(interp->perl, interp);
+
+        return interp;
+    }
+    else {
+        request_rec *r;
+        apr_pool_userdata_get((void **)&r, "MODPERL_R", p);
+        MP_ASSERT(r);
+        MP_TRACE_i(MP_FUNC, "found userdata MODPERL_R in pool %#lx as %lx",
+                   (unsigned long)r->pool, (unsigned long)r);
+        return modperl_interp_select(r, NULL, NULL);
+    }
 }
 
 modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c,
                                         server_rec *s)
 {
-    MP_dSCFG(s);
-    MP_dRCFG;
-    modperl_config_dir_t *dcfg = modperl_config_dir_get(r);
+    MP_dSCFG((r ? s=r->server : c ? s=c->base_server : s));
+    MP_dDCFG;
+    modperl_config_con_t *ccfg;
     const char *desc = NULL;
     modperl_interp_t *interp = NULL;
     apr_pool_t *p = NULL;
-    int is_subrequest = (r && r->main) ? 1 : 0;
     modperl_interp_scope_e scope;
 
-    if (!modperl_threaded_mpm()) {
-        MP_TRACE_i(MP_FUNC,
-                   "using parent 0x%lx for non-threaded mpm (%s:%d)",
-                   (unsigned long)scfg->mip->parent,
-                   s->server_hostname, s->port);
+    /* What does the following condition mean?
+     * (r || c): if true we are at runtime. There is some kind of request
+     *           being processed.
+     * threaded_mpm: self-explanatory
+     *
+     * Thus, it is true if we are either at initialization time or at runtime
+     * but with prefork-MPM. */
+    if (!((r || c) && modperl_threaded_mpm())) {
+        interp = scfg->mip->parent;
+        MpInterpIN_USE_On(interp);
+        interp->refcnt++;
         /* XXX: if no VirtualHosts w/ PerlOptions +Parent we can skip this */
-        PERL_SET_CONTEXT(scfg->mip->parent->perl);
-        return scfg->mip->parent;
+        PERL_SET_CONTEXT(interp->perl);
+        /* let the perl interpreter point back to its interp */
+        modperl_thx_interp_set(interp->perl, interp);
+
+        MP_TRACE_i(MP_FUNC,
+                   "using parent 0x%pp (perl=0x%pp) for %s:%d refcnt set to %d",
+                   interp, interp->perl, s->server_hostname, s->port,
+                   interp->refcnt);
+        return interp;
     }
 
-    if (rcfg && rcfg->interp) {
-        /* if scope is per-handler and something selected an interpreter
-         * before modperl_callback_run_handlers() and is still holding it,
-         * e.g. modperl_response_handler_cgi(), that interpreter will
-         * be here
-         */
+    if(!c) c = r->connection;
+    ccfg = modperl_config_con_get(c);
+
+    if (ccfg && ccfg->interp) {
+        ccfg->interp->refcnt++;
+
         MP_TRACE_i(MP_FUNC,
-                   "found interp 0x%lx in request config\n",
-                   (unsigned long)rcfg->interp);
-        return rcfg->interp;
+                   "found interp 0x%lx in con config, refcnt incremented to %d",
+                   (unsigned long)ccfg->interp, ccfg->interp->refcnt);
+        /* set context (THX) for this thread */
+        PERL_SET_CONTEXT(ccfg->interp->perl);
+        /* modperl_thx_interp_set() is not called here because the interp
+         * already belongs to the perl interpreter
+         */
+        return ccfg->interp;
     }
 
+    MP_TRACE_i(MP_FUNC,
+               "fetching interp for %s:%d", s->server_hostname, s->port);
+    interp = modperl_interp_get(s);
+    MP_TRACE_i(MP_FUNC, "  --> got %pp (perl=%pp)", interp, interp->perl);
+    ++interp->num_requests; /* should only get here once per request */
+    interp->refcnt = 0;
+
+    /* set context (THX) for this thread */
+    PERL_SET_CONTEXT(interp->perl);
+    /* let the perl interpreter point back to its interp */
+    modperl_thx_interp_set(interp->perl, interp);
+
+    /* make sure ccfg is initialized */
+    modperl_config_con_init(c, ccfg);
+    ccfg->interp = interp;
+    interp->ccfg = ccfg;
+
+    MP_TRACE_i(MP_FUNC,
+               "pulled interp %pp (perl=%pp) from mip, num_requests is %d",
+               interp, interp->perl, interp->num_requests);
+
     /*
      * if a per-dir PerlInterpScope is specified, use it.
      * else if r != NULL use per-server PerlInterpScope
@@ -419,103 +482,50 @@
     MP_TRACE_i(MP_FUNC, "scope is per-%s",
                modperl_interp_scope_desc(scope));
 
-    /*
-     * XXX: goto modperl_interp_get() if scope == handler ?
-     */
-
-    if (c && (scope == MP_INTERP_SCOPE_CONNECTION)) {
-        desc = "conn_rec pool";
-        get_interp(c->pool);
-
-        if (interp) {
-            MP_TRACE_i(MP_FUNC,
-                       "found interp 0x%lx in %s 0x%lx\n",
-                       (unsigned long)interp, desc, (unsigned long)c->pool);
-            return interp;
+    if (scope != MP_INTERP_SCOPE_HANDLER) {
+        desc = NULL;
+        if (c && (scope == MP_INTERP_SCOPE_CONNECTION || !r)) {
+            p = c->pool;
+            desc = "connection";
         }
-
-        p = c->pool;
-    }
-    else if (r) {
-        if (is_subrequest && (scope == MP_INTERP_SCOPE_REQUEST)) {
-            /* share 1 interpreter across sub-requests */
+        else if (r) {
             request_rec *main_r = r->main;
 
-            while (main_r && !interp) {
-                p = main_r->pool;
-                get_interp(p);
-                MP_TRACE_i(MP_FUNC,
-                           "looking for interp in main request for %s...%s\n",
-                           main_r->uri, interp ? "found" : "not found");
-                main_r = main_r->main;
+            if (main_r && (scope == MP_INTERP_SCOPE_REQUEST)) {
+                /* share 1 interpreter across sub-requests */
+                for(; main_r; main_r = main_r->main) {
+                    p = main_r->pool;
+                }
+                desc = "main request";
             }
-        }
-        else {
-            p = r->pool;
-            get_interp(p);
-        }
+            else {
+                p = r->pool;
+                desc = scope == MP_INTERP_SCOPE_REQUEST
+                       ? "main request"
+                       : "sub request";
+            }
+	}
 
-        desc = "request_rec pool";
+        MP_ASSERT(p);
 
-        if (interp) {
-            MP_TRACE_i(MP_FUNC,
-                       "found interp 0x%lx in %s 0x%lx (%s request for %s)\n",
-                       (unsigned long)interp, desc, (unsigned long)p,
-                       (is_subrequest ? "sub" : "main"), r->uri);
-            return interp;
-        }
-
-        /* might have already been set by a ConnectionHandler */
-        get_interp(r->connection->pool);
-
-        if (interp) {
-            desc = "r->connection pool";
-            MP_TRACE_i(MP_FUNC,
-                       "found interp 0x%lx in %s 0x%lx\n",
-                       (unsigned long)interp, desc,
-                       (unsigned long)r->connection->pool);
-            return interp;
-        }
-    }
-
-    interp = modperl_interp_get(s ? s : r->server);
-    ++interp->num_requests; /* should only get here once per request */
-
-    if (scope == MP_INTERP_SCOPE_HANDLER) {
-        /* caller is responsible for calling modperl_interp_unselect() */
-        interp->request = r;
-        MpReqCLEANUP_REGISTERED_On(rcfg);
-        MpInterpPUTBACK_On(interp);
-    }
-    else {
-        if (!p) {
-            /* should never happen */
-            MP_TRACE_i(MP_FUNC, "no pool");
-            return NULL;
-        }
-
-        set_interp(p);
-
-#if AP_MODULE_MAGIC_AT_LEAST(20111130, 0)
-        MP_TRACE_i(MP_FUNC,
-                   "set interp 0x%lx in %s 0x%lx (%s request for %s)\n",
-                   (unsigned long)interp, desc, (unsigned long)p,
-                   (r ? (is_subrequest ? "sub" : "main") : "conn"),
-                   (r ? r->uri : c->client_ip));
+#ifdef MP_TRACE
+        apr_pool_cleanup_register(p, (void *)interp,
+                                  modperl_interp_pool_cleanup,
+                                  modperl_interp_pool_cleanup);
 #else
-        MP_TRACE_i(MP_FUNC,
-                   "set interp 0x%lx in %s 0x%lx (%s request for %s)\n",
-                   (unsigned long)interp, desc, (unsigned long)p,
-                   (r ? (is_subrequest ? "sub" : "main") : "conn"),
-                   (r ? r->uri : c->remote_ip));
+        apr_pool_cleanup_register(p, (void *)interp,
+                                  modperl_interp_unselect,
+                                  modperl_interp_unselect);
 #endif
+
+        /* add a reference for the registered cleanup */
+        interp->refcnt++;
+
+        MP_TRACE_i(MP_FUNC,
+                   "registered unselect cleanup for interp 0x%lx in %s",
+                   (unsigned long)interp, desc);
     }
 
-    /* set context (THX) for this thread */
-    PERL_SET_CONTEXT(interp->perl);
-
-    modperl_thx_interp_set(interp->perl, interp);
-
     return interp;
 }
 
@@ -584,20 +594,20 @@
 }
 
 #define MP_THX_INTERP_KEY "modperl2::thx_interp_key"
-modperl_interp_t *modperl_thx_interp_get(PerlInterpreter *thx)
+modperl_interp_t *modperl_thx_interp_get(pTHX)
 {
     modperl_interp_t *interp;
-    dTHXa(thx);
-    SV **svp = hv_fetch(PL_modglobal, MP_THX_INTERP_KEY, strlen(MP_THX_INTERP_KEY), 0);
+    SV **svp = hv_fetch(PL_modglobal, MP_THX_INTERP_KEY,
+                        strlen(MP_THX_INTERP_KEY), 0);
     if (!svp) return NULL;
     interp = INT2PTR(modperl_interp_t *, SvIV(*svp));
     return interp;
 }
 
-void modperl_thx_interp_set(PerlInterpreter *thx, modperl_interp_t *interp)
+void modperl_thx_interp_set(pTHX_ modperl_interp_t *interp)
 {
-    dTHXa(thx);
-    (void)hv_store(PL_modglobal, MP_THX_INTERP_KEY, strlen(MP_THX_INTERP_KEY), newSViv(PTR2IV(interp)), 0);
+    (void)hv_store(PL_modglobal, MP_THX_INTERP_KEY, strlen(MP_THX_INTERP_KEY),
+                   newSViv(PTR2IV(interp)), 0);
     return;
 }
 
@@ -616,3 +626,10 @@
 }
 
 #endif /* USE_ITHREADS */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_interp.h b/src/modules/perl/modperl_interp.h
index 70b016e..edfaac5 100644
--- a/src/modules/perl/modperl_interp.h
+++ b/src/modules/perl/modperl_interp.h
@@ -43,8 +43,7 @@
 modperl_interp_t *modperl_interp_pool_get(apr_pool_t *p);
 
 void modperl_interp_pool_set(apr_pool_t *p,
-                             modperl_interp_t *interp,
-                             int cleanup);
+                             modperl_interp_t *interp);
 
 modperl_interp_t *modperl_interp_pool_select(apr_pool_t *p,
                                              server_rec *s);
@@ -52,16 +51,60 @@
 modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c,
                                         server_rec *s);
 
-#define MP_dINTERP_SELECT(r, c, s) \
-    pTHX; \
-    modperl_interp_t *interp = NULL; \
-    interp = modperl_interp_select(r, c, s); \
-    aTHX = interp->perl
+#define MP_dINTERP pTHX; modperl_interp_t *interp = NULL
 
-#define MP_INTERP_PUTBACK(interp) \
-    if (interp && MpInterpPUTBACK(interp)) { \
-        modperl_interp_unselect(interp); \
-    }
+#define MP_INTERPa(r, c, s)                                             \
+    MP_TRACE_i(MP_FUNC, "selecting interp: r=%pp, c=%pp, s=%pp",        \
+               (r), (c), (s));                                          \
+    interp = modperl_interp_select((r), (c), (s));                      \
+    if (interp) {                                                       \
+        MP_TRACE_i(MP_FUNC, "  --> got (0x%pp)->refcnt=%d, perl=%pp",   \
+                   interp, interp->refcnt, interp->perl);               \
+        aTHX = interp->perl;                                            \
+    }                                                                   \
+    else {                                                              \
+        MP_TRACE_i(MP_FUNC, "  --> failed");                            \
+    }                                                                   \
+    NOOP
+
+#define MP_dINTERPa(r, c, s)                                            \
+    MP_dINTERP;                                                         \
+    MP_INTERPa((r), (c), (s))
+
+#define MP_INTERP_POOLa(p, s)                                           \
+    MP_TRACE_i(MP_FUNC, "selecting interp: p=%pp, s=%pp", (p), (s));    \
+    interp = modperl_interp_pool_select((p), (s));                      \
+    if (interp) {                                                       \
+        MP_TRACE_i(MP_FUNC, "  --> got (0x%pp)->refcnt=%d",             \
+                   interp, interp->refcnt);                             \
+        aTHX = interp->perl;                                            \
+    }                                                                   \
+    else {                                                              \
+        MP_TRACE_i(MP_FUNC, "  --> failed");                            \
+    }                                                                   \
+    NOOP
+
+#define MP_dINTERP_POOLa(p, s)                                          \
+    MP_dINTERP;                                                         \
+    MP_INTERP_POOLa((p), (s))
+
+#ifdef MP_DEBUG
+#define MP_INTERP_PUTBACK(interp, thx)                                  \
+    MP_TRACE_i(MP_FUNC, "unselecting interp: (0x%pp)->refcnt=%ld",      \
+               (interp), (interp)->refcnt);                             \
+    modperl_interp_unselect(interp);                                    \
+    interp = NULL;                                                      \
+    if( thx ) thx = NULL
+#else  /* MP_DEBUG */
+#define MP_INTERP_PUTBACK(interp, thx)                                  \
+    modperl_interp_unselect(interp)
+#endif
+
+#define MP_INTERP_REFCNT_inc(interp) (interp)->refcnt++
+
+#define MP_INTERP_REFCNT_dec(interp) MP_INTERP_PUTBACK(interp, NULL)
+
+#define MP_HAS_INTERP(interp) (interp != NULL)
 
 #define MP_aTHX aTHX
 
@@ -83,12 +126,33 @@
                                      void *data);
 #else
 
-#define MP_dINTERP_SELECT(r, c, s) dNOOP
+#define MP_dINTERP dNOOP
 
-#define MP_INTERP_PUTBACK(interp) NOOP
+#define MP_INTERPa(r, c, s) NOOP
+
+#define MP_dINTERPa(r, c, s) NOOP
+
+#define MP_INTERP_POOLa(p, s) NOOP
+
+#define MP_dINTERP_POOLa(p, s) NOOP
+
+#define MP_INTERP_PUTBACK(interp, thx) NOOP
+
+#define MP_INTERP_REFCNT_inc(interp) NOOP
+
+#define MP_INTERP_REFCNT_dec(interp) NOOP
+
+#define MP_HAS_INTERP(interp) (1)
 
 #define MP_aTHX 0
 
 #endif /* USE_ITHREADS */
 
 #endif /* MODPERL_INTERP_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_io.c b/src/modules/perl/modperl_io.c
index d8266dd..608ce3d 100644
--- a/src/modules/perl/modperl_io.c
+++ b/src/modules/perl/modperl_io.c
@@ -175,3 +175,9 @@
     modperl_io_perlio_restore_stdhandle(aTHX_ O_WRONLY);
 }
 
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_io.h b/src/modules/perl/modperl_io.h
index 7e07374..cfb9402 100644
--- a/src/modules/perl/modperl_io.h
+++ b/src/modules/perl/modperl_io.h
@@ -75,3 +75,10 @@
 
 
 #endif /* MODPERL_IO_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_io_apache.c b/src/modules/perl/modperl_io_apache.c
index 4ea4868..c10031c 100644
--- a/src/modules/perl/modperl_io_apache.c
+++ b/src/modules/perl/modperl_io_apache.c
@@ -334,3 +334,10 @@
 
     return total;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_io_apache.h b/src/modules/perl/modperl_io_apache.h
index 5777ea7..a372222 100644
--- a/src/modules/perl/modperl_io_apache.h
+++ b/src/modules/perl/modperl_io_apache.h
@@ -58,3 +58,10 @@
                                        char *buffer, Size_t len);
 
 #endif /* MODPERL_IO_APACHE_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_log.c b/src/modules/perl/modperl_log.c
index 7c7e31d..a806e00 100644
--- a/src/modules/perl/modperl_log.c
+++ b/src/modules/perl/modperl_log.c
@@ -15,3 +15,10 @@
  */
 
 #include "modperl_log.h"
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_log.h b/src/modules/perl/modperl_log.h
index 9baa17c..7e5f303 100644
--- a/src/modules/perl/modperl_log.h
+++ b/src/modules/perl/modperl_log.h
@@ -45,3 +45,10 @@
                  msg)
 
 #endif /* MODPERL_LOG_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_mgv.c b/src/modules/perl/modperl_mgv.c
index 9799a5e..c6286f0 100644
--- a/src/modules/perl/modperl_mgv.c
+++ b/src/modules/perl/modperl_mgv.c
@@ -211,14 +211,12 @@
         handler->name    = NULL;
         handler->mgv_obj = modperl_handler_anon_next(aTHX_ p);
         modperl_handler_anon_add(aTHX_ handler->mgv_obj, cv);
-        MP_TRACE_h(MP_FUNC, "[%s] new anon handler",
-                   modperl_pid_tid(p));
+        MP_TRACE_h(MP_FUNC, "new anon handler");
 #else
         SvREFCNT_inc(cv);
         handler->cv      = cv;
         handler->name    = NULL;
-        MP_TRACE_h(MP_FUNC, "[%s] new cached-cv anon handler",
-                   modperl_pid_tid(p));
+        MP_TRACE_h(MP_FUNC, "new cached-cv anon handler");
 #endif
 
         FREETMPS;LEAVE;
@@ -340,8 +338,7 @@
         modperl_mgv_append(aTHX_ p, handler->mgv_cv, handler_name);
 
         MpHandlerPARSED_On(handler);
-        MP_TRACE_h(MP_FUNC, "[%s] found `%s' in class `%s' as a %s",
-                   modperl_pid_tid(p),
+        MP_TRACE_h(MP_FUNC, "found `%s' in class `%s' as a %s",
                    handler_name, HvNAME(stash),
                    MpHandlerMETHOD(handler) ? "method" : "function");
         MODPERL_MGV_DEEP_RESOLVE(handler, p);
@@ -479,10 +476,7 @@
 {
     int i;
     modperl_config_dir_t *dir_cfg = (modperl_config_dir_t *)cfg;
-#ifdef USE_ITHREADS
-    MP_dSCFG(s);
-    MP_dSCFG_dTHX;
-#endif
+    dTHXa(data);
 
     if (!dir_cfg) {
         return 1;
@@ -500,7 +494,7 @@
 {
     int i;
     modperl_config_srv_t *scfg = (modperl_config_srv_t *)cfg;
-    MP_dSCFG_dTHX;
+    dTHXa(data);
 
     for (i=0; i < MP_HANDLER_NUM_PER_SRV; i++) {
         modperl_hash_handlers(aTHX_ p, s,
@@ -527,7 +521,21 @@
 
 void modperl_mgv_hash_handlers(apr_pool_t *p, server_rec *s)
 {
-    ap_pcw_walk_config(p, s, &perl_module, NULL,
+    MP_dINTERPa(NULL, NULL, s);
+    ap_pcw_walk_config(p, s, &perl_module,
+#ifdef USE_ITHREADS
+                       aTHX,
+#else
+                       NULL,
+#endif
                        modperl_hash_handlers_dir,
                        modperl_hash_handlers_srv);
+    MP_INTERP_PUTBACK(interp, aTHX);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_mgv.h b/src/modules/perl/modperl_mgv.h
index 2a9d870..50ce5b8 100644
--- a/src/modules/perl/modperl_mgv.h
+++ b/src/modules/perl/modperl_mgv.h
@@ -56,3 +56,10 @@
 GvCV(sv)
 
 #endif /* MODPERL_MGV_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_module.c b/src/modules/perl/modperl_module.c
index 99e5baa..e804bad 100644
--- a/src/modules/perl/modperl_module.c
+++ b/src/modules/perl/modperl_module.c
@@ -103,7 +103,9 @@
 }
 
 typedef struct {
-    PerlInterpreter *perl;
+#ifdef USE_ITHREADS
+    modperl_interp_t *interp;
+#endif
     PTR_TBL_t *table;
     void *ptr;
 } config_obj_cleanup_t;
@@ -116,13 +118,17 @@
 {
     config_obj_cleanup_t *cleanup =
         (config_obj_cleanup_t *)data;
-    dTHXa(cleanup->perl);
+#ifdef USE_ITHREADS
+    dTHXa(cleanup->interp->perl);
+    MP_ASSERT_CONTEXT(aTHX);
+#endif
 
     modperl_svptr_table_delete(aTHX_ cleanup->table, cleanup->ptr);
 
-    MP_TRACE_c(MP_FUNC, "deleting ptr 0x%lx from table 0x%lx",
-               (unsigned long)cleanup->ptr,
-               (unsigned long)cleanup->table);
+    MP_TRACE_c(MP_FUNC, "deleting ptr %pp from table %pp",
+               cleanup->ptr, cleanup->table);
+
+    MP_INTERP_PUTBACK(cleanup->interp, aTHX);
 
     return APR_SUCCESS;
 }
@@ -138,7 +144,8 @@
     cleanup->table = table;
     cleanup->ptr = ptr;
 #ifdef USE_ITHREADS
-    cleanup->perl = aTHX;
+    cleanup->interp = modperl_thx_interp_get(aTHX);
+    MP_INTERP_REFCNT_inc(cleanup->interp);
 #endif
 
     apr_pool_cleanup_register(p, cleanup,
@@ -166,10 +173,7 @@
     int is_startup;
     PTR_TBL_t *table;
     SV *mrg_obj = (SV *)NULL, *base_obj, *add_obj;
-#ifdef USE_ITHREADS
-    modperl_interp_t *interp;
-    MP_PERL_CONTEXT_DECLARE;
-#endif
+    MP_dINTERP;
 
     /* if the module is loaded in vhost, base==NULL */
     tmp = (base && base->server) ? base : add;
@@ -182,21 +186,14 @@
     s = tmp->server;
     is_startup = (p == s->process->pconf);
 
-#ifdef USE_ITHREADS
-    interp = modperl_interp_pool_select(p, s);
-    MP_PERL_CONTEXT_STORE_OVERRIDE(interp->perl);
-#endif
+    MP_INTERP_POOLa(p, s);
 
     table = modperl_module_config_table_get(aTHX_ TRUE);
     base_obj = modperl_svptr_table_fetch(aTHX_ table, base);
     add_obj  = modperl_svptr_table_fetch(aTHX_ table, add);
 
     if (!base_obj || (base_obj == add_obj)) {
-#ifdef USE_ITHREADS
-        /* XXX: breaks prefork
-           modperl_interp_unselect(interp); */
-        MP_PERL_CONTEXT_RESTORE;
-#endif
+        MP_INTERP_PUTBACK(interp, aTHX);
         return addv;
     }
 
@@ -245,11 +242,7 @@
         modperl_module_config_obj_cleanup_register(aTHX_ p, table, mrg);
     }
 
-#ifdef USE_ITHREADS
-    /* XXX: breaks prefork
-       modperl_interp_unselect(interp); */
-    MP_PERL_CONTEXT_RESTORE;
-#endif
+    MP_INTERP_PUTBACK(interp, aTHX);
 
     return (void *)mrg;
 }
@@ -363,16 +356,12 @@
     modperl_module_info_t *minfo = MP_MODULE_INFO(info->modp);
     modperl_module_cfg_t *srv_cfg;
     int modules_alias = 0;
-
-#ifdef USE_ITHREADS
-    modperl_interp_t *interp = modperl_interp_pool_select(p, s);
-    dTHXa(interp->perl);
-#endif
-
     int count;
-    PTR_TBL_t *table = modperl_module_config_table_get(aTHX_ TRUE);
+    PTR_TBL_t *table;
     SV *obj = (SV *)NULL;
-    dSP;
+    MP_dINTERP_POOLa(p, s);
+
+    table = modperl_module_config_table_get(aTHX_ TRUE);
 
     if (s->is_virtual) {
         MP_dSCFG(s);
@@ -416,6 +405,7 @@
                                               parms, &obj);
 
     if (errmsg) {
+        MP_INTERP_PUTBACK(interp, aTHX);
         return errmsg;
     }
 
@@ -436,6 +426,7 @@
                                                minfo->srv_create,
                                                parms, &srv_obj);
         if (errmsg) {
+            MP_INTERP_PUTBACK(interp, aTHX);
             return errmsg;
         }
 
@@ -446,37 +437,42 @@
         }
     }
 
-    ENTER;SAVETMPS;
-    PUSHMARK(SP);
-    EXTEND(SP, 2);
+    {
+        dSP;
+        ENTER;SAVETMPS;
+        PUSHMARK(SP);
+        EXTEND(SP, 2);
 
-    PUSHs(obj);
-    PUSHs(modperl_bless_cmd_parms(parms));
+        PUSHs(obj);
+        PUSHs(modperl_bless_cmd_parms(parms));
 
-    if (cmd->args_how != NO_ARGS) {
-        PUSH_STR_ARG(one);
-        PUSH_STR_ARG(two);
-        PUSH_STR_ARG(three);
-    }
-
-    PUTBACK;
-    count = call_method(info->func_name, G_EVAL|G_SCALAR);
-    SPAGAIN;
-
-    if (count == 1) {
-        SV *sv = POPs;
-        if (SvPOK(sv) && strEQ(SvPVX(sv), DECLINE_CMD)) {
-            retval = DECLINE_CMD;
+        if (cmd->args_how != NO_ARGS) {
+            PUSH_STR_ARG(one);
+            PUSH_STR_ARG(two);
+            PUSH_STR_ARG(three);
         }
-    }
 
-    PUTBACK;
-    FREETMPS;LEAVE;
+        PUTBACK;
+        count = call_method(info->func_name, G_EVAL|G_SCALAR);
+        SPAGAIN;
+
+        if (count == 1) {
+            SV *sv = POPs;
+            if (SvPOK(sv) && strEQ(SvPVX(sv), DECLINE_CMD)) {
+                retval = DECLINE_CMD;
+            }
+        }
+
+        PUTBACK;
+        FREETMPS;LEAVE;
+    }
 
     if (SvTRUE(ERRSV)) {
         retval = SvPVX(ERRSV);
     }
 
+    MP_INTERP_PUTBACK(interp, aTHX);
+
     if (modules_alias) {
         MP_dSCFG(s);
         /* unalias the temp aliasing */
@@ -644,10 +640,7 @@
     command_rec *cmd;
     AV *module_cmds;
     I32 i, fill;
-#ifdef USE_ITHREADS
-    MP_dSCFG(s);
-    dTHXa(scfg->mip->parent->perl);
-#endif
+    MP_dINTERPa(NULL, NULL, s);
     module_cmds = (AV*)SvRV(mod_cmds);
 
     fill = AvFILL(module_cmds);
@@ -664,6 +657,7 @@
         cmd = apr_array_push(cmds);
 
         if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "name", &val))) {
+            MP_INTERP_PUTBACK(interp, aTHX);
             return errmsg;
         }
 
@@ -684,6 +678,7 @@
         }
 
         if (!modperl_module_cmd_lookup(cmd)) {
+            MP_INTERP_PUTBACK(interp, aTHX);
             return apr_psprintf(p,
                                 "no command function defined for args_how=%d",
                                 cmd->args_how);
@@ -736,6 +731,7 @@
 
     modp->cmds = (command_rec *)cmds->elts;
 
+    MP_INTERP_PUTBACK(interp, aTHX);
     return NULL;
 }
 
@@ -783,13 +779,12 @@
                                const char *name, SV *mod_cmds)
 {
     MP_dSCFG(s);
-#ifdef USE_ITHREADS
-    dTHXa(scfg->mip->parent->perl);
-#endif
     const char *errmsg;
-    module *modp = (module *)apr_pcalloc(p, sizeof(*modp));
-    modperl_module_info_t *minfo =
-        (modperl_module_info_t *)apr_pcalloc(p, sizeof(*minfo));
+    module *modp;
+    modperl_module_info_t *minfo;
+    MP_dINTERPa(NULL, NULL, s);
+    modp = (module *)apr_pcalloc(p, sizeof(*modp));
+    minfo = (modperl_module_info_t *)apr_pcalloc(p, sizeof(*minfo));
 
     /* STANDARD20_MODULE_STUFF */
     modp->version       = MODULE_MAGIC_NUMBER_MAJOR;
@@ -827,6 +822,7 @@
     modp->cmds = NULL;
 
     if ((errmsg = modperl_module_add_cmds(p, s, modp, mod_cmds))) {
+        MP_INTERP_PUTBACK(interp, aTHX);
         return errmsg;
     }
 
@@ -855,10 +851,13 @@
      */
     if (!modperl_interp_pool_get(p)) {
         /* for vhosts */
-        modperl_interp_pool_set(p, scfg->mip->parent, FALSE);
+        MP_TRACE_i(MP_FUNC, "set interp 0x%lx in pconf pool 0x%lx",
+                   (unsigned long)scfg->mip->parent, (unsigned long)p);
+        modperl_interp_pool_set(p, scfg->mip->parent);
     }
 #endif
 
+    MP_INTERP_PUTBACK(interp, aTHX);
     return NULL;
 }
 
@@ -903,3 +902,10 @@
 
     return obj;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_module.h b/src/modules/perl/modperl_module.h
index cec12da..41e8312 100644
--- a/src/modules/perl/modperl_module.h
+++ b/src/modules/perl/modperl_module.h
@@ -28,3 +28,10 @@
                                   ap_conf_vector_t *v);
 
 #endif /* MODPERL_MODULE_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_options.c b/src/modules/perl/modperl_options.c
index ee829ac..5077ec4 100644
--- a/src/modules/perl/modperl_options.c
+++ b/src/modules/perl/modperl_options.c
@@ -148,3 +148,10 @@
 
     return conf;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_options.h b/src/modules/perl/modperl_options.h
index a95ac18..62d23da 100644
--- a/src/modules/perl/modperl_options.h
+++ b/src/modules/perl/modperl_options.h
@@ -27,3 +27,10 @@
                                          modperl_options_t *new);
 
 #endif /* MODPERL_OPTIONS_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_pcw.c b/src/modules/perl/modperl_pcw.c
index 16f8b06..0c247b0 100644
--- a/src/modules/perl/modperl_pcw.c
+++ b/src/modules/perl/modperl_pcw.c
@@ -140,3 +140,10 @@
         }
     }
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_pcw.h b/src/modules/perl/modperl_pcw.h
index 456a808..4e97acf 100644
--- a/src/modules/perl/modperl_pcw.h
+++ b/src/modules/perl/modperl_pcw.h
@@ -51,3 +51,10 @@
                         ap_pcw_dir_cb_t dir_cb, ap_pcw_srv_cb_t srv_cb);
 
 #endif /* MODPERL_PCW_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl.c b/src/modules/perl/modperl_perl.c
index 1d17339..dfe4d36 100644
--- a/src/modules/perl/modperl_perl.c
+++ b/src/modules/perl/modperl_perl.c
@@ -280,3 +280,10 @@
     }
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl.h b/src/modules/perl/modperl_perl.h
index 5d4c838..d91ab5f 100644
--- a/src/modules/perl/modperl_perl.h
+++ b/src/modules/perl/modperl_perl.h
@@ -62,3 +62,10 @@
 #endif
 
 #endif /* MODPERL_PERL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_global.c b/src/modules/perl/modperl_perl_global.c
index f739e73..f52e42c 100644
--- a/src/modules/perl/modperl_perl_global.c
+++ b/src/modules/perl/modperl_perl_global.c
@@ -494,3 +494,10 @@
                                 MP_perl_global_entries);
 
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_global.h b/src/modules/perl/modperl_perl_global.h
index 9fb45d2..5f1fc44 100644
--- a/src/modules/perl/modperl_perl_global.h
+++ b/src/modules/perl/modperl_perl_global.h
@@ -89,3 +89,10 @@
                                     const char *package, I32 packlen);
 
 #endif
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_includes.h b/src/modules/perl/modperl_perl_includes.h
index 9cacc5d..51ffd72 100644
--- a/src/modules/perl/modperl_perl_includes.h
+++ b/src/modules/perl/modperl_perl_includes.h
@@ -139,3 +139,10 @@
 #endif
 
 #endif /* MODPERL_PERL_INCLUDES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_pp.c b/src/modules/perl/modperl_perl_pp.c
index b255c68..881d99e 100644
--- a/src/modules/perl/modperl_perl_pp.c
+++ b/src/modules/perl/modperl_perl_pp.c
@@ -113,3 +113,10 @@
         modperl_perl_pp_unset(i);
     }
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_pp.h b/src/modules/perl/modperl_perl_pp.h
index 39d4a49..2386c3e 100644
--- a/src/modules/perl/modperl_perl_pp.h
+++ b/src/modules/perl/modperl_perl_pp.h
@@ -41,3 +41,10 @@
 void modperl_perl_pp_unset_all(void);
 
 #endif /* MODPERL_PERL_PP_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_perl_unembed.h b/src/modules/perl/modperl_perl_unembed.h
index ea13f03..4db14a5 100644
--- a/src/modules/perl/modperl_perl_unembed.h
+++ b/src/modules/perl/modperl_perl_unembed.h
@@ -43,3 +43,10 @@
 #undef list
 
 #endif /* MODPERL_PERL_UNEMBED_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_svptr_table.c b/src/modules/perl/modperl_svptr_table.c
index 3b0b344..e63a3b8 100644
--- a/src/modules/perl/modperl_svptr_table.c
+++ b/src/modules/perl/modperl_svptr_table.c
@@ -184,7 +184,7 @@
 {
     PTR_TBL_ENT_t *tblent;
     UV hash = PTR2UV(sv);
-    assert(tbl);
+    MP_ASSERT(tbl);
     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
     for (; tblent; tblent = tblent->next) {
         if (tblent->oldval == sv)
@@ -205,7 +205,7 @@
     UV hash = PTR2UV(oldv);
     bool i = 1;
 
-    assert(tbl);
+    MP_ASSERT(tbl);
     otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
     for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
         if (tblent->oldval == oldv) {
@@ -303,3 +303,10 @@
     Safefree(tbl->tbl_ary);
     Safefree(tbl);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_svptr_table.h b/src/modules/perl/modperl_svptr_table.h
index 3382357..673f643 100644
--- a/src/modules/perl/modperl_svptr_table.h
+++ b/src/modules/perl/modperl_svptr_table.h
@@ -55,3 +55,10 @@
 modperl_svptr_table_free(pTHX_ PTR_TBL_t *tbl);
 
 #endif /* MODPERL_SVPTR_TABLE_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_sys.c b/src/modules/perl/modperl_sys.c
index 35cc647..3ce3cbc 100644
--- a/src/modules/perl/modperl_sys.c
+++ b/src/modules/perl/modperl_sys.c
@@ -67,3 +67,10 @@
     return 0;
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_sys.h b/src/modules/perl/modperl_sys.h
index 606b310..a52763a 100644
--- a/src/modules/perl/modperl_sys.h
+++ b/src/modules/perl/modperl_sys.h
@@ -28,3 +28,10 @@
 int modperl_sys_dlclose(void *handle);
 
 #endif /* MODPERL_SYS_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_time.h b/src/modules/perl/modperl_time.h
index 4b8a527..bc7cbf8 100644
--- a/src/modules/perl/modperl_time.h
+++ b/src/modules/perl/modperl_time.h
@@ -50,3 +50,10 @@
     })
 
 #endif /* MODPERL_TIME_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_tipool.c b/src/modules/perl/modperl_tipool.c
index f6747c1..9cb0ad0 100644
--- a/src/modules/perl/modperl_tipool.c
+++ b/src/modules/perl/modperl_tipool.c
@@ -401,3 +401,10 @@
 }
 
 #endif /* USE_ITHREADS */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_tipool.h b/src/modules/perl/modperl_tipool.h
index 4e41e4b..c2d15b8 100644
--- a/src/modules/perl/modperl_tipool.h
+++ b/src/modules/perl/modperl_tipool.h
@@ -87,3 +87,10 @@
 #endif /* USE_ITHREADS */
 
 #endif /* MODPERL_TIPOOL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_types.h b/src/modules/perl/modperl_types.h
index 5bfb5e3..c0c9b53 100644
--- a/src/modules/perl/modperl_types.h
+++ b/src/modules/perl/modperl_types.h
@@ -40,6 +40,8 @@
     server_rec  *s;
 } modperl_rcs_t;
 
+typedef struct modperl_config_con_t modperl_config_con_t;
+
 #ifdef USE_ITHREADS
 
 typedef struct modperl_list_t modperl_list_t;
@@ -52,13 +54,14 @@
 typedef struct modperl_interp_t modperl_interp_t;
 typedef struct modperl_interp_pool_t modperl_interp_pool_t;
 typedef struct modperl_tipool_t modperl_tipool_t;
+typedef struct modperl_tipool_config_t modperl_tipool_config_t;
 
 struct modperl_interp_t {
     modperl_interp_pool_t *mip;
     PerlInterpreter *perl;
     int num_requests;
     U8 flags;
-    request_rec *request;
+    modperl_config_con_t *ccfg;
     int refcnt;
 #ifdef MP_TRACE
     unsigned long tid;
@@ -79,13 +82,13 @@
                         modperl_list_t *listp);
 } modperl_tipool_vtbl_t;
 
-typedef struct {
+struct modperl_tipool_config_t {
     int start; /* number of items to create at startup */
     int min_spare; /* minimum number of spare items */
     int max_spare; /* maximum number of spare items */
     int max; /* maximum number of items */
     int max_requests; /* maximum number of requests per item */
-} modperl_tipool_config_t;
+};
 
 struct modperl_tipool_t {
     perl_mutex tiplock;
@@ -240,11 +243,21 @@
     int sent_eos;
     SV *data;
     modperl_handler_t *handler;
-    PerlInterpreter *perl;
+#ifdef USE_ITHREADS
+    modperl_interp_t *interp;
+#endif
 } modperl_filter_ctx_t;
 
 typedef struct {
     HV *pnotes;
+    apr_pool_t *pool;
+#ifdef USE_ITHREADS
+    modperl_interp_t *interp;
+#endif
+} modperl_pnotes_t;
+
+typedef struct {
+    modperl_pnotes_t pnotes;
     SV *global_request_obj;
     U8 flags;
     int status;
@@ -252,14 +265,14 @@
     MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR];
     MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV];
     modperl_perl_globals_t perl_globals;
+} modperl_config_req_t;
+
+struct modperl_config_con_t {
+    modperl_pnotes_t pnotes;
 #ifdef USE_ITHREADS
     modperl_interp_t *interp;
 #endif
-} modperl_config_req_t;
-
-typedef struct {
-    HV *pnotes;
-} modperl_config_con_t;
+};
 
 typedef struct {
     apr_pool_t *pool;
@@ -279,3 +292,10 @@
 } modperl_hook_run_mode_e;
 
 #endif /* MODPERL_TYPES_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_util.c b/src/modules/perl/modperl_util.c
index 2a67030..b7f0436 100644
--- a/src/modules/perl/modperl_util.c
+++ b/src/modules/perl/modperl_util.c
@@ -470,9 +470,8 @@
     I32 i, oldscope = PL_scopestack_ix;
     SV **ary = AvARRAY(subs);
 
-    MP_TRACE_g(MP_FUNC, "pid %lu" MP_TRACEf_TID MP_TRACEf_PERLID
-               " running %d %s subs",
-               (unsigned long)getpid(), MP_TRACEv_TID_ MP_TRACEv_PERLID_
+    MP_TRACE_g(MP_FUNC, MP_TRACEf_PERLID
+               " running %d %s subs", MP_TRACEv_PERLID_
                AvFILLp(subs)+1, name);
 
     for (i=0; i<=AvFILLp(subs); i++) {
@@ -830,56 +829,44 @@
     return data ? *(int *)data : 0;
  }
 
-#ifdef USE_ITHREADS
-typedef struct {
-    HV **pnotes;
-    PerlInterpreter *perl;
-} modperl_cleanup_pnotes_data_t;
-#endif
- 
 static MP_INLINE
 apr_status_t modperl_cleanup_pnotes(void *data) {
-    HV **pnotes = data;
+    modperl_pnotes_t *pnotes = data;
 
-    if (*pnotes) {
-#ifdef USE_ITHREADS
-        modperl_cleanup_pnotes_data_t *cleanup_data = data;
-        dTHXa(cleanup_data->perl);
-        pnotes = cleanup_data->pnotes;
-#else
-        pnotes = data;
-#endif
-        SvREFCNT_dec(*pnotes);
-        *pnotes = (HV *)NULL;
-    }
+    dTHXa(pnotes->interp->perl);
+    MP_ASSERT_CONTEXT(aTHX);
 
+    SvREFCNT_dec(pnotes->pnotes);
+    pnotes->pnotes = NULL;
+    pnotes->pool = NULL;
+
+    MP_INTERP_PUTBACK(pnotes->interp, aTHX);
     return APR_SUCCESS;
 }
 
-MP_INLINE
-static void *modperl_pnotes_cleanup_data(pTHX_ HV **pnotes, apr_pool_t *p) {
-#ifdef USE_ITHREADS
-    modperl_cleanup_pnotes_data_t *cleanup_data = apr_palloc(p, sizeof(*cleanup_data));
-    cleanup_data->pnotes = pnotes;
-    cleanup_data->perl = aTHX;
-    return cleanup_data;
-#else
-    return pnotes;
-#endif
+void modperl_pnotes_kill(void *data) {
+    modperl_pnotes_t *pnotes = data;
+
+    if( !pnotes->pnotes ) return;
+
+    apr_pool_cleanup_kill(pnotes->pool, pnotes, modperl_cleanup_pnotes);
+    modperl_cleanup_pnotes(pnotes);
 }
 
-SV *modperl_pnotes(pTHX_ HV **pnotes, SV *key, SV *val,
-                   request_rec *r, conn_rec *c) {
+SV *modperl_pnotes(pTHX_ modperl_pnotes_t *pnotes, SV *key, SV *val,
+                   apr_pool_t *pool) {
     SV *retval = (SV *)NULL;
 
-    if (!*pnotes) {
-        apr_pool_t *pool = r ? r->pool : c->pool;
-        void *cleanup_data;
-        *pnotes = newHV();
-
-        cleanup_data = modperl_pnotes_cleanup_data(aTHX_ pnotes, pool);
-
-        apr_pool_cleanup_register(pool, cleanup_data,
+    if (!pnotes->pnotes) {
+        pnotes->pool = pool;
+#ifdef USE_ITHREADS
+        pnotes->interp = modperl_thx_interp_get(aTHX);
+        pnotes->interp->refcnt++;
+        MP_TRACE_i(MP_FUNC, "TO: (0x%lx)->refcnt incremented to %ld",
+                   pnotes->interp, pnotes->interp->refcnt);
+#endif
+        pnotes->pnotes = newHV();
+        apr_pool_cleanup_register(pool, pnotes,
                                   modperl_cleanup_pnotes,
                                   apr_pool_cleanup_null);
     }
@@ -889,15 +876,15 @@
         char *k = SvPV(key, len);
 
         if (val) {
-            retval = *hv_store(*pnotes, k, len, SvREFCNT_inc(val), 0);
+            retval = *hv_store(pnotes->pnotes, k, len, SvREFCNT_inc(val), 0);
         }
-        else if (hv_exists(*pnotes, k, len)) {
-            retval = *hv_fetch(*pnotes, k, len, FALSE);
+        else if (hv_exists(pnotes->pnotes, k, len)) {
+            retval = *hv_fetch(pnotes->pnotes, k, len, FALSE);
         }
 
         return retval ? SvREFCNT_inc(retval) : &PL_sv_undef;
     }
-    return newRV_inc((SV *)*pnotes);
+    return newRV_inc((SV *)pnotes->pnotes);
 }
 
 U16 *modperl_code_attrs(pTHX_ CV *cv) {
@@ -910,3 +897,372 @@
     mg = mg_find((SV*)cv, PERL_MAGIC_ext);
     return &(mg->mg_private);
 }
+
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+
+static apr_hash_t *global_authz_providers = NULL;
+static apr_hash_t *global_authn_providers = NULL;
+
+typedef struct {
+    SV *cb1;
+    SV *cb2;
+    modperl_handler_t *cb1_handler;
+    modperl_handler_t *cb2_handler;
+} auth_callback;
+
+static apr_status_t cleanup_perl_global_providers(void *ctx)
+{
+    global_authz_providers = NULL;
+    global_authn_providers = NULL;
+    return APR_SUCCESS;
+}
+
+static authz_status perl_check_authorization(request_rec *r,
+                                             const char *require_args,
+                                             const void *parsed_require_args)
+{
+    authz_status ret = AUTHZ_DENIED;
+    int count;
+    AV *args = Nullav;
+    const char *key;
+    auth_callback *ab;
+    MP_dINTERPa(r, NULL, NULL);
+
+    if (global_authz_providers == NULL) {
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    key = apr_table_get(r->notes, AUTHZ_PROVIDER_NAME_NOTE);
+    ab = apr_hash_get(global_authz_providers, key, APR_HASH_KEY_STRING);
+    if (ab == NULL) {
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    if (ab->cb1 == NULL) {
+        if (ab->cb1_handler == NULL) {
+            MP_INTERP_PUTBACK(interp, aTHX);
+            return ret;
+        }
+
+        modperl_handler_make_args(aTHX_ &args, "Apache2::RequestRec", r,
+                                  "PV", require_args, NULL);
+        ret = modperl_callback(aTHX_ ab->cb1_handler, r->pool, r, r->server,
+                               args);
+        SvREFCNT_dec((SV*)args);
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    {
+        dSP;
+        ENTER;
+        SAVETMPS;
+        PUSHMARK(SP);
+        XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::RequestRec", r)));
+        XPUSHs(sv_2mortal(newSVpv(require_args, 0)));
+        PUTBACK;
+        count = call_sv(ab->cb1, G_SCALAR);
+        SPAGAIN;
+
+        if (count == 1) {
+            ret = (authz_status) POPi;
+        }
+
+        PUTBACK;
+        FREETMPS;
+        LEAVE;
+    }
+
+    MP_INTERP_PUTBACK(interp, aTHX);
+    return ret;
+}
+
+static const char *perl_parse_require_line(cmd_parms *cmd,
+                                           const char *require_line,
+                                           const void **parsed_require_line)
+{
+    char *ret = NULL;
+    void *key;
+    auth_callback *ab;
+
+    if (global_authz_providers == NULL ||
+        apr_hash_count(global_authz_providers) == 0)
+    {
+        return NULL;
+    }
+
+    apr_pool_userdata_get(&key, AUTHZ_PROVIDER_NAME_NOTE, cmd->temp_pool);
+    ab = apr_hash_get(global_authz_providers, (char *) key, APR_HASH_KEY_STRING);
+    if (ab == NULL || ab->cb2 == NULL) {
+        return NULL;
+    }
+
+    {
+        /* PerlAddAuthzProvider currently does not support an optional second
+         * handler, so ab->cb2 should always be NULL above and we will never get
+         * here. If such support is added in the future then this code will be
+         * reached, but cannot succeed in the absence of an interpreter. The
+         * second handler would be called at init to check a Require line for
+         * errors, but in the current design there is no interpreter available
+         * at that time.
+         */
+        MP_dINTERP_POOLa(cmd->pool, cmd->server);
+        if (!MP_HAS_INTERP(interp)) {
+	    return "Require handler is not currently supported in this context";
+	}
+
+        {
+            SV *ret_sv;
+            int count;
+            dSP;
+
+            ENTER;
+            SAVETMPS;
+            PUSHMARK(SP);
+            XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::CmdParms", cmd)));
+            XPUSHs(sv_2mortal(newSVpv(require_line, 0)));
+            PUTBACK;
+            count = call_sv(ab->cb2, G_SCALAR);
+            SPAGAIN;
+
+            if (count == 1) {
+                ret_sv = POPs;
+                if (SvOK(ret_sv)) {
+                    char *tmp = SvPV_nolen(ret_sv);
+                    if (*tmp != '\0') {
+                        ret = apr_pstrdup(cmd->pool, tmp);
+                    }
+                }
+            }
+
+            PUTBACK;
+            FREETMPS;
+            LEAVE;
+        }
+
+        MP_INTERP_PUTBACK(interp, aTHX);
+    }
+    return ret;
+}
+
+static authn_status perl_check_password(request_rec *r, const char *user,
+                                        const char *password)
+{
+    authn_status ret = AUTH_DENIED;
+    int count;
+    AV *args = Nullav;
+    const char *key;
+    auth_callback *ab;
+    MP_dINTERPa(r, NULL, NULL);
+
+    if (global_authn_providers == NULL) {
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    key = apr_table_get(r->notes, AUTHN_PROVIDER_NAME_NOTE);
+    ab = apr_hash_get(global_authn_providers, key,
+                                     APR_HASH_KEY_STRING);
+    if (ab == NULL || ab->cb1) {
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    if (ab->cb1 == NULL) {
+        if (ab->cb1_handler == NULL) {
+            MP_INTERP_PUTBACK(interp, aTHX);
+            return ret;
+        }
+
+        modperl_handler_make_args(aTHX_ &args, "Apache2::RequestRec", r,
+                                  "PV", user,
+                                  "PV", password, NULL);
+        ret = modperl_callback(aTHX_ ab->cb1_handler, r->pool, r, r->server,
+                               args);
+        SvREFCNT_dec((SV*)args);
+        MP_INTERP_PUTBACK(interp, aTHX);
+        return ret;
+    }
+
+    {
+        dSP;
+        ENTER;
+        SAVETMPS;
+        PUSHMARK(SP);
+        XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::RequestRec", r)));
+        XPUSHs(sv_2mortal(newSVpv(user, 0)));
+        XPUSHs(sv_2mortal(newSVpv(password, 0)));
+        PUTBACK;
+        count = call_sv(ab->cb1, G_SCALAR);
+        SPAGAIN;
+
+        if (count == 1) {
+            ret = (authn_status) POPi;
+        }
+
+        PUTBACK;
+        FREETMPS;
+        LEAVE;
+    }
+
+    MP_INTERP_PUTBACK(interp, aTHX);
+    return ret;
+}
+
+static authn_status perl_get_realm_hash(request_rec *r, const char *user,
+                                        const char *realm, char **rethash)
+{
+    authn_status ret = AUTH_USER_NOT_FOUND;
+    const char *key;
+    auth_callback *ab;
+
+    if (global_authn_providers == NULL ||
+        apr_hash_count(global_authn_providers) == 0)
+    {
+        return AUTH_GENERAL_ERROR;
+    }
+
+    key = apr_table_get(r->notes, AUTHN_PROVIDER_NAME_NOTE);
+    ab = apr_hash_get(global_authn_providers, key, APR_HASH_KEY_STRING);
+    if (ab == NULL || ab->cb2 == NULL) {
+        return AUTH_GENERAL_ERROR;
+    }
+
+    {
+        /* PerlAddAuthnProvider currently does not support an optional second
+         * handler, so ab->cb2 should always be NULL above and we will never get
+         * here. If such support is added in the future then this code will be
+         * reached. Unlike the PerlAddAuthzProvider case, the second handler here
+         * would be called during request_rec processing to obtain a password hash
+         * for the realm so there should be no problem grabbing an interpreter.
+         */
+        MP_dINTERPa(r, NULL, NULL);
+
+        {
+            SV* rh = sv_2mortal(newSVpv("", 0));
+            int count;
+            dSP;
+
+            ENTER;
+            SAVETMPS;
+            PUSHMARK(SP);
+            XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::RequestRec", r)));
+            XPUSHs(sv_2mortal(newSVpv(user, 0)));
+            XPUSHs(sv_2mortal(newSVpv(realm, 0)));
+            XPUSHs(newRV_noinc(rh));
+            PUTBACK;
+            count = call_sv(ab->cb2, G_SCALAR);
+            SPAGAIN;
+
+            if (count == 1) {
+                const char *tmp = SvPV_nolen(rh);
+                ret = (authn_status) POPi;
+                if (*tmp != '\0') {
+                    *rethash = apr_pstrdup(r->pool, tmp);
+                }
+            }
+
+            PUTBACK;
+            FREETMPS;
+            LEAVE;
+        }
+
+        MP_INTERP_PUTBACK(interp, aTHX);
+    }
+
+    return ret;
+}
+
+static const authz_provider authz_perl_provider = { perl_check_authorization,
+                                                    perl_parse_require_line };
+
+static const authn_provider authn_perl_provider = { perl_check_password,
+                                                    perl_get_realm_hash };
+
+static apr_status_t register_auth_provider(apr_pool_t *pool,
+                                           const char *provider_group,
+                                           const char *provider_name,
+                                           const char *provider_version,
+                                           auth_callback *ab, int type)
+{
+    void *provider_ = NULL;
+
+    if (global_authz_providers == NULL) {
+        global_authz_providers = apr_hash_make(pool);
+        global_authn_providers = apr_hash_make(pool);
+        /* We have to use pre_cleanup here, otherwise this cleanup method
+         * would be called after another cleanup method which unloads
+         * mod_perl module.
+         */
+        apr_pool_pre_cleanup_register(pool, NULL,
+                                      cleanup_perl_global_providers);
+    }
+
+    if (strcmp(provider_group, AUTHZ_PROVIDER_GROUP) == 0) {
+        provider_ = (void *) &authz_perl_provider;
+        apr_hash_set(global_authz_providers, provider_name,
+                     APR_HASH_KEY_STRING, ab);
+    }
+    else {
+        provider_ = (void *) &authn_perl_provider;
+        apr_hash_set(global_authn_providers, provider_name,
+                     APR_HASH_KEY_STRING, ab);
+    }
+
+    return ap_register_auth_provider(pool, provider_group, provider_name,
+                                     provider_version, provider_, type);
+
+}
+
+apr_status_t modperl_register_auth_provider(apr_pool_t *pool,
+                                            const char *provider_group,
+                                            const char *provider_name,
+                                            const char *provider_version,
+                                            SV *callback1, SV *callback2,
+                                            int type)
+{
+    char *provider_name_dup;
+    auth_callback *ab = NULL;
+
+    provider_name_dup = apr_pstrdup(pool, provider_name);
+    ab = apr_pcalloc(pool, sizeof(auth_callback));
+    ab->cb1 = callback1;
+    ab->cb2 = callback2;
+
+    return register_auth_provider(pool, provider_group, provider_name_dup,
+                                  provider_version, ab, type);
+}
+
+apr_status_t modperl_register_auth_provider_name(apr_pool_t *pool,
+                                                 const char *provider_group,
+                                                 const char *provider_name,
+                                                 const char *provider_version,
+                                                 const char *callback1,
+                                                 const char *callback2,
+                                                 int type)
+{
+    char *provider_name_dup;
+    auth_callback *ab = NULL;
+
+    provider_name_dup = apr_pstrdup(pool, provider_name);
+    ab = apr_pcalloc(pool, sizeof(auth_callback));
+    ab->cb1_handler = modperl_handler_new(pool, callback1);
+    if (callback2) {
+        ab->cb2_handler = modperl_handler_new(pool, callback2);
+    }
+
+    return register_auth_provider(pool, provider_group, provider_name_dup,
+                                  provider_version, ab, type);
+}
+
+#endif /* httpd-2.4 */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/src/modules/perl/modperl_util.h b/src/modules/perl/modperl_util.h
index fcb23c3..83e51d4 100644
--- a/src/modules/perl/modperl_util.h
+++ b/src/modules/perl/modperl_util.h
@@ -101,20 +101,8 @@
 apr_array_header_t *modperl_avrv2apr_array_header(pTHX_ apr_pool_t *p,
                                                   SV *avrv);
 void modperl_package_unload(pTHX_ const char *package);
-#if defined(MP_TRACE) && APR_HAS_THREADS
-#define MP_TRACEf_TID   "/tid 0x%lx"
-#define MP_TRACEv_TID   (unsigned long)apr_os_thread_current()
-#define MP_TRACEv_TID_  MP_TRACEv_TID,
-#define MP_TRACEv__TID  ,MP_TRACEv_TID
-#else
-#define MP_TRACEf_TID
-#define MP_TRACEv_TID
-#define MP_TRACEv_TID_
-#define MP_TRACEv__TID
-#endif /* APR_HAS_THREADS */
-
 #if defined(MP_TRACE) && defined(USE_ITHREADS)
-#define MP_TRACEf_PERLID   "/perl id 0x%lx"
+#define MP_TRACEf_PERLID   "perl id 0x%lx"
 #define MP_TRACEv_PERLID   (unsigned long)my_perl
 #define MP_TRACEv_PERLID_  MP_TRACEv_PERLID,
 #define MP_TRACEv__PERLID  ,MP_TRACEv_PERLID
@@ -146,9 +134,35 @@
 void modperl_restart_count_inc(server_rec *base_server);
 int  modperl_restart_count(void);
 
-SV *modperl_pnotes(pTHX_ HV **pnotes, SV *key, SV *val,
-                   request_rec *r, conn_rec *c);
+void modperl_pnotes_kill(void *data);
+
+SV *modperl_pnotes(pTHX_ modperl_pnotes_t *pnotes, SV *key, SV *val,
+                   apr_pool_t *pool );
 
 U16 *modperl_code_attrs(pTHX_ CV *cv);
 
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+apr_status_t
+modperl_register_auth_provider(apr_pool_t *pool, const char *provider_group,
+                               const char *provider_name,
+                               const char *provider_version, SV *callback1,
+                               SV *callback2, int type);
+
+apr_status_t
+modperl_register_auth_provider_name(apr_pool_t *pool,
+                                    const char *provider_group,
+                                    const char *provider_name,
+                                    const char *provider_version,
+                                    const char *callback1,
+                                    const char *callback2, int type);
+#endif
+
 #endif /* MODPERL_UTIL_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/t/apache/add_config.t b/t/apache/add_config.t
index 976fb8e..90edaec 100644
--- a/t/apache/add_config.t
+++ b/t/apache/add_config.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # the handler is configured in modperl_extra.pl via
 # Apache2::ServerUtil->server->add_config
 use Apache::TestRequest 'GET_BODY_ASSERT';
diff --git a/t/apache/cgihandler.t b/t/apache/cgihandler.t
index 987f4e9..ace671c 100644
--- a/t/apache/cgihandler.t
+++ b/t/apache/cgihandler.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/constants.t b/t/apache/constants.t
index 97a3e6a..81fe6aa 100644
--- a/t/apache/constants.t
+++ b/t/apache/constants.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use ExtUtils::testlib;
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apache/content_length_header.t b/t/apache/content_length_header.t
index 880d256..2b414e4 100644
--- a/t/apache/content_length_header.t
+++ b/t/apache/content_length_header.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/discard_rbody.t b/t/apache/discard_rbody.t
index d59a8e4..49caab0 100644
--- a/t/apache/discard_rbody.t
+++ b/t/apache/discard_rbody.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/post.t b/t/apache/post.t
index 1f4fa4e..ba0f573 100644
--- a/t/apache/post.t
+++ b/t/apache/post.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/read.t b/t/apache/read.t
index d3231ec..83670c9 100644
--- a/t/apache/read.t
+++ b/t/apache/read.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/read2.t b/t/apache/read2.t
index eaf5aa7..fc585d7 100644
--- a/t/apache/read2.t
+++ b/t/apache/read2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache::TestRequest 'POST_BODY_ASSERT';
 print POST_BODY_ASSERT "/TestApache__read2",
     content => "foobar";
diff --git a/t/apache/scanhdrs.t b/t/apache/scanhdrs.t
index 583fc28..da305c5 100644
--- a/t/apache/scanhdrs.t
+++ b/t/apache/scanhdrs.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/scanhdrs2.t b/t/apache/scanhdrs2.t
index 466e06d..7956b84 100644
--- a/t/apache/scanhdrs2.t
+++ b/t/apache/scanhdrs2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apache/send_cgi_header.t b/t/apache/send_cgi_header.t
index 39c6e0d..6a2bd53 100644
--- a/t/apache/send_cgi_header.t
+++ b/t/apache/send_cgi_header.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/access2.t b/t/api/access2.t
index 5421d2e..fc0b0a6 100644
--- a/t/api/access2.t
+++ b/t/api/access2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
@@ -5,6 +6,8 @@
 use Apache::TestUtil;
 use Apache::TestRequest;
 
+if (!have_min_apache_version("2.4.0")) {
+
 plan tests => 6, need need_lwp, need_auth, need_access, 'HTML::HeadParser';
 
 my $location = "/TestAPI__access2";
@@ -27,4 +30,9 @@
 ok POST_OK $location, username => 'bar', password => 'goopass1',
     content => "a";
 
+}
+else {
 
+plan tests => 1, need {"mod_perl is not compiled with httpd-2.2" => 0};
+
+}
diff --git a/t/api/access2_24.t b/t/api/access2_24.t
new file mode 100644
index 0000000..5f74ee6
--- /dev/null
+++ b/t/api/access2_24.t
@@ -0,0 +1,37 @@
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestUtil;
+use Apache::TestRequest;
+
+if (have_min_apache_version("2.4.0")) {
+
+plan tests => 6, need need_lwp, need_auth, need_access, 'HTML::HeadParser';
+
+my $location = "/TestAPI__access2";
+
+ok !GET_OK $location;
+
+my $rc = GET_RC $location;
+ok t_cmp $rc, 401, "no credentials passed";
+
+# bad user
+ok !GET_OK $location, username => 'root', password => '1234';
+
+# good user/bad pass
+ok !GET_OK $location, username => 'goo', password => 'foo';
+
+# good user/good pass
+ok GET_OK $location, username => 'goo', password => 'goopass';
+
+# any user/any pass POST works
+ok POST_OK $location, username => 'bar', password => 'goopass1',
+    content => "a";
+
+}
+else {
+
+plan tests => 1, need {"mod_perl is not compiled with httpd-2.4" => 0};
+
+}
diff --git a/t/api/add_config.t b/t/api/add_config.t
index e771143..20a1b7a 100644
--- a/t/api/add_config.t
+++ b/t/api/add_config.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/content_encoding.t b/t/api/content_encoding.t
index dbc3370..d030f00 100644
--- a/t/api/content_encoding.t
+++ b/t/api/content_encoding.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/custom_response.t b/t/api/custom_response.t
index 979760e..3986008 100644
--- a/t/api/custom_response.t
+++ b/t/api/custom_response.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/err_headers_out.t b/t/api/err_headers_out.t
index fb67203..a1eb446 100644
--- a/t/api/err_headers_out.t
+++ b/t/api/err_headers_out.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/in_out_filters.t b/t/api/in_out_filters.t
index 529b146..f9aa7a1 100644
--- a/t/api/in_out_filters.t
+++ b/t/api/in_out_filters.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/internal_redirect.t b/t/api/internal_redirect.t
index 421f41a..ecdd9bd 100644
--- a/t/api/internal_redirect.t
+++ b/t/api/internal_redirect.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/internal_redirect_handler.t b/t/api/internal_redirect_handler.t
index 953a563..26237d1 100644
--- a/t/api/internal_redirect_handler.t
+++ b/t/api/internal_redirect_handler.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/lookup_misc.t b/t/api/lookup_misc.t
index f48a578..e73079b 100644
--- a/t/api/lookup_misc.t
+++ b/t/api/lookup_misc.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/lookup_uri.t b/t/api/lookup_uri.t
index ad07d44..7864a01 100644
--- a/t/api/lookup_uri.t
+++ b/t/api/lookup_uri.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/request_rec.t b/t/api/request_rec.t
index 6011c87..f9163ab 100644
--- a/t/api/request_rec.t
+++ b/t/api/request_rec.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/rflush.t b/t/api/rflush.t
index 66b46c5..8f4fca0 100644
--- a/t/api/rflush.t
+++ b/t/api/rflush.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/sendfile.t b/t/api/sendfile.t
index 72a520b..6c3d5e5 100644
--- a/t/api/sendfile.t
+++ b/t/api/sendfile.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/api/slurp_filename.t b/t/api/slurp_filename.t
index 0faeae7..b75da7e 100644
--- a/t/api/slurp_filename.t
+++ b/t/api/slurp_filename.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache::TestRequest 'GET_BODY_ASSERT';
 
 # we want r->filename to be "/slurp/slurp.pl", even though the
diff --git a/t/api/status.t b/t/api/status.t
index 6d1b479..534da3b 100644
--- a/t/api/status.t
+++ b/t/api/status.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/apr-ext/base64.t b/t/apr-ext/base64.t
index 9522819..0a6926c 100644
--- a/t/apr-ext/base64.t
+++ b/t/apr-ext/base64.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/brigade.t b/t/apr-ext/brigade.t
index 30f4304..ce65cda 100644
--- a/t/apr-ext/brigade.t
+++ b/t/apr-ext/brigade.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/bucket.t b/t/apr-ext/bucket.t
index 8615a27..5f7937f 100644
--- a/t/apr-ext/bucket.t
+++ b/t/apr-ext/bucket.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/date.t b/t/apr-ext/date.t
index b573bc2..675d5c0 100644
--- a/t/apr-ext/date.t
+++ b/t/apr-ext/date.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/error.t b/t/apr-ext/error.t
index e6f3650..297637a 100644
--- a/t/apr-ext/error.t
+++ b/t/apr-ext/error.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/finfo.t b/t/apr-ext/finfo.t
index d927a62..828edee 100644
--- a/t/apr-ext/finfo.t
+++ b/t/apr-ext/finfo.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/os.t b/t/apr-ext/os.t
index e177a85..bc3ca57 100644
--- a/t/apr-ext/os.t
+++ b/t/apr-ext/os.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/perlio.t b/t/apr-ext/perlio.t
index 189ef2c..543e57d 100644
--- a/t/apr-ext/perlio.t
+++ b/t/apr-ext/perlio.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/pool.t b/t/apr-ext/pool.t
index a9a9fd6..a2f9f15 100644
--- a/t/apr-ext/pool.t
+++ b/t/apr-ext/pool.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/status.t b/t/apr-ext/status.t
index 89d0504..e5232cf 100644
--- a/t/apr-ext/status.t
+++ b/t/apr-ext/status.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/string.t b/t/apr-ext/string.t
index 7ecaa7f..ec2389f 100644
--- a/t/apr-ext/string.t
+++ b/t/apr-ext/string.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/table.t b/t/apr-ext/table.t
index ed8ed7c..2e6f599 100644
--- a/t/apr-ext/table.t
+++ b/t/apr-ext/table.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/threadmutex.t b/t/apr-ext/threadmutex.t
index b40fb1f..64d9d02 100644
--- a/t/apr-ext/threadmutex.t
+++ b/t/apr-ext/threadmutex.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/threadrwlock.t b/t/apr-ext/threadrwlock.t
index 318cbf1..ba4a5db 100644
--- a/t/apr-ext/threadrwlock.t
+++ b/t/apr-ext/threadrwlock.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/uri.t b/t/apr-ext/uri.t
index 3f5e693..88d601d 100644
--- a/t/apr-ext/uri.t
+++ b/t/apr-ext/uri.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/util.t b/t/apr-ext/util.t
index a9e4f98..dd36331 100644
--- a/t/apr-ext/util.t
+++ b/t/apr-ext/util.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr-ext/uuid.t b/t/apr-ext/uuid.t
index d09e9e9..973bb65 100644
--- a/t/apr-ext/uuid.t
+++ b/t/apr-ext/uuid.t
@@ -1,4 +1,5 @@
 #!perl -T
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr/constants.t b/t/apr/constants.t
index 72b9743..b9921e4 100644
--- a/t/apr/constants.t
+++ b/t/apr/constants.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use ExtUtils::testlib;
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/apr/pool_lifetime.t b/t/apr/pool_lifetime.t
index d637490..4955c6f 100644
--- a/t/apr/pool_lifetime.t
+++ b/t/apr/pool_lifetime.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/compat/conn_authen.t b/t/compat/conn_authen.t
index b1d163a..880862f 100644
--- a/t/compat/conn_authen.t
+++ b/t/compat/conn_authen.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/compat/request_body.t b/t/compat/request_body.t
index 6ee7029..fc02b9b 100644
--- a/t/compat/request_body.t
+++ b/t/compat/request_body.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/compat/send_fd.t b/t/compat/send_fd.t
index ca24abe..a2e6d97 100644
--- a/t/compat/send_fd.t
+++ b/t/compat/send_fd.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/conf/modperl_extra.pl b/t/conf/modperl_extra.pl
index b82c182..f80e416 100644
--- a/t/conf/modperl_extra.pl
+++ b/t/conf/modperl_extra.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 ##########################################################
 ### IMPORTANT: only things that must be run absolutely ###
 ### during the config phase should be in this file     ###
diff --git a/t/conf/post_config_startup.pl b/t/conf/post_config_startup.pl
index 391a0e2..f8a09fb 100644
--- a/t/conf/post_config_startup.pl
+++ b/t/conf/post_config_startup.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 ##########################################################
 ### this file contains code that should be run on the  ###
 ### server startup but not during the config phase     ###
diff --git a/t/directive/perl.t b/t/directive/perl.t
index cb212d5..1ffe3b2 100644
--- a/t/directive/perl.t
+++ b/t/directive/perl.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlcleanuphandler.t b/t/directive/perlcleanuphandler.t
new file mode 100644
index 0000000..47bbc1e
--- /dev/null
+++ b/t/directive/perlcleanuphandler.t
@@ -0,0 +1,20 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestUtil;
+use Apache::TestRequest 'GET_BODY';
+
+plan tests => 3, need_lwp;
+
+my $module = 'TestDirective::perlcleanuphandler';
+
+Apache::TestRequest::user_agent(reset => 1, keep_alive=>1);
+sub u {Apache::TestRequest::module2url($module, {path=>$_[0]})}
+
+t_debug("connecting to ".u(''));
+ok t_cmp GET_BODY(u('/get?incr')), 'UNDEF', 'before increment';
+ok t_cmp GET_BODY(u('/get')), '1', 'incremented';
+(undef)=GET_BODY(u('/index.html?incr'));
+ok t_cmp GET_BODY(u('/get')), '2', 'incremented again';
diff --git a/t/directive/perlloadmodule2.t b/t/directive/perlloadmodule2.t
index 7a82543..6533011 100644
--- a/t/directive/perlloadmodule2.t
+++ b/t/directive/perlloadmodule2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlloadmodule3.t b/t/directive/perlloadmodule3.t
index 8c1d0dc..8ced2a6 100644
--- a/t/directive/perlloadmodule3.t
+++ b/t/directive/perlloadmodule3.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlloadmodule4.t b/t/directive/perlloadmodule4.t
index 5422f88..8efff0f 100644
--- a/t/directive/perlloadmodule4.t
+++ b/t/directive/perlloadmodule4.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlloadmodule5.t b/t/directive/perlloadmodule5.t
index 8db4bb9..a466dee 100644
--- a/t/directive/perlloadmodule5.t
+++ b/t/directive/perlloadmodule5.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlloadmodule6.t b/t/directive/perlloadmodule6.t
index 087033f..038d148 100644
--- a/t/directive/perlloadmodule6.t
+++ b/t/directive/perlloadmodule6.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/directive/perlmodule.t b/t/directive/perlmodule.t
index 2d3cf9f..e1b3b6f 100644
--- a/t/directive/perlmodule.t
+++ b/t/directive/perlmodule.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # this test tests PerlRequire configuration directive
 ########################################################################
 
diff --git a/t/directive/perlrequire.t b/t/directive/perlrequire.t
index e14b6e7..f2b48b5 100644
--- a/t/directive/perlrequire.t
+++ b/t/directive/perlrequire.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # this test tests PerlRequire configuration directive
 ########################################################################
 
diff --git a/t/directive/setupenv.t b/t/directive/setupenv.t
index fde3b5c..1778be8 100644
--- a/t/directive/setupenv.t
+++ b/t/directive/setupenv.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/error/runtime.t b/t/error/runtime.t
index e734f08..dd961a5 100644
--- a/t/error/runtime.t
+++ b/t/error/runtime.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/error/syntax.t b/t/error/syntax.t
index b0c374d..81eaa04 100644
--- a/t/error/syntax.t
+++ b/t/error/syntax.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/TestFilter/both_str_con_add.pm b/t/filter/TestFilter/both_str_con_add.pm
index c3d3f75..d2bbbe5 100644
--- a/t/filter/TestFilter/both_str_con_add.pm
+++ b/t/filter/TestFilter/both_str_con_add.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::both_str_con_add;
 
 # insert an input filter which lowers the case of the data
diff --git a/t/filter/TestFilter/both_str_native_remove.pm b/t/filter/TestFilter/both_str_native_remove.pm
index cfd698b..8cb7a3a 100644
--- a/t/filter/TestFilter/both_str_native_remove.pm
+++ b/t/filter/TestFilter/both_str_native_remove.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::both_str_native_remove;
 
 # this tests verifies that we can remove input and output native
diff --git a/t/filter/TestFilter/both_str_req_add.pm b/t/filter/TestFilter/both_str_req_add.pm
index 9bf8989..4f76426 100644
--- a/t/filter/TestFilter/both_str_req_add.pm
+++ b/t/filter/TestFilter/both_str_req_add.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::both_str_req_add;
 
 # insert an input filter which lowers the case of the data
diff --git a/t/filter/TestFilter/both_str_req_mix.pm b/t/filter/TestFilter/both_str_req_mix.pm
index 5c96020..0db61d8 100644
--- a/t/filter/TestFilter/both_str_req_mix.pm
+++ b/t/filter/TestFilter/both_str_req_mix.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::both_str_req_mix;
 
 # this is an elaborated test, where we mix several apache and mod_perl
diff --git a/t/filter/TestFilter/both_str_req_proxy.pm b/t/filter/TestFilter/both_str_req_proxy.pm
index 9e2ba81..8e15816 100644
--- a/t/filter/TestFilter/both_str_req_proxy.pm
+++ b/t/filter/TestFilter/both_str_req_proxy.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::both_str_req_proxy;
 
 # very similar to TestFilter::both_str_req_add, but the request is
diff --git a/t/filter/TestFilter/in_autoload.pm b/t/filter/TestFilter/in_autoload.pm
index 330732f..5595f44 100644
--- a/t/filter/TestFilter/in_autoload.pm
+++ b/t/filter/TestFilter/in_autoload.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_autoload;
 
 # test that PerlInputFilterHandler autoloads the module containing the
diff --git a/t/filter/TestFilter/in_bbs_body.pm b/t/filter/TestFilter/in_bbs_body.pm
index 24830e9..3380df1 100644
--- a/t/filter/TestFilter/in_bbs_body.pm
+++ b/t/filter/TestFilter/in_bbs_body.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_bbs_body;
 
 use strict;
diff --git a/t/filter/TestFilter/in_bbs_consume.pm b/t/filter/TestFilter/in_bbs_consume.pm
index da05276..b83f2f4 100644
--- a/t/filter/TestFilter/in_bbs_consume.pm
+++ b/t/filter/TestFilter/in_bbs_consume.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_bbs_consume;
 
 # this test consumes a chunk of input, then consumes and throws away
diff --git a/t/filter/TestFilter/in_bbs_inject_header.pm b/t/filter/TestFilter/in_bbs_inject_header.pm
index 9b03f08..b09d6f9 100644
--- a/t/filter/TestFilter/in_bbs_inject_header.pm
+++ b/t/filter/TestFilter/in_bbs_inject_header.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_bbs_inject_header;
 
 # this filter demonstrates two things:
diff --git a/t/filter/TestFilter/in_bbs_msg.pm b/t/filter/TestFilter/in_bbs_msg.pm
index db2153c..12e0868 100644
--- a/t/filter/TestFilter/in_bbs_msg.pm
+++ b/t/filter/TestFilter/in_bbs_msg.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_bbs_msg;
 
 use strict;
diff --git a/t/filter/TestFilter/in_bbs_underrun.pm b/t/filter/TestFilter/in_bbs_underrun.pm
index 70b0196..f8f33bb 100644
--- a/t/filter/TestFilter/in_bbs_underrun.pm
+++ b/t/filter/TestFilter/in_bbs_underrun.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_bbs_underrun;
 
 # this test exercises the underrun filter concept. Sometimes filters
diff --git a/t/filter/TestFilter/in_error.pm b/t/filter/TestFilter/in_error.pm
index dbc52e8..633b3a3 100644
--- a/t/filter/TestFilter/in_error.pm
+++ b/t/filter/TestFilter/in_error.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_error;
 
 # errors in filters should be properly propogated to httpd
diff --git a/t/filter/TestFilter/in_init_basic.pm b/t/filter/TestFilter/in_init_basic.pm
index 15d52b8..630a511 100644
--- a/t/filter/TestFilter/in_init_basic.pm
+++ b/t/filter/TestFilter/in_init_basic.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_init_basic;
 
 use strict;
diff --git a/t/filter/TestFilter/in_str_bin_data.pm b/t/filter/TestFilter/in_str_bin_data.pm
index 999878a..f304f43 100644
--- a/t/filter/TestFilter/in_str_bin_data.pm
+++ b/t/filter/TestFilter/in_str_bin_data.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_bin_data;
 
 # test that $r->print and $f->print handle binary data correctly
diff --git a/t/filter/TestFilter/in_str_consume.pm b/t/filter/TestFilter/in_str_consume.pm
index 3b773ca..4bd32ce 100644
--- a/t/filter/TestFilter/in_str_consume.pm
+++ b/t/filter/TestFilter/in_str_consume.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_consume;
 
 # this test verifies that streaming filters framework handles
diff --git a/t/filter/TestFilter/in_str_declined.pm b/t/filter/TestFilter/in_str_declined.pm
index a9d09ed..6b0f17b 100644
--- a/t/filter/TestFilter/in_str_declined.pm
+++ b/t/filter/TestFilter/in_str_declined.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_declined;
 
 use strict;
diff --git a/t/filter/TestFilter/in_str_declined_read.pm b/t/filter/TestFilter/in_str_declined_read.pm
index 4ec3788..1a242c5 100644
--- a/t/filter/TestFilter/in_str_declined_read.pm
+++ b/t/filter/TestFilter/in_str_declined_read.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_declined_read;
 
 use strict;
diff --git a/t/filter/TestFilter/in_str_lc.pm b/t/filter/TestFilter/in_str_lc.pm
index b17ec52..60f5a80 100644
--- a/t/filter/TestFilter/in_str_lc.pm
+++ b/t/filter/TestFilter/in_str_lc.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_lc;
 
 use strict;
diff --git a/t/filter/TestFilter/in_str_msg.pm b/t/filter/TestFilter/in_str_msg.pm
index 9f23ecf..e3a4733 100644
--- a/t/filter/TestFilter/in_str_msg.pm
+++ b/t/filter/TestFilter/in_str_msg.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_msg;
 
 # test:
diff --git a/t/filter/TestFilter/in_str_sandwich.pm b/t/filter/TestFilter/in_str_sandwich.pm
index d1d14c4..a7a9f19 100644
--- a/t/filter/TestFilter/in_str_sandwich.pm
+++ b/t/filter/TestFilter/in_str_sandwich.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::in_str_sandwich;
 
 # this test verifies whether the filter can pre-insert data (using
diff --git a/t/filter/TestFilter/out_bbs_basic.pm b/t/filter/TestFilter/out_bbs_basic.pm
index fecd9b5..8071992 100644
--- a/t/filter/TestFilter/out_bbs_basic.pm
+++ b/t/filter/TestFilter/out_bbs_basic.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_bbs_basic;
 
 use strict;
diff --git a/t/filter/TestFilter/out_bbs_ctx.pm b/t/filter/TestFilter/out_bbs_ctx.pm
index a3c3a48..b6f2175 100644
--- a/t/filter/TestFilter/out_bbs_ctx.pm
+++ b/t/filter/TestFilter/out_bbs_ctx.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_bbs_ctx;
 
 # this is the same test as TestFilter::context_stream, but uses the
diff --git a/t/filter/TestFilter/out_bbs_filebucket.pm b/t/filter/TestFilter/out_bbs_filebucket.pm
index 8c01a5f..80f56dd 100644
--- a/t/filter/TestFilter/out_bbs_filebucket.pm
+++ b/t/filter/TestFilter/out_bbs_filebucket.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_bbs_filebucket;
 
 # testing how the filter handles file buckets
diff --git a/t/filter/TestFilter/out_init_basic.pm b/t/filter/TestFilter/out_init_basic.pm
index f02e5e3..ccfa876 100644
--- a/t/filter/TestFilter/out_init_basic.pm
+++ b/t/filter/TestFilter/out_init_basic.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_init_basic;
 
 use strict;
diff --git a/t/filter/TestFilter/out_str_api.pm b/t/filter/TestFilter/out_str_api.pm
index 2abb5f8..b1c6bb7 100644
--- a/t/filter/TestFilter/out_str_api.pm
+++ b/t/filter/TestFilter/out_str_api.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_api;
 
 # Test Apache2::FilterRec and Apache2::Filter accessors
diff --git a/t/filter/TestFilter/out_str_buffer.pm b/t/filter/TestFilter/out_str_buffer.pm
index ce1c373..027e10f 100644
--- a/t/filter/TestFilter/out_str_buffer.pm
+++ b/t/filter/TestFilter/out_str_buffer.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_buffer;
 
 # in this test we want to buffer the data, modify the length of the
diff --git a/t/filter/TestFilter/out_str_ctx.pm b/t/filter/TestFilter/out_str_ctx.pm
index 8a4eeda..762c60b 100644
--- a/t/filter/TestFilter/out_str_ctx.pm
+++ b/t/filter/TestFilter/out_str_ctx.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_ctx;
 
 # this is the same test as TestFilter::context, but uses the streaming
diff --git a/t/filter/TestFilter/out_str_declined.pm b/t/filter/TestFilter/out_str_declined.pm
index f732bc1..0f4cbf6 100644
--- a/t/filter/TestFilter/out_str_declined.pm
+++ b/t/filter/TestFilter/out_str_declined.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_declined;
 
 use strict;
diff --git a/t/filter/TestFilter/out_str_eval.pm b/t/filter/TestFilter/out_str_eval.pm
index 83d09dd..0201bcd 100644
--- a/t/filter/TestFilter/out_str_eval.pm
+++ b/t/filter/TestFilter/out_str_eval.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_eval;
 
 # at some point there was a problem when eval {} in a non-filter
diff --git a/t/filter/TestFilter/out_str_lc.pm b/t/filter/TestFilter/out_str_lc.pm
index 363e881..8325b38 100644
--- a/t/filter/TestFilter/out_str_lc.pm
+++ b/t/filter/TestFilter/out_str_lc.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_lc;
 
 use strict;
diff --git a/t/filter/TestFilter/out_str_remove.pm b/t/filter/TestFilter/out_str_remove.pm
index dbb775b..cc3d14d 100644
--- a/t/filter/TestFilter/out_str_remove.pm
+++ b/t/filter/TestFilter/out_str_remove.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_remove;
 
 use strict;
diff --git a/t/filter/TestFilter/out_str_req_eos.pm b/t/filter/TestFilter/out_str_req_eos.pm
index d6a293c..866c8a1 100644
--- a/t/filter/TestFilter/out_str_req_eos.pm
+++ b/t/filter/TestFilter/out_str_req_eos.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_req_eos;
 
 # here we test how EOS is passed from one streaming filter to another,
diff --git a/t/filter/TestFilter/out_str_req_mix.pm b/t/filter/TestFilter/out_str_req_mix.pm
index e50acfd..771cb09 100644
--- a/t/filter/TestFilter/out_str_req_mix.pm
+++ b/t/filter/TestFilter/out_str_req_mix.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_req_mix;
 
 # in this test we verify that we can preserve the mixed order of
diff --git a/t/filter/TestFilter/out_str_reverse.pm b/t/filter/TestFilter/out_str_reverse.pm
index b661ede..5237f1f 100644
--- a/t/filter/TestFilter/out_str_reverse.pm
+++ b/t/filter/TestFilter/out_str_reverse.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_reverse;
 
 # this filter tests how the data can be set-aside between filter
diff --git a/t/filter/TestFilter/out_str_subreq_default.pm b/t/filter/TestFilter/out_str_subreq_default.pm
index 9589dc3..2ffcc0f 100644
--- a/t/filter/TestFilter/out_str_subreq_default.pm
+++ b/t/filter/TestFilter/out_str_subreq_default.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_subreq_default;
 
 use strict;
diff --git a/t/filter/TestFilter/out_str_subreq_modperl.pm b/t/filter/TestFilter/out_str_subreq_modperl.pm
index fa82a97..ba3b4a4 100644
--- a/t/filter/TestFilter/out_str_subreq_modperl.pm
+++ b/t/filter/TestFilter/out_str_subreq_modperl.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestFilter::out_str_subreq_modperl;
 
 use strict;
diff --git a/t/filter/both_str_con_add.t b/t/filter/both_str_con_add.t
index 9a72856..1937406 100644
--- a/t/filter/both_str_con_add.t
+++ b/t/filter/both_str_con_add.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/both_str_native_remove.t b/t/filter/both_str_native_remove.t
index 6ff381e..4dbc1c1 100644
--- a/t/filter/both_str_native_remove.t
+++ b/t/filter/both_str_native_remove.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/both_str_req_add.t b/t/filter/both_str_req_add.t
index 4606e3a..867ebf8 100644
--- a/t/filter/both_str_req_add.t
+++ b/t/filter/both_str_req_add.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/both_str_req_mix.t b/t/filter/both_str_req_mix.t
index 71562aa..fa44462 100644
--- a/t/filter/both_str_req_mix.t
+++ b/t/filter/both_str_req_mix.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/both_str_req_proxy.t b/t/filter/both_str_req_proxy.t
index 9d59721..e0cc065 100644
--- a/t/filter/both_str_req_proxy.t
+++ b/t/filter/both_str_req_proxy.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_autoload.t b/t/filter/in_autoload.t
index a15db45..d57ae30 100644
--- a/t/filter/in_autoload.t
+++ b/t/filter/in_autoload.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_bbs_body.t b/t/filter/in_bbs_body.t
index 9816662..8ca5e5c 100644
--- a/t/filter/in_bbs_body.t
+++ b/t/filter/in_bbs_body.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_bbs_consume.t b/t/filter/in_bbs_consume.t
index a39c9fc..3defa2b 100644
--- a/t/filter/in_bbs_consume.t
+++ b/t/filter/in_bbs_consume.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_bbs_inject_header.t b/t/filter/in_bbs_inject_header.t
index fea5f94..e45b047 100644
--- a/t/filter/in_bbs_inject_header.t
+++ b/t/filter/in_bbs_inject_header.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_bbs_msg.t b/t/filter/in_bbs_msg.t
index 2e3c1b3..02a3027 100644
--- a/t/filter/in_bbs_msg.t
+++ b/t/filter/in_bbs_msg.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache::Test ();
 use Apache::TestUtil;
 
diff --git a/t/filter/in_bbs_underrun.t b/t/filter/in_bbs_underrun.t
index 86a5716..70e999b 100644
--- a/t/filter/in_bbs_underrun.t
+++ b/t/filter/in_bbs_underrun.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_error.t b/t/filter/in_error.t
index ce40e78..0ac9662 100644
--- a/t/filter/in_error.t
+++ b/t/filter/in_error.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_init_basic.t b/t/filter/in_init_basic.t
index a24f12c..a82ffaa 100644
--- a/t/filter/in_init_basic.t
+++ b/t/filter/in_init_basic.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_bin_data.t b/t/filter/in_str_bin_data.t
index 5abd826..da801bd 100644
--- a/t/filter/in_str_bin_data.t
+++ b/t/filter/in_str_bin_data.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_consume.t b/t/filter/in_str_consume.t
index 2aaa11a..7ad619d 100644
--- a/t/filter/in_str_consume.t
+++ b/t/filter/in_str_consume.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_declined.t b/t/filter/in_str_declined.t
index 70754c0..f22db3b 100644
--- a/t/filter/in_str_declined.t
+++ b/t/filter/in_str_declined.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_declined_read.t b/t/filter/in_str_declined_read.t
index f92d4ec..94b6618 100644
--- a/t/filter/in_str_declined_read.t
+++ b/t/filter/in_str_declined_read.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_lc.t b/t/filter/in_str_lc.t
index 0ce0d06..e2dceaf 100644
--- a/t/filter/in_str_lc.t
+++ b/t/filter/in_str_lc.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/in_str_msg.t b/t/filter/in_str_msg.t
index 2244850..74a781f 100644
--- a/t/filter/in_str_msg.t
+++ b/t/filter/in_str_msg.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache::Test ();
 use Apache::TestUtil;
 
diff --git a/t/filter/in_str_sandwich.t b/t/filter/in_str_sandwich.t
index c02f158..a9d7ef6 100644
--- a/t/filter/in_str_sandwich.t
+++ b/t/filter/in_str_sandwich.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_apache.t b/t/filter/out_apache.t
index b3d1e1b..79c1325 100644
--- a/t/filter/out_apache.t
+++ b/t/filter/out_apache.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # test the situation where a native apache response filter is
 # configured outside the <Location> block with PerlSet*Filter
 # directive. In this case we need to make sure that mod_perl doesn't
diff --git a/t/filter/out_bbs_ctx.t b/t/filter/out_bbs_ctx.t
index ec26c4b..8e16c98 100644
--- a/t/filter/out_bbs_ctx.t
+++ b/t/filter/out_bbs_ctx.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_bbs_filebucket.t b/t/filter/out_bbs_filebucket.t
index 4419614..53cd409 100644
--- a/t/filter/out_bbs_filebucket.t
+++ b/t/filter/out_bbs_filebucket.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_init_basic.t b/t/filter/out_init_basic.t
index 8af052f..ac879f7 100644
--- a/t/filter/out_init_basic.t
+++ b/t/filter/out_init_basic.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_buffer.t b/t/filter/out_str_buffer.t
index 69d88f2..1b48c82 100644
--- a/t/filter/out_str_buffer.t
+++ b/t/filter/out_str_buffer.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_ctx.t b/t/filter/out_str_ctx.t
index da11936..4f1f44b 100644
--- a/t/filter/out_str_ctx.t
+++ b/t/filter/out_str_ctx.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_declined.t b/t/filter/out_str_declined.t
index ea2dd5e..488cadd 100644
--- a/t/filter/out_str_declined.t
+++ b/t/filter/out_str_declined.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_lc.t b/t/filter/out_str_lc.t
index 72a0c96..710c2e5 100644
--- a/t/filter/out_str_lc.t
+++ b/t/filter/out_str_lc.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_remove.t b/t/filter/out_str_remove.t
index 22cb459..0740136 100644
--- a/t/filter/out_str_remove.t
+++ b/t/filter/out_str_remove.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_req_eos.t b/t/filter/out_str_req_eos.t
index 8e13f43..3e09ee1 100644
--- a/t/filter/out_str_req_eos.t
+++ b/t/filter/out_str_req_eos.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_req_mix.t b/t/filter/out_str_req_mix.t
index 9d2e80d..d7d839d 100644
--- a/t/filter/out_str_req_mix.t
+++ b/t/filter/out_str_req_mix.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_reverse.t b/t/filter/out_str_reverse.t
index 41bc353..8513dac 100644
--- a/t/filter/out_str_reverse.t
+++ b/t/filter/out_str_reverse.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_subreq_default.t b/t/filter/out_str_subreq_default.t
index fa78e68..1f408e5 100644
--- a/t/filter/out_str_subreq_default.t
+++ b/t/filter/out_str_subreq_default.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/filter/out_str_subreq_modperl.t b/t/filter/out_str_subreq_modperl.t
index 847f734..9b1a875 100644
--- a/t/filter/out_str_subreq_modperl.t
+++ b/t/filter/out_str_subreq_modperl.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/TestHooks/access.pm b/t/hooks/TestHooks/access.pm
index 73c30b8..e78c974 100644
--- a/t/hooks/TestHooks/access.pm
+++ b/t/hooks/TestHooks/access.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::access;
 
 # demonstrates the phases execution (sometimes users claim that
diff --git a/t/hooks/TestHooks/authen_basic.pm b/t/hooks/TestHooks/authen_basic.pm
index 3ebc689..a7ba01e 100644
--- a/t/hooks/TestHooks/authen_basic.pm
+++ b/t/hooks/TestHooks/authen_basic.pm
@@ -1,11 +1,16 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::authen_basic;
 
 use strict;
 use warnings FATAL => 'all';
 
+use Apache::Test;
+use Apache::TestUtil;
+
 use Apache2::Access ();
 
 use Apache2::Const -compile => qw(OK HTTP_UNAUTHORIZED SERVER_ERROR);
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 sub handler {
     my $r = shift;
@@ -16,9 +21,13 @@
 
     my $user = $r->user;
 
-    my $requirement = $r->requires->[0]->{requirement};
-
-    return Apache2::Const::SERVER_ERROR unless $requirement eq 'valid-user';
+    # We don't have to check for valid-user in 2.4.0+. If there is bug
+    # in require valid-user handling, it will result in failed test with
+    # bad username/password.
+    if (!APACHE24) {
+        my $requirement = $r->requires->[0]->{requirement};
+        return Apache2::Const::SERVER_ERROR unless $requirement eq 'valid-user';
+    }
 
     unless ($user eq 'dougm' and $sent_pw eq 'foo') {
         $r->note_basic_auth_failure;
diff --git a/t/hooks/TestHooks/authen_digest.pm b/t/hooks/TestHooks/authen_digest.pm
index 35110d2..9ccc396 100644
--- a/t/hooks/TestHooks/authen_digest.pm
+++ b/t/hooks/TestHooks/authen_digest.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::authen_digest;
 
 use strict;
@@ -21,6 +22,9 @@
         return Apache2::Const::HTTP_UNAUTHORIZED;
     }
 
+    $r->user("user");
+    $r->ap_auth_type("Digest");
+
     return Apache2::Const::OK;
 }
 
diff --git a/t/hooks/TestHooks/authz.pm b/t/hooks/TestHooks/authz.pm
index cb9abcd..1134eb3 100644
--- a/t/hooks/TestHooks/authz.pm
+++ b/t/hooks/TestHooks/authz.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::authz;
 
 use strict;
@@ -8,6 +9,7 @@
 use Apache2::Const -compile => qw(OK HTTP_UNAUTHORIZED);
 
 sub auth_any {
+    my $self = shift;
     my $r = shift;
 
     my ($res, $sent_pw) = $r->get_basic_auth_pw;
@@ -30,9 +32,7 @@
 
     return Apache2::Const::HTTP_UNAUTHORIZED unless $user;
 
-    my ($u, @allowed) = split /\s+/, $r->requires->[0]->{requirement};
-
-    return Apache2::Const::HTTP_UNAUTHORIZED unless grep { $_ eq $user } @allowed;
+    return Apache2::Const::HTTP_UNAUTHORIZED unless "dougm" eq $user;
 
     Apache2::Const::OK;
 }
@@ -43,6 +43,6 @@
 AuthType Basic
 AuthName simple
 PerlModule          TestHooks::authz
-PerlAuthenHandler   TestHooks::authz::auth_any
+PerlAuthenHandler   TestHooks::authz->auth_any
 PerlResponseHandler Apache::TestHandler::ok1
 SetHandler modperl
diff --git a/t/hooks/TestHooks/cleanup.pm b/t/hooks/TestHooks/cleanup.pm
index d08b5b7..f493e24 100644
--- a/t/hooks/TestHooks/cleanup.pm
+++ b/t/hooks/TestHooks/cleanup.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::cleanup;
 
 # test various ways to assign cleanup handlers
diff --git a/t/hooks/TestHooks/cleanup2.pm b/t/hooks/TestHooks/cleanup2.pm
index 02fbee1..1c68dfa 100644
--- a/t/hooks/TestHooks/cleanup2.pm
+++ b/t/hooks/TestHooks/cleanup2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::cleanup2;
 
 # test the cleanup handler removing a temp file
diff --git a/t/hooks/TestHooks/error.pm b/t/hooks/TestHooks/error.pm
index 61452f4..6ce74fd 100644
--- a/t/hooks/TestHooks/error.pm
+++ b/t/hooks/TestHooks/error.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::error;
 
 use strict;
diff --git a/t/hooks/TestHooks/fixup.pm b/t/hooks/TestHooks/fixup.pm
index f3f19b3..80d6fff 100644
--- a/t/hooks/TestHooks/fixup.pm
+++ b/t/hooks/TestHooks/fixup.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::fixup;
 
 use strict;
diff --git a/t/hooks/TestHooks/headerparser.pm b/t/hooks/TestHooks/headerparser.pm
index 83f59fd..780bf78 100644
--- a/t/hooks/TestHooks/headerparser.pm
+++ b/t/hooks/TestHooks/headerparser.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::headerparser;
 
 use strict;
diff --git a/t/hooks/TestHooks/hookrun.pm b/t/hooks/TestHooks/hookrun.pm
index dee6fc9..c842ee9 100644
--- a/t/hooks/TestHooks/hookrun.pm
+++ b/t/hooks/TestHooks/hookrun.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::hookrun;
 
 # this test runs all Apache phases from within the very first http
diff --git a/t/hooks/TestHooks/init.pm b/t/hooks/TestHooks/init.pm
index d61932d..dada6a8 100644
--- a/t/hooks/TestHooks/init.pm
+++ b/t/hooks/TestHooks/init.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::init;
 
 use strict;
diff --git a/t/hooks/TestHooks/inlined_handlers.pm b/t/hooks/TestHooks/inlined_handlers.pm
index 87fbfa2..be25837 100644
--- a/t/hooks/TestHooks/inlined_handlers.pm
+++ b/t/hooks/TestHooks/inlined_handlers.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::inlined_handlers;
 
 # this test exercises httpd.conf inlined one-liner handlers, like:
diff --git a/t/hooks/TestHooks/push_handlers.pm b/t/hooks/TestHooks/push_handlers.pm
index 4e21b9f..2d85f6d 100644
--- a/t/hooks/TestHooks/push_handlers.pm
+++ b/t/hooks/TestHooks/push_handlers.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::push_handlers;
 
 # test various ways to push handlers
diff --git a/t/hooks/TestHooks/push_handlers_anon.pm b/t/hooks/TestHooks/push_handlers_anon.pm
index 62977be..abfd028 100644
--- a/t/hooks/TestHooks/push_handlers_anon.pm
+++ b/t/hooks/TestHooks/push_handlers_anon.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::push_handlers_anon;
 
 # in addition to other anon sub handler tests in push_handlers*, here
diff --git a/t/hooks/TestHooks/push_handlers_blessed.pm b/t/hooks/TestHooks/push_handlers_blessed.pm
index 9b1996a..0a5dd53 100644
--- a/t/hooks/TestHooks/push_handlers_blessed.pm
+++ b/t/hooks/TestHooks/push_handlers_blessed.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::push_handlers_blessed;
 
 # test that we
diff --git a/t/hooks/TestHooks/push_handlers_same_phase.pm b/t/hooks/TestHooks/push_handlers_same_phase.pm
index 52dce86..6584e12 100644
--- a/t/hooks/TestHooks/push_handlers_same_phase.pm
+++ b/t/hooks/TestHooks/push_handlers_same_phase.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::push_handlers_same_phase;
 
 # test that we
diff --git a/t/hooks/TestHooks/set_handlers.pm b/t/hooks/TestHooks/set_handlers.pm
index 59f9581..f64dbf1 100644
--- a/t/hooks/TestHooks/set_handlers.pm
+++ b/t/hooks/TestHooks/set_handlers.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::set_handlers;
 
 # test various ways to reset/unset handlers list
diff --git a/t/hooks/TestHooks/stacked_handlers.pm b/t/hooks/TestHooks/stacked_handlers.pm
index 7cd6fc6..e74a974 100644
--- a/t/hooks/TestHooks/stacked_handlers.pm
+++ b/t/hooks/TestHooks/stacked_handlers.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::stacked_handlers;
 
 # this test exercises the execution of the stacked handlers and test
diff --git a/t/hooks/TestHooks/stacked_handlers2.pm b/t/hooks/TestHooks/stacked_handlers2.pm
index bb0a369..25f1ca7 100644
--- a/t/hooks/TestHooks/stacked_handlers2.pm
+++ b/t/hooks/TestHooks/stacked_handlers2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::stacked_handlers2;
 
 # this test exercises the execution of the stacked handlers
@@ -24,6 +25,17 @@
     return Apache2::Const::OK;
 }
 
+sub ok_authen {
+
+    my $r = shift;
+    callback($r);
+
+    $r->user("user");
+    $r->ap_auth_type("Basic");
+
+    return Apache2::Const::OK;
+}
+
 sub declined {
 
     callback(shift);
@@ -168,7 +180,7 @@
         PerlAccessHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
 
         # 2 run, 1 left behind
-        PerlAuthenHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok
+        PerlAuthenHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok_authen
         PerlAuthenHandler TestHooks::stacked_handlers2::auth_required
 
         # 2 run, 1 left behind
diff --git a/t/hooks/TestHooks/startup.pm b/t/hooks/TestHooks/startup.pm
index d3cd631..ecceeba 100644
--- a/t/hooks/TestHooks/startup.pm
+++ b/t/hooks/TestHooks/startup.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::startup;
 
 # test PerlPostConfigHandler and PerlOpenLogsHandler phases
diff --git a/t/hooks/TestHooks/trans.pm b/t/hooks/TestHooks/trans.pm
index 20cea21..279fd5c 100644
--- a/t/hooks/TestHooks/trans.pm
+++ b/t/hooks/TestHooks/trans.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestHooks::trans;
 
 use strict;
diff --git a/t/hooks/access.t b/t/hooks/access.t
index 0b3a132..3266a3c 100644
--- a/t/hooks/access.t
+++ b/t/hooks/access.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/authen_basic.t b/t/hooks/authen_basic.t
index ba6558c..759d010 100644
--- a/t/hooks/authen_basic.t
+++ b/t/hooks/authen_basic.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/authen_digest.t b/t/hooks/authen_digest.t
index 2a54726..b789b8b 100644
--- a/t/hooks/authen_digest.t
+++ b/t/hooks/authen_digest.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/authz.t b/t/hooks/authz.t
index 4458a7c..5ad3b8e 100644
--- a/t/hooks/authz.t
+++ b/t/hooks/authz.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/cleanup.t b/t/hooks/cleanup.t
index f6102be..d47554b 100644
--- a/t/hooks/cleanup.t
+++ b/t/hooks/cleanup.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/cleanup2.t b/t/hooks/cleanup2.t
index ea51c4d..fcd9e74 100644
--- a/t/hooks/cleanup2.t
+++ b/t/hooks/cleanup2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/error.t b/t/hooks/error.t
index a562c5d..160d43a 100644
--- a/t/hooks/error.t
+++ b/t/hooks/error.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/hookrun.t b/t/hooks/hookrun.t
index fcd0311..d1c44f1 100644
--- a/t/hooks/hookrun.t
+++ b/t/hooks/hookrun.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/init.t b/t/hooks/init.t
index 9476b30..e7355ae 100644
--- a/t/hooks/init.t
+++ b/t/hooks/init.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/inlined_handlers.t b/t/hooks/inlined_handlers.t
index 59d3c11..2aa7f6d 100644
--- a/t/hooks/inlined_handlers.t
+++ b/t/hooks/inlined_handlers.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/push_handlers.t b/t/hooks/push_handlers.t
index 17cbf18..c4656b6 100644
--- a/t/hooks/push_handlers.t
+++ b/t/hooks/push_handlers.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/push_handlers_anon.t b/t/hooks/push_handlers_anon.t
index 8e4f721..5c39d92 100644
--- a/t/hooks/push_handlers_anon.t
+++ b/t/hooks/push_handlers_anon.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # the handler is configured in modperl_extra.pl via
 # Apache2::ServerUtil->server->add_config
 
diff --git a/t/hooks/stacked_handlers.t b/t/hooks/stacked_handlers.t
index 3eb9e6e..6d6f242 100644
--- a/t/hooks/stacked_handlers.t
+++ b/t/hooks/stacked_handlers.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/stacked_handlers2.t b/t/hooks/stacked_handlers2.t
index 28f592c..9c29d12 100644
--- a/t/hooks/stacked_handlers2.t
+++ b/t/hooks/stacked_handlers2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/hooks/startup.t b/t/hooks/startup.t
index d3c9395..7e2c218 100644
--- a/t/hooks/startup.t
+++ b/t/hooks/startup.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use strict;
 use warnings FATAL => 'all';
diff --git a/t/hooks/trans.t b/t/hooks/trans.t
index afc6611..95b21e9 100644
--- a/t/hooks/trans.t
+++ b/t/hooks/trans.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/htdocs/api/slurp.pl b/t/htdocs/api/slurp.pl
index abd8782..43adae0 100644
--- a/t/htdocs/api/slurp.pl
+++ b/t/htdocs/api/slurp.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 my $z = <<EOI;
 English: Internet
 Hebrew : \x{05D0}\x{05D9}\x{05E0}\x{05D8}\x{05E8}\x{05E0}\x{05D8}
diff --git a/t/htdocs/includes-registry/cgipm.pl b/t/htdocs/includes-registry/cgipm.pl
index ba0be67..1f2b824 100755
--- a/t/htdocs/includes-registry/cgipm.pl
+++ b/t/htdocs/includes-registry/cgipm.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache2::compat ();
 use CGI ();
 
diff --git a/t/htdocs/includes-registry/test.pl b/t/htdocs/includes-registry/test.pl
index 61257d6..87d29cc 100755
--- a/t/htdocs/includes-registry/test.pl
+++ b/t/htdocs/includes-registry/test.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 print "Content-type: text/html\n\n";
 
 print "Hello World<br>\n";
diff --git a/t/htdocs/modperl/setupenv2/config_require.pl b/t/htdocs/modperl/setupenv2/config_require.pl
index a79e178..c1a7709 100644
--- a/t/htdocs/modperl/setupenv2/config_require.pl
+++ b/t/htdocs/modperl/setupenv2/config_require.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 TestModperl::setupenv2::register_mixed();
 TestModperl::setupenv2::register_perl();
 $ENV{EnvChangeMixedTest} = "config_require";
diff --git a/t/htdocs/modperl/setupenv2/module.pm b/t/htdocs/modperl/setupenv2/module.pm
index e4b54f8..df7c5f2 100644
--- a/t/htdocs/modperl/setupenv2/module.pm
+++ b/t/htdocs/modperl/setupenv2/module.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package htdocs::modperl::setupenv2::module;
 TestModperl::setupenv2::register_mixed();
 TestModperl::setupenv2::register_perl();
diff --git a/t/htdocs/modperl/setupenv2/post_config_require.pl b/t/htdocs/modperl/setupenv2/post_config_require.pl
index ae51c4c..d75fefb 100644
--- a/t/htdocs/modperl/setupenv2/post_config_require.pl
+++ b/t/htdocs/modperl/setupenv2/post_config_require.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 TestModperl::setupenv2::register_mixed();
 TestModperl::setupenv2::register_perl();
 $ENV{EnvChangeMixedTest} = "post_config_require";
diff --git a/t/htdocs/modperl/setupenv2/require.pl b/t/htdocs/modperl/setupenv2/require.pl
index 36712b1..417f471 100644
--- a/t/htdocs/modperl/setupenv2/require.pl
+++ b/t/htdocs/modperl/setupenv2/require.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 TestModperl::setupenv2::register_mixed();
 TestModperl::setupenv2::register_perl();
 $ENV{EnvChangeMixedTest} = "require";
diff --git a/t/htdocs/vhost/post_config.pl b/t/htdocs/vhost/post_config.pl
index 13e2b37..472f80f 100644
--- a/t/htdocs/vhost/post_config.pl
+++ b/t/htdocs/vhost/post_config.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/htdocs/vhost/startup.pl b/t/htdocs/vhost/startup.pl
index ae2b8eb..ae156e6 100644
--- a/t/htdocs/vhost/startup.pl
+++ b/t/htdocs/vhost/startup.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use warnings;
 use strict;
 
diff --git a/t/lib/TestAPRlib/base64.pm b/t/lib/TestAPRlib/base64.pm
index 713fc82..1867a4a 100644
--- a/t/lib/TestAPRlib/base64.pm
+++ b/t/lib/TestAPRlib/base64.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::base64;
 
 # testing APR::Base64 API
diff --git a/t/lib/TestAPRlib/brigade.pm b/t/lib/TestAPRlib/brigade.pm
index d4619a0..5fdcc4c 100644
--- a/t/lib/TestAPRlib/brigade.pm
+++ b/t/lib/TestAPRlib/brigade.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::brigade;
 
 # testing APR::Brigade in this tests.
diff --git a/t/lib/TestAPRlib/bucket.pm b/t/lib/TestAPRlib/bucket.pm
index 3c274c8..2e9b542 100644
--- a/t/lib/TestAPRlib/bucket.pm
+++ b/t/lib/TestAPRlib/bucket.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::bucket;
 
 # a mix of APR::Bucket and APR::BucketType tests
diff --git a/t/lib/TestAPRlib/date.pm b/t/lib/TestAPRlib/date.pm
index dafd53c..2f3dd80 100644
--- a/t/lib/TestAPRlib/date.pm
+++ b/t/lib/TestAPRlib/date.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::date;
 
 # testing APR::Date API
diff --git a/t/lib/TestAPRlib/error.pm b/t/lib/TestAPRlib/error.pm
index 869518e..233045c 100644
--- a/t/lib/TestAPRlib/error.pm
+++ b/t/lib/TestAPRlib/error.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::error;
 
 # testing APR::Error API
diff --git a/t/lib/TestAPRlib/finfo.pm b/t/lib/TestAPRlib/finfo.pm
index 7d7c030..283c672 100644
--- a/t/lib/TestAPRlib/finfo.pm
+++ b/t/lib/TestAPRlib/finfo.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::finfo;
 
 use strict;
diff --git a/t/lib/TestAPRlib/os.pm b/t/lib/TestAPRlib/os.pm
index bd6de22..12344fb 100644
--- a/t/lib/TestAPRlib/os.pm
+++ b/t/lib/TestAPRlib/os.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::os;
 
 # testing APR::OS API
diff --git a/t/lib/TestAPRlib/pool.pm b/t/lib/TestAPRlib/pool.pm
index 5c542e4..519cba7 100644
--- a/t/lib/TestAPRlib/pool.pm
+++ b/t/lib/TestAPRlib/pool.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::pool;
 
 use strict;
diff --git a/t/lib/TestAPRlib/status.pm b/t/lib/TestAPRlib/status.pm
index 9ba6377..6bf7f50 100644
--- a/t/lib/TestAPRlib/status.pm
+++ b/t/lib/TestAPRlib/status.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::status;
 
 # Testing APR::Status
diff --git a/t/lib/TestAPRlib/string.pm b/t/lib/TestAPRlib/string.pm
index 290fae5..9185e3b 100644
--- a/t/lib/TestAPRlib/string.pm
+++ b/t/lib/TestAPRlib/string.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::string;
 
 use strict;
diff --git a/t/lib/TestAPRlib/table.pm b/t/lib/TestAPRlib/table.pm
index 1e1e2a2..3310674 100644
--- a/t/lib/TestAPRlib/table.pm
+++ b/t/lib/TestAPRlib/table.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::table;
 
 # testing APR::Table API
diff --git a/t/lib/TestAPRlib/threadmutex.pm b/t/lib/TestAPRlib/threadmutex.pm
index 62c7dd4..c632a21 100644
--- a/t/lib/TestAPRlib/threadmutex.pm
+++ b/t/lib/TestAPRlib/threadmutex.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::threadmutex;
 
 use strict;
diff --git a/t/lib/TestAPRlib/threadrwlock.pm b/t/lib/TestAPRlib/threadrwlock.pm
index 7785e56..df07afb 100644
--- a/t/lib/TestAPRlib/threadrwlock.pm
+++ b/t/lib/TestAPRlib/threadrwlock.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::threadrwlock;
 
 use strict;
diff --git a/t/lib/TestAPRlib/uri.pm b/t/lib/TestAPRlib/uri.pm
index 78aacf5..a68ad77 100644
--- a/t/lib/TestAPRlib/uri.pm
+++ b/t/lib/TestAPRlib/uri.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::uri;
 
 # Testing APR::URI (more tests in TestAPI::uri)
diff --git a/t/lib/TestAPRlib/util.pm b/t/lib/TestAPRlib/util.pm
index e5b4c7e..cd5f761 100644
--- a/t/lib/TestAPRlib/util.pm
+++ b/t/lib/TestAPRlib/util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::util;
 
 # test APR::Util
diff --git a/t/lib/TestAPRlib/uuid.pm b/t/lib/TestAPRlib/uuid.pm
index f0325b0..8942c79 100644
--- a/t/lib/TestAPRlib/uuid.pm
+++ b/t/lib/TestAPRlib/uuid.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPRlib::uuid;
 
 use strict;
diff --git a/t/lib/TestCommon/FilterDebug.pm b/t/lib/TestCommon/FilterDebug.pm
index 9856b51..8836f15 100644
--- a/t/lib/TestCommon/FilterDebug.pm
+++ b/t/lib/TestCommon/FilterDebug.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::FilterDebug;
 
 use strict;
diff --git a/t/lib/TestCommon/Handlers.pm b/t/lib/TestCommon/Handlers.pm
index 658e2fb..de7bf33 100644
--- a/t/lib/TestCommon/Handlers.pm
+++ b/t/lib/TestCommon/Handlers.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::Handlers;
 
 use strict;
diff --git a/t/lib/TestCommon/LogDiff.pm b/t/lib/TestCommon/LogDiff.pm
index 6c3e5da..36b8314 100644
--- a/t/lib/TestCommon/LogDiff.pm
+++ b/t/lib/TestCommon/LogDiff.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::LogDiff;
 
 use strict;
diff --git a/t/lib/TestCommon/MemoryLeak.pm b/t/lib/TestCommon/MemoryLeak.pm
index c12bf80..c007005 100644
--- a/t/lib/TestCommon/MemoryLeak.pm
+++ b/t/lib/TestCommon/MemoryLeak.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::MemoryLeak;
 
 # handy functions to measure memory leaks. since it measures the total
diff --git a/t/lib/TestCommon/SameInterp.pm b/t/lib/TestCommon/SameInterp.pm
index d6781b5..ad7a01d 100644
--- a/t/lib/TestCommon/SameInterp.pm
+++ b/t/lib/TestCommon/SameInterp.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::SameInterp;
 
 use Apache::Test;
diff --git a/t/lib/TestCommon/TiePerlSection.pm b/t/lib/TestCommon/TiePerlSection.pm
index 27c94ab..e7c0780 100644
--- a/t/lib/TestCommon/TiePerlSection.pm
+++ b/t/lib/TestCommon/TiePerlSection.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::TiePerlSection;
 
 use strict;
diff --git a/t/lib/TestCommon/Utils.pm b/t/lib/TestCommon/Utils.pm
index dba6421..672c439 100644
--- a/t/lib/TestCommon/Utils.pm
+++ b/t/lib/TestCommon/Utils.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCommon::Utils;
 
 use strict;
diff --git a/t/lib/TestExit/FromPerlModule.pm b/t/lib/TestExit/FromPerlModule.pm
index f609cb6..774c281 100644
--- a/t/lib/TestExit/FromPerlModule.pm
+++ b/t/lib/TestExit/FromPerlModule.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestExit::FromPerlModule;
 
 use strict;
diff --git a/t/modperl/cookie.t b/t/modperl/cookie.t
index a5a7646..13d275b 100644
--- a/t/modperl/cookie.t
+++ b/t/modperl/cookie.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/cookie2.t b/t/modperl/cookie2.t
index 37258e0..e49ae21 100644
--- a/t/modperl/cookie2.t
+++ b/t/modperl/cookie2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/exit.t b/t/modperl/exit.t
index 96470b5..b519d7a 100644
--- a/t/modperl/exit.t
+++ b/t/modperl/exit.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/getc.t b/t/modperl/getc.t
index 4cafd5f..62763f1 100644
--- a/t/modperl/getc.t
+++ b/t/modperl/getc.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/local_env.t b/t/modperl/local_env.t
index c5da3b5..7aeb728 100644
--- a/t/modperl/local_env.t
+++ b/t/modperl/local_env.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
@@ -5,6 +6,8 @@
 use Apache::TestUtil;
 use Apache::TestRequest;
 
+plan tests => 1, skip_reason('local %ENV is still broken');
+
 my $module = 'TestModperl::local_env';
 my $url    = Apache::TestRequest::module2url($module);
 
diff --git a/t/modperl/merge.t b/t/modperl/merge.t
index a8d673c..9e1a5cd 100644
--- a/t/modperl/merge.t
+++ b/t/modperl/merge.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/merge2.t b/t/modperl/merge2.t
index 5c7ca73..4b64e49 100644
--- a/t/modperl/merge2.t
+++ b/t/modperl/merge2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/merge3.t b/t/modperl/merge3.t
index c329c42..b208f37 100644
--- a/t/modperl/merge3.t
+++ b/t/modperl/merge3.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/perl_options.t b/t/modperl/perl_options.t
index 44c6e5d..9d99cb3 100644
--- a/t/modperl/perl_options.t
+++ b/t/modperl/perl_options.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/perl_options2.t b/t/modperl/perl_options2.t
index 53cd7b9..9223b30 100644
--- a/t/modperl/perl_options2.t
+++ b/t/modperl/perl_options2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/pnotes.t b/t/modperl/pnotes.t
index 0335ed4..3ef4b37 100644
--- a/t/modperl/pnotes.t
+++ b/t/modperl/pnotes.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/pnotes2.t b/t/modperl/pnotes2.t
index e5c09a1..87f752a 100644
--- a/t/modperl/pnotes2.t
+++ b/t/modperl/pnotes2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
@@ -25,8 +26,3 @@
         /pnotes are destroyed after cleanup passed/;
     } t_finish_error_log_watch), 1, $u;
 }
-
-# Local Variables: #
-# mode: cperl #
-# cperl-indent-level: 4 #
-# End: #
diff --git a/t/modperl/post_utf8.t b/t/modperl/post_utf8.t
index 62ddb2d..83e6b28 100644
--- a/t/modperl/post_utf8.t
+++ b/t/modperl/post_utf8.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/print_utf8.t b/t/modperl/print_utf8.t
index dace6be..d29d543 100644
--- a/t/modperl/print_utf8.t
+++ b/t/modperl/print_utf8.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/print_utf8_2.t b/t/modperl/print_utf8_2.t
index 1684a42..9a12dd2 100644
--- a/t/modperl/print_utf8_2.t
+++ b/t/modperl/print_utf8_2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/readline.t b/t/modperl/readline.t
index 25e3a8b..11b4cb7 100644
--- a/t/modperl/readline.t
+++ b/t/modperl/readline.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/request_rec_perlio_api.t b/t/modperl/request_rec_perlio_api.t
index e847692..2801ddc 100644
--- a/t/modperl/request_rec_perlio_api.t
+++ b/t/modperl/request_rec_perlio_api.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
@@ -16,7 +17,7 @@
 {
     my $content  = join "", 'a'..'j', 'k'..'t';
     my $location = "$uri?STDIN";
-    my $expected = join "", 'a'..'j', "package", 'k'..'t';
+    my $expected = join "", 'a'..'j', "# please", 'k'..'t';
     my $received = POST_BODY_ASSERT $location, content => $content;
     ok t_cmp($received, $expected, "STDIN tests");
 }
diff --git a/t/modperl/setupenv.t b/t/modperl/setupenv.t
index 4dd9fab..a4611f6 100644
--- a/t/modperl/setupenv.t
+++ b/t/modperl/setupenv.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/setupenv2.t b/t/modperl/setupenv2.t
index 877da97..f8752b0 100644
--- a/t/modperl/setupenv2.t
+++ b/t/modperl/setupenv2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modperl/status.t b/t/modperl/status.t
index 2161da4..9cb8aba 100644
--- a/t/modperl/status.t
+++ b/t/modperl/status.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/apache_resource.t b/t/modules/apache_resource.t
index 3c10fdb..316365d 100644
--- a/t/modules/apache_resource.t
+++ b/t/modules/apache_resource.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/apache_status.t b/t/modules/apache_status.t
index a6225f4..5d07703 100644
--- a/t/modules/apache_status.t
+++ b/t/modules/apache_status.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgi.t b/t/modules/cgi.t
index 5d8f0b5..0445d8e 100644
--- a/t/modules/cgi.t
+++ b/t/modules/cgi.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgi2.t b/t/modules/cgi2.t
index 975be6d..491ee03 100644
--- a/t/modules/cgi2.t
+++ b/t/modules/cgi2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgipost.t b/t/modules/cgipost.t
index a7dfcc8..0cd94f2 100644
--- a/t/modules/cgipost.t
+++ b/t/modules/cgipost.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgipost2.t b/t/modules/cgipost2.t
index 26978ae..8c062f6 100644
--- a/t/modules/cgipost2.t
+++ b/t/modules/cgipost2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgiupload.t b/t/modules/cgiupload.t
index 65359c3..b0a961f 100644
--- a/t/modules/cgiupload.t
+++ b/t/modules/cgiupload.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/cgiupload2.t b/t/modules/cgiupload2.t
index f882560..b298419 100644
--- a/t/modules/cgiupload2.t
+++ b/t/modules/cgiupload2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/include.t b/t/modules/include.t
index dd3785c..a2c54b3 100644
--- a/t/modules/include.t
+++ b/t/modules/include.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/include2.t b/t/modules/include2.t
index 9f1feb1..80d51dd 100644
--- a/t/modules/include2.t
+++ b/t/modules/include2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/include_subreq.t b/t/modules/include_subreq.t
index b17e3c7..8295292 100644
--- a/t/modules/include_subreq.t
+++ b/t/modules/include_subreq.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/modules/proxy.t b/t/modules/proxy.t
index e46635b..7d82a55 100644
--- a/t/modules/proxy.t
+++ b/t/modules/proxy.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/perl/hash_attack.t b/t/perl/hash_attack.t
index 8839561..bb91ef2 100644
--- a/t/perl/hash_attack.t
+++ b/t/perl/hash_attack.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/perl/ithreads.t b/t/perl/ithreads.t
index 827e663..53757a0 100644
--- a/t/perl/ithreads.t
+++ b/t/perl/ithreads.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # perl/ithreads2 is a similar test but is running from within a
 # virtual host with its own perl interpreter pool (+Parent)
 
diff --git a/t/perl/ithreads2.t b/t/perl/ithreads2.t
index 9475ecd..ec2718b 100644
--- a/t/perl/ithreads2.t
+++ b/t/perl/ithreads2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # perl/ithreads is a similar test but is running from the global perl
 # interpreter pool. whereas this test is running against a
 # virtual host with its own perl interpreter pool (+Parent)
diff --git a/t/perl/ithreads3.t b/t/perl/ithreads3.t
new file mode 100644
index 0000000..ef3feb5
--- /dev/null
+++ b/t/perl/ithreads3.t
@@ -0,0 +1,36 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestUtil;
+use Apache::TestRequest 'GET_BODY';
+
+plan tests => 6, need_apache_mpm('worker') && need_perl('ithreads');
+
+my $module = 'TestPerl::ithreads3';
+
+sub u {Apache::TestRequest::module2url($module, {path=>$_[0]})}
+sub t {
+    my $rc;
+    eval {
+        local $SIG{ALRM}=sub {die "Timeout\n"};
+        alarm 2;
+        eval {
+            $rc=GET_BODY u(shift);
+        };
+        alarm 0;
+    };
+    alarm 0;
+    return $rc;
+}
+
+t_debug("connecting to ".u(''));
+ok t_cmp t('/perl-script?1'), 2, 'perl-script 1';
+ok t_cmp t('/modperl?1'), 2, 'modperl 1';
+
+ok t_cmp t('/perl-script?2'), 5, 'perl-script 2';
+ok t_cmp t('/modperl?2'), 5, 'modperl 2';
+
+ok t_cmp t('/perl-script?3'), 3, 'perl-script 3';
+ok t_cmp t('/modperl?3'), 3, 'modperl 3';
diff --git a/t/preconnection/TestPreConnection/note.pm b/t/preconnection/TestPreConnection/note.pm
index 4d770b2..f485952 100644
--- a/t/preconnection/TestPreConnection/note.pm
+++ b/t/preconnection/TestPreConnection/note.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPreConnection::note;
 
 use strict;
@@ -6,13 +7,16 @@
 use Apache2::Connection ();
 
 use Apache::TestTrace;
+use Apache::Test;
+use Apache::TestUtil;
 
 use Apache2::Const -compile => qw(OK);
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 sub handler {
     my Apache2::Connection $c = shift;
 
-    my $ip = $c->remote_ip;
+    my $ip = APACHE24 ? $c->client_ip : $c->remote_ip;
 
     debug "ip: $ip";
 
diff --git a/t/preconnection/note.t b/t/preconnection/note.t
index 2623038..29453db 100644
--- a/t/preconnection/note.t
+++ b/t/preconnection/note.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/TestProtocol/echo_bbs.pm b/t/protocol/TestProtocol/echo_bbs.pm
index cc2459b..1951b0e 100644
--- a/t/protocol/TestProtocol/echo_bbs.pm
+++ b/t/protocol/TestProtocol/echo_bbs.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_bbs;
 
 # this test is similar to TestProtocol::echo_filter, but performs the
diff --git a/t/protocol/TestProtocol/echo_bbs2.pm b/t/protocol/TestProtocol/echo_bbs2.pm
index c328a32..dacf27f 100644
--- a/t/protocol/TestProtocol/echo_bbs2.pm
+++ b/t/protocol/TestProtocol/echo_bbs2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_bbs2;
 
 # similar to TestProtocol::echo_bbs but here re-using one bucket
diff --git a/t/protocol/TestProtocol/echo_block.pm b/t/protocol/TestProtocol/echo_block.pm
index bf74c17..e13f93d 100644
--- a/t/protocol/TestProtocol/echo_block.pm
+++ b/t/protocol/TestProtocol/echo_block.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_block;
 
 # this test reads from/writes to the socket doing blocking IO
diff --git a/t/protocol/TestProtocol/echo_filter.pm b/t/protocol/TestProtocol/echo_filter.pm
index 0e43727..91d19f6 100644
--- a/t/protocol/TestProtocol/echo_filter.pm
+++ b/t/protocol/TestProtocol/echo_filter.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_filter;
 
 # see also TestFilter::both_str_con_add
diff --git a/t/protocol/TestProtocol/echo_nonblock.pm b/t/protocol/TestProtocol/echo_nonblock.pm
index f9340a8..d99d576 100644
--- a/t/protocol/TestProtocol/echo_nonblock.pm
+++ b/t/protocol/TestProtocol/echo_nonblock.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_nonblock;
 
 # this test reads from/writes to the socket doing nonblocking IO
diff --git a/t/protocol/TestProtocol/echo_timeout.pm b/t/protocol/TestProtocol/echo_timeout.pm
index b44ba80..50c81fa 100644
--- a/t/protocol/TestProtocol/echo_timeout.pm
+++ b/t/protocol/TestProtocol/echo_timeout.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::echo_timeout;
 
 # this test reads from/writes to the socket doing nonblocking IO but
diff --git a/t/protocol/TestProtocol/eliza.pm b/t/protocol/TestProtocol/eliza.pm
index 9200730..3e1bdac 100644
--- a/t/protocol/TestProtocol/eliza.pm
+++ b/t/protocol/TestProtocol/eliza.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::eliza;
 
 use strict;
diff --git a/t/protocol/TestProtocol/pseudo_http.pm b/t/protocol/TestProtocol/pseudo_http.pm
index bb49ec8..63f6dec 100644
--- a/t/protocol/TestProtocol/pseudo_http.pm
+++ b/t/protocol/TestProtocol/pseudo_http.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestProtocol::pseudo_http;
 
 # this is a more advanced protocol implementation. While using a
diff --git a/t/protocol/echo_bbs.t b/t/protocol/echo_bbs.t
index fb082a1..a5080cf 100644
--- a/t/protocol/echo_bbs.t
+++ b/t/protocol/echo_bbs.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/echo_bbs2.t b/t/protocol/echo_bbs2.t
index 2e76e5a..1dd3329 100644
--- a/t/protocol/echo_bbs2.t
+++ b/t/protocol/echo_bbs2.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/echo_block.t b/t/protocol/echo_block.t
index 07a8e7c..30715b5 100644
--- a/t/protocol/echo_block.t
+++ b/t/protocol/echo_block.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/echo_filter.t b/t/protocol/echo_filter.t
index 519e381..b311af1 100644
--- a/t/protocol/echo_filter.t
+++ b/t/protocol/echo_filter.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/echo_nonblock.t b/t/protocol/echo_nonblock.t
index a987bf6..0de4da8 100644
--- a/t/protocol/echo_nonblock.t
+++ b/t/protocol/echo_nonblock.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/echo_timeout.t b/t/protocol/echo_timeout.t
index d3de53b..261b448 100644
--- a/t/protocol/echo_timeout.t
+++ b/t/protocol/echo_timeout.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
@@ -16,5 +17,5 @@
 for (@test_strings) {
     print $socket "$_\n";
     chomp(my $reply = <$socket>||'');
-    ok t_cmp($_, $reply);
+    ok t_cmp($reply, $_);
 }
diff --git a/t/protocol/eliza.t b/t/protocol/eliza.t
index d4e5b66..0df216f 100644
--- a/t/protocol/eliza.t
+++ b/t/protocol/eliza.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/protocol/pseudo_http.t b/t/protocol/pseudo_http.t
index 6911b53..80b7e73 100644
--- a/t/protocol/pseudo_http.t
+++ b/t/protocol/pseudo_http.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/response/TestAPI/access.pm b/t/response/TestAPI/access.pm
index 44f46a2..82b1a03 100644
--- a/t/response/TestAPI/access.pm
+++ b/t/response/TestAPI/access.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::access;
 
 use strict;
diff --git a/t/response/TestAPI/access2.pm b/t/response/TestAPI/access2.pm
index a31df44..b3d43c3 100644
--- a/t/response/TestAPI/access2.pm
+++ b/t/response/TestAPI/access2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::access2;
 
 # testing $r->requires
@@ -44,8 +45,9 @@
 
 sub handler {
     my $r = shift;
-
+	print 'xxxxx\n';
     die '$r->some_auth_required failed' unless $r->some_auth_required;
+	
 
     my $satisfies = $r->satisfies;
     die "wanted satisfies=" . Apache2::Const::SATISFY_ALL . ", got $satisfies"
@@ -90,7 +92,10 @@
 
 1;
 __DATA__
+
 <NoAutoConfig>
+<IfModule mod_version.c>
+<IfVersion < 2.3.0>
 <Location /TestAPI__access2>
     PerlAuthenHandler TestAPI::access2
     PerlResponseHandler Apache::TestHandler::ok1
@@ -117,4 +122,6 @@
         AuthGroupFile @DocumentRoot@/api/auth-groups
     </IfModule>
 </Location>
+</IfVersion>
+</IfModule>
 </NoAutoConfig>
diff --git a/t/response/TestAPI/access2_24.pm b/t/response/TestAPI/access2_24.pm
new file mode 100644
index 0000000..ed855cc
--- /dev/null
+++ b/t/response/TestAPI/access2_24.pm
@@ -0,0 +1,130 @@
+package TestAPI::access2_24;
+
+# testing $r->requires
+# in the POST test it returns:
+#
+#  [
+#    {
+#      'method_mask' => -1,
+#      'requirement' => 'user goo bar'
+#    },
+#    {
+#      'method_mask' => -1,
+#      'requirement' => 'group bar tar'
+#    }
+#    {
+#      'method_mask' => 4,
+#      'requirement' => 'valid-user'
+#    }
+#  ];
+#
+# otherwise it returns the same, sans the 'valid-user' entry
+#
+# also test:
+# - $r->some_auth_required when it's required
+# - $r->satisfies when Satisfy is set
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache2::Access ();
+use Apache2::RequestRec ();
+
+use Apache::TestTrace;
+
+use Apache2::Const -compile => qw(OK HTTP_UNAUTHORIZED SERVER_ERROR
+                                  AUTHZ_GRANTED AUTHZ_DENIED M_POST :satisfy
+                                  AUTHZ_DENIED_NO_USER);
+
+my $users  = "goo bar";
+my $groups = "xar tar";
+my %users = (
+    goo => "goopass",
+    bar => "barpass",
+);
+
+sub authz_handler {
+    my $self = shift;
+    my $r = shift;
+    my $requires = shift;
+
+    if (!$r->user) {
+        return Apache2::Const::AUTHZ_DENIED_NO_USER;
+    }
+
+    return Apache2::Const::SERVER_ERROR unless
+        $requires eq $users or $requires eq $groups;
+
+    my @require_args = split(/\s+/, $requires);
+    if (grep {$_ eq $r->user} @require_args) {
+        return Apache2::Const::AUTHZ_GRANTED;
+    }
+
+    return Apache2::Const::AUTHZ_DENIED;
+}
+
+sub authn_handler {
+    my $self = shift;
+    my $r = shift;
+
+    die '$r->some_auth_required failed' unless $r->some_auth_required;
+
+    my $satisfies = $r->satisfies;
+    die "wanted satisfies=" . Apache2::Const::SATISFY_ALL . ", got $satisfies"
+        unless $r->satisfies() == Apache2::Const::SATISFY_ALL;
+
+    my ($rc, $sent_pw) = $r->get_basic_auth_pw;
+    return $rc if $rc != Apache2::Const::OK;
+
+    if ($r->method_number == Apache2::Const::M_POST) {
+        return Apache2::Const::OK;
+    }
+
+    my $user = $r->user;
+    my $pass = $users{$user} || '';
+    unless (defined $pass and $sent_pw eq $pass) {
+        $r->note_basic_auth_failure;
+        return Apache2::Const::HTTP_UNAUTHORIZED;
+    }
+
+    Apache2::Const::OK;
+}
+
+1;
+__DATA__
+
+<NoAutoConfig>
+<IfModule mod_version.c>
+<IfVersion > 2.4.1>
+
+PerlAddAuthzProvider my-user TestAPI::access2_24->authz_handler
+PerlAddAuthzProvider my-group TestAPI::access2_24->authz_handler
+<Location /TestAPI__access2>
+    PerlAuthenHandler TestAPI::access2_24->authn_handler
+    PerlResponseHandler Apache::TestHandler::ok1
+    SetHandler modperl
+
+    <IfModule @ACCESS_MODULE@>
+        # needed to test $r->satisfies
+        Allow from All
+    </IfModule>
+    AuthType Basic
+    AuthName "Access"
+    Require my-user goo bar
+    Require my-group xar tar
+    <Limit POST>
+       Require valid-user
+    </Limit>
+    Satisfy All
+    <IfModule @AUTH_MODULE@>
+        # htpasswd -mbc auth-users goo foo
+        # htpasswd -mb auth-users bar mar
+        # using md5 password so it'll work on win32 too
+        AuthUserFile @DocumentRoot@/api/auth-users
+        # group: user1 user2 ...
+        AuthGroupFile @DocumentRoot@/api/auth-groups
+    </IfModule>
+</Location>
+</IfVersion>
+</IfModule>
+</NoAutoConfig>
diff --git a/t/response/TestAPI/add_config.pm b/t/response/TestAPI/add_config.pm
index f02a717..661608c 100644
--- a/t/response/TestAPI/add_config.pm
+++ b/t/response/TestAPI/add_config.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::add_config;
 
 use strict;
@@ -21,6 +22,7 @@
 
 use constant KEY        => "TestAddConfig";
 use constant APACHE22   => have_min_apache_version('2.2.0');
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 my @directives = (
     {
@@ -53,10 +55,13 @@
     };
     $r->pnotes(add_config2 => "$@");
 
-    eval {
-        $r->add_config(['AllowOverride Options=FollowSymLinks'], -1);
-    };
-    $r->pnotes(followsymlinks => "$@");
+    # We can set AllowOverride only from .htacces in 2.4.0+
+    if (!APACHE24) {
+        eval {
+            $r->add_config(['AllowOverride Options=FollowSymLinks'], -1);
+        };
+        $r->pnotes(followsymlinks => "$@");
+    }
 
     eval {
         my $path="/a/path/to/somewhere";
@@ -96,7 +101,12 @@
     ok t_cmp $r->pnotes('add_config2'), (APACHE22 ? qr/.+\n/ : '');
     ok t_cmp $r->pnotes('add_config3'), '';
     ok t_cmp $r->pnotes('add_config4'), qr/after server startup/;
-    ok t_cmp $r->pnotes('followsymlinks'), (APACHE22 ? '': qr/.*\n/);
+    if (!APACHE24) {
+        ok t_cmp $r->pnotes('followsymlinks'), (APACHE22 ? '': qr/.*\n/);
+    }
+    else {
+        ok 1;
+    }
 
     my $expect =  Apache2::Const::OPT_ALL |
                   Apache2::Const::OPT_UNSET |
@@ -109,7 +119,12 @@
     ok t_cmp $r->allow_options, Apache2::Const::OPT_EXECCGI;
 
     my $opts = APACHE22 ? Apache2::Const::OPT_SYM_LINKS : $expect;
-    ok t_cmp $r->allow_override_opts, $opts;
+    if (!APACHE24) {
+        ok t_cmp $r->allow_override_opts, $opts;
+    }
+    else {
+        ok 1;
+    }
 
     ok t_cmp $r->location, '/a/path/to/somewhere';
 
diff --git a/t/response/TestAPI/aplog.pm b/t/response/TestAPI/aplog.pm
index f2a4e19..122c8a4 100644
--- a/t/response/TestAPI/aplog.pm
+++ b/t/response/TestAPI/aplog.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::aplog;
 
 use strict;
@@ -17,6 +18,7 @@
 
 use Apache2::Const -compile => qw(OK :log);
 use APR::Const    -compile => qw(:error SUCCESS);
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 my @LogLevels = qw(emerg alert crit error warn notice info debug);
 my $package = __PACKAGE__;
@@ -59,6 +61,11 @@
 
     # log_serror
     {
+        my $orig_log_level = 0;
+        if (APACHE24) {
+            $orig_log_level = $s->loglevel;
+            $s->loglevel(Apache2::Const::LOG_DEBUG);
+        }
         t_server_log_warn_is_expected();
         $s->log_serror(Apache2::Log::LOG_MARK,
                        Apache2::Const::LOG_INFO|Apache2::Const::LOG_STARTUP,
@@ -85,6 +92,9 @@
         ok t_cmp $logdiff->diff,
             qr/$egeneral: log_serror test 2/,
             '$s->log_serror(LOG_MARK, LOG_DEBUG, APR::Const::EGENERAL...)';
+        if (APACHE24) {
+            $s->loglevel($orig_log_level);
+        }
     }
 
     # log_rerror
@@ -92,38 +102,73 @@
     $r->log_rerror(Apache2::Log::LOG_MARK, Apache2::Const::LOG_CRIT,
                    APR::Const::ENOTIME, "log_rerror test");
     # can't match against the error string, since a locale may kick in
-    ok t_cmp $logdiff->diff,
-        qr/\[crit\] .*?: log_rerror test/,
-        '$r->log_rerror(LOG_MARK, LOG_CRIT, APR::Const::ENOTIME...)';
+    if (APACHE24) {
+        ok t_cmp $logdiff->diff,
+            qr/\[\w*:crit\] \[pid[^]]+\] .*?: \[[^]]+\] log_rerror test/,
+            '$r->log_rerror(LOG_MARK, LOG_CRIT, APR::Const::ENOTIME...)';
+    }
+    else {
+        ok t_cmp $logdiff->diff,
+            qr/\[crit\] .*?: log_rerror test/,
+            '$r->log_rerror(LOG_MARK, LOG_CRIT, APR::Const::ENOTIME...)';
+    }
 
     # log_error
     {
         t_server_log_error_is_expected();
         $r->log_error('$r->log_error test');
-        ok t_cmp $logdiff->diff,
-            qr/\[error\] \$r->log_error test/,
-            '$r->log_error(...)';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:error\] \[pid[^]]+\] \$r->log_error test/,
+                '$r->log_error(...)';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[error\] \$r->log_error test/,
+                '$r->log_error(...)';
+        }
 
         t_server_log_error_is_expected();
         $s->log_error('$s->log_error test');
-        ok t_cmp $logdiff->diff,
-            qr/\[error\] \$s->log_error test/,
-            '$s->log_error(...)';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:error\] \[pid[^]]+\] \$s->log_error test/,
+                '$s->log_error(...)';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[error\] \$s->log_error test/,
+                '$s->log_error(...)';
+        }
     }
 
     # log_reason
     {
         t_server_log_error_is_expected();
         $r->log_reason('$r->log_reason test');
-        ok t_cmp $logdiff->diff,
-            qr/\[error\] access to.*failed.*reason: \$r->log_reason test/,
-            '$r->log_reason(msg)';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:error\] \[pid[^]]+\] access to.*failed.*reason: \$r->log_reason test/,
+                '$r->log_reason(msg)';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[error\] access to.*failed.*reason: \$r->log_reason test/,
+                '$r->log_reason(msg)';
+        }
 
         t_server_log_error_is_expected();
         $r->log_reason('$r->log_reason filename test','filename');
-        ok t_cmp $logdiff->diff,
-            qr/\[error\] access to filename failed.*\$r->log_reason filename test/,
-            '$r->log_reason(msg, filename)';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:error\] \[pid[^]]+\] access to filename failed.*\$r->log_reason filename test/,
+                '$r->log_reason(msg, filename)';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[error\] access to filename failed.*\$r->log_reason filename test/,
+                '$r->log_reason(msg, filename)';
+        }
     }
 
     # XXX: at the moment we can't change loglevel after server startup
@@ -176,32 +221,60 @@
 
     t_server_log_warn_is_expected();
     $s->warn('$s->warn test');
-    ok t_cmp $logdiff->diff,
-        qr/\[warn\] \$s->warn test/,
-        '$s->warn()';
+    if (APACHE24) {
+        ok t_cmp $logdiff->diff,
+            qr/\[\w*:warn\] \[pid[^]]+\] \$s->warn test/,
+            '$s->warn()';
+    }
+    else {
+        ok t_cmp $logdiff->diff,
+            qr/\[warn\] \$s->warn test/,
+            '$s->warn()';
+    }
 
     {
         t_server_log_warn_is_expected();
         # this uses global server to get $s internally
         Apache2::ServerRec::warn("Apache2::ServerRec::warn test");
-        ok t_cmp $logdiff->diff,
-            qr/\[warn\] Apache2::ServerRec::warn test/,
-            'Apache2::ServerRec::warn() w/o Apache2::RequestUtil->request ';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/,
+                'Apache2::ServerRec::warn() w/o Apache2::RequestUtil->request ';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[warn\] Apache2::ServerRec::warn test/,
+                'Apache2::ServerRec::warn() w/o Apache2::RequestUtil->request ';
+        }
 
         Apache2::RequestUtil->request($r);
         t_server_log_warn_is_expected();
         # this uses the global $r to get $s internally
         Apache2::ServerRec::warn("Apache2::ServerRec::warn test");
-        ok t_cmp $logdiff->diff,
-            qr/\[warn\] Apache2::ServerRec::warn test/,
-            'Apache2::ServerRec::warn() w/ Apache2::RequestUtil->request ';
+        if (APACHE24) {
+            ok t_cmp $logdiff->diff,
+                qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/,
+                'Apache2::ServerRec::warn() w/ Apache2::RequestUtil->request ';
+        }
+        else {
+            ok t_cmp $logdiff->diff,
+                qr/\[warn\] Apache2::ServerRec::warn test/,
+                'Apache2::ServerRec::warn() w/ Apache2::RequestUtil->request ';
+        }
     }
 
     t_server_log_warn_is_expected();
     warn "warn test";
-    ok t_cmp $logdiff->diff,
-        qr/\[warn\] warn test/,
-        'overriden via export warn()';
+    if (APACHE24) {
+        ok t_cmp $logdiff->diff,
+            qr/\[\w*:warn\] \[pid[^]]+\] warn test/,
+            'overriden via export warn()';
+    }
+    else {
+        ok t_cmp $logdiff->diff,
+            qr/\[warn\] warn test/,
+            'overriden via export warn()';
+    }
 
     Apache2::Const::OK;
 }
diff --git a/t/response/TestAPI/command.pm b/t/response/TestAPI/command.pm
index ecef6f3..db32ea1 100644
--- a/t/response/TestAPI/command.pm
+++ b/t/response/TestAPI/command.pm
@@ -1,4 +1,4 @@
-
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::command;
 
 use strict;
diff --git a/t/response/TestAPI/conn_rec.pm b/t/response/TestAPI/conn_rec.pm
index 991146a..a561629 100644
--- a/t/response/TestAPI/conn_rec.pm
+++ b/t/response/TestAPI/conn_rec.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::conn_rec;
 
 # this test module is only for testing fields in the conn_rec listed
@@ -15,6 +16,8 @@
 
 use Apache2::Const -compile => qw(OK CONN_CLOSE);
 
+use constant APACHE24   => have_min_apache_version('2.4.0');
+
 sub handler {
     my $r = shift;
 
@@ -32,20 +35,39 @@
 
     ok $c->local_addr->isa('APR::SockAddr');
 
-    ok $c->remote_addr->isa('APR::SockAddr');
+    if (APACHE24) {
+        ok $c->client_addr->isa('APR::SockAddr');
 
-    # remote_ip
-    {
-        my $remote_ip_org = $c->remote_ip;
-        my $remote_ip_new = "10.10.10.255";
-        ok $remote_ip_org;
+        # client_ip
+        {
+            my $client_ip_org = $c->client_ip;
+            my $client_ip_new = "10.10.10.255";
+            ok $client_ip_org;
 
-        $c->remote_ip($remote_ip_new);
-        ok t_cmp $c->remote_ip, $remote_ip_new;
+            $c->client_ip($client_ip_new);
+            ok t_cmp $c->client_ip, $client_ip_new;
 
-        # restore
-        $c->remote_ip($remote_ip_org);
-        ok t_cmp $c->remote_ip, $remote_ip_org;
+            # restore
+            $c->client_ip($client_ip_org);
+            ok t_cmp $c->client_ip, $client_ip_org;
+        }
+    }
+    else {
+        ok $c->remote_addr->isa('APR::SockAddr');
+        # remote_ip
+        {
+            my $remote_ip_org = $c->remote_ip;
+            my $remote_ip_new = "10.10.10.255";
+            ok $remote_ip_org;
+ 
+            $c->remote_ip($remote_ip_new);
+            ok t_cmp $c->remote_ip, $remote_ip_new;
+
+ 
+            # restore
+            $c->remote_ip($remote_ip_org);
+            ok t_cmp $c->remote_ip, $remote_ip_org;
+        }
     }
 
     ok $c->remote_host || 1;
diff --git a/t/response/TestAPI/conn_util.pm b/t/response/TestAPI/conn_util.pm
index 6bc75aa..b3e167f 100644
--- a/t/response/TestAPI/conn_util.pm
+++ b/t/response/TestAPI/conn_util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::conn_util;
 
 use strict;
diff --git a/t/response/TestAPI/content_encoding.pm b/t/response/TestAPI/content_encoding.pm
index 4efb9b4..a405000 100644
--- a/t/response/TestAPI/content_encoding.pm
+++ b/t/response/TestAPI/content_encoding.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::content_encoding;
 
 # tests: $r->content_encoding("gzip");
diff --git a/t/response/TestAPI/custom_response.pm b/t/response/TestAPI/custom_response.pm
index 05f4345..b7dc429 100644
--- a/t/response/TestAPI/custom_response.pm
+++ b/t/response/TestAPI/custom_response.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::custom_response;
 
 # custom_response() doesn't alter the response code, but is used to
diff --git a/t/response/TestAPI/err_headers_out.pm b/t/response/TestAPI/err_headers_out.pm
index 8d92ed8..c8447ab 100644
--- a/t/response/TestAPI/err_headers_out.pm
+++ b/t/response/TestAPI/err_headers_out.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::err_headers_out;
 
 # tests: $r->err_headers_out
diff --git a/t/response/TestAPI/in_out_filters.pm b/t/response/TestAPI/in_out_filters.pm
index 039fb58..1bb03a2 100644
--- a/t/response/TestAPI/in_out_filters.pm
+++ b/t/response/TestAPI/in_out_filters.pm
@@ -1,4 +1,4 @@
-
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::in_out_filters;
 
 # testing: $r->input_filters and $r->output_filters
diff --git a/t/response/TestAPI/internal_redirect.pm b/t/response/TestAPI/internal_redirect.pm
index 4ac1d67..1918f3b 100644
--- a/t/response/TestAPI/internal_redirect.pm
+++ b/t/response/TestAPI/internal_redirect.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::internal_redirect;
 
 use strict;
diff --git a/t/response/TestAPI/internal_redirect_handler.pm b/t/response/TestAPI/internal_redirect_handler.pm
index ec6bfe5..8bab332 100644
--- a/t/response/TestAPI/internal_redirect_handler.pm
+++ b/t/response/TestAPI/internal_redirect_handler.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::internal_redirect_handler;
 
 # $r->internal_redirect_handler() is the same as
diff --git a/t/response/TestAPI/lookup_misc.pm b/t/response/TestAPI/lookup_misc.pm
index 45d55f9..57d39d3 100644
--- a/t/response/TestAPI/lookup_misc.pm
+++ b/t/response/TestAPI/lookup_misc.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::lookup_misc;
 
 # testing misc lookup_ methods. TestAPI::lookup_uri includes the tests
diff --git a/t/response/TestAPI/lookup_uri.pm b/t/response/TestAPI/lookup_uri.pm
index a61023b..17fd9d2 100644
--- a/t/response/TestAPI/lookup_uri.pm
+++ b/t/response/TestAPI/lookup_uri.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::lookup_uri;
 
 # tests $r->lookup_uri and its work with filters
diff --git a/t/response/TestAPI/lookup_uri2.pm b/t/response/TestAPI/lookup_uri2.pm
index 31ab28d..c167210 100644
--- a/t/response/TestAPI/lookup_uri2.pm
+++ b/t/response/TestAPI/lookup_uri2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::lookup_uri2;
 
 use strict;
diff --git a/t/response/TestAPI/module.pm b/t/response/TestAPI/module.pm
index fc84428..4d0754f 100644
--- a/t/response/TestAPI/module.pm
+++ b/t/response/TestAPI/module.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::module;
 
 use strict;
diff --git a/t/response/TestAPI/process.pm b/t/response/TestAPI/process.pm
index 5f28b6d..c137646 100644
--- a/t/response/TestAPI/process.pm
+++ b/t/response/TestAPI/process.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::process;
 
 use strict;
diff --git a/t/response/TestAPI/query.pm b/t/response/TestAPI/query.pm
index 50d7324..78f1148 100644
--- a/t/response/TestAPI/query.pm
+++ b/t/response/TestAPI/query.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::query;
 
 use strict;
diff --git a/t/response/TestAPI/request_rec.pm b/t/response/TestAPI/request_rec.pm
index 23d1fae..7e61717 100644
--- a/t/response/TestAPI/request_rec.pm
+++ b/t/response/TestAPI/request_rec.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::request_rec;
 
 use strict;
diff --git a/t/response/TestAPI/request_subclass.pm b/t/response/TestAPI/request_subclass.pm
index 210a48b..1b76229 100644
--- a/t/response/TestAPI/request_subclass.pm
+++ b/t/response/TestAPI/request_subclass.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::request_subclass;
 
 use strict;
diff --git a/t/response/TestAPI/request_util.pm b/t/response/TestAPI/request_util.pm
index 39ba311..2af76fe 100644
--- a/t/response/TestAPI/request_util.pm
+++ b/t/response/TestAPI/request_util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::request_util;
 
 use strict;
@@ -24,7 +25,8 @@
 
     plan $r, tests => (scalar keys %status_lines) + 11;
 
-    ok $r->default_type;
+    # default_type() is gone as of httpd 2.3.2-dev
+    ok !defined(&Apache2::RequestRec::default_type) || $r->default_type;
 
     my $document_root = $r->document_root;
 
diff --git a/t/response/TestAPI/response.pm b/t/response/TestAPI/response.pm
index 7ec14b0..352ced7 100644
--- a/t/response/TestAPI/response.pm
+++ b/t/response/TestAPI/response.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::response;
 
 # testing Apache2::Response methods
diff --git a/t/response/TestAPI/rflush.pm b/t/response/TestAPI/rflush.pm
index 1478322..41df75d 100644
--- a/t/response/TestAPI/rflush.pm
+++ b/t/response/TestAPI/rflush.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::rflush;
 
 use strict;
diff --git a/t/response/TestAPI/sendfile.pm b/t/response/TestAPI/sendfile.pm
index 3fcd53a..17f445a 100644
--- a/t/response/TestAPI/sendfile.pm
+++ b/t/response/TestAPI/sendfile.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::sendfile;
 
 use strict;
diff --git a/t/response/TestAPI/server_const.pm b/t/response/TestAPI/server_const.pm
index d7b17ad..2e814ef 100644
--- a/t/response/TestAPI/server_const.pm
+++ b/t/response/TestAPI/server_const.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::server_const;
 
 use strict;
diff --git a/t/response/TestAPI/server_rec.pm b/t/response/TestAPI/server_rec.pm
index e297444..7cd37fb 100644
--- a/t/response/TestAPI/server_rec.pm
+++ b/t/response/TestAPI/server_rec.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::server_rec;
 
 # this test module is only for testing fields in the server_rec listed
diff --git a/t/response/TestAPI/server_util.pm b/t/response/TestAPI/server_util.pm
index 6b74ab4..e7d3a05 100644
--- a/t/response/TestAPI/server_util.pm
+++ b/t/response/TestAPI/server_util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::server_util;
 
 use strict;
diff --git a/t/response/TestAPI/show.pm b/t/response/TestAPI/show.pm
index 09dc529..aece5f0 100644
--- a/t/response/TestAPI/show.pm
+++ b/t/response/TestAPI/show.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::show;
 
 use strict;
diff --git a/t/response/TestAPI/slurp_filename.pm b/t/response/TestAPI/slurp_filename.pm
index 0a715a9..27bf236 100644
--- a/t/response/TestAPI/slurp_filename.pm
+++ b/t/response/TestAPI/slurp_filename.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::slurp_filename;
 
 # test slurp_filename()'s taintness options and that it works properly
diff --git a/t/response/TestAPI/status.pm b/t/response/TestAPI/status.pm
index 2760c31..b875a09 100644
--- a/t/response/TestAPI/status.pm
+++ b/t/response/TestAPI/status.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::status;
 
 # see the client for details
diff --git a/t/response/TestAPI/sub_request.pm b/t/response/TestAPI/sub_request.pm
index ffcb198..b5b55f0 100644
--- a/t/response/TestAPI/sub_request.pm
+++ b/t/response/TestAPI/sub_request.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::sub_request;
 
 # basic subrequest tests
diff --git a/t/response/TestAPI/uri.pm b/t/response/TestAPI/uri.pm
index b00f0fc..89f22bc 100644
--- a/t/response/TestAPI/uri.pm
+++ b/t/response/TestAPI/uri.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPI::uri;
 
 use strict;
diff --git a/t/response/TestAPR/base64.pm b/t/response/TestAPR/base64.pm
index 775cda8..9088fc0 100644
--- a/t/response/TestAPR/base64.pm
+++ b/t/response/TestAPR/base64.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::base64;
 
 use strict;
diff --git a/t/response/TestAPR/brigade.pm b/t/response/TestAPR/brigade.pm
index 4e687b2..167592a 100644
--- a/t/response/TestAPR/brigade.pm
+++ b/t/response/TestAPR/brigade.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::brigade;
 
 # testing APR::Brigade in this tests.
diff --git a/t/response/TestAPR/bucket.pm b/t/response/TestAPR/bucket.pm
index 1c7942d..6d85abf 100644
--- a/t/response/TestAPR/bucket.pm
+++ b/t/response/TestAPR/bucket.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::bucket;
 
 # a mix of APR::Brigade, APR::Bucket abd APR::BucketType tests
diff --git a/t/response/TestAPR/date.pm b/t/response/TestAPR/date.pm
index fa8d34e..d427fbe 100644
--- a/t/response/TestAPR/date.pm
+++ b/t/response/TestAPR/date.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::date;
 
 # testing APR::Date API
diff --git a/t/response/TestAPR/finfo.pm b/t/response/TestAPR/finfo.pm
index c56b735..318cfca 100644
--- a/t/response/TestAPR/finfo.pm
+++ b/t/response/TestAPR/finfo.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::finfo;
 
 use strict;
diff --git a/t/response/TestAPR/flatten.pm b/t/response/TestAPR/flatten.pm
index baa7023..2246959 100644
--- a/t/response/TestAPR/flatten.pm
+++ b/t/response/TestAPR/flatten.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::flatten;
 
 use strict;
diff --git a/t/response/TestAPR/ipsubnet.pm b/t/response/TestAPR/ipsubnet.pm
index 748bc4e..1aa3b2e 100644
--- a/t/response/TestAPR/ipsubnet.pm
+++ b/t/response/TestAPR/ipsubnet.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::ipsubnet;
 
 use strict;
@@ -13,6 +14,7 @@
 use APR::SockAddr ();
 
 use Apache2::Const -compile => 'OK';
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 sub handler {
     my $r = shift;
@@ -21,24 +23,30 @@
 
     plan $r, tests => 8;
 
-    my $ip = $c->remote_ip;
+    my $ip = APACHE24 ? $c->client_ip : $c->remote_ip;
 
     ok $ip;
 
-    ok t_cmp($c->remote_addr->ip_get, $ip,
-             "remote_ip eq remote_addr->ip_get");
+    if (APACHE24) {
+        ok t_cmp($c->client_addr->ip_get, $ip,
+                "client_ip eq client_addr->ip_get");
+    }
+    else {
+        ok t_cmp($c->remote_addr->ip_get, $ip,
+                "remote_ip eq remote_addr->ip_get");
+    }
 
     {
         my $ipsub = APR::IpSubnet->new($p, $ip);
 
-        ok $ipsub->test($c->remote_addr);
+        ok $ipsub->test(APACHE24 ? $c->client_addr : $c->remote_addr);
     }
 
     # use IP mask
     {
         my $ipsub = APR::IpSubnet->new($p, $ip, "255.0.0.0");
 
-        ok $ipsub->test($c->remote_addr);
+        ok $ipsub->test(APACHE24 ? $c->client_addr : $c->remote_addr);
     }
 
     # fail match
@@ -49,7 +57,7 @@
             (my $mismatch = $ip) =~ s/(?<=\.)(\d+)$/$1 == 255 ? $1-1 : $1+1/e;
             t_debug($mismatch);
             my $ipsub = APR::IpSubnet->new($p, $mismatch, $mismatch);
-            ok ! $ipsub->test($c->remote_addr);
+            ok ! $ipsub->test(APACHE24 ? $c->client_addr : $c->remote_addr);
         }
         else {
             # XXX: similar ipv6 trick?
@@ -77,7 +85,7 @@
         my $table = APR::Table::make(APR::Pool->new, 50);
         $table->set($_ => $_) for 'aa'..'za';
         # now test that we are still OK
-        ok $ipsub->test($c->remote_addr);
+        ok $ipsub->test(APACHE24 ? $c->client_addr : $c->remote_addr);
     }
 
     Apache2::Const::OK;
diff --git a/t/response/TestAPR/os.pm b/t/response/TestAPR/os.pm
index 04dcb80..0ecdafc 100644
--- a/t/response/TestAPR/os.pm
+++ b/t/response/TestAPR/os.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::os;
 
 use strict;
diff --git a/t/response/TestAPR/perlio.pm b/t/response/TestAPR/perlio.pm
index 59237fe..d2f4865 100644
--- a/t/response/TestAPR/perlio.pm
+++ b/t/response/TestAPR/perlio.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::perlio;
 
 # to see what happens inside the io layer, assuming that you built
diff --git a/t/response/TestAPR/pool.pm b/t/response/TestAPR/pool.pm
index f3b357d..1b04974 100644
--- a/t/response/TestAPR/pool.pm
+++ b/t/response/TestAPR/pool.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::pool;
 
 use strict;
diff --git a/t/response/TestAPR/pool_lifetime.pm b/t/response/TestAPR/pool_lifetime.pm
index 483db7c..8ac97ac 100644
--- a/t/response/TestAPR/pool_lifetime.pm
+++ b/t/response/TestAPR/pool_lifetime.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::pool_lifetime;
 
 # this test verifies that if the perl pool object exceeds the
diff --git a/t/response/TestAPR/sockaddr.pm b/t/response/TestAPR/sockaddr.pm
index 65344d6..0b45937 100644
--- a/t/response/TestAPR/sockaddr.pm
+++ b/t/response/TestAPR/sockaddr.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::sockaddr;
 
 # testing APR::SockAddr API
@@ -13,6 +14,7 @@
 use APR::SockAddr ();
 
 use Apache2::Const -compile => 'OK';
+use constant APACHE24   => have_min_apache_version('2.4.0');
 
 sub handler {
     my $r = shift;
@@ -21,10 +23,15 @@
     plan $r, tests => 4;
 
     my $local  = $c->local_addr;
-    my $remote = $c->remote_addr;
+    my $remote = APACHE24 ? $c->client_addr : $c->remote_addr;
 
     ok t_cmp($local->ip_get,  $c->local_ip,  "local ip");
-    ok t_cmp($remote->ip_get, $c->remote_ip, "remote ip");
+    if (APACHE24) {
+        ok t_cmp($remote->ip_get, $c->client_ip, "client ip");
+    }
+    else {
+        ok t_cmp($remote->ip_get, $c->remote_ip, "remote ip");
+    }
 
     $r->subprocess_env;
     ok t_cmp($local->port,  $ENV{SERVER_PORT}, "local port");
diff --git a/t/response/TestAPR/socket.pm b/t/response/TestAPR/socket.pm
index ef6f53a..abbc192 100644
--- a/t/response/TestAPR/socket.pm
+++ b/t/response/TestAPR/socket.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::socket;
 
 # more tests in t/protocol/TestProtocol/echo_*.pm
diff --git a/t/response/TestAPR/status.pm b/t/response/TestAPR/status.pm
index bb935ee..b38b7dd 100644
--- a/t/response/TestAPR/status.pm
+++ b/t/response/TestAPR/status.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::status;
 
 # Testing APR::Status
diff --git a/t/response/TestAPR/string.pm b/t/response/TestAPR/string.pm
index 0632bfa..61b41f6 100644
--- a/t/response/TestAPR/string.pm
+++ b/t/response/TestAPR/string.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::string;
 
 use strict;
diff --git a/t/response/TestAPR/table.pm b/t/response/TestAPR/table.pm
index 65f24ca..abe452c 100644
--- a/t/response/TestAPR/table.pm
+++ b/t/response/TestAPR/table.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::table;
 
 # testing APR::Table API
diff --git a/t/response/TestAPR/threadmutex.pm b/t/response/TestAPR/threadmutex.pm
index 863c64e..e1df238 100644
--- a/t/response/TestAPR/threadmutex.pm
+++ b/t/response/TestAPR/threadmutex.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::threadmutex;
 
 use strict;
diff --git a/t/response/TestAPR/threadrwlock.pm b/t/response/TestAPR/threadrwlock.pm
index f18254a..a6ff19f 100644
--- a/t/response/TestAPR/threadrwlock.pm
+++ b/t/response/TestAPR/threadrwlock.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::threadrwlock;
 
 use strict;
diff --git a/t/response/TestAPR/uri.pm b/t/response/TestAPR/uri.pm
index 2d55112..89b8471 100644
--- a/t/response/TestAPR/uri.pm
+++ b/t/response/TestAPR/uri.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::uri;
 
 # Testing APR::URI (more tests in TestAPI::uri)
diff --git a/t/response/TestAPR/util.pm b/t/response/TestAPR/util.pm
index 6c8608e..19ccfc7 100644
--- a/t/response/TestAPR/util.pm
+++ b/t/response/TestAPR/util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::util;
 
 # test APR::Util
diff --git a/t/response/TestAPR/uuid.pm b/t/response/TestAPR/uuid.pm
index 582a46e..97e81f3 100644
--- a/t/response/TestAPR/uuid.pm
+++ b/t/response/TestAPR/uuid.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestAPR::uuid;
 
 use strict;
diff --git a/t/response/TestApache/cgihandler.pm b/t/response/TestApache/cgihandler.pm
index 970819d..be4f2cc 100644
--- a/t/response/TestApache/cgihandler.pm
+++ b/t/response/TestApache/cgihandler.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::cgihandler;
 
 use strict;
diff --git a/t/response/TestApache/conftree.pm b/t/response/TestApache/conftree.pm
index 95cd3fe..af13a6e 100644
--- a/t/response/TestApache/conftree.pm
+++ b/t/response/TestApache/conftree.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::conftree;
 
 use strict;
diff --git a/t/response/TestApache/content_length_header.pm b/t/response/TestApache/content_length_header.pm
index 901edba..acdca06 100644
--- a/t/response/TestApache/content_length_header.pm
+++ b/t/response/TestApache/content_length_header.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::content_length_header;
 
 # see the client t/apache/content_length_header.t for the comments
diff --git a/t/response/TestApache/daemon.pm b/t/response/TestApache/daemon.pm
index a7622d1..c0ae342 100644
--- a/t/response/TestApache/daemon.pm
+++ b/t/response/TestApache/daemon.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::daemon;
 
 # Apache2::ServerUtil tests
diff --git a/t/response/TestApache/discard_rbody.pm b/t/response/TestApache/discard_rbody.pm
index 3a3d35d..27475e1 100644
--- a/t/response/TestApache/discard_rbody.pm
+++ b/t/response/TestApache/discard_rbody.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::discard_rbody;
 
 # test $r->discard_request_body when the input body wasn't read at
diff --git a/t/response/TestApache/post.pm b/t/response/TestApache/post.pm
index 8234458..40527eb 100644
--- a/t/response/TestApache/post.pm
+++ b/t/response/TestApache/post.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::post;
 
 use strict;
diff --git a/t/response/TestApache/read.pm b/t/response/TestApache/read.pm
index 4ad98fe..8b90c99 100644
--- a/t/response/TestApache/read.pm
+++ b/t/response/TestApache/read.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::read;
 
 use strict;
diff --git a/t/response/TestApache/read2.pm b/t/response/TestApache/read2.pm
index 8e67dc4..4307181 100644
--- a/t/response/TestApache/read2.pm
+++ b/t/response/TestApache/read2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::read2;
 
 # extra tests in addition to TestApache::read
diff --git a/t/response/TestApache/scanhdrs.pm b/t/response/TestApache/scanhdrs.pm
index d51775c..00e3050 100644
--- a/t/response/TestApache/scanhdrs.pm
+++ b/t/response/TestApache/scanhdrs.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::scanhdrs;
 
 use strict;
diff --git a/t/response/TestApache/scanhdrs2.pm b/t/response/TestApache/scanhdrs2.pm
index 458c433..7327941 100644
--- a/t/response/TestApache/scanhdrs2.pm
+++ b/t/response/TestApache/scanhdrs2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::scanhdrs2;
 
 use strict;
diff --git a/t/response/TestApache/send_cgi_header.pm b/t/response/TestApache/send_cgi_header.pm
index f9b0a59..9738038 100644
--- a/t/response/TestApache/send_cgi_header.pm
+++ b/t/response/TestApache/send_cgi_header.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::send_cgi_header;
 
 use strict;
diff --git a/t/response/TestApache/subprocess.pm b/t/response/TestApache/subprocess.pm
index 70e1dc8..c6bc3bb 100644
--- a/t/response/TestApache/subprocess.pm
+++ b/t/response/TestApache/subprocess.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::subprocess;
 
 use strict;
@@ -13,7 +14,6 @@
 use Apache2::Const -compile => 'OK';
 
 use Config;
-use constant PERLIO_5_8_IS_ENABLED => $Config{useperlio} && $] >= 5.007;
 
 my $perl = Apache2::Build->build_config()->perl_config('perlpath');
 
@@ -149,18 +149,21 @@
     #
     # PerlIO-based pipe fh on the other hand does the select
     # internally via apr_wait_for_io_or_timeout() in
-    # apr_file_read(). But you cannot call select() on the
+    # apr_file_read() (on *nix, but not on Win32).
+    # But you cannot call select() on the
     # PerlIO-based, because its fileno() returns (-1), remember that
     # apr_file_t is an opaque object, and on certain platforms
     # fileno() is different from unix
     #
     # so we use the following wrapper: if we are under perlio we just
-    # go ahead and read the data, if we are under non-perlio we first
+    # go ahead and read the data, but with a short sleep first on Win32;
+    # if we are under non-perlio we first
     # select for a few secs. (XXX: is 10 secs enough?)
     #
     # btw: we use perlIO only for perl 5.7+
     #
     if (APR::PerlIO::PERLIO_LAYERS_ARE_ENABLED() || $sel->can_read(10)) {
+        sleep(1) if $^O eq 'MSWin32' && APR::PerlIO::PERLIO_LAYERS_ARE_ENABLED();
         @data = wantarray ? (<$fh>) : <$fh>;
     }
 
diff --git a/t/response/TestApache/util.pm b/t/response/TestApache/util.pm
index 676cce0..da61e38 100644
--- a/t/response/TestApache/util.pm
+++ b/t/response/TestApache/util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::util;
 
 # Apache2::Util tests
diff --git a/t/response/TestApache/write.pm b/t/response/TestApache/write.pm
index 314697a..ebb7553 100644
--- a/t/response/TestApache/write.pm
+++ b/t/response/TestApache/write.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestApache::write;
 
 use strict;
diff --git a/t/response/TestCompat/apache.pm b/t/response/TestCompat/apache.pm
index 10538a6..9202916 100644
--- a/t/response/TestCompat/apache.pm
+++ b/t/response/TestCompat/apache.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache;
 
 # Apache->"method" and Apache::"function" compat layer tests
diff --git a/t/response/TestCompat/apache_file.pm b/t/response/TestCompat/apache_file.pm
index f79c701..20f0c0c 100644
--- a/t/response/TestCompat/apache_file.pm
+++ b/t/response/TestCompat/apache_file.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache_file;
 
 # Apache::File compat layer tests
diff --git a/t/response/TestCompat/apache_module.pm b/t/response/TestCompat/apache_module.pm
index 5894867..2df1df4 100644
--- a/t/response/TestCompat/apache_module.pm
+++ b/t/response/TestCompat/apache_module.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache_module;
 
 # Apache2::Module compat layer tests
diff --git a/t/response/TestCompat/apache_table.pm b/t/response/TestCompat/apache_table.pm
index d9d238e..31d3992 100644
--- a/t/response/TestCompat/apache_table.pm
+++ b/t/response/TestCompat/apache_table.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache_table;
 
 # Apache::Table compat layer tests
diff --git a/t/response/TestCompat/apache_uri.pm b/t/response/TestCompat/apache_uri.pm
index 35014de..c830d60 100644
--- a/t/response/TestCompat/apache_uri.pm
+++ b/t/response/TestCompat/apache_uri.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache_uri;
 
 # Apache::Util compat layer tests
diff --git a/t/response/TestCompat/apache_util.pm b/t/response/TestCompat/apache_util.pm
index dfd18a3..ec1496f 100644
--- a/t/response/TestCompat/apache_util.pm
+++ b/t/response/TestCompat/apache_util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::apache_util;
 
 # Apache::Util compat layer tests
diff --git a/t/response/TestCompat/conn_authen.pm b/t/response/TestCompat/conn_authen.pm
index becb033..1cb80ad 100644
--- a/t/response/TestCompat/conn_authen.pm
+++ b/t/response/TestCompat/conn_authen.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::conn_authen;
 
 # compat checks for
diff --git a/t/response/TestCompat/conn_rec.pm b/t/response/TestCompat/conn_rec.pm
index 60e98d1..a19339c 100644
--- a/t/response/TestCompat/conn_rec.pm
+++ b/t/response/TestCompat/conn_rec.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::conn_rec;
 
 use strict;
diff --git a/t/response/TestCompat/request.pm b/t/response/TestCompat/request.pm
index 0c8426a..c2406d3 100644
--- a/t/response/TestCompat/request.pm
+++ b/t/response/TestCompat/request.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::request;
 
 # $r->"method" compat layer tests
diff --git a/t/response/TestCompat/request_body.pm b/t/response/TestCompat/request_body.pm
index 8567fab..5f0f1e9 100644
--- a/t/response/TestCompat/request_body.pm
+++ b/t/response/TestCompat/request_body.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::request_body;
 
 # $r->"method" tests that are validated by the client
diff --git a/t/response/TestCompat/send_fd.pm b/t/response/TestCompat/send_fd.pm
index f0a5136..7ee2f53 100644
--- a/t/response/TestCompat/send_fd.pm
+++ b/t/response/TestCompat/send_fd.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestCompat::send_fd;
 
 use strict;
diff --git a/t/response/TestDirective/cmdparms.pm b/t/response/TestDirective/cmdparms.pm
index 72e0d33..b3070d2 100644
--- a/t/response/TestDirective/cmdparms.pm
+++ b/t/response/TestDirective/cmdparms.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::cmdparms;
 
 use strict;
@@ -133,7 +134,7 @@
 </Base>
 
 TestCmdParms "Location"
-
-<LimitExcept GET>
-    TestCmdParms "Limit"
-</LimitExcept>
+#FIXME! httpd 2.4 does not allow LimitExcept here
+#<LimitExcept GET>
+    #TestCmdParms "Limit"
+#</LimitExcept>
diff --git a/t/response/TestDirective/env.pm b/t/response/TestDirective/env.pm
index 600a5b0..8a048ab 100644
--- a/t/response/TestDirective/env.pm
+++ b/t/response/TestDirective/env.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::env;
 
 use strict;
diff --git a/t/response/TestDirective/perlcleanuphandler.pm b/t/response/TestDirective/perlcleanuphandler.pm
new file mode 100644
index 0000000..bc77318
--- /dev/null
+++ b/t/response/TestDirective/perlcleanuphandler.pm
@@ -0,0 +1,66 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
+package TestDirective::perlcleanuphandler;
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache2::RequestRec ();
+use Apache2::RequestIO ();
+use Apache2::RequestUtil ();
+use Apache2::Connection ();
+use Apache2::ConnectionUtil ();
+use Apache2::Const -compile => 'OK', 'DECLINED';
+
+# This test is to show an error that occurs if in the whole request cycle
+# only a PerlCleanupHandler is defined. In this case it is not called.
+# To check that "/get?incr" is called first. This returns "UNDEF" to the
+# browser and sets the counter to "1". Next "/get" is called again without
+# args to check the counter without increment. Then we fetch
+# "/index.html?incr". Here no other Perl*Handler save the PerlCleanupHandler
+# is involved. So the next "/get" must return "2" but it shows "1".
+
+sub cleanup {
+    my $r=shift;
+    $r->connection->pnotes->{counter}++ if( $r->args eq 'incr' );
+    return Apache2::Const::OK;
+}
+
+sub get {
+    my $r=shift;
+    $r->content_type('text/plain');
+    $r->print($r->connection->pnotes->{counter} || "UNDEF");
+    return Apache2::Const::OK;
+}
+
+1;
+
+__END__
+<VirtualHost TestDirective::perlcleanuphandler>
+
+    <IfDefine PERL_USEITHREADS>
+        # a new interpreter pool
+        PerlOptions +Parent
+        PerlInterpStart         1
+        PerlInterpMax           1
+        PerlInterpMinSpare      0
+        PerlInterpMaxSpare      1
+        PerlInterpScope         connection
+    </IfDefine>
+
+    KeepAlive On
+    KeepAliveTimeout 300
+    MaxKeepAliveRequests 100
+
+    # use test system's @INC
+    PerlSwitches -I@serverroot@
+    PerlRequire "conf/modperl_inc.pl"
+    PerlModule TestDirective::perlcleanuphandler
+
+    <Location /get>
+        SetHandler modperl
+        PerlResponseHandler TestDirective::perlcleanuphandler::get
+    </Location>
+
+    PerlCleanupHandler TestDirective::perlcleanuphandler::cleanup
+
+</VirtualHost>
diff --git a/t/response/TestDirective/perldo.pm b/t/response/TestDirective/perldo.pm
index 6b0e55f..a825089 100644
--- a/t/response/TestDirective/perldo.pm
+++ b/t/response/TestDirective/perldo.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perldo;
 
 use strict;
diff --git a/t/response/TestDirective/perlloadmodule.pm b/t/response/TestDirective/perlloadmodule.pm
index 17e3480..8c85288 100644
--- a/t/response/TestDirective/perlloadmodule.pm
+++ b/t/response/TestDirective/perlloadmodule.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule;
 
 use strict;
diff --git a/t/response/TestDirective/perlloadmodule2.pm b/t/response/TestDirective/perlloadmodule2.pm
index 7c24be3..5829678 100644
--- a/t/response/TestDirective/perlloadmodule2.pm
+++ b/t/response/TestDirective/perlloadmodule2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule2;
 
 # in this test the merge is inherits all the values from the ancestors
@@ -82,7 +83,7 @@
 
     my $s = $r->server;
 
-    if ($r->args eq 'srv') {
+    if (defined $r->args and $r->args eq 'srv') {
         my $srv_cfg = $self->get_config($s);
         $r->print("srv: @{ $srv_cfg->{MyMergeTest}||[] }");
     }
diff --git a/t/response/TestDirective/perlloadmodule3.pm b/t/response/TestDirective/perlloadmodule3.pm
index f513ebc..facb918 100644
--- a/t/response/TestDirective/perlloadmodule3.pm
+++ b/t/response/TestDirective/perlloadmodule3.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule3;
 
 # in this test we test various merging techniques. As a side effect it
diff --git a/t/response/TestDirective/perlloadmodule4.pm b/t/response/TestDirective/perlloadmodule4.pm
index b471800..6edc88a 100644
--- a/t/response/TestDirective/perlloadmodule4.pm
+++ b/t/response/TestDirective/perlloadmodule4.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule4;
 
 # XXX: the package is 99% the same as perlloadlmodule5 and 6, just the
diff --git a/t/response/TestDirective/perlloadmodule5.pm b/t/response/TestDirective/perlloadmodule5.pm
index 05f4ed6..9e88e2c 100644
--- a/t/response/TestDirective/perlloadmodule5.pm
+++ b/t/response/TestDirective/perlloadmodule5.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule5;
 
 # in this test we test an early mod_perl startup caused by an
diff --git a/t/response/TestDirective/perlloadmodule6.pm b/t/response/TestDirective/perlloadmodule6.pm
index 14d544a..fd8cdfe 100644
--- a/t/response/TestDirective/perlloadmodule6.pm
+++ b/t/response/TestDirective/perlloadmodule6.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule6;
 
 # in this test we test an early mod_perl startup caused by an
diff --git a/t/response/TestDirective/perlloadmodule7.pm b/t/response/TestDirective/perlloadmodule7.pm
index b589487..a4fc27a 100644
--- a/t/response/TestDirective/perlloadmodule7.pm
+++ b/t/response/TestDirective/perlloadmodule7.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlloadmodule7;
 
 # this test was written to reproduce a segfault under worker
diff --git a/t/response/TestDirective/perlmodule.pm b/t/response/TestDirective/perlmodule.pm
index 392064c..8f926a4 100644
--- a/t/response/TestDirective/perlmodule.pm
+++ b/t/response/TestDirective/perlmodule.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlmodule;
 
 # This test is similar to TestDirective::perlrequire. Here we test
diff --git a/t/response/TestDirective/perlrequire.pm b/t/response/TestDirective/perlrequire.pm
index a041fc2..1a37130 100644
--- a/t/response/TestDirective/perlrequire.pm
+++ b/t/response/TestDirective/perlrequire.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::perlrequire;
 
 # Test whether vhost with 'PerlOptions +Parent', which doesn't inherit
diff --git a/t/response/TestDirective/pod.pm b/t/response/TestDirective/pod.pm
index 9556cfe..b220f2b 100644
--- a/t/response/TestDirective/pod.pm
+++ b/t/response/TestDirective/pod.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::pod;
 
 use strict;
diff --git a/t/response/TestDirective/setupenv.pm b/t/response/TestDirective/setupenv.pm
index f6a1703..dfcdfe7 100644
--- a/t/response/TestDirective/setupenv.pm
+++ b/t/response/TestDirective/setupenv.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestDirective::setupenv;
 
 use strict;
diff --git a/t/response/TestError/api.pm b/t/response/TestError/api.pm
index 4d1a107..831d99a 100644
--- a/t/response/TestError/api.pm
+++ b/t/response/TestError/api.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestError::api;
 
 use strict;
diff --git a/t/response/TestError/runtime.pm b/t/response/TestError/runtime.pm
index c56a47e..91ca446 100644
--- a/t/response/TestError/runtime.pm
+++ b/t/response/TestError/runtime.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestError::runtime;
 
 use strict;
diff --git a/t/response/TestError/syntax.pm b/t/response/TestError/syntax.pm
index 3768f87..3886a8c 100644
--- a/t/response/TestError/syntax.pm
+++ b/t/response/TestError/syntax.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestError::syntax;
 
 use strict;
diff --git a/t/response/TestModperl/cookie.pm b/t/response/TestModperl/cookie.pm
index 8d81588..32fccf0 100644
--- a/t/response/TestModperl/cookie.pm
+++ b/t/response/TestModperl/cookie.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::cookie;
 
 use strict;
diff --git a/t/response/TestModperl/cookie2.pm b/t/response/TestModperl/cookie2.pm
index 806304e..1f8a289 100644
--- a/t/response/TestModperl/cookie2.pm
+++ b/t/response/TestModperl/cookie2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::cookie2;
 
 use strict;
diff --git a/t/response/TestModperl/current_callback.pm b/t/response/TestModperl/current_callback.pm
index 0ae7509..a80425f 100644
--- a/t/response/TestModperl/current_callback.pm
+++ b/t/response/TestModperl/current_callback.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::current_callback;
 
 use strict;
diff --git a/t/response/TestModperl/dir_config.pm b/t/response/TestModperl/dir_config.pm
index 0a60816..b5608fd 100644
--- a/t/response/TestModperl/dir_config.pm
+++ b/t/response/TestModperl/dir_config.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::dir_config;
 
 use strict;
diff --git a/t/response/TestModperl/endav.pm b/t/response/TestModperl/endav.pm
index 14d22a9..5860d52 100644
--- a/t/response/TestModperl/endav.pm
+++ b/t/response/TestModperl/endav.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::endav;
 
 use strict;
diff --git a/t/response/TestModperl/env.pm b/t/response/TestModperl/env.pm
index 66d5135..62eac81 100644
--- a/t/response/TestModperl/env.pm
+++ b/t/response/TestModperl/env.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::env;
 
 use strict;
diff --git a/t/response/TestModperl/exit.pm b/t/response/TestModperl/exit.pm
index 9888ffe..31b8e33 100644
--- a/t/response/TestModperl/exit.pm
+++ b/t/response/TestModperl/exit.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::exit;
 
 # there is no need to call ModPerl::Util::exit() explicitly, a plain
diff --git a/t/response/TestModperl/getc.pm b/t/response/TestModperl/getc.pm
index 25ab235..1b49f22 100644
--- a/t/response/TestModperl/getc.pm
+++ b/t/response/TestModperl/getc.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::getc;
 
 use strict;
diff --git a/t/response/TestModperl/interpreter.pm b/t/response/TestModperl/interpreter.pm
new file mode 100644
index 0000000..0e01f9b
--- /dev/null
+++ b/t/response/TestModperl/interpreter.pm
@@ -0,0 +1,81 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
+package TestModperl::interpreter;
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestUtil;
+
+use Apache2::MPM ();
+
+use Apache2::Const -compile => 'OK';
+
+sub handler {
+    my $r = shift;
+
+    my $is_threaded=Apache2::MPM->is_threaded;
+
+    plan $r, tests => $is_threaded?17:5, need
+        need_threads,
+        {"perl >= 5.8.1 is required (this is $])" => ($] >= 5.008001)};
+
+    require ModPerl::Interpreter;
+    require ModPerl::InterpPool;
+    require ModPerl::TiPool;
+    require ModPerl::TiPoolConfig;
+
+    my $interp = ModPerl::Interpreter->current;
+
+    ok t_cmp(ref($interp), 'ModPerl::Interpreter',
+             'interp is a ModPerl::Interpreter');
+
+    ok t_cmp($$interp==${ModPerl::Interpreter::current()}, !!1,
+             'ModPerl::Interpreter->current == ModPerl::Interpreter::current');
+
+    my $mip = $interp->mip;
+
+    ok t_cmp(ref($mip), 'ModPerl::InterpPool',
+             'interp->mip is a ModPerl::InterpPool');
+
+    ok t_cmp(${$mip->server}==${$r->server}, !!1,
+             'mip->server == r->server');
+
+    ok t_cmp(ref($mip->parent), 'ModPerl::Interpreter',
+             'mip->parent is a ModPerl::Interpreter');
+
+    if($is_threaded) {
+        ok t_cmp($interp->perl!=0, !!1, 'interp->perl');
+        ok t_cmp($interp->num_requests>0, !!1, 'interp->num_requests');
+        ok t_cmp($interp->refcnt>0, !!1, 'interp->refcnt');
+
+        my $tipool = $mip->tipool;
+
+        ok t_cmp(ref($tipool), 'ModPerl::TiPool',
+                 'mip->tipool is a ModPerl::TiPool');
+
+        ok t_cmp($tipool->in_use!=0, !!1, 'tipool->in_use');
+
+        ok t_cmp($tipool->size!=0, !!1, 'tipool->size');
+
+        my $tipcfg = $tipool->cfg;
+
+        ok t_cmp(ref($tipcfg), 'ModPerl::TiPoolConfig',
+                 'tipool->cfg is a ModPerl::TiPoolConfig');
+
+        ok t_cmp($tipcfg->start!=0, !!1, 'tipcfg->start');
+
+        ok t_cmp($tipcfg->min_spare!=0, !!1, 'tipcfg->min_spare');
+
+        ok t_cmp($tipcfg->max_spare!=0, !!1, 'tipcfg->max_spare');
+
+        ok t_cmp($tipcfg->max!=0, !!1, 'tipcfg->max');
+
+        ok t_cmp($tipcfg->max_requests!=0, !!1, 'tipcfg->max_requests');
+    }
+
+    Apache2::Const::OK;
+}
+
+1;
+__END__
diff --git a/t/response/TestModperl/io_nested_with_closed_stds.pm b/t/response/TestModperl/io_nested_with_closed_stds.pm
index a46b14c..f87373c 100644
--- a/t/response/TestModperl/io_nested_with_closed_stds.pm
+++ b/t/response/TestModperl/io_nested_with_closed_stds.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::io_nested_with_closed_stds;
 
 # test that we can successfully override STD(IN|OUT) for
diff --git a/t/response/TestModperl/io_with_closed_stds.pm b/t/response/TestModperl/io_with_closed_stds.pm
index 2aeb729..b07a7cd 100644
--- a/t/response/TestModperl/io_with_closed_stds.pm
+++ b/t/response/TestModperl/io_with_closed_stds.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::io_with_closed_stds;
 
 # test that we can successfully override STD(IN|OUT) for
diff --git a/t/response/TestModperl/local_env.pm b/t/response/TestModperl/local_env.pm
index dc56b6f..ed18c6a 100644
--- a/t/response/TestModperl/local_env.pm
+++ b/t/response/TestModperl/local_env.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::local_env;
 
 use strict;
diff --git a/t/response/TestModperl/merge.pm b/t/response/TestModperl/merge.pm
index 7d27394..da4460a 100644
--- a/t/response/TestModperl/merge.pm
+++ b/t/response/TestModperl/merge.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::merge;
 
 use strict;
diff --git a/t/response/TestModperl/method.pm b/t/response/TestModperl/method.pm
index 5328b35..568784e 100644
--- a/t/response/TestModperl/method.pm
+++ b/t/response/TestModperl/method.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::method;
 
 use strict;
diff --git a/t/response/TestModperl/methodname.pm b/t/response/TestModperl/methodname.pm
index 25388f4..e5464a6 100644
--- a/t/response/TestModperl/methodname.pm
+++ b/t/response/TestModperl/methodname.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::methodname;
 
 use strict;
diff --git a/t/response/TestModperl/methodobj.pm b/t/response/TestModperl/methodobj.pm
index 0e9d9c4..3d8f3af 100644
--- a/t/response/TestModperl/methodobj.pm
+++ b/t/response/TestModperl/methodobj.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::methodobj;
 
 use strict;
diff --git a/t/response/TestModperl/perl.pm b/t/response/TestModperl/perl.pm
index 78d8fb2..a49c784 100644
--- a/t/response/TestModperl/perl.pm
+++ b/t/response/TestModperl/perl.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::perl;
 
 # this test includes tests for buggy Perl functions for which mod_perl
diff --git a/t/response/TestModperl/perl_options.pm b/t/response/TestModperl/perl_options.pm
index 7e5cd3f..9908650 100644
--- a/t/response/TestModperl/perl_options.pm
+++ b/t/response/TestModperl/perl_options.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::perl_options;
 
 # test whether PerlOptions options are enabled
diff --git a/t/response/TestModperl/perl_options2.pm b/t/response/TestModperl/perl_options2.pm
index 97ffb10..29f8a46 100644
--- a/t/response/TestModperl/perl_options2.pm
+++ b/t/response/TestModperl/perl_options2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::perl_options2;
 
 # test whether PerlOptions None works
diff --git a/t/response/TestModperl/pnotes.pm b/t/response/TestModperl/pnotes.pm
index 1bfe7d6..1a354aa 100644
--- a/t/response/TestModperl/pnotes.pm
+++ b/t/response/TestModperl/pnotes.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::pnotes;
 
 use strict;
diff --git a/t/response/TestModperl/pnotes2.pm b/t/response/TestModperl/pnotes2.pm
index 05395a6..fd3d14a 100644
--- a/t/response/TestModperl/pnotes2.pm
+++ b/t/response/TestModperl/pnotes2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::pnotes2;
 
 use strict;
@@ -82,8 +83,3 @@
 
 1;
 __END__
-
-# Local Variables: #
-# mode: cperl #
-# cperl-indent-level: 4 #
-# End: #
diff --git a/t/response/TestModperl/post_utf8.pm b/t/response/TestModperl/post_utf8.pm
index 7e27bce..5544bc1 100644
--- a/t/response/TestModperl/post_utf8.pm
+++ b/t/response/TestModperl/post_utf8.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::post_utf8;
 
 use strict;
diff --git a/t/response/TestModperl/print.pm b/t/response/TestModperl/print.pm
index 94fd919..64d8968 100644
--- a/t/response/TestModperl/print.pm
+++ b/t/response/TestModperl/print.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::print;
 
 use strict;
diff --git a/t/response/TestModperl/print_utf8.pm b/t/response/TestModperl/print_utf8.pm
index 1223eae..f95ca48 100644
--- a/t/response/TestModperl/print_utf8.pm
+++ b/t/response/TestModperl/print_utf8.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::print_utf8;
 
 # testing the utf8-encoded response via a tied STDOUT/perlio STDOUT,
diff --git a/t/response/TestModperl/print_utf8_2.pm b/t/response/TestModperl/print_utf8_2.pm
index 15b7cc7..423c7de 100644
--- a/t/response/TestModperl/print_utf8_2.pm
+++ b/t/response/TestModperl/print_utf8_2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::print_utf8_2;
 
 # testing the utf8-encoded response via direct $r->print, which does the
diff --git a/t/response/TestModperl/printf.pm b/t/response/TestModperl/printf.pm
index cb2a331..54b1e89 100644
--- a/t/response/TestModperl/printf.pm
+++ b/t/response/TestModperl/printf.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::printf;
 
 use strict;
diff --git a/t/response/TestModperl/readline.pm b/t/response/TestModperl/readline.pm
index e63d765..705cf0f 100644
--- a/t/response/TestModperl/readline.pm
+++ b/t/response/TestModperl/readline.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::readline;
 
 use strict;
diff --git a/t/response/TestModperl/request_rec_perlio_api.pm b/t/response/TestModperl/request_rec_perlio_api.pm
index 774da6e..c8a225f 100644
--- a/t/response/TestModperl/request_rec_perlio_api.pm
+++ b/t/response/TestModperl/request_rec_perlio_api.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::request_rec_perlio_api;
 
 # this test is relevant only when the PerlIO STDIN/STDOUT are used (when
@@ -41,7 +42,7 @@
         open STDIN, "<", __FILE__
             or die "failed to open STDIN as 'in memory' file : $!";
         my $data;
-        read STDIN, $data, length("package");
+        read STDIN, $data, length("# please");
         print STDOUT $data;
         close STDIN;
 
diff --git a/t/response/TestModperl/request_rec_tie_api.pm b/t/response/TestModperl/request_rec_tie_api.pm
index 675178b..d27c44e 100644
--- a/t/response/TestModperl/request_rec_tie_api.pm
+++ b/t/response/TestModperl/request_rec_tie_api.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::request_rec_tie_api;
 
 # this test is relevant only when the tied STDIN/STDOUT are used (when
diff --git a/t/response/TestModperl/setauth.pm b/t/response/TestModperl/setauth.pm
index 03498bd..ce992cd 100644
--- a/t/response/TestModperl/setauth.pm
+++ b/t/response/TestModperl/setauth.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::setauth;
 
 use strict;
@@ -15,7 +16,7 @@
 
     plan $r, tests => 2;
 
-    ok t_cmp($r->auth_type(), undef, 'auth_type');
+     ok t_cmp($r->auth_type(), "none", 'auth_type');
 
     t_server_log_error_is_expected();
     $r->get_basic_auth_pw();
diff --git a/t/response/TestModperl/setupenv.pm b/t/response/TestModperl/setupenv.pm
index b5e12c9..7154340 100644
--- a/t/response/TestModperl/setupenv.pm
+++ b/t/response/TestModperl/setupenv.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::setupenv;
 
 use strict;
diff --git a/t/response/TestModperl/setupenv2.pm b/t/response/TestModperl/setupenv2.pm
index a3bb46a..bb27314 100644
--- a/t/response/TestModperl/setupenv2.pm
+++ b/t/response/TestModperl/setupenv2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::setupenv2;
 
 # Test the mixing of PerlSetEnv in httpd.conf and %ENV of the same
diff --git a/t/response/TestModperl/status.pm b/t/response/TestModperl/status.pm
index b8f7608..26964db 100644
--- a/t/response/TestModperl/status.pm
+++ b/t/response/TestModperl/status.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::status;
 
 use strict;
diff --git a/t/response/TestModperl/subenv.pm b/t/response/TestModperl/subenv.pm
index db6c377..bd02d4b 100644
--- a/t/response/TestModperl/subenv.pm
+++ b/t/response/TestModperl/subenv.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::subenv;
 
 use strict;
diff --git a/t/response/TestModperl/taint.pm b/t/response/TestModperl/taint.pm
index 2daaa00..090c524 100644
--- a/t/response/TestModperl/taint.pm
+++ b/t/response/TestModperl/taint.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::taint;
 
 use strict;
diff --git a/t/response/TestModperl/util.pm b/t/response/TestModperl/util.pm
index c5b6fd2..d622992 100644
--- a/t/response/TestModperl/util.pm
+++ b/t/response/TestModperl/util.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModperl::util;
 
 # Modperl::Util tests
diff --git a/t/response/TestModules/cgi.pm b/t/response/TestModules/cgi.pm
index 85b6203..7fcf883 100644
--- a/t/response/TestModules/cgi.pm
+++ b/t/response/TestModules/cgi.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgi;
 
 use strict;
diff --git a/t/response/TestModules/cgi2.pm b/t/response/TestModules/cgi2.pm
index 772c6c8..8d87638 100644
--- a/t/response/TestModules/cgi2.pm
+++ b/t/response/TestModules/cgi2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgi2;
 
 # this handler doesn't use the :Apache layer, so CGI.pm needs to do
diff --git a/t/response/TestModules/cgipost.pm b/t/response/TestModules/cgipost.pm
index 4c59625..48c0820 100644
--- a/t/response/TestModules/cgipost.pm
+++ b/t/response/TestModules/cgipost.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgipost;
 
 use strict;
diff --git a/t/response/TestModules/cgipost2.pm b/t/response/TestModules/cgipost2.pm
index e030a5c..57dc9fe 100644
--- a/t/response/TestModules/cgipost2.pm
+++ b/t/response/TestModules/cgipost2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgipost2;
 
 # this handler doesn't use the :Apache layer, so CGI.pm needs to do
diff --git a/t/response/TestModules/cgiupload.pm b/t/response/TestModules/cgiupload.pm
index fa75d3c..7952268 100644
--- a/t/response/TestModules/cgiupload.pm
+++ b/t/response/TestModules/cgiupload.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgiupload;
 
 use strict;
diff --git a/t/response/TestModules/cgiupload2.pm b/t/response/TestModules/cgiupload2.pm
index 1243599..3c4a522 100644
--- a/t/response/TestModules/cgiupload2.pm
+++ b/t/response/TestModules/cgiupload2.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::cgiupload2;
 
 # this handler doesn't use the :Apache layer, so CGI.pm needs to do
diff --git a/t/response/TestModules/include_subreq.pm b/t/response/TestModules/include_subreq.pm
index 42617a9..cf2bc2c 100644
--- a/t/response/TestModules/include_subreq.pm
+++ b/t/response/TestModules/include_subreq.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::include_subreq;
 
 # this test calls a simple response handler, whose output includes a
diff --git a/t/response/TestModules/proxy.pm b/t/response/TestModules/proxy.pm
index ab59026..83e6e6e 100644
--- a/t/response/TestModules/proxy.pm
+++ b/t/response/TestModules/proxy.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestModules::proxy;
 
 use strict;
diff --git a/t/response/TestPerl/api.pm b/t/response/TestPerl/api.pm
index 081ea5f..c034f08 100644
--- a/t/response/TestPerl/api.pm
+++ b/t/response/TestPerl/api.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::api;
 
 # some perl APIs that we need to test that they work alright under mod_perl
diff --git a/t/response/TestPerl/hash_attack.pm b/t/response/TestPerl/hash_attack.pm
index 8b1805a..e76b432 100644
--- a/t/response/TestPerl/hash_attack.pm
+++ b/t/response/TestPerl/hash_attack.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::hash_attack;
 
 # if the rehashing of the keys in the stash happens due to the hash attack,
diff --git a/t/response/TestPerl/ithreads.pm b/t/response/TestPerl/ithreads.pm
index 2aef130..84f11f6 100644
--- a/t/response/TestPerl/ithreads.pm
+++ b/t/response/TestPerl/ithreads.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::ithreads;
 
 use strict;
diff --git a/t/response/TestPerl/ithreads3.pm b/t/response/TestPerl/ithreads3.pm
new file mode 100644
index 0000000..dbe9b2e
--- /dev/null
+++ b/t/response/TestPerl/ithreads3.pm
@@ -0,0 +1,109 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
+package TestPerl::ithreads3;
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache2::RequestRec;
+use Apache2::RequestIO;
+use Apache2::RequestUtil;
+use APR::Pool;
+use Apache2::Const -compile => 'OK', 'DECLINED';
+
+# XXX: These tests rely on the assumption that the virtual host is not
+#      otherwise accessed. In this case the same interpreter is chosen
+#      for each phase. The $counter counts them.
+#      Of course if only 1 interp is configured it must be hit each time.
+
+my $counter=0;
+
+sub response {
+  my $r=shift;
+  $r->content_type('text/plain');
+  $r->print($counter);
+  return Apache2::Const::OK;
+}
+
+sub count { $counter++; return Apache2::Const::DECLINED; }
+
+sub clear_pool {
+  delete $_[0]->pnotes->{my_pool};
+  return Apache2::Const::DECLINED;
+}
+
+sub trans {
+  my $r=shift;
+  my $test=$r->args;
+  $counter=0;
+  if( $test eq '1' ) {
+    # this is to check for a bug in modperl_response_handler versus
+    # modperl_response_handler_cgi. The former used to allocate an
+    # extra interpreter for its work. In both cases $counter should be
+    # 2 in the response phase
+    $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' );
+    $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' );
+  }
+  elsif( $test eq '2' ) {
+    # now add an extra PerlCleanupHandler. It is run each time the
+    # interp is released. So it is run after Trans, MapToStorage and
+    # Fixup. In the response phase $counter should be 5. After Response
+    # it is run again but that is after.
+    # This used to eat up all interpreters because modperl_interp_unselect
+    # calls modperl_config_request_cleanup that allocates a new interp
+    # to handle the cleanup. When this interp is then unselected
+    # modperl_interp_unselect gets called again but the cleanup handler is
+    # still installed. So the cycle starts again until all interpreters
+    # are in use or the stack runs out. Then the thread is locked infinitely
+    # or a segfault appears.
+    $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' );
+    $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' );
+    $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::count' );
+  }
+  elsif( $test eq '3' ) {
+    # a subpool adds an extra reference to the interp. So it is preserved
+    # and bound to the request until the pool is destroyed. So the cleanup
+    # handler is run only once after Fixup. Hence the counter is 3.
+    $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' );
+    $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' );
+    $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::count' );
+    $r->pnotes->{my_pool}=$r->pool->new;
+    $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::clear_pool' );
+  }
+  return Apache2::Const::DECLINED;
+}
+
+1;
+
+__END__
+# APACHE_TEST_CONFIG_ORDER 942
+
+<VirtualHost TestPerl::ithreads3>
+
+    <IfDefine PERL_USEITHREADS>
+        # a new interpreter pool
+        PerlOptions +Parent
+        PerlInterpStart         3
+        PerlInterpMax           3
+        PerlInterpMinSpare      1
+        PerlInterpMaxSpare      3
+        PerlInterpScope         handler
+    </IfDefine>
+
+    # use test system's @INC
+    PerlSwitches -I@serverroot@
+    PerlRequire "conf/modperl_inc.pl"
+    PerlModule TestPerl::ithreads3
+
+    <Location /modperl>
+        SetHandler modperl
+        PerlResponseHandler TestPerl::ithreads3::response
+    </Location>
+
+    <Location /perl-script>
+        SetHandler perl-script
+        PerlResponseHandler TestPerl::ithreads3::response
+    </Location>
+
+    PerlTransHandler TestPerl::ithreads3::trans
+
+</VirtualHost>
diff --git a/t/response/TestPerl/ithreads_args.pm b/t/response/TestPerl/ithreads_args.pm
index d6751d0..b3e6eb8 100644
--- a/t/response/TestPerl/ithreads_args.pm
+++ b/t/response/TestPerl/ithreads_args.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::ithreads_args;
 
 # reproducing a bug in perl ithreads: [perl #34342]
diff --git a/t/response/TestPerl/ithreads_eval.pm b/t/response/TestPerl/ithreads_eval.pm
index abcb5bb..fe1b0af 100644
--- a/t/response/TestPerl/ithreads_eval.pm
+++ b/t/response/TestPerl/ithreads_eval.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::ithreads_eval;
 
 # reproducing a bug in perl ithreads: [perl #34341]
diff --git a/t/response/TestPerl/signals.pm b/t/response/TestPerl/signals.pm
index fd25f5e..2c08d43 100644
--- a/t/response/TestPerl/signals.pm
+++ b/t/response/TestPerl/signals.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestPerl::signals;
 
 use strict;
diff --git a/t/response/TestUser/rewrite.pm b/t/response/TestUser/rewrite.pm
index f3ab1ba..0416612 100644
--- a/t/response/TestUser/rewrite.pm
+++ b/t/response/TestUser/rewrite.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestUser::rewrite;
 
 # test here the technique of rewriting the URI namespace and
diff --git a/t/response/TestVhost/config.pm b/t/response/TestVhost/config.pm
index b752694..4a581b6 100644
--- a/t/response/TestVhost/config.pm
+++ b/t/response/TestVhost/config.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestVhost::config;
 
 # Test whether under threaded mpms (and not) a vhost with 'PerlOptions
diff --git a/t/response/TestVhost/log.pm b/t/response/TestVhost/log.pm
index f6c3fa0..2bbf438 100644
--- a/t/response/TestVhost/log.pm
+++ b/t/response/TestVhost/log.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package TestVhost::log;
 
 # testing that the warn and other logging functions are writing into
diff --git a/t/user/rewrite.t b/t/user/rewrite.t
index 9e95b90..64afec6 100644
--- a/t/user/rewrite.t
+++ b/t/user/rewrite.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use strict;
 use warnings FATAL => 'all';
 
diff --git a/t/vhost/config.t b/t/vhost/config.t
index 23f62b4..36d1a49 100644
--- a/t/vhost/config.t
+++ b/t/vhost/config.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # the handler is configured in modperl_extra.pl via
 # Apache2::ServerUtil->server->add_config
 
diff --git a/t/vhost/log.t b/t/vhost/log.t
index 963ab4b..3205905 100644
--- a/t/vhost/log.t
+++ b/t/vhost/log.t
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use Apache::TestUtil;
 use Apache::TestRequest 'GET_BODY_ASSERT';
 
diff --git a/util/apr_arg_check.pl b/util/apr_arg_check.pl
index 8179fda..301a4fd 100755
--- a/util/apr_arg_check.pl
+++ b/util/apr_arg_check.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use lib qw(lib);
 
diff --git a/util/apr_pool_check.pl b/util/apr_pool_check.pl
index efd63b4..056c8cf 100755
--- a/util/apr_pool_check.pl
+++ b/util/apr_pool_check.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 #check which apr_ functions do not have access to a pool
 
diff --git a/util/cvsize.pl b/util/cvsize.pl
index 73d4811..8e6682c 100755
--- a/util/cvsize.pl
+++ b/util/cvsize.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 #get an idea of how much space the XS interface will eat
 #build/source_scan.pl must be run first
diff --git a/util/getdiff.pl b/util/getdiff.pl
index faf8360..5b4cbb0 100755
--- a/util/getdiff.pl
+++ b/util/getdiff.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # this script creates a diff against SVN
 # and against /dev/null for all files in ARGV
diff --git a/util/methodlookup_check.pl b/util/methodlookup_check.pl
index ea6fb16..95da6fd 100755
--- a/util/methodlookup_check.pl
+++ b/util/methodlookup_check.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # this script checks whether all XS methods are known to ModPerl::MethodLookup
 
diff --git a/util/perl_bloat.pl b/util/perl_bloat.pl
index b374696..421d393 100755
--- a/util/perl_bloat.pl
+++ b/util/perl_bloat.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 # perlbloat.pl 'some perlcode' 'more perl code'
 # perlbloat.pl Foo/Bar.pm Bar/Tar.pm
diff --git a/util/sizeof.pl b/util/sizeof.pl
index 61535d8..1a6d3ec 100644
--- a/util/sizeof.pl
+++ b/util/sizeof.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 #calculate structure sizes listed in pod/modperl_sizeof.pod via sizeof()
 
 use strict;
diff --git a/util/source_stats.pl b/util/source_stats.pl
index ef09f9e..fc502b0 100755
--- a/util/source_stats.pl
+++ b/util/source_stats.pl
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 
 use lib qw(lib);
 
diff --git a/util/xs_check.pl b/util/xs_check.pl
index 6acc94a..01ec89b 100644
--- a/util/xs_check.pl
+++ b/util/xs_check.pl
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 use lib qw(Apache-Test/lib lib xs/tables/current);
 
 use strict;
diff --git a/xs/APR/APR/APR.pm b/xs/APR/APR/APR.pm
index f0e5798..b06a3b6 100644
--- a/xs/APR/APR/APR.pm
+++ b/xs/APR/APR/APR.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/xs/APR/APR/Makefile.PL b/xs/APR/APR/Makefile.PL
index 99ac3d4..8745a54 100644
--- a/xs/APR/APR/Makefile.PL
+++ b/xs/APR/APR/Makefile.PL
@@ -37,7 +37,7 @@
     my $mp_apr_lib = $build->mp_apr_lib;
 
     if (CYGWIN) {
-        # For Cygwin compatibility, set $mp_apr_lib before the apru flags
+        # For Cygwin compatibility, set $mp_apr_lib before the apache libs
         $libs = qq{ $mp_apr_lib } . $libs;
     } else {
         $libs .= qq{ $mp_apr_lib };
diff --git a/xs/APR/Base64/APR__Base64.h b/xs/APR/Base64/APR__Base64.h
index f5df742..8ed26f9 100644
--- a/xs/APR/Base64/APR__Base64.h
+++ b/xs/APR/Base64/APR__Base64.h
@@ -55,3 +55,10 @@
 
     mpxs_set_targ(mpxs_apr_base64_decode, ST(0));
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Brigade/APR__Brigade.h b/xs/APR/Brigade/APR__Brigade.h
index 6dc8997..15181fd 100644
--- a/xs/APR/Brigade/APR__Brigade.h
+++ b/xs/APR/Brigade/APR__Brigade.h
@@ -171,3 +171,10 @@
 {
     MP_RUN_CROAK(apr_brigade_destroy(bb), "APR::Brigade::destroy");
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Bucket/APR__Bucket.h b/xs/APR/Bucket/APR__Bucket.h
index dfd63b0..6c09c75 100644
--- a/xs/APR/Bucket/APR__Bucket.h
+++ b/xs/APR/Bucket/APR__Bucket.h
@@ -122,3 +122,10 @@
 
     return rc;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/BucketAlloc/APR__BucketAlloc.h b/xs/APR/BucketAlloc/APR__BucketAlloc.h
index a29a173..bfb2a19 100644
--- a/xs/APR/BucketAlloc/APR__BucketAlloc.h
+++ b/xs/APR/BucketAlloc/APR__BucketAlloc.h
@@ -27,3 +27,10 @@
     mpxs_add_pool_magic(ba_sv, p_sv);
     return ba_sv;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Const/Const.pm b/xs/APR/Const/Const.pm
index b9b3ce6..cb264f6 100644
--- a/xs/APR/Const/Const.pm
+++ b/xs/APR/Const/Const.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/xs/APR/Error/APR__Error.h b/xs/APR/Error/APR__Error.h
index 900f05c..c7dafd9 100644
--- a/xs/APR/Error/APR__Error.h
+++ b/xs/APR/Error/APR__Error.h
@@ -15,3 +15,10 @@
  */
 
 #define mpxs_APR__Error_strerror(rc) modperl_error_strerror(aTHX_ rc)
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Finfo/APR__Finfo.h b/xs/APR/Finfo/APR__Finfo.h
index 050d0e6..36843ab 100644
--- a/xs/APR/Finfo/APR__Finfo.h
+++ b/xs/APR/Finfo/APR__Finfo.h
@@ -30,3 +30,10 @@
 
     return finfo_sv;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/IpSubnet/APR__IpSubnet.h b/xs/APR/IpSubnet/APR__IpSubnet.h
index 034be01..c2d6793 100644
--- a/xs/APR/IpSubnet/APR__IpSubnet.h
+++ b/xs/APR/IpSubnet/APR__IpSubnet.h
@@ -28,3 +28,10 @@
     mpxs_add_pool_magic(ipsub_sv, p_sv);
     return ipsub_sv;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Lock/APR__Lock.h b/xs/APR/Lock/APR__Lock.h
index 53cbbd3..1054331 100644
--- a/xs/APR/Lock/APR__Lock.h
+++ b/xs/APR/Lock/APR__Lock.h
@@ -13,3 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/OS/APR__OS.h b/xs/APR/OS/APR__OS.h
index f2f17a2..5cd6f59 100644
--- a/xs/APR/OS/APR__OS.h
+++ b/xs/APR/OS/APR__OS.h
@@ -22,3 +22,10 @@
     return 0;
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/PerlIO/PerlIO.pm b/xs/APR/PerlIO/PerlIO.pm
index 2ea04d0..72a6330 100644
--- a/xs/APR/PerlIO/PerlIO.pm
+++ b/xs/APR/PerlIO/PerlIO.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -21,7 +22,7 @@
 
 # The PerlIO layer is available only since 5.8.0 (5.7.2@13534)
 use Config;
-use constant PERLIO_LAYERS_ARE_ENABLED => $Config{useperlio} && $] >= 5.00703;
+use constant PERLIO_LAYERS_ARE_ENABLED => $Config{useperlio} && $] >= 5.007003;
 
 use APR ();
 use APR::XSLoader ();
diff --git a/xs/APR/PerlIO/modperl_apr_perlio.c b/xs/APR/PerlIO/modperl_apr_perlio.c
index 068655d..e8c93a4 100644
--- a/xs/APR/PerlIO/modperl_apr_perlio.c
+++ b/xs/APR/PerlIO/modperl_apr_perlio.c
@@ -624,3 +624,10 @@
 }
 
 #endif /* PERLIO_LAYERS */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/PerlIO/modperl_apr_perlio.h b/xs/APR/PerlIO/modperl_apr_perlio.h
index 122aecf..15c853a 100644
--- a/xs/APR/PerlIO/modperl_apr_perlio.h
+++ b/xs/APR/PerlIO/modperl_apr_perlio.h
@@ -74,3 +74,10 @@
 #endif /* MP_SOURCE_SCAN */
 
 #endif /* MODPERL_APR_PERLIO_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Pool/APR__Pool.h b/xs/APR/Pool/APR__Pool.h
index 7f4c253..4a168b3 100644
--- a/xs/APR/Pool/APR__Pool.h
+++ b/xs/APR/Pool/APR__Pool.h
@@ -77,6 +77,8 @@
          * there are no more references, in which case                  \
          * the interpreter will be putback into the mip                 \
          */                                                             \
+        MP_TRACE_i(MP_FUNC, "DO: calling interp_unselect(0x%lx)",       \
+                   acct->interp);					\
         (void)modperl_opt_interp_unselect(acct->interp);                \
     }                                                                   \
 } STMT_END
@@ -100,6 +102,8 @@
     if (modperl_opt_thx_interp_get) {                                   \
         if ((acct->interp = modperl_opt_thx_interp_get(aTHX))) {        \
             acct->interp->refcnt++;                                     \
+            MP_TRACE_i(MP_FUNC, "TO: (0x%lx)->refcnt incremented to %ld",   \
+                       acct->interp, acct->interp->refcnt);                 \
         }                                                               \
     }                                                                   \
 } STMT_END
@@ -313,6 +317,7 @@
          * there are no more references, in which case
          * the interpreter will be putback into the mip
          */
+        MP_TRACE_i(MP_FUNC, "calling interp_unselect(0x%lx)", cdata->interp);
         (void)modperl_opt_interp_unselect(cdata->interp);
     }
 #endif
@@ -344,6 +349,8 @@
     if (modperl_opt_thx_interp_get) {
         if ((data->interp = modperl_opt_thx_interp_get(data->perl))) {
             data->interp->refcnt++;
+            MP_TRACE_i(MP_FUNC, "(0x%lx)->refcnt incremented to %ld",
+                       data->interp, data->interp->refcnt);
         }
     }
 #endif
@@ -382,3 +389,10 @@
         apr_pool_destroy(p);
     }
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/SockAddr/APR__SockAddr.h b/xs/APR/SockAddr/APR__SockAddr.h
index 6cdad71..06790d9 100644
--- a/xs/APR/SockAddr/APR__SockAddr.h
+++ b/xs/APR/SockAddr/APR__SockAddr.h
@@ -23,3 +23,10 @@
 
     return addr;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Socket/APR__Socket.h b/xs/APR/Socket/APR__Socket.h
index dfc681c..0c2a88e 100644
--- a/xs/APR/Socket/APR__Socket.h
+++ b/xs/APR/Socket/APR__Socket.h
@@ -118,10 +118,17 @@
 }
 
 #ifndef WIN32
-static MP_INLINE int mpxs_APR__Socket_fileno(pTHX_ apr_socket_t *sock)
+static MP_INLINE int mpxs_APR__Socket_fileno(pTHX_ apr_socket_t *socket)
 {
     apr_os_sock_t s;
-    apr_os_sock_get(&s, sock);
+    apr_os_sock_get(&s, socket);
     return s;
 }
 #endif
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Status/APR__Status.h b/xs/APR/Status/APR__Status.h
index 6c2a6fc..b741cb2 100644
--- a/xs/APR/Status/APR__Status.h
+++ b/xs/APR/Status/APR__Status.h
@@ -23,3 +23,10 @@
 #define mpxs_APR__Status_is_ECONNABORTED APR_STATUS_IS_ECONNABORTED
 #define mpxs_APR__Status_is_ECONNRESET   APR_STATUS_IS_ECONNRESET
 #define mpxs_APR__Status_is_TIMEUP       APR_STATUS_IS_TIMEUP
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/String/APR__String.h b/xs/APR/String/APR__String.h
index a18092b..a257cdd 100644
--- a/xs/APR/String/APR__String.h
+++ b/xs/APR/String/APR__String.h
@@ -23,3 +23,10 @@
 
     return newSVpvn(buff, 4);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Table/APR__Table.h b/xs/APR/Table/APR__Table.h
index dfadcc9..4ef6c49 100644
--- a/xs/APR/Table/APR__Table.h
+++ b/xs/APR/Table/APR__Table.h
@@ -232,3 +232,10 @@
     });
 
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/ThreadMutex/APR__ThreadMutex.h b/xs/APR/ThreadMutex/APR__ThreadMutex.h
index 626676b..3f4a395 100644
--- a/xs/APR/ThreadMutex/APR__ThreadMutex.h
+++ b/xs/APR/ThreadMutex/APR__ThreadMutex.h
@@ -28,3 +28,10 @@
     mpxs_add_pool_magic(mutex_sv, p_sv);
     return mutex_sv;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/ThreadRWLock/APR__ThreadRWLock.h b/xs/APR/ThreadRWLock/APR__ThreadRWLock.h
index ecbd6e5..a2d4d4b 100644
--- a/xs/APR/ThreadRWLock/APR__ThreadRWLock.h
+++ b/xs/APR/ThreadRWLock/APR__ThreadRWLock.h
@@ -27,3 +27,10 @@
     mpxs_add_pool_magic(rwlock_sv, p_sv);
     return rwlock_sv;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/URI/APR__URI.h b/xs/APR/URI/APR__URI.h
index a5345bb..59589aa 100644
--- a/xs/APR/URI/APR__URI.h
+++ b/xs/APR/URI/APR__URI.h
@@ -93,3 +93,10 @@
     }
     return (SV *)NULL;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/UUID/APR__UUID.h b/xs/APR/UUID/APR__UUID.h
index 3dcc11d..db29a69 100644
--- a/xs/APR/UUID/APR__UUID.h
+++ b/xs/APR/UUID/APR__UUID.h
@@ -49,3 +49,10 @@
 }
 
 #define apr_uuid_DESTROY(uuid) safefree(uuid)
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/Util/APR__Util.h b/xs/APR/Util/APR__Util.h
index 7311ecb..e51aa7e 100644
--- a/xs/APR/Util/APR__Util.h
+++ b/xs/APR/Util/APR__Util.h
@@ -19,3 +19,10 @@
 {
     return apr_password_validate(passwd, hash) == APR_SUCCESS;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/APR/aprext/Makefile.PL b/xs/APR/aprext/Makefile.PL
index c0be844..66a825d 100644
--- a/xs/APR/aprext/Makefile.PL
+++ b/xs/APR/aprext/Makefile.PL
@@ -19,6 +19,8 @@
     $src{$cfile} = "$srcdir/$cfile";
 }
 
+push @obj, q{modperl_dummy.o};
+
 my @skip = qw(dynamic test);
 push @skip, q{static}
     unless (Apache2::Build::BUILD_APREXT);
diff --git a/xs/APR/aprext/modperl_dummy.c b/xs/APR/aprext/modperl_dummy.c
new file mode 100644
index 0000000..3cd0378
--- /dev/null
+++ b/xs/APR/aprext/modperl_dummy.c
@@ -0,0 +1,51 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements.  See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You under the Apache License, Version 2.0

+ * (the "License"); you may not use this file except in compliance with

+ * the License.  You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#include "mod_perl.h"

+

+/* FIXME: To define extern perl_module to something so libaprext.lib can be

+ * linked without error when building against httpd-2.4+. (The symbol is

+ * referenced by modperl_apache_compat.h for httpd-2.4+, so must be defined

+ * somewhere in that case.)

+ */

+module AP_MODULE_DECLARE_DATA perl_module = {

+    STANDARD20_MODULE_STUFF,

+    NULL, /* dir config creater */

+    NULL,  /* dir merger --- default is to override */

+    NULL, /* server config */

+    NULL,  /* merge server config */

+    NULL,              /* table of config file commands       */

+    NULL,    /* register hooks */

+};

+

+/* FIXME: These functions are called from modperl_trace() in libaprext.lib

+ * but are normally defined in mod_perl.c which can't be included.

+ */

+

+int modperl_is_running(void)

+{

+    return 0;

+}

+

+int modperl_threads_started(void)

+{

+    return 0;

+}

+

+int modperl_threaded_mpm(void)

+{

+    return 0;

+}

diff --git a/xs/Apache2/Access/Apache2__Access.h b/xs/Apache2/Access/Apache2__Access.h
index 539e201..fe0759e 100644
--- a/xs/Apache2/Access/Apache2__Access.h
+++ b/xs/Apache2/Access/Apache2__Access.h
@@ -19,7 +19,12 @@
     AV *av;
     HV *hv;
     register int x;
-    const apr_array_header_t *reqs_arr = ap_requires(r);
+    const apr_array_header_t *reqs_arr = 
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || AP_SERVER_MINORVERSION_NUMBER>=3
+        0;
+#else
+        ap_requires(r);
+#endif
     require_line *reqs;
 
     if (!reqs_arr) {
@@ -95,11 +100,18 @@
 const char *mpxs_Apache2__RequestRec_auth_type(pTHX_ request_rec *r,
                                               char *type)
 {
+    const char *ret = NULL;
+
     if (type) {
         mpxs_insert_auth_cfg(aTHX_ r, "AuthType", type);
     }
 
-    return ap_auth_type(r);
+    ret = ap_auth_type(r);
+    if (!ret) {
+        return "none";
+    }
+
+    return ret;
 }
 
 static MP_INLINE
@@ -154,3 +166,10 @@
     return MP_HTTPD_OVERRIDE_OPTS_DEFAULT;
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/CmdParms/Apache2__CmdParms.h b/xs/Apache2/CmdParms/Apache2__CmdParms.h
index 165350c..66497f2 100644
--- a/xs/Apache2/CmdParms/Apache2__CmdParms.h
+++ b/xs/Apache2/CmdParms/Apache2__CmdParms.h
@@ -46,3 +46,10 @@
     return MP_HTTPD_OVERRIDE_OPTS_DEFAULT;
 #endif
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Command/Apache2__Command.h b/xs/Apache2/Command/Apache2__Command.h
index cefefe6..9527d77 100644
--- a/xs/Apache2/Command/Apache2__Command.h
+++ b/xs/Apache2/Command/Apache2__Command.h
@@ -16,3 +16,10 @@
 
 #define mpxs_Apache2__Command_next(cmd) \
 (++cmd, ((cmd && cmd->name) ? cmd : NULL))
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Connection/Apache2__Connection.h b/xs/Apache2/Connection/Apache2__Connection.h
index 1c57ec3..9cdb2cd 100644
--- a/xs/Apache2/Connection/Apache2__Connection.h
+++ b/xs/Apache2/Connection/Apache2__Connection.h
@@ -40,3 +40,10 @@
 {
     return ap_get_remote_host(c, (void *)dir_config, type, NULL);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/ConnectionUtil/Apache2__ConnectionUtil.h b/xs/Apache2/ConnectionUtil/Apache2__ConnectionUtil.h
index 0a2a8c6..40e0c5f 100644
--- a/xs/Apache2/ConnectionUtil/Apache2__ConnectionUtil.h
+++ b/xs/Apache2/ConnectionUtil/Apache2__ConnectionUtil.h
@@ -24,6 +24,27 @@
     if (!ccfg) {
         return &PL_sv_undef;
     }
-    
-    return modperl_pnotes(aTHX_ &ccfg->pnotes, key, val, NULL, c);
+
+    return modperl_pnotes(aTHX_ &ccfg->pnotes, key, val, c->pool);
 }
+
+static MP_INLINE
+void mpxs_Apache2__Connection_pnotes_kill(pTHX_ conn_rec *c)
+{
+    MP_dCCFG;
+
+    modperl_config_con_init(c, ccfg);
+
+    if (!ccfg) {
+        return;
+    }
+
+    modperl_pnotes_kill(&ccfg->pnotes);
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Const/Const.pm b/xs/Apache2/Const/Const.pm
index a4ffb5e..05b84c3 100644
--- a/xs/Apache2/Const/Const.pm
+++ b/xs/Apache2/Const/Const.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/xs/Apache2/Directive/Apache2__Directive.h b/xs/Apache2/Directive/Apache2__Directive.h
index 3e502cb..2350e31 100644
--- a/xs/Apache2/Directive/Apache2__Directive.h
+++ b/xs/Apache2/Directive/Apache2__Directive.h
@@ -195,3 +195,10 @@
         }
     });
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Filter/Apache2__Filter.h b/xs/Apache2/Filter/Apache2__Filter.h
index f18c076..bc55137 100644
--- a/xs/Apache2/Filter/Apache2__Filter.h
+++ b/xs/Apache2/Filter/Apache2__Filter.h
@@ -196,8 +196,9 @@
         }
 
 #ifdef USE_ITHREADS
-        if (!ctx->perl) {
-            ctx->perl = aTHX;
+        if (!ctx->interp) {
+            ctx->interp = modperl_thx_interp_get(aTHX);
+            MP_INTERP_REFCNT_inc(ctx->interp);
         }
 #endif
         ctx->data = SvREFCNT_inc(data);
@@ -366,3 +367,10 @@
 
     return rc;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Log/Apache2__Log.h b/xs/Apache2/Log/Apache2__Log.h
index 21f8bdc..e3c558b 100644
--- a/xs/Apache2/Log/Apache2__Log.h
+++ b/xs/Apache2/Log/Apache2__Log.h
@@ -338,3 +338,10 @@
 
     XSRETURN_EMPTY;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/MPM/Apache2__MPM.h b/xs/Apache2/MPM/Apache2__MPM.h
index de9c187..9ede5f3 100644
--- a/xs/Apache2/MPM/Apache2__MPM.h
+++ b/xs/Apache2/MPM/Apache2__MPM.h
@@ -58,3 +58,10 @@
     newCONSTSUB(PL_defstash, "Apache2::MPM::show",
                 newSVpv(ap_show_mpm(), 0));
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Module/Apache2__Module.h b/xs/Apache2/Module/Apache2__Module.h
index 87719fa..f95b6b6 100644
--- a/xs/Apache2/Module/Apache2__Module.h
+++ b/xs/Apache2/Module/Apache2__Module.h
@@ -96,3 +96,10 @@
 
     return;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/RequestIO/Apache2__RequestIO.h b/xs/Apache2/RequestIO/Apache2__RequestIO.h
index fbb5032..6c80830 100644
--- a/xs/Apache2/RequestIO/Apache2__RequestIO.h
+++ b/xs/Apache2/RequestIO/Apache2__RequestIO.h
@@ -386,3 +386,10 @@
 
     return rc;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/RequestRec/Apache2__RequestRec.h b/xs/Apache2/RequestRec/Apache2__RequestRec.h
index 3bdcec8..4a85481 100644
--- a/xs/Apache2/RequestRec/Apache2__RequestRec.h
+++ b/xs/Apache2/RequestRec/Apache2__RequestRec.h
@@ -146,3 +146,10 @@
 
     return RETVAL;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/RequestUtil/Apache2__RequestUtil.h b/xs/Apache2/RequestUtil/Apache2__RequestUtil.h
index 118f441..4433c88 100644
--- a/xs/Apache2/RequestUtil/Apache2__RequestUtil.h
+++ b/xs/Apache2/RequestUtil/Apache2__RequestUtil.h
@@ -212,7 +212,19 @@
         return &PL_sv_undef;
     }
 
-    return modperl_pnotes(aTHX_ &rcfg->pnotes, key, val, r, NULL);
+    return modperl_pnotes(aTHX_ &rcfg->pnotes, key, val, r->pool);
+}
+
+static MP_INLINE
+void mpxs_Apache2__RequestRec_pnotes_kill(pTHX_ request_rec *r)
+{
+    MP_dRCFG;
+
+    if (!rcfg) {
+        return;
+    }
+
+    modperl_pnotes_kill(&rcfg->pnotes);
 }
 
 #define mpxs_Apache2__RequestRec_dir_config(r, key, sv_val) \
@@ -349,3 +361,61 @@
     apr_pool_cleanup_register(r->pool, r->pool, child_terminate,
                               apr_pool_cleanup_null);
 }
+
+
+
+static MP_INLINE
+apr_status_t mpxs_ap_register_auth_provider(pTHX_ I32 items, SV **MARK, SV **SP)
+{
+    apr_pool_t *pool;
+    const char *provider_group;
+    const char *provider_name;
+    const char *provider_version;
+    SV *callback1;
+    SV *callback2 = NULL;
+    int type;
+
+    if (items != 7)
+       Perl_croak(aTHX_ "pool, provider_group, provider_name, "
+                        "provider_version, callback1, callback2, type");
+
+    if (SvROK(*MARK) && sv_derived_from(*MARK, "APR::Pool")) {
+        IV tmp = SvIV((SV*)SvRV(*MARK));
+            if (tmp == 0) {
+                Perl_croak(aTHX_ "invalid pool object (already destroyed?)");
+            }
+        pool = INT2PTR(APR__Pool, tmp);
+    }
+    else {
+        Perl_croak(aTHX_ SvROK(*MARK) ?
+                       "pool is not of type APR::Pool" :
+                       "pool is not a blessed reference");
+        }
+
+    MARK++;
+    provider_group = (const char *)SvPV_nolen(*MARK);
+    MARK++;
+    provider_name = (const char *)SvPV_nolen(*MARK);
+    MARK++;
+    provider_version = (const char *)SvPV_nolen(*MARK);
+    MARK++;
+    callback1 = newSVsv(*MARK);
+    MARK++;
+    callback2 = NULL;
+    if (SvROK(*MARK)) {
+        callback2 = newSVsv(*MARK);
+    }
+    MARK++;
+    type = (int)SvIV(*MARK);
+
+    return modperl_register_auth_provider(pool, provider_group, provider_name,
+                                          provider_version, callback1,
+                                          callback2, type);
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Response/Apache2__Response.h b/xs/Apache2/Response/Apache2__Response.h
index 267694e..6bd03be 100644
--- a/xs/Apache2/Response/Apache2__Response.h
+++ b/xs/Apache2/Response/Apache2__Response.h
@@ -39,3 +39,10 @@
     }
     ap_set_last_modified(r);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/ServerRec/Apache2__ServerRec.h b/xs/Apache2/ServerRec/Apache2__ServerRec.h
new file mode 100644
index 0000000..91d944a
--- /dev/null
+++ b/xs/Apache2/ServerRec/Apache2__ServerRec.h
@@ -0,0 +1,32 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || AP_SERVER_MINORVERSION_NUMBER>=3
+#define loglevel log.level
+
+static MP_INLINE
+int mpxs_Apache2__ServerRec_is_virtual(pTHX_ server_rec *s, SV *val)
+{
+    int retval = s->is_virtual;
+
+    if (val) {
+        s->is_virtual = SvIV(val);
+    }
+
+    return retval;
+}
+
+#endif
diff --git a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h
index 2abd68f..f52ed0a 100644
--- a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h
+++ b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h
@@ -205,3 +205,23 @@
     newCONSTSUB(PL_defstash, "Apache2::ServerUtil::get_server_built",
                 newSVpv(ap_get_server_built(), 0));
 }
+
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || \
+    (AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER>=3)
+static MP_INLINE
+int mpxs_Apache2__ServerRec_loglevel(pTHX_ server_rec *s, int loglevel)
+{
+    if (loglevel) {
+        s->log.level = loglevel;
+    }
+
+    return s->log.level;
+}
+#endif
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/SubProcess/Apache2__SubProcess.h b/xs/Apache2/SubProcess/Apache2__SubProcess.h
index c5c21e9..4db7d4a 100644
--- a/xs/Apache2/SubProcess/Apache2__SubProcess.h
+++ b/xs/Apache2/SubProcess/Apache2__SubProcess.h
@@ -216,3 +216,10 @@
 
     PUTBACK;
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/SubRequest/Apache2__SubRequest.h b/xs/Apache2/SubRequest/Apache2__SubRequest.h
index aef5953..debfa70 100644
--- a/xs/Apache2/SubRequest/Apache2__SubRequest.h
+++ b/xs/Apache2/SubRequest/Apache2__SubRequest.h
@@ -31,3 +31,10 @@
 
     return ap_run_sub_req(r);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/URI/Apache2__URI.h b/xs/Apache2/URI/Apache2__URI.h
index ce22b56..5c33c26 100644
--- a/xs/Apache2/URI/Apache2__URI.h
+++ b/xs/Apache2/URI/Apache2__URI.h
@@ -38,3 +38,10 @@
 
     return SvPVX(url);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/Apache2/Util/Apache2__Util.h b/xs/Apache2/Util/Apache2__Util.h
index 2140767..19220d0 100644
--- a/xs/Apache2/Util/Apache2__Util.h
+++ b/xs/Apache2/Util/Apache2__Util.h
@@ -16,3 +16,10 @@
 
 #define TIME_NOW apr_time_now()
 #define DEFAULT_TIME_FORMAT "%a, %d %b %Y %H:%M:%S %Z"
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/ModPerl/Const/Const.pm b/xs/ModPerl/Const/Const.pm
index 46c3b5f..2b9632d 100644
--- a/xs/ModPerl/Const/Const.pm
+++ b/xs/ModPerl/Const/Const.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
diff --git a/xs/ModPerl/Const/Const.xs b/xs/ModPerl/Const/Const.xs
index 33a4c0c..85b0a32 100644
--- a/xs/ModPerl/Const/Const.xs
+++ b/xs/ModPerl/Const/Const.xs
@@ -17,6 +17,23 @@
 #include "mod_perl.h"
 #include "modperl_const.h"
 
+#ifndef WIN32
+/* FIXME: To define extern perl_module to something so Const.so can be
+ * loaded later. Without this code, loading Const.so fails with 
+ * undefined_symbol: perl_module. (Windows does not need this since it
+ * explicitly links against mod_perl.lib anyway.)
+ */
+module AP_MODULE_DECLARE_DATA perl_module = {
+    STANDARD20_MODULE_STUFF,
+    NULL, /* dir config creater */
+    NULL,  /* dir merger --- default is to override */
+    NULL, /* server config */
+    NULL,  /* merge server config */
+    NULL,              /* table of config file commands       */
+    NULL,    /* register hooks */
+};
+#endif
+
 MODULE = ModPerl::Const    PACKAGE = ModPerl::Const
 
 PROTOTYPES: disable
diff --git a/xs/ModPerl/Global/ModPerl__Global.h b/xs/ModPerl/Global/ModPerl__Global.h
index 2ece589..0d76ceb 100644
--- a/xs/ModPerl/Global/ModPerl__Global.h
+++ b/xs/ModPerl/Global/ModPerl__Global.h
@@ -60,3 +60,10 @@
     return mpxs_special_list_do(aTHX_ name, package,
                                 modperl_perl_global_avcv_register);
 }
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/ModPerl/Interpreter/ModPerl__Interpreter.h b/xs/ModPerl/Interpreter/ModPerl__Interpreter.h
new file mode 100644
index 0000000..c3f735e
--- /dev/null
+++ b/xs/ModPerl/Interpreter/ModPerl__Interpreter.h
@@ -0,0 +1,28 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+static MP_INLINE
+modperl_interp_t *mpxs_ModPerl__Interpreter_current(pTHX_ SV *class)
+{
+    return modperl_thx_interp_get(aTHX);
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/ModPerl/Util/ModPerl__Util.h b/xs/ModPerl/Util/ModPerl__Util.h
index d61d174..3e09070 100644
--- a/xs/ModPerl/Util/ModPerl__Util.h
+++ b/xs/ModPerl/Util/ModPerl__Util.h
@@ -40,3 +40,10 @@
     modperl_package_unload(aTHX_ pkg)
 
 /* ModPerl::Util::exit lives in mod_perl.so, see modperl_perl.c */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/maps/apache2_functions.map b/xs/maps/apache2_functions.map
index ea5026c..0455e8b 100644
--- a/xs/maps/apache2_functions.map
+++ b/xs/maps/apache2_functions.map
@@ -37,11 +37,26 @@
 
 MODULE=Apache2::RequestUtil
  ap_get_status_line
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+ ap_register_auth_provider | mpxs_ | ...
+#_end_
 
 MODULE=Apache2::RequestUtil   PACKAGE=guess
  ap_psignature | | r, prefix
 >ap_finalize_request_protocol
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } < 2003000
  ap_default_type
+#_end_
  ap_get_server_name
  ap_get_server_port
 !ap_content_type_tolower
@@ -161,6 +176,14 @@
  int:DEFINE_method_register | | server_rec *:s, const char *:methname
 ~add_version_component
  void:DEFINE_add_version_component | | server_rec *:s, const char *:component
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+ mpxs_Apache2__ServerRec_loglevel | | server_rec *:s, loglevel=NULL
+#_end_
 
 MODULE=Apache2::ServerUtil   PACKAGE=Apache2::ServerUtil
  ap_exists_config_define
@@ -533,3 +556,13 @@
 ?ap_mpm_set_pidfile
 ?ap_mpm_set_scoreboard
 ?ap_listen_pre_config
+
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+MODULE=Apache2::Provider
+ ap_register_provider
+#_end_
diff --git a/xs/maps/apache2_structures.map b/xs/maps/apache2_structures.map
index f86ec93..c9ff850 100644
--- a/xs/maps/apache2_structures.map
+++ b/xs/maps/apache2_structures.map
@@ -2,6 +2,20 @@
 
 # for mapping see %ModPerl::MapUtil::disabled_map in
 # lib/ModPerl/MapUtil.pm
+# the mapping happens in lib/ModPerl/StructureMap.pm: sub parse
+#    '<' => 'auto-generated but gives only a read-only access'
+#    '&' => 'RDWR accessor to a char* field, supporting undef arg'
+#    '$' => 'RONLY accessor, with WRITE accessor before child_init'
+#    '%' => like $, but makes sure that for the write accessor the
+#           original perl scalar can change or go away w/o affecting
+#           the object
+# my %disabled_map = (
+#     '!' => 'disabled or not yet implemented',
+#     '~' => 'implemented but not auto-generated',
+#     '-' => 'likely never be available to Perl',
+#     '>' => '"private" to apache',
+#     '?' => 'unclassified',
+# );
 
 IGNORE: ap_LINK_ ap_filter_func ap_bucket_error ap_listen_rec core_net_rec
 
@@ -69,6 +83,15 @@
    proto_output_filters
    proto_input_filters
 ?  eos_sent
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+<  useragent_addr
+   useragent_ip
+#_end_
 </request_rec>
 
 <server_rec>
@@ -78,11 +101,28 @@
 -  defn_line_number
 %  server_admin
 %  server_hostname
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+%  server_scheme
+#_end_
 $  port
 %  error_fname
 $  error_log
 $  loglevel
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+~  is_virtual
+#_else_
 <  is_virtual
+#_end_
 <  module_config
 <  lookup_defaults
 <  addrs
@@ -97,6 +137,14 @@
 $  limit_req_line
 $  limit_req_fieldsize
 $  limit_req_fields
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+   context
+#_end_
 </server_rec>
 
 <conn_rec>
@@ -104,6 +152,15 @@
 <  base_server
 >  vhost_lookup_data
 <  local_addr
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+<  client_addr
+   client_ip
+#_end_
 <  local_ip
 <  local_host
 <  remote_addr
@@ -121,6 +178,15 @@
    output_filters
 <  sbh
 <  bucket_alloc
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+<  log
+<  log_id
+#_end_
 </conn_rec>
 
 !<server_addr_rec>
diff --git a/xs/maps/modperl_functions.map b/xs/maps/modperl_functions.map
index a928ba8..66047aa 100644
--- a/xs/maps/modperl_functions.map
+++ b/xs/maps/modperl_functions.map
@@ -22,6 +22,16 @@
  mpxs_Apache2__RequestRec_handler | | ...
  mpxs_Apache2__RequestRec_content_languages | | r, languages=(SV *)NULL
 
+#_if_ do {                                                                  \
+          Apache2::Build->build_config                                      \
+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \
+          ? ($1*1000+$2)*1000+$3                                            \
+          : die "Cannot get httpd version";                                 \
+      } > 2003000
+MODULE=Apache2::ServerRec   PACKAGE=Apache2::ServerRec
+ mpxs_Apache2__ServerRec_is_virtual       | | server_rec *:s, val=(SV *)NULL
+#_end_
+
 MODULE=Apache2::RequestUtil   PACKAGE=guess
  mpxs_Apache2__RequestRec_push_handlers
  mpxs_Apache2__RequestRec_set_handlers
@@ -30,6 +40,7 @@
  mpxs_Apache2__RequestRec_location
  mpxs_Apache2__RequestRec_as_string
  mpxs_Apache2__RequestRec_pnotes | | r, key=(SV *)NULL, val=(SV *)NULL
+ mpxs_Apache2__RequestRec_pnotes_kill | | r
  mpxs_Apache2__RequestRec_add_config | | r, lines, override=MP_HTTPD_OVERRIDE_HTACCESS, path=NULL, override_options=MP_HTTPD_OVERRIDE_OPTS_UNSET
  mpxs_Apache2__RequestRec_document_root | | r, new_root=(SV *)NULL
  mpxs_Apache2__RequestRec_child_terminate
@@ -95,6 +106,7 @@
 
 MODULE=Apache2::ConnectionUtil   PACKAGE=guess
  mpxs_Apache2__Connection_pnotes | | c, key=(SV *)NULL, val=(SV *)NULL
+ mpxs_Apache2__Connection_pnotes_kill | | c
 
 MODULE=Apache2::Filter
  modperl_filter_attributes | MPXS_ | ... | MODIFY_CODE_ATTRIBUTES
@@ -162,3 +174,10 @@
 
 MODULE=Apache2::Access   PACKAGE=guess
  mpxs_Apache2__RequestRec_allow_override_opts
+
+#_if_ do {use Apache2::Build; Apache2::Build::PERL_HAS_ITHREADS}
+
+MODULE=ModPerl::Interpreter
+ mpxs_ModPerl__Interpreter_current | | class=Nullsv
+
+#_end_
diff --git a/xs/maps/modperl_structures.map b/xs/maps/modperl_structures.map
new file mode 100644
index 0000000..9157ee3
--- /dev/null
+++ b/xs/maps/modperl_structures.map
@@ -0,0 +1,44 @@
+##########  ModPerl structures  ##########
+
+# for mapping see %ModPerl::MapUtil::disabled_map in
+# lib/ModPerl/MapUtil.pm
+
+#_if_ do {use Apache2::Build; Apache2::Build::PERL_HAS_ITHREADS}
+
+<modperl_interp_t>
+<  mip
+<  perl
+<  num_requests
+<  flags
+-  ccfg
+<  refcnt
+-  tid
+</modperl_interp_t>
+
+<modperl_interp_pool_t>
+<  server
+<  tipool
+<  parent
+</modperl_interp_pool_t>
+
+<modperl_tipool_t>
+-  tiplock
+-  available
+-  idle
+-  busy
+<  in_use
+<  size
+-  data
+<  cfg
+-  func
+</modperl_tipool_t>
+
+<modperl_tipool_config_t>
+<  start
+<  min_spare
+<  max_spare
+<  max
+<  max_requests
+</modperl_tipool_config_t>
+
+#_end_
diff --git a/xs/maps/modperl_types.map b/xs/maps/modperl_types.map
index 3b02f02..b251940 100644
--- a/xs/maps/modperl_types.map
+++ b/xs/maps/modperl_types.map
@@ -1,12 +1,24 @@
 ##########  mod_perl types  ##########
 
-struct modperl_filter_t | Apache2::OutputFilter
+struct modperl_filter_t        | Apache2::OutputFilter
+
+#_if_ do {use Apache2::Build; Apache2::Build::PERL_HAS_ITHREADS}
+
+struct modperl_interp_t        | ModPerl::Interpreter
+struct modperl_interp_pool_t   | ModPerl::InterpPool
+struct modperl_tipool_t        | ModPerl::TiPool
+struct modperl_tipool_config_t | ModPerl::TiPoolConfig
+PerlInterpreter *              | IV
+
+#_end_
 
 ##########  Perl types  ##########
 
 SV *  | SV
 I32   | IV
 I32 * | IV
+U16   | UV
+U16 * | UV
 U32   | UV
 U32 * | UV
 
diff --git a/xs/modperl_xs_util.h b/xs/modperl_xs_util.h
index 9273251..749352e 100644
--- a/xs/modperl_xs_util.h
+++ b/xs/modperl_xs_util.h
@@ -158,3 +158,10 @@
 
 
 #endif /* MODPERL_XS_H */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xs/tables/current/APR/FunctionTable.pm b/xs/tables/current/APR/FunctionTable.pm
index cf3d278..6e3b404 100644
--- a/xs/tables/current/APR/FunctionTable.pm
+++ b/xs/tables/current/APR/FunctionTable.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package APR::FunctionTable;
 
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/xs/tables/current/Apache2/ConstantsTable.pm b/xs/tables/current/Apache2/ConstantsTable.pm
index 1192611..9ea2d43 100644
--- a/xs/tables/current/Apache2/ConstantsTable.pm
+++ b/xs/tables/current/Apache2/ConstantsTable.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package Apache2::ConstantsTable;
 
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -53,7 +54,6 @@
       'OPT_EXECCGI',
       'OPT_UNSET',
       'OPT_INCNOEXEC',
-      'OPT_INC_WITH_EXEC',
       'OPT_SYM_OWNER',
       'OPT_MULTI',
       'OPT_ALL'
diff --git a/xs/tables/current/Apache2/FunctionTable.pm b/xs/tables/current/Apache2/FunctionTable.pm
index 96e7bd3..dd06d45 100644
--- a/xs/tables/current/Apache2/FunctionTable.pm
+++ b/xs/tables/current/Apache2/FunctionTable.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package Apache2::FunctionTable;
 
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/xs/tables/current/Apache2/StructureTable.pm b/xs/tables/current/Apache2/StructureTable.pm
index af50be1..80dd06c 100644
--- a/xs/tables/current/Apache2/StructureTable.pm
+++ b/xs/tables/current/Apache2/StructureTable.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package Apache2::StructureTable;
 
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -3333,6 +3334,126 @@
         'name' => 'suexec_enabled'
       }
     ]
+  },
+  {
+    'type' => 'modperl_interp_t',
+    'elts' => [
+      {
+        'type' => 'modperl_interp_pool_t *',
+        'name' => 'mip'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num_requests'
+      },
+      {
+        'type' => 'U8',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'modperl_config_con_t *',
+        'name' => 'ccfg'
+      },
+      {
+        'type' => 'int',
+        'name' => 'refcnt'
+      },
+      {
+        'type' => 'unsigned long',
+        'name' => 'tid'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_interp_pool_t',
+    'elts' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'modperl_tipool_config_t *',
+        'name' => 'tipool_cfg'
+      },
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'parent'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_tipool_t',
+    'elts' => [
+      {
+        'type' => 'perl_mutex',
+        'name' => 'tiplock'
+      },
+      {
+        'type' => 'perl_cond',
+        'name' => 'available'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'idle'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'busy'
+      },
+      {
+        'type' => 'int',
+        'name' => 'in_use'
+      },
+      {
+        'type' => 'int',
+        'name' => 'size'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'modperl_tipool_config_t *',
+        'name' => 'cfg'
+      },
+      {
+        'type' => 'modperl_tipool_vtbl_t *',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_tipool_config_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'start'
+      },
+      {
+        'type' => 'int',
+        'name' => 'min_spare'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max_spare'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max_requests'
+      }
+    ]
   }
 ];
 
diff --git a/xs/tables/current/ModPerl/FunctionTable.pm b/xs/tables/current/ModPerl/FunctionTable.pm
index 188f746..bbf979b 100644
--- a/xs/tables/current/ModPerl/FunctionTable.pm
+++ b/xs/tables/current/ModPerl/FunctionTable.pm
@@ -1,3 +1,4 @@
+# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
 package ModPerl::FunctionTable;
 
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -4424,19 +4425,6 @@
     ]
   },
   {
-    'return_type' => 'char *',
-    'name' => 'modperl_pid_tid',
-    'attr' => [
-      '__inline__'
-    ],
-    'args' => [
-      {
-        'type' => 'apr_pool_t *',
-        'name' => 'p'
-      }
-    ]
-  },
-  {
     'return_type' => 'SV *',
     'name' => 'modperl_pnotes',
     'args' => [
@@ -4460,7 +4448,17 @@
         'type' => 'request_rec *',
         'name' => 'r'
       }
-    ]    
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_pnotes_kill',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'cl_data'
+      }
+    ]
   },
   {
     'return_type' => 'int',
@@ -6321,6 +6319,20 @@
     ]
   },
   {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Connection_pnotes_kill',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
     'return_type' => 'SV *',
     'name' => 'mpxs_Apache2__Directive_as_hash',
     'attr' => [
@@ -7128,6 +7140,20 @@
     ]
   },
   {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_pnotes_kill',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
     'return_type' => 'SV *',
     'name' => 'mpxs_Apache2__RequestRec_print',
     'args' => [
@@ -8255,6 +8281,24 @@
         'name' => 'func'
       }
     ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'mpxs_ModPerl__Interpreter_current',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'class'
+      }
+    ]
   }
 ];
 
diff --git a/xs/tables/current24/APR/FunctionTable.pm b/xs/tables/current24/APR/FunctionTable.pm
new file mode 100644
index 0000000..cf3d278
--- /dev/null
+++ b/xs/tables/current24/APR/FunctionTable.pm
@@ -0,0 +1,228 @@
+package APR::FunctionTable;
+
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# ! WARNING: this file was manually generated on
+# !          Tue Jun 22 22:00:00 2004
+# !          It contains a subset of functions appearing in
+# !          ModPerl::FunctionTable used to build APR.so
+# !          Eventually this will be autogenerated by
+# !          Apache::ParseSource
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+$APR::FunctionTable = [
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'func'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace_level_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'logfile'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'level'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace_logfile_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'logfile_new'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned long',
+    'name' => 'modperl_debug_level',
+    'args' => []
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_hash_tie',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_hash_tied_object',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_perl_sv_setref_uv',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'rv'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'UV',
+        'name' => 'uv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_uri_t *',
+    'name' => 'modperl_uri_new',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_perl_gensym',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'pack'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_error_strerror',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'rc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_croak',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'rc'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_interp_unselect',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'modperl_bucket_sv_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+];
+
+1;
diff --git a/xs/tables/current24/Apache2/ConstantsTable.pm b/xs/tables/current24/Apache2/ConstantsTable.pm
new file mode 100644
index 0000000..f54adfd
--- /dev/null
+++ b/xs/tables/current24/Apache2/ConstantsTable.pm
@@ -0,0 +1,545 @@
+package Apache2::ConstantsTable;
+
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# ! WARNING: generated by Apache2::ParseSource/0.02
+# !          Mon Jul  1 12:38:09 2013
+# !          do NOT edit, any changes will be lost !
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+$Apache2::ConstantsTable = {
+  'ModPerl' => {
+    'common' => [
+      'MODPERL_RC_EXIT'
+    ]
+  },
+  'Apache2::Const' => {
+    'types' => [
+      'DIR_MAGIC_TYPE'
+    ],
+    'satisfy' => [
+      'SATISFY_ALL',
+      'SATISFY_ANY',
+      'SATISFY_NOSPEC'
+    ],
+    'remotehost' => [
+      'REMOTE_HOST',
+      'REMOTE_NAME',
+      'REMOTE_NOLOOKUP',
+      'REMOTE_DOUBLE_REV'
+    ],
+    'proxy' => [
+      'PROXYREQ_NONE',
+      'PROXYREQ_PROXY',
+      'PROXYREQ_REVERSE',
+      'PROXYREQ_RESPONSE'
+    ],
+    'platform' => [
+      'LF',
+      'CR',
+      'CRLF',
+      'CRLF_ASCII'
+    ],
+    'override' => [
+      'OR_NONE',
+      'OR_LIMIT',
+      'OR_OPTIONS',
+      'OR_FILEINFO',
+      'OR_AUTHCFG',
+      'OR_INDEXES',
+      'OR_UNSET',
+      'ACCESS_CONF',
+      'RSRC_CONF',
+      'EXEC_ON_READ',
+      'OR_ALL'
+    ],
+    'options' => [
+      'OPT_NONE',
+      'OPT_INDEXES',
+      'OPT_INCLUDES',
+      'OPT_SYM_LINKS',
+      'OPT_EXECCGI',
+      'OPT_UNSET',
+      'OPT_INC_WITH_EXEC',
+      'OPT_SYM_OWNER',
+      'OPT_MULTI',
+      'OPT_ALL'
+    ],
+    'mpmq' => [
+      'AP_MPMQ_NOT_SUPPORTED',
+      'AP_MPMQ_STATIC',
+      'AP_MPMQ_DYNAMIC',
+      'AP_MPMQ_STARTING',
+      'AP_MPMQ_RUNNING',
+      'AP_MPMQ_STOPPING',
+      'AP_MPMQ_MAX_DAEMON_USED',
+      'AP_MPMQ_IS_THREADED',
+      'AP_MPMQ_IS_FORKED',
+      'AP_MPMQ_HARD_LIMIT_DAEMONS',
+      'AP_MPMQ_HARD_LIMIT_THREADS',
+      'AP_MPMQ_MAX_THREADS',
+      'AP_MPMQ_MIN_SPARE_DAEMONS',
+      'AP_MPMQ_MIN_SPARE_THREADS',
+      'AP_MPMQ_MAX_SPARE_DAEMONS',
+      'AP_MPMQ_MAX_SPARE_THREADS',
+      'AP_MPMQ_MAX_REQUESTS_DAEMON',
+      'AP_MPMQ_MAX_DAEMONS',
+      'AP_MPMQ_MPM_STATE',
+      'AP_MPMQ_IS_ASYNC',
+      'AP_MPMQ_GENERATION',
+      'AP_MPMQ_HAS_SERF'
+    ],
+    'methods' => [
+      'M_GET',
+      'M_PUT',
+      'M_POST',
+      'M_DELETE',
+      'M_CONNECT',
+      'M_OPTIONS',
+      'M_TRACE',
+      'M_PATCH',
+      'M_PROPFIND',
+      'M_PROPPATCH',
+      'M_MKCOL',
+      'M_COPY',
+      'M_MOVE',
+      'M_LOCK',
+      'M_UNLOCK',
+      'M_VERSION_CONTROL',
+      'M_CHECKOUT',
+      'M_UNCHECKOUT',
+      'M_CHECKIN',
+      'M_UPDATE',
+      'M_LABEL',
+      'M_REPORT',
+      'M_MKWORKSPACE',
+      'M_MKACTIVITY',
+      'M_BASELINE_CONTROL',
+      'M_MERGE',
+      'M_INVALID',
+      'METHODS'
+    ],
+    'log' => [
+      'APLOG_EMERG',
+      'APLOG_ALERT',
+      'APLOG_CRIT',
+      'APLOG_ERR',
+      'APLOG_WARNING',
+      'APLOG_NOTICE',
+      'APLOG_INFO',
+      'APLOG_DEBUG',
+      'APLOG_TRACE1',
+      'APLOG_TRACE2',
+      'APLOG_TRACE3',
+      'APLOG_TRACE4',
+      'APLOG_TRACE5',
+      'APLOG_TRACE6',
+      'APLOG_TRACE7',
+      'APLOG_TRACE8',
+      'APLOG_LEVELMASK',
+      'APLOG_TOCLIENT',
+      'APLOG_STARTUP',
+      'APLOG_NO_MODULE',
+      'APLOG_MODULE_INDEX'
+    ],
+    'input_mode' => [
+      'AP_MODE_READBYTES',
+      'AP_MODE_GETLINE',
+      'AP_MODE_EATCRLF',
+      'AP_MODE_SPECULATIVE',
+      'AP_MODE_EXHAUSTIVE',
+      'AP_MODE_INIT'
+    ],
+    'http' => [
+      'HTTP_CONTINUE',
+      'HTTP_SWITCHING_PROTOCOLS',
+      'HTTP_PROCESSING',
+      'HTTP_OK',
+      'HTTP_CREATED',
+      'HTTP_ACCEPTED',
+      'HTTP_NON_AUTHORITATIVE',
+      'HTTP_NO_CONTENT',
+      'HTTP_RESET_CONTENT',
+      'HTTP_PARTIAL_CONTENT',
+      'HTTP_MULTI_STATUS',
+      'HTTP_ALREADY_REPORTED',
+      'HTTP_IM_USED',
+      'HTTP_MULTIPLE_CHOICES',
+      'HTTP_MOVED_PERMANENTLY',
+      'HTTP_MOVED_TEMPORARILY',
+      'HTTP_SEE_OTHER',
+      'HTTP_NOT_MODIFIED',
+      'HTTP_USE_PROXY',
+      'HTTP_TEMPORARY_REDIRECT',
+      'HTTP_PERMANENT_REDIRECT',
+      'HTTP_BAD_REQUEST',
+      'HTTP_UNAUTHORIZED',
+      'HTTP_PAYMENT_REQUIRED',
+      'HTTP_FORBIDDEN',
+      'HTTP_NOT_FOUND',
+      'HTTP_METHOD_NOT_ALLOWED',
+      'HTTP_NOT_ACCEPTABLE',
+      'HTTP_PROXY_AUTHENTICATION_REQUIRED',
+      'HTTP_REQUEST_TIME_OUT',
+      'HTTP_CONFLICT',
+      'HTTP_GONE',
+      'HTTP_LENGTH_REQUIRED',
+      'HTTP_PRECONDITION_FAILED',
+      'HTTP_REQUEST_ENTITY_TOO_LARGE',
+      'HTTP_REQUEST_URI_TOO_LARGE',
+      'HTTP_UNSUPPORTED_MEDIA_TYPE',
+      'HTTP_RANGE_NOT_SATISFIABLE',
+      'HTTP_EXPECTATION_FAILED',
+      'HTTP_UNPROCESSABLE_ENTITY',
+      'HTTP_LOCKED',
+      'HTTP_FAILED_DEPENDENCY',
+      'HTTP_UPGRADE_REQUIRED',
+      'HTTP_PRECONDITION_REQUIRED',
+      'HTTP_TOO_MANY_REQUESTS',
+      'HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE',
+      'HTTP_INTERNAL_SERVER_ERROR',
+      'HTTP_NOT_IMPLEMENTED',
+      'HTTP_BAD_GATEWAY',
+      'HTTP_SERVICE_UNAVAILABLE',
+      'HTTP_GATEWAY_TIME_OUT',
+      'HTTP_VARIANT_ALSO_VARIES',
+      'HTTP_INSUFFICIENT_STORAGE',
+      'HTTP_LOOP_DETECTED',
+      'HTTP_NOT_EXTENDED',
+      'HTTP_NETWORK_AUTHENTICATION_REQUIRED'
+    ],
+    'filter_type' => [
+      'AP_FTYPE_RESOURCE',
+      'AP_FTYPE_CONTENT_SET',
+      'AP_FTYPE_PROTOCOL',
+      'AP_FTYPE_TRANSCODE',
+      'AP_FTYPE_CONNECTION',
+      'AP_FTYPE_NETWORK'
+    ],
+    'context' => [
+      'NOT_IN_VIRTUALHOST',
+      'NOT_IN_LIMIT',
+      'NOT_IN_DIRECTORY',
+      'NOT_IN_LOCATION',
+      'NOT_IN_FILES',
+      'NOT_IN_HTACCESS',
+      'NOT_IN_DIR_LOC_FILE',
+      'GLOBAL_ONLY'
+    ],
+    'conn_keepalive' => [
+      'AP_CONN_UNKNOWN',
+      'AP_CONN_CLOSE',
+      'AP_CONN_KEEPALIVE'
+    ],
+    'config' => [
+      'DECLINE_CMD'
+    ],
+    'common' => [
+      'OK',
+      'DECLINED',
+      'DONE',
+      'NOT_FOUND',
+      'FORBIDDEN',
+      'AUTH_REQUIRED',
+      'SERVER_ERROR',
+      'REDIRECT'
+    ],
+    'cmd_how' => [
+      'RAW_ARGS',
+      'TAKE1',
+      'TAKE2',
+      'ITERATE',
+      'ITERATE2',
+      'FLAG',
+      'NO_ARGS',
+      'TAKE12',
+      'TAKE3',
+      'TAKE23',
+      'TAKE123',
+      'TAKE13',
+      'TAKE_ARGV'
+    ],
+    'authz_status' => [
+      'AUTHZ_DENIED',
+      'AUTHZ_GRANTED',
+      'AUTHZ_NEUTRAL',
+      'AUTHZ_GENERAL_ERROR',
+      'AUTHZ_DENIED_NO_USER'
+    ],
+    'authn_status' => [
+      'AUTH_DENIED',
+      'AUTH_GRANTED',
+      'AUTH_USER_FOUND',
+      'AUTH_USER_NOT_FOUND',
+      'AUTH_GENERAL_ERROR'
+    ],
+    'auth' => [
+      'AUTHN_PROVIDER_GROUP',
+      'AUTHZ_PROVIDER_GROUP',
+      'AUTHN_PROVIDER_VERSION',
+      'AUTHZ_PROVIDER_VERSION',
+      'AUTHN_DEFAULT_PROVIDER',
+      'AUTHN_PROVIDER_NAME_NOTE',
+      'AUTHZ_PROVIDER_NAME_NOTE',
+      'AUTHN_PREFIX',
+      'AUTHZ_PREFIX',
+      'AP_AUTH_INTERNAL_PER_URI',
+      'AP_AUTH_INTERNAL_PER_CONF',
+      'AP_AUTH_INTERNAL_MASK'
+    ]
+  },
+  'APR::Const' => {
+    'uri' => [
+      'APR_URI_FTP_DEFAULT_PORT',
+      'APR_URI_SSH_DEFAULT_PORT',
+      'APR_URI_TELNET_DEFAULT_PORT',
+      'APR_URI_GOPHER_DEFAULT_PORT',
+      'APR_URI_HTTP_DEFAULT_PORT',
+      'APR_URI_POP_DEFAULT_PORT',
+      'APR_URI_NNTP_DEFAULT_PORT',
+      'APR_URI_IMAP_DEFAULT_PORT',
+      'APR_URI_PROSPERO_DEFAULT_PORT',
+      'APR_URI_WAIS_DEFAULT_PORT',
+      'APR_URI_LDAP_DEFAULT_PORT',
+      'APR_URI_HTTPS_DEFAULT_PORT',
+      'APR_URI_RTSP_DEFAULT_PORT',
+      'APR_URI_SNEWS_DEFAULT_PORT',
+      'APR_URI_ACAP_DEFAULT_PORT',
+      'APR_URI_NFS_DEFAULT_PORT',
+      'APR_URI_TIP_DEFAULT_PORT',
+      'APR_URI_SIP_DEFAULT_PORT',
+      'APR_URI_UNP_OMITSITEPART',
+      'APR_URI_UNP_OMITUSER',
+      'APR_URI_UNP_OMITPASSWORD',
+      'APR_URI_UNP_OMITUSERINFO',
+      'APR_URI_UNP_REVEALPASSWORD',
+      'APR_URI_UNP_OMITPATHINFO',
+      'APR_URI_UNP_OMITQUERY'
+    ],
+    'table' => [
+      'APR_OVERLAP_TABLES_SET',
+      'APR_OVERLAP_TABLES_MERGE'
+    ],
+    'status' => [
+      'APR_TIMEUP'
+    ],
+    'socket' => [
+      'APR_SO_LINGER',
+      'APR_SO_KEEPALIVE',
+      'APR_SO_DEBUG',
+      'APR_SO_NONBLOCK',
+      'APR_SO_REUSEADDR',
+      'APR_SO_SNDBUF',
+      'APR_SO_RCVBUF',
+      'APR_SO_DISCONNECTED'
+    ],
+    'shutdown_how' => [
+      'APR_SHUTDOWN_READ',
+      'APR_SHUTDOWN_WRITE',
+      'APR_SHUTDOWN_READWRITE'
+    ],
+    'read_type' => [
+      'APR_BLOCK_READ',
+      'APR_NONBLOCK_READ'
+    ],
+    'poll' => [
+      'APR_POLLIN',
+      'APR_POLLPRI',
+      'APR_POLLOUT',
+      'APR_POLLERR',
+      'APR_POLLHUP',
+      'APR_POLLNVAL',
+      'APR_POLLSET_THREADSAFE',
+      'APR_POLLSET_NOCOPY',
+      'APR_POLLSET_WAKEABLE',
+      'APR_POLLSET_NODEFAULT'
+    ],
+    'lockmech' => [
+      'APR_LOCK_FCNTL',
+      'APR_LOCK_FLOCK',
+      'APR_LOCK_SYSVSEM',
+      'APR_LOCK_PROC_PTHREAD',
+      'APR_LOCK_POSIXSEM',
+      'APR_LOCK_DEFAULT'
+    ],
+    'limit' => [
+      'APR_LIMIT_CPU',
+      'APR_LIMIT_MEM',
+      'APR_LIMIT_NPROC',
+      'APR_LIMIT_NOFILE'
+    ],
+    'hook' => [
+      'APR_HOOK_REALLY_FIRST',
+      'APR_HOOK_FIRST',
+      'APR_HOOK_MIDDLE',
+      'APR_HOOK_LAST',
+      'APR_HOOK_REALLY_LAST'
+    ],
+    'fprot' => [
+      'APR_FPROT_USETID',
+      'APR_FPROT_UREAD',
+      'APR_FPROT_UWRITE',
+      'APR_FPROT_UEXECUTE',
+      'APR_FPROT_GSETID',
+      'APR_FPROT_GREAD',
+      'APR_FPROT_GWRITE',
+      'APR_FPROT_GEXECUTE',
+      'APR_FPROT_WSTICKY',
+      'APR_FPROT_WREAD',
+      'APR_FPROT_WWRITE',
+      'APR_FPROT_WEXECUTE',
+      'APR_FPROT_OS_DEFAULT',
+      'APR_FPROT_FILE_SOURCE_PERMS'
+    ],
+    'fopen' => [
+      'APR_FOPEN_READ',
+      'APR_FOPEN_WRITE',
+      'APR_FOPEN_CREATE',
+      'APR_FOPEN_APPEND',
+      'APR_FOPEN_TRUNCATE',
+      'APR_FOPEN_BINARY',
+      'APR_FOPEN_EXCL',
+      'APR_FOPEN_BUFFERED',
+      'APR_FOPEN_DELONCLOSE',
+      'APR_FOPEN_XTHREAD',
+      'APR_FOPEN_SHARELOCK',
+      'APR_FOPEN_NOCLEANUP',
+      'APR_FOPEN_SENDFILE_ENABLED',
+      'APR_FOPEN_LARGEFILE',
+      'APR_FOPEN_SPARSE'
+    ],
+    'flock' => [
+      'APR_FLOCK_SHARED',
+      'APR_FLOCK_EXCLUSIVE',
+      'APR_FLOCK_TYPEMASK',
+      'APR_FLOCK_NONBLOCK'
+    ],
+    'finfo' => [
+      'APR_FINFO_LINK',
+      'APR_FINFO_MTIME',
+      'APR_FINFO_CTIME',
+      'APR_FINFO_ATIME',
+      'APR_FINFO_SIZE',
+      'APR_FINFO_CSIZE',
+      'APR_FINFO_DEV',
+      'APR_FINFO_INODE',
+      'APR_FINFO_NLINK',
+      'APR_FINFO_TYPE',
+      'APR_FINFO_USER',
+      'APR_FINFO_GROUP',
+      'APR_FINFO_UPROT',
+      'APR_FINFO_GPROT',
+      'APR_FINFO_WPROT',
+      'APR_FINFO_ICASE',
+      'APR_FINFO_NAME',
+      'APR_FINFO_MIN',
+      'APR_FINFO_IDENT',
+      'APR_FINFO_OWNER',
+      'APR_FINFO_PROT',
+      'APR_FINFO_NORM',
+      'APR_FINFO_DIRENT'
+    ],
+    'filetype' => [
+      'APR_FILETYPE_NOFILE',
+      'APR_FILETYPE_REG',
+      'APR_FILETYPE_DIR',
+      'APR_FILETYPE_CHR',
+      'APR_FILETYPE_BLK',
+      'APR_FILETYPE_PIPE',
+      'APR_FILETYPE_LNK',
+      'APR_FILETYPE_SOCK',
+      'APR_FILETYPE_UNKFILE'
+    ],
+    'filepath' => [
+      'APR_FILEPATH_NOTABOVEROOT',
+      'APR_FILEPATH_SECUREROOTTEST',
+      'APR_FILEPATH_SECUREROOT',
+      'APR_FILEPATH_NOTRELATIVE',
+      'APR_FILEPATH_NOTABSOLUTE',
+      'APR_FILEPATH_NATIVE',
+      'APR_FILEPATH_TRUENAME',
+      'APR_FILEPATH_ENCODING_UNKNOWN',
+      'APR_FILEPATH_ENCODING_LOCALE',
+      'APR_FILEPATH_ENCODING_UTF8'
+    ],
+    'error' => [
+      'APR_ENOSTAT',
+      'APR_ENOPOOL',
+      'APR_EBADDATE',
+      'APR_EINVALSOCK',
+      'APR_ENOPROC',
+      'APR_ENOTIME',
+      'APR_ENODIR',
+      'APR_ENOLOCK',
+      'APR_ENOPOLL',
+      'APR_ENOSOCKET',
+      'APR_ENOTHREAD',
+      'APR_ENOTHDKEY',
+      'APR_EGENERAL',
+      'APR_ENOSHMAVAIL',
+      'APR_EBADIP',
+      'APR_EBADMASK',
+      'APR_EDSOOPEN',
+      'APR_EABSOLUTE',
+      'APR_ERELATIVE',
+      'APR_EINCOMPLETE',
+      'APR_EABOVEROOT',
+      'APR_EBADPATH',
+      'APR_EPATHWILD',
+      'APR_ESYMNOTFOUND',
+      'APR_EPROC_UNKNOWN',
+      'APR_ENOTENOUGHENTROPY',
+      'APR_EOF',
+      'APR_EINIT',
+      'APR_ENOTIMPL',
+      'APR_EMISMATCH',
+      'APR_EBUSY',
+      'APR_EACCES',
+      'APR_EEXIST',
+      'APR_ENAMETOOLONG',
+      'APR_ENOENT',
+      'APR_ENOTDIR',
+      'APR_ENOSPC',
+      'APR_ENOMEM',
+      'APR_EMFILE',
+      'APR_ENFILE',
+      'APR_EBADF',
+      'APR_EINVAL',
+      'APR_ESPIPE',
+      'APR_EAGAIN',
+      'APR_EINTR',
+      'APR_ENOTSOCK',
+      'APR_ECONNREFUSED',
+      'APR_EINPROGRESS',
+      'APR_ECONNABORTED',
+      'APR_ECONNRESET',
+      'APR_ETIMEDOUT',
+      'APR_EHOSTUNREACH',
+      'APR_ENETUNREACH',
+      'APR_EFTYPE',
+      'APR_EPIPE',
+      'APR_EXDEV',
+      'APR_ENOTEMPTY',
+      'APR_EAFNOSUPPORT',
+      'APR_EXCL',
+      'APR_END',
+      'APR_ENOKEY',
+      'APR_ENOIV',
+      'APR_EKEYTYPE',
+      'APR_ENOSPACE',
+      'APR_ECRYPT',
+      'APR_EPADDING',
+      'APR_EKEYLENGTH',
+      'APR_ENOCIPHER',
+      'APR_ENODIGEST',
+      'APR_ENOENGINE',
+      'APR_EINITENGINE',
+      'APR_EREINIT'
+    ],
+    'common' => [
+      'APR_SUCCESS'
+    ]
+  }
+};
+
+
+1;
diff --git a/xs/tables/current24/Apache2/FunctionTable.pm b/xs/tables/current24/Apache2/FunctionTable.pm
new file mode 100644
index 0000000..adaa249
--- /dev/null
+++ b/xs/tables/current24/Apache2/FunctionTable.pm
@@ -0,0 +1,21265 @@
+package Apache2::FunctionTable;
+
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# ! WARNING: generated by Apache2::ParseSource/0.02
+# !          Mon Jul  1 12:38:14 2013
+# !          do NOT edit, any changes will be lost !
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+$Apache2::FunctionTable = [
+  {
+    'return_type' => 'void',
+    'name' => 'ap_abort_on_oom',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_cgi_vars',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_common_vars',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_file_conf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'core_dir_config *',
+        'name' => 'conf'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'url_config'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_add_if_conf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'core_dir_config *',
+        'name' => 'conf'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'url_config'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_t *',
+    'name' => 'ap_add_input_filter',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_t *',
+    'name' => 'ap_add_input_filter_handle',
+    'args' => [
+      {
+        'type' => 'ap_filter_rec_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_add_loaded_module',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'mod'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_add_module',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_directive_t *',
+    'name' => 'ap_add_node',
+    'args' => [
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'current'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'toadd'
+      },
+      {
+        'type' => 'int',
+        'name' => 'child'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_t *',
+    'name' => 'ap_add_output_filter',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_t *',
+    'name' => 'ap_add_output_filter_handle',
+    'args' => [
+      {
+        'type' => 'ap_filter_rec_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_output_filters_by_type',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_per_dir_conf',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dir_config'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_per_url_conf',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'url_config'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_add_version_component',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'component'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_allow_methods',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reset'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_allow_options',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_allow_overrides',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_allow_standard_methods',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reset'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_append_pid',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'string'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'delim'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_args_to_table',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_table_t **',
+        'name' => 'table'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_auth_name',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_auth_type',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_basic_http_header',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_bin2hex',
+    'args' => [
+      {
+        'type' => 'const void *',
+        'name' => 'src'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'srclen'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'dest'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_eoc_create',
+    'args' => [
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_eoc_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_eor_create',
+    'args' => [
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_eor_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_error_create',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'error'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'ap_bucket_error_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'int',
+        'name' => 'error'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_build_config',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'conf_pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'temp_pool'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'conftree'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_build_cont_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'temp_pool'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'current'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'curr_parent'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'orig_directive'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_byterange_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_calc_scoreboard_size',
+    'args' => []
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_calloc',
+    'args' => [
+      {
+        'type' => 'size_t',
+        'name' => 'nelem'
+      },
+      {
+        'type' => 'size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_cfg_closefile',
+    'args' => [
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'cfp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cfg_getc',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'ch'
+      },
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'cfp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cfg_getline',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bufsize'
+      },
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'cfp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_check_cmd_context',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'forbidden'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_check_mpm',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cleanup_scoreboard',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_clear_auth_internal',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_clear_method_list',
+    'args' => [
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'l'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_close_listeners',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_close_piped_log',
+    'args' => [
+      {
+        'type' => 'piped_log *',
+        'name' => 'pl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_close_selected_listeners',
+    'args' => [
+      {
+        'type' => 'ap_slave_t *',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_construct_server',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_construct_url',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_content_length_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_content_type_tolower',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_context_document_root',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_context_prefix',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_check_string',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'string'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_read',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'val'
+      },
+      {
+        'type' => 'int',
+        'name' => 'remove'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_remove',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'attrs'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_remove2',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name2'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'attrs2'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_write',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'attrs'
+      },
+      {
+        'type' => 'long',
+        'name' => 'maxage'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_cookie_write2',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name2'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'attrs2'
+      },
+      {
+        'type' => 'long',
+        'name' => 'maxage'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_copy_method_list',
+    'args' => [
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'dest'
+      },
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_core_child_status',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'ap_generation_t',
+        'name' => 'gen'
+      },
+      {
+        'type' => 'int',
+        'name' => 'slot'
+      },
+      {
+        'type' => 'mpm_child_status',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_core_input_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_core_output_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_core_reorder_directories',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_core_translate',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_count_dirs',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_conf_vector_t*',
+    'name' => 'ap_create_conn_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char **',
+    'name' => 'ap_create_environment',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_conf_vector_t *',
+    'name' => 'ap_create_per_dir_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_conf_vector_t*',
+    'name' => 'ap_create_request_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_create_sb_handle',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t **',
+        'name' => 'new_sbh'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'child_num'
+      },
+      {
+        'type' => 'int',
+        'name' => 'thread_num'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_create_scoreboard',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_scoreboard_e',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_custom_response',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'string'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_dbd_t*',
+    'name' => 'ap_dbd_acquire',
+    'args' => [
+      {
+        'type' => 'request_rec*',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_dbd_t*',
+    'name' => 'ap_dbd_cacquire',
+    'args' => [
+      {
+        'type' => 'conn_rec*',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_dbd_close',
+    'args' => [
+      {
+        'type' => 'server_rec*',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'ap_dbd_t*',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_dbd_t*',
+    'name' => 'ap_dbd_open',
+    'args' => [
+      {
+        'type' => 'apr_pool_t*',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'server_rec*',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_dbd_prepare',
+    'args' => [
+      {
+        'type' => 'server_rec*',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_destroy_sub_req',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_die',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_directory_walk',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_discard_request_body',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_document_root',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_dump_mutexes',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'out'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_error_log2stderr',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'ap_escape_errorlog_item',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'dest'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'source'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'buflen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_html2',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'toasc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_logitem',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_path_segment',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_path_segment_buffer',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_quotes',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'instring'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_shell_cmd',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_urlencoded',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_escape_urlencoded_buffer',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_exists_config_define',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_exists_scoreboard_image',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_explode_recent_gmt',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'tm'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_explode_recent_localtime',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'tm'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_expr_exec',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const ap_expr_info_t *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_expr_exec_ctx',
+    'args' => [
+      {
+        'type' => 'ap_expr_eval_ctx_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_expr_exec_re',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const ap_expr_info_t *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'source'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_expr_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_expr_lookup_default',
+    'args' => [
+      {
+        'type' => 'ap_expr_lookup_parms *',
+        'name' => 'parms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_expr_parse',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'ap_expr_info_t *',
+        'name' => 'info'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'ap_expr_lookup_fn_t *',
+        'name' => 'lookup_fn'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_expr_info_t *',
+    'name' => 'ap_expr_parse_cmd_mi',
+    'args' => [
+      {
+        'type' => 'const cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      },
+      {
+        'type' => 'ap_expr_lookup_fn_t *',
+        'name' => 'lookup_fn'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_expr_str_exec',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const ap_expr_info_t *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_expr_str_exec_re',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const ap_expr_info_t *',
+        'name' => 'expr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'source'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_fatal_signal_child_setup',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_fatal_signal_setup',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'in_pconf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_fflush',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_field_noparam',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'intype'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_file_walk',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_filter_flush',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_filter_protocol',
+    'args' => [
+      {
+        'type' => 'ap_filter_t*',
+        'name' => 'f'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'proto_flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_finalize_request_protocol',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_finalize_sub_req_protocol',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'sub_r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_find_child_by_pid',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'pid'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const command_rec *',
+    'name' => 'ap_find_command',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const command_rec *',
+        'name' => 'cmds'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const command_rec *',
+    'name' => 'ap_find_command_in_modules',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'cmd_name'
+      },
+      {
+        'type' => 'module **',
+        'name' => 'mod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_find_last_token',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'line'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'tok'
+      }
+    ]
+  },
+  {
+    'return_type' => 'module *',
+    'name' => 'ap_find_linked_module',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_find_list_item',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'line'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'tok'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_find_module_name',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_find_module_short_name',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_find_path_info',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path_info'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_find_token',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'line'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'tok'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_fini_vhost_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'main_server'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_fixup_virtual_hosts',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'main_server'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_flush_conn',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_fprintf',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_fputstrs',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_get_basic_auth_pw',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'pw'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_get_brigade',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bucket'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'long',
+    'name' => 'ap_get_client_block',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bufsiz'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_get_conn_module_loglevel',
+    'args' => [
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'int',
+        'name' => 'index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_get_conn_server_module_loglevel',
+    'args' => [
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_socket_t *',
+    'name' => 'ap_get_conn_socket',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_get_core_module_config',
+    'args' => [
+      {
+        'type' => 'const ap_conf_vector_t *',
+        'name' => 'cv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_rec_t *',
+    'name' => 'ap_get_input_filter_handle',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_off_t',
+    'name' => 'ap_get_limit_req_body',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'ap_get_limit_xml_body',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_get_list_item',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'field'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_get_loadavg',
+    'args' => [
+      {
+        'type' => 'ap_loadavg_t *',
+        'name' => 'ld'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_get_local_host',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_get_mime_headers',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_get_mime_headers_core',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_get_module_config',
+    'args' => [
+      {
+        'type' => 'const ap_conf_vector_t *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'const module *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_rec_t *',
+    'name' => 'ap_get_output_filter_handle',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_remote_host',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'conn'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dir_config'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'str_is_ip'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_remote_logname',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_get_request_module_loglevel',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void **',
+    'name' => 'ap_get_request_note',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'note_num'
+      }
+    ]
+  },
+  {
+    'return_type' => 'global_score *',
+    'name' => 'ap_get_scoreboard_global',
+    'args' => []
+  },
+  {
+    'return_type' => 'process_score *',
+    'name' => 'ap_get_scoreboard_process',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'x'
+      }
+    ]
+  },
+  {
+    'return_type' => 'worker_score *',
+    'name' => 'ap_get_scoreboard_worker',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t *',
+        'name' => 'sbh'
+      }
+    ]
+  },
+  {
+    'return_type' => 'worker_score *',
+    'name' => 'ap_get_scoreboard_worker_from_indexes',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'child_num'
+      },
+      {
+        'type' => 'int',
+        'name' => 'thread_num'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_banner',
+    'args' => []
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_built',
+    'args' => []
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_description',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_get_server_module_loglevel',
+    'args' => [
+      {
+        'type' => 'const server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_name',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_name_for_url',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_port_t',
+    'name' => 'ap_get_server_port',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'ap_get_server_protocol',
+    'args' => [
+      {
+        'type' => 'server_rec*',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_get_server_revision',
+    'args' => [
+      {
+        'type' => 'ap_version_t *',
+        'name' => 'version'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_server_version',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_get_sload',
+    'args' => [
+      {
+        'type' => 'ap_sload_t *',
+        'name' => 'ld'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_get_status_line',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_get_token',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'accept_line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'accept_white'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_getline',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'n'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'fold'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_getparents',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'line'
+      },
+      {
+        'type' => 'char',
+        'name' => 'stop'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_conf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_conf_nc',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_nc',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'line'
+      },
+      {
+        'type' => 'char',
+        'name' => 'stop'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_nulls',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'line'
+      },
+      {
+        'type' => 'char',
+        'name' => 'stop'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_nulls_nc',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'line'
+      },
+      {
+        'type' => 'char',
+        'name' => 'stop'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_white',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_getword_white_nc',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_global_mutex_create',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'instance_id'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'options'
+      }
+    ]
+  },
+  {
+    'return_type' => 'gid_t',
+    'name' => 'ap_gname2id',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_access_checker',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_access_checker_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_access_checker_ex',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_access_checker_ex_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_auth_checker',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_auth_checker_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_access',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_access_checker_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_access_ex',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_access_checker_ex_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_authn',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_check_user_id_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_authz',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_auth_checker_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_config',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_check_config_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_check_user_id',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_check_user_id_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_child_init',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_child_init_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_child_status',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_child_status_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_create_connection',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_create_connection_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_create_request',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_create_request_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_default_port',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_default_port_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_drop_privileges',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_drop_privileges_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_end_generation',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_end_generation_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_error_log',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_error_log_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_expr_lookup',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_expr_lookup_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_fixups',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_fixups_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_generate_log_id',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_generate_log_id_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_access_checker',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_access_checker_ex',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_auth_checker',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_check_config',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_check_user_id',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_child_init',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_child_status',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_create_connection',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_create_request',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_default_port',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_drop_privileges',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_end_generation',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_error_log',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_expr_lookup',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_fixups',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_generate_log_id',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_get_mgmt_items',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_get_suexec_identity',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_handler',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_header_parser',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_http_scheme',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_insert_error_filter',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_insert_filter',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_insert_network_bucket',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_log_transaction',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_map_to_storage',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_get_mgmt_items',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_get_mgmt_items_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_monitor',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_mpm',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_mpm_get_name',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_mpm_query',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_mpm_register_timed_callback',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_note_auth_failure',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_open_logs',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_optional_fn_retrieve',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_post_config',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_post_read_request',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_pre_config',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_pre_connection',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_pre_mpm',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_pre_read_request',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_process_connection',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_quick_handler',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_session_decode',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_session_encode',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_session_load',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_session_save',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_status_hook',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_get_suexec_identity',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_get_suexec_identity_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_test_config',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_translate_name',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_type_checker',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_watchdog_exit',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_watchdog_init',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_watchdog_need',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_hook_get_watchdog_step',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_handler',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_handler_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_header_parser',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_header_parser_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_http_scheme',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_http_scheme_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_insert_error_filter',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_insert_error_filter_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_insert_filter',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_insert_filter_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_insert_network_bucket',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_insert_network_bucket_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_log_transaction',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_log_transaction_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_map_to_storage',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_map_to_storage_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_monitor',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_monitor_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_mpm',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_mpm_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_mpm_get_name',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_mpm_get_name_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_mpm_query',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_mpm_query_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_mpm_register_timed_callback',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_mpm_register_timed_callback_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_note_auth_failure',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_note_auth_failure_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_open_logs',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_open_logs_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_optional_fn_retrieve',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_optional_fn_retrieve_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_post_config',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_post_config_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_post_read_request',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_post_read_request_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_pre_config',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_pre_config_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_pre_connection',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_pre_connection_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_pre_mpm',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_pre_mpm_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_pre_read_request',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_pre_read_request_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_process_connection',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_process_connection_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_quick_handler',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_quick_handler_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_session_decode',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_session_decode_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_session_encode',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_session_encode_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_session_load',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_session_load_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_session_save',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_session_save_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_status_hook',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_status_hook_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_test_config',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_test_config_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_translate_name',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_translate_name_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_type_checker',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_type_checker_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_watchdog_exit',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_watchdog_exit_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_watchdog_init',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_watchdog_init_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_watchdog_need',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_watchdog_need_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_hook_watchdog_step',
+    'args' => [
+      {
+        'type' => 'ap_HOOK_watchdog_step_t *',
+        'name' => 'pf'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_ht_time',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => 'int',
+        'name' => 'gmt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_http_chunk_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_http_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_http_header_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_http_outerror_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_if_walk',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_increment_counts',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_ind',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'char',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_index_of_response',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_init_rng',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_init_scoreboard',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'shared_score'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_init_vhost_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_init_virtual_host',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'main_server'
+      },
+      {
+        'type' => 'server_rec **',
+        'name' => 'ps'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_internal_fast_redirect',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'sub_req'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_internal_redirect',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'new_uri'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_internal_redirect_handler',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'new_uri'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_invoke_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_directory',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_initial_req',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_matchexp',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_rdirectory',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_recursion_limit_exceeded',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_is_url',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'u'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_limit_section',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_lingering_close',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_list_provider_groups',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'ap_list_provider_names',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_listen_pre_config',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_location_walk',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_assert',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szExp'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szFile'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nLine'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_cerror_',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg7'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_command_line',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_cserror_',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg8'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_error_',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg7'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_perror_',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg7'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_pid',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_log_rerror_',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg7'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_logs_child_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_lookup_provider',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_make_content_type',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_make_dirstr_parent',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_make_dirstr_prefix',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'd'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_make_etag',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'force_weak'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_make_full_path',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'dir'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_method_list_t *',
+    'name' => 'ap_make_method_list',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nelts'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_malloc',
+    'args' => [
+      {
+        'type' => 'size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_matches_request_vhost',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'host'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_md5',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'string'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_md5_binary',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_md5contextTo64',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_md5_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_md5digest',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'infile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_meets_conditions',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_merge_log_config',
+    'args' => [
+      {
+        'type' => 'const struct ap_logconf *',
+        'name' => 'old_conf'
+      },
+      {
+        'type' => 'struct ap_logconf *',
+        'name' => 'new_conf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_conf_vector_t*',
+    'name' => 'ap_merge_per_dir_configs',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'new_conf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_method_in_list',
+    'args' => [
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'l'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_method_is_limited',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_method_list_add',
+    'args' => [
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'l'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_method_list_remove',
+    'args' => [
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'l'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_method_name_of',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'methnum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_method_number_of',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_method_register',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'methname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_method_registry_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_mpm_dump_pidfile',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'out'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_end_gen_helper',
+    'args' => [
+      {
+        'type' => 'void *unused',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_pod_check',
+    'args' => [
+      {
+        'type' => 'ap_pod_t *',
+        'name' => 'pod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_pod_close',
+    'args' => [
+      {
+        'type' => 'ap_pod_t *',
+        'name' => 'pod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_mpm_pod_killpg',
+    'args' => [
+      {
+        'type' => 'ap_pod_t *',
+        'name' => 'pod'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_pod_open',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_pod_t **',
+        'name' => 'pod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_pod_signal',
+    'args' => [
+      {
+        'type' => 'ap_pod_t *',
+        'name' => 'pod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_query',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'query_code'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'result'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_register_timed_callback',
+    'args' => [
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      },
+      {
+        'type' => 'ap_mpm_callback_fn_t *',
+        'name' => 'cbfn'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_mpm_rewrite_args',
+    'args' => [
+      {
+        'type' => 'process_rec *',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mpm_safe_kill',
+    'args' => [
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'int',
+        'name' => 'sig'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_coredumpdir',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_graceful_shutdown',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_max_mem_free',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_max_requests',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_pidfile',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_mpm_set_thread_stacksize',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_mutex_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_mutex_register',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'default_dir'
+      },
+      {
+        'type' => 'apr_lockmech_e',
+        'name' => 'default_mech'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'options'
+      }
+    ]
+  },
+  {
+    'return_type' => 'struct ap_logconf *',
+    'name' => 'ap_new_log_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const struct ap_logconf *',
+        'name' => 'old'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_no2slash',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_note_auth_failure',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_note_basic_auth_failure',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_note_digest_auth_failure',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_old_write_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_open_logs',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's_main'
+      }
+    ]
+  },
+  {
+    'return_type' => 'piped_log *',
+    'name' => 'ap_open_piped_log',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'program'
+      }
+    ]
+  },
+  {
+    'return_type' => 'piped_log *',
+    'name' => 'ap_open_piped_log_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'program'
+      },
+      {
+        'type' => 'apr_cmdtype_e',
+        'name' => 'cmdtype'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_open_stderr_log',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_os_create_privileged_process',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'newproc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'progname'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'args'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'env'
+      },
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_os_escape_path',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'partial'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_os_is_path_absolute',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'dir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_parse_form_data',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'struct ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_array_header_t **',
+        'name' => 'ptr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'num'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_parse_htaccess',
+    'args' => [
+      {
+        'type' => 'ap_conf_vector_t **',
+        'name' => 'result'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_opts'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'override_list'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'access_name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_parse_log_level',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_parse_mutex',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_lockmech_e *',
+        'name' => 'mutexmech'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'mutexfile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_parse_uri',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uri'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_parse_vhost_addrs',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pass_brigade',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pass_brigade_fchk',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bucket'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_pbase64decode',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'bufcoded'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_pbase64encode',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'string'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_configfile_t *',
+    'name' => 'ap_pcfg_open_custom',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'descr'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'param'
+      },
+      {
+        'type' => 'apr_status_t (*getc_func) (char *ch, void *param)',
+        'name' => 'arg3'
+      },
+      {
+        'type' => 'apr_status_t (*gets_func) (void *buf, apr_size_t bufsiz, void *param)',
+        'name' => 'arg4'
+      },
+      {
+        'type' => 'apr_status_t (*close_func) (void *param)',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pcfg_openfile',
+    'args' => [
+      {
+        'type' => 'ap_configfile_t **',
+        'name' => 'ret_cfg'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_pcfg_strerror',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'cfp'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'rc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'ap_pcw_dir_cb_t',
+        'name' => 'dir_cb'
+      },
+      {
+        'type' => 'ap_pcw_srv_cb_t',
+        'name' => 'srv_cb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_default_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'ap_pcw_dir_cb_t',
+        'name' => 'dir_cb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_directory_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'core_server_config *',
+        'name' => 'sconf'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'ap_pcw_dir_cb_t',
+        'name' => 'dir_cb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_files_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'core_dir_config *',
+        'name' => 'dconf'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'ap_pcw_dir_cb_t',
+        'name' => 'dir_cb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_location_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'core_server_config *',
+        'name' => 'sconf'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'ap_pcw_dir_cb_t',
+        'name' => 'dir_cb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pcw_walk_server_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      },
+      {
+        'type' => 'ap_pcw_srv_cb_t',
+        'name' => 'srv_cb'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_file_t *',
+    'name' => 'ap_piped_log_read_fd',
+    'args' => [
+      {
+        'type' => 'piped_log *',
+        'name' => 'pl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_file_t *',
+    'name' => 'ap_piped_log_write_fd',
+    'args' => [
+      {
+        'type' => 'piped_log *',
+        'name' => 'pl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pool_cleanup_set_null',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_regex_t *',
+    'name' => 'ap_pregcomp',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      },
+      {
+        'type' => 'int',
+        'name' => 'cflags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_pregfree',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_regex_t *',
+        'name' => 'reg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_pregsub',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'source'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t',
+        'name' => 'pmatch'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pregsub_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'result'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'source'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'maxlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_proc_mutex_create',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'instance_id'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'options'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_process_async_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_process_child_status',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'apr_exit_why_e',
+        'name' => 'why'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_process_config_tree',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'conftree'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_process_connection',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'csd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_process_fnmatch_configs',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'conftree'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'int',
+        'name' => 'optional'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_process_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_process_request_after_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_process_request_internal',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_process_resource_config',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'conftree'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_psignature',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'prefix'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_pstr2_alnum',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'src'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'dest'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_random_insecure_bytes',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_random_parent_after_fork',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'ap_random_pick',
+    'args' => [
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'min'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'max'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_time_t',
+    'name' => 'ap_rationalize_mtime',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'mtime'
+      }
+    ]
+  },
+  {
+    'return_type' => 'server_rec *',
+    'name' => 'ap_read_config',
+    'args' => [
+      {
+        'type' => 'process_rec *',
+        'name' => 'process'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'temp_pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'config_name'
+      },
+      {
+        'type' => 'ap_directive_t **',
+        'name' => 'conftree'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_read_pid',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'pid_t *',
+        'name' => 'mypid'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'ap_read_request',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_realloc',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'ptr'
+      },
+      {
+        'type' => 'size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_recent_ctime',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'date_str'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_recent_ctime_ex',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'date_str'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      },
+      {
+        'type' => 'int',
+        'name' => 'option'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_recent_rfc822_date',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'date_str'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_reclaim_child_processes',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'terminate'
+      },
+      {
+        'type' => 'ap_reclaim_callback_fn_t *',
+        'name' => 'mpm_callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_regcomp',
+    'args' => [
+      {
+        'type' => 'ap_regex_t *',
+        'name' => 'preg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'regex'
+      },
+      {
+        'type' => 'int',
+        'name' => 'cflags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'ap_regerror',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'errcode'
+      },
+      {
+        'type' => 'const ap_regex_t *',
+        'name' => 'preg'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'errbuf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'errbuf_size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_regexec',
+    'args' => [
+      {
+        'type' => 'const ap_regex_t *',
+        'name' => 'preg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'string'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'int',
+        'name' => 'eflags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_regexec_len',
+    'args' => [
+      {
+        'type' => 'const ap_regex_t *',
+        'name' => 'preg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buff'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'int',
+        'name' => 'eflags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_regfree',
+    'args' => [
+      {
+        'type' => 'ap_regex_t *',
+        'name' => 'preg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_register_auth_provider',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'provider'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_register_config_hooks',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_register_errorlog_handler',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'tag'
+      },
+      {
+        'type' => 'ap_errorlog_handler_fn_t *',
+        'name' => 'handler'
+      },
+      {
+        'type' => 'int',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_register_extra_mpm_process',
+    'args' => [
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'ap_generation_t',
+        'name' => 'gen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_register_hooks',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_rec_t *',
+    'name' => 'ap_register_input_filter',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'ap_in_filter_func',
+        'name' => 'filter_func'
+      },
+      {
+        'type' => 'ap_init_filter_func',
+        'name' => 'filter_init'
+      },
+      {
+        'type' => 'ap_filter_type',
+        'name' => 'ftype'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_register_log_hooks',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_rec_t *',
+    'name' => 'ap_register_output_filter',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'ap_out_filter_func',
+        'name' => 'filter_func'
+      },
+      {
+        'type' => 'ap_init_filter_func',
+        'name' => 'filter_init'
+      },
+      {
+        'type' => 'ap_filter_type',
+        'name' => 'ftype'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_filter_rec_t *',
+    'name' => 'ap_register_output_filter_protocol',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'ap_out_filter_func',
+        'name' => 'filter_func'
+      },
+      {
+        'type' => 'ap_init_filter_func',
+        'name' => 'filter_init'
+      },
+      {
+        'type' => 'ap_filter_type',
+        'name' => 'ftype'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'proto_flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_register_provider',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'provider'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'ap_register_request_note',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_relieve_child_processes',
+    'args' => [
+      {
+        'type' => 'ap_reclaim_callback_fn_t *',
+        'name' => 'mpm_callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_remove_input_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_remove_loaded_module',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'mod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_remove_module',
+    'args' => [
+      {
+        'type' => 'module *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_remove_output_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_remove_pid',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_reopen_scoreboard',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_shm_t **',
+        'name' => 'shm'
+      },
+      {
+        'type' => 'int',
+        'name' => 'detached'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_replace_stderr_log',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_request_has_body',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_reserve_module_slots',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'count'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_reserve_module_slots_directive',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'directive'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_reset_module_loglevels',
+    'args' => [
+      {
+        'type' => 'struct ap_logconf *',
+        'name' => 'l'
+      },
+      {
+        'type' => 'int',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_resolve_env',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'word'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_response_code_string',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'error_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_retained_data_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_retained_data_get',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rflush',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_rgetline_core',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'n'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'read'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'fold'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rind',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'char',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rprintf',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rputc',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'c'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rputs',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_access_checker',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_access_checker_ex',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_auth_checker',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_check_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_check_user_id',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_child_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pchild'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_child_status',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'ap_generation_t',
+        'name' => 'gen'
+      },
+      {
+        'type' => 'int',
+        'name' => 'slot'
+      },
+      {
+        'type' => 'mpm_child_status',
+        'name' => 'state'
+      }
+    ]
+  },
+  {
+    'return_type' => 'conn_rec *',
+    'name' => 'ap_run_create_connection',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'csd'
+      },
+      {
+        'type' => 'long',
+        'name' => 'conn_id'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'alloc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_create_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_port_t',
+    'name' => 'ap_run_default_port',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_drop_privileges',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pchild'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_end_generation',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'ap_generation_t',
+        'name' => 'gen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_error_log',
+    'args' => [
+      {
+        'type' => 'const ap_errorlog_info *',
+        'name' => 'info'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'errstr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_expr_lookup',
+    'args' => [
+      {
+        'type' => 'ap_expr_lookup_parms *',
+        'name' => 'parms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_fixups',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_generate_log_id',
+    'args' => [
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'id'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_get_mgmt_items',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      },
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_unix_identity_t *',
+    'name' => 'ap_run_get_suexec_identity',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_header_parser',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_run_http_scheme',
+    'args' => [
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_insert_error_filter',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_insert_filter',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_insert_network_bucket',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_log_transaction',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_map_to_storage',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_monitor',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_mpm',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server_conf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_run_mpm_get_name',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_mpm_query',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'query_code'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_status_t *',
+        'name' => 'rv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_mpm_register_timed_callback',
+    'args' => [
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      },
+      {
+        'type' => 'ap_mpm_callback_fn_t *',
+        'name' => 'cbfn'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_note_auth_failure',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'auth_type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_open_logs',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_optional_fn_retrieve',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_post_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_post_read_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_pre_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_pre_connection',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'csd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_pre_mpm',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'ap_scoreboard_e',
+        'name' => 'sb_type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_pre_read_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_process_connection',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_quick_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'lookup_uri'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_rewrite_args',
+    'args' => [
+      {
+        'type' => 'process_rec *',
+        'name' => 'process'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_session_decode',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'session_rec *',
+        'name' => 'z'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_session_encode',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'session_rec *',
+        'name' => 'z'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_session_load',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'session_rec **',
+        'name' => 'z'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_run_session_save',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'session_rec *',
+        'name' => 'z'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_status_hook',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_sub_req',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_run_test_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_translate_name',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_type_checker',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_watchdog_exit',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_watchdog_init',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_watchdog_need',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'int',
+        'name' => 'singleton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_run_watchdog_step',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_runtime_dir_relative',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rvputs',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rwrite',
+    'args' => [
+      {
+        'type' => 'const void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nbyte'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ap_rxplus_t*',
+    'name' => 'ap_rxplus_compile',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_rxplus_exec',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'ap_rxplus_t *',
+        'name' => 'rx'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'newpattern'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_rxplus_match',
+    'args' => [
+      {
+        'type' => 'ap_rxplus_t *',
+        'name' => 'rx'
+      },
+      {
+        'type' => 'int',
+        'name' => 'n'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'len'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'match'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char*',
+    'name' => 'ap_rxplus_pmatch',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'ap_rxplus_t *',
+        'name' => 'rx'
+      },
+      {
+        'type' => 'int',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_satisfies',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_save_brigade',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade **',
+        'name' => 'save_to'
+      },
+      {
+        'type' => 'apr_bucket_brigade **',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_brigade',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_brigade_ex',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_core',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int (*getsfunc) (char *, int, void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'getsfunc_data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_core_ex',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int (*getsfunc) (char *, int, void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'getsfunc_data'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_ex',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_strs',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'termch'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'termarg'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg4'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_scan_script_header_err_strs_ex',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'termch'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'termarg'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_send_error_response',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'recursive_error'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_send_fd',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fd'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_send_http_options',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_send_http_trace',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_send_interim_response',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'send_headers'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'ap_send_mmap',
+    'args' => [
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mm'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_server_root_relative',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_accept_ranges',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'ap_set_config_vectors',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'section_vector'
+      },
+      {
+        'type' => 'const char *section',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'mod'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_content_length',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_content_type',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'ct'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_context_info',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'prefix'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'document_root'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_core_module_config',
+    'args' => [
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_deprecated',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_document_root',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'document_root'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_etag',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_extended_status',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'int',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_file_slot',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_flag_slot',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'int',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_flag_slot_char',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'int',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_int_slot',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_set_keepalive',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_last_modified',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_listenbacklog',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_listener',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'int',
+        'name' => 'argc'
+      },
+      {
+        'type' => 'char *const',
+        'name' => 'argv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_module_config',
+    'args' => [
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'const module *',
+        'name' => 'm'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_module_loglevel',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'struct ap_logconf *',
+        'name' => 'l'
+      },
+      {
+        'type' => 'int',
+        'name' => 'index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_mutex',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_name_virtual_host',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_receive_buffer_size',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_reqtail',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'int',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_scoreboard',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_send_buffer_size',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_server_protocol',
+    'args' => [
+      {
+        'type' => 'server_rec*',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'proto'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_string_slot',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_set_string_slot_lower',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'struct_ptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_set_sub_req_protocol',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'rnew'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_setup_auth_internal',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_setup_client_block',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'read_policy'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_setup_listeners',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_setup_make_content_type',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_setup_prelinked_modules',
+    'args' => [
+      {
+        'type' => 'process_rec *',
+        'name' => 'process'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_should_client_block',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_show_directives',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_show_modules',
+    'args' => []
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_show_mpm',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_signal_server',
+    'args' => [
+      {
+        'type' => 'int *',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_single_module_configure',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_size_list_item',
+    'args' => [
+      {
+        'type' => 'const char **',
+        'name' => 'field'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_soak_end_container',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'directive'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_some_auth_required',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_start_lingering_close',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_state_query',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'query_code'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_str2_alnum',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'src'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'dest'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_str_tolower',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_str_toupper',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_strcasecmp_match',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'expected'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_strcasestr',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 's1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_strchr',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_strchr_c',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_strcmp_match',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'expected'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_stripprefix',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'bigstring'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'prefix'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_strrchr',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_strrchr_c',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_strstr',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_strstr_c',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'ap_sub_req_lookup_dirent',
+    'args' => [
+      {
+        'type' => 'const apr_finfo_t *',
+        'name' => 'finfo'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'subtype'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'next_filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'ap_sub_req_lookup_file',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'new_file'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'next_filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'ap_sub_req_lookup_uri',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'new_uri'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'next_filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'ap_sub_req_method_uri',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'new_uri'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'next_filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_sub_req_output_filter',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_sys_privileges_handlers',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'inc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_time_process_request',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_timeout_parameter_parse',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'timeout_parameter'
+      },
+      {
+        'type' => 'apr_interval_time_t *',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'default_time_unit'
+      }
+    ]
+  },
+  {
+    'return_type' => 'uid_t',
+    'name' => 'ap_uname2id',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unescape_all',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unescape_url',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unescape_url_keep2f',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'url'
+      },
+      {
+        'type' => 'int',
+        'name' => 'decode_slashes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unescape_urlencoded',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'query'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_unixd_accept',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'accepted'
+      },
+      {
+        'type' => 'ap_listen_rec *',
+        'name' => 'lr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptrans'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_unixd_set_global_mutex_perms',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'gmutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_unixd_set_proc_mutex_perms',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'pmutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_unixd_set_rlimit',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'struct rlimit **',
+        'name' => 'plimit'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unixd_setup_child',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_unregister_extra_mpm_process',
+    'args' => [
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'ap_generation_t *',
+        'name' => 'old_gen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_update_child_status',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_update_child_status_from_conn',
+    'args' => [
+      {
+        'type' => 'ap_sb_handle_t *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_update_child_status_from_indexes',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'child_num'
+      },
+      {
+        'type' => 'int',
+        'name' => 'thread_num'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_update_mtime',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'dependency_mtime'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_update_vhost_from_headers',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_update_vhost_given_ip',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'conn'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_varbuf_cfg_getline',
+    'args' => [
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'cfp'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'max_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_varbuf_free',
+    'args' => [
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_varbuf_grow',
+    'args' => [
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'new_size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_varbuf_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'init_size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'ap_varbuf_pdup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'prepend'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'prepend_len'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'append'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'append_len'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'new_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'ap_varbuf_regsub',
+    'args' => [
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'source'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t',
+        'name' => 'pmatch'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'maxlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_varbuf_strmemcat',
+    'args' => [
+      {
+        'type' => 'struct ap_varbuf *',
+        'name' => 'vb'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_vhost_iterate_given_conn',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'conn'
+      },
+      {
+        'type' => 'ap_vhost_iterate_conn_cb',
+        'name' => 'func_cb'
+      },
+      {
+        'type' => 'void*',
+        'name' => 'baton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_vrprintf',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'vlist'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'ap_wait_or_timeout',
+    'args' => [
+      {
+        'type' => 'apr_exit_why_e *',
+        'name' => 'status'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'exitcode'
+      },
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'ret'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'ap_walk_config',
+    'args' => [
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'conftree'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'section_vector'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'ap_xml_parse_input',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_xml_doc **',
+        'name' => 'pdoc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_memnode_t *',
+    'name' => 'apr_allocator_alloc',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_allocator_create',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t **',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_allocator_destroy',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_allocator_free',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'apr_memnode_t *',
+        'name' => 'memnode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_allocator_max_free_set',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_thread_mutex_t *',
+    'name' => 'apr_allocator_mutex_get',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_allocator_mutex_set',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_allocator_owner_get',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_allocator_owner_set',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_app_initialize',
+    'args' => [
+      {
+        'type' => 'int *',
+        'name' => 'argc'
+      },
+      {
+        'type' => 'char const * const * *',
+        'name' => 'argv'
+      },
+      {
+        'type' => 'char const * const * *',
+        'name' => 'env'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'apr_array_append',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'first'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'second'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_array_cat',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'dst'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_array_clear',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'arr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'apr_array_copy',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'arr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'apr_array_copy_hdr',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'arr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'apr_array_make',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nelts'
+      },
+      {
+        'type' => 'int',
+        'name' => 'elt_size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_array_pop',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'arr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_array_pstrcat',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'arr'
+      },
+      {
+        'type' => 'const char',
+        'name' => 'sep'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_array_push',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'arr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_int64_t',
+    'name' => 'apr_atoi64',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_atomic_add32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_atomic_cas32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'with'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'cmp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void*',
+    'name' => 'apr_atomic_casptr',
+    'args' => [
+      {
+        'type' => 'volatile void **',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'with'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'cmp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_atomic_dec32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_atomic_inc32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_atomic_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_atomic_read32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_atomic_set32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_atomic_sub32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_atomic_xchg32',
+    'args' => [
+      {
+        'type' => 'volatile apr_uint32_t *',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void*',
+    'name' => 'apr_atomic_xchgptr',
+    'args' => [
+      {
+        'type' => 'volatile void **',
+        'name' => 'mem'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'with'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_decode',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'plain_dst'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'coded_src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_decode_binary',
+    'args' => [
+      {
+        'type' => 'unsigned char *',
+        'name' => 'plain_dst'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'coded_src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_decode_len',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'coded_src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_encode',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'coded_dst'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'plain_src'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len_plain_src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_encode_binary',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'coded_dst'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'plain_src'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len_plain_src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_base64_encode_len',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_cleanup',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket_brigade *',
+    'name' => 'apr_brigade_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_destroy',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_flatten',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_brigade_insert_file',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'start'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_length',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'int',
+        'name' => 'read_all'
+      },
+      {
+        'type' => 'apr_off_t *',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_partition',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'point'
+      },
+      {
+        'type' => 'apr_bucket **',
+        'name' => 'after_point'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_pflatten',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'c'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_printf',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg4'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_putc',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const char',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_puts',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_putstrs',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket_brigade *',
+    'name' => 'apr_brigade_split',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'e'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket_brigade *',
+    'name' => 'apr_brigade_split_ex',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'e'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'a'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_split_line',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bbOut'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bbIn'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'maxbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_to_iovec',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nvec'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_vprintf',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'va'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_vputstrs',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'va'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_write',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_brigade_writev',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_brigade_flush',
+        'name' => 'flush'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nvec'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_bucket_alloc',
+    'args' => [
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket_alloc_t *',
+    'name' => 'apr_bucket_alloc_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket_alloc_t *',
+    'name' => 'apr_bucket_alloc_create_ex',
+    'args' => [
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_bucket_alloc_destroy',
+    'args' => [
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_copy_notimpl',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'e'
+      },
+      {
+        'type' => 'apr_bucket **',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_bucket_destroy_noop',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_eos_create',
+    'args' => [
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_eos_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_file_create',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fd'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_file_enable_mmap',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'int',
+        'name' => 'enabled'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_file_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fd'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_flush_create',
+    'args' => [
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_flush_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_bucket_free',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'block'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_heap_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      },
+      {
+        'type' => 'void (*free_func)(void *data)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_heap_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      },
+      {
+        'type' => 'void (*free_func)(void *data)',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_immortal_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_immortal_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_mmap_create',
+    'args' => [
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mm'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'start'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_mmap_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mm'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'start'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_pipe_create',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thispipe'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_pipe_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thispipe'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_pool_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_pool_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_setaside_noop',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_setaside_notimpl',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_shared_copy',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_bucket **',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_bucket_shared_destroy',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_shared_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'start'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_shared_split',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'point'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_simple_copy',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_bucket **',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_simple_split',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'point'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_socket_create',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thissock'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_socket_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thissock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_bucket_split_notimpl',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'point'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_transient_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'apr_bucket_transient_make',
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbyte'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_collapse_spaces',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'dest'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_cpystrn',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'dst'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'src'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'dst_size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_cleanup',
+    'args' => [
+      {
+        'type' => 'apr_crypto_block_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_decrypt',
+    'args' => [
+      {
+        'type' => 'unsigned char **',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'outlen'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inlen'
+      },
+      {
+        'type' => 'apr_crypto_block_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_decrypt_finish',
+    'args' => [
+      {
+        'type' => 'unsigned char *',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'outlen'
+      },
+      {
+        'type' => 'apr_crypto_block_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_decrypt_init',
+    'args' => [
+      {
+        'type' => 'apr_crypto_block_t **',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'blockSize'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'iv'
+      },
+      {
+        'type' => 'const apr_crypto_key_t *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_encrypt',
+    'args' => [
+      {
+        'type' => 'unsigned char **',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'outlen'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inlen'
+      },
+      {
+        'type' => 'apr_crypto_block_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_encrypt_finish',
+    'args' => [
+      {
+        'type' => 'unsigned char *',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'outlen'
+      },
+      {
+        'type' => 'apr_crypto_block_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_block_encrypt_init',
+    'args' => [
+      {
+        'type' => 'apr_crypto_block_t **',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'const unsigned char **',
+        'name' => 'iv'
+      },
+      {
+        'type' => 'const apr_crypto_key_t *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'blockSize'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_cleanup',
+    'args' => [
+      {
+        'type' => 'apr_crypto_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_clear',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_crypto_driver_name',
+    'args' => [
+      {
+        'type' => 'const apr_crypto_driver_t *',
+        'name' => 'driver'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_error',
+    'args' => [
+      {
+        'type' => 'const apu_err_t **',
+        'name' => 'result'
+      },
+      {
+        'type' => 'const apr_crypto_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_get_block_key_modes',
+    'args' => [
+      {
+        'type' => 'apr_hash_t **',
+        'name' => 'modes'
+      },
+      {
+        'type' => 'const apr_crypto_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_get_block_key_types',
+    'args' => [
+      {
+        'type' => 'apr_hash_t **',
+        'name' => 'types'
+      },
+      {
+        'type' => 'const apr_crypto_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_get_driver',
+    'args' => [
+      {
+        'type' => 'const apr_crypto_driver_t **',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'params'
+      },
+      {
+        'type' => 'const apu_err_t **',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_make',
+    'args' => [
+      {
+        'type' => 'apr_crypto_t **',
+        'name' => 'f'
+      },
+      {
+        'type' => 'const apr_crypto_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'params'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_passphrase',
+    'args' => [
+      {
+        'type' => 'apr_crypto_key_t **',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'ivSize'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pass'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'passLen'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'salt'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'saltLen'
+      },
+      {
+        'type' => 'const apr_crypto_block_key_type_e',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const apr_crypto_block_key_mode_e',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'const int',
+        'name' => 'doPad'
+      },
+      {
+        'type' => 'const int',
+        'name' => 'iterations'
+      },
+      {
+        'type' => 'const apr_crypto_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_crypto_hash_t *',
+    'name' => 'apr_crypto_sha256_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_crypto_shutdown',
+    'args' => [
+      {
+        'type' => 'const apr_crypto_driver_t *',
+        'name' => 'driver'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_ctime',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'date_str'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_date_checkmask',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'mask'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_time_t',
+    'name' => 'apr_date_parse_http',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'date'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_time_t',
+    'name' => 'apr_date_parse_rfc',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'date'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_check_conn',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_close',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_datum_get',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_row_t *',
+        'name' => 'row'
+      },
+      {
+        'type' => 'int',
+        'name' => 'col'
+      },
+      {
+        'type' => 'apr_dbd_type_e',
+        'name' => 'type'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_dbd_error',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int',
+        'name' => 'errnum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_dbd_escape',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'string'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_get_driver',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const apr_dbd_driver_t **',
+        'name' => 'driver'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_dbd_get_entry',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_row_t *',
+        'name' => 'row'
+      },
+      {
+        'type' => 'int',
+        'name' => 'col'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_dbd_get_name',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_results_t *',
+        'name' => 'res'
+      },
+      {
+        'type' => 'int',
+        'name' => 'col'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_get_row',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_results_t *',
+        'name' => 'res'
+      },
+      {
+        'type' => 'apr_dbd_row_t **',
+        'name' => 'row'
+      },
+      {
+        'type' => 'int',
+        'name' => 'rownum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_dbd_name',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void*',
+    'name' => 'apr_dbd_native_handle',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_num_cols',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_results_t *',
+        'name' => 'res'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_num_tuples',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_results_t *',
+        'name' => 'res'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_open',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'params'
+      },
+      {
+        'type' => 'apr_dbd_t **',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbd_open_ex',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'params'
+      },
+      {
+        'type' => 'apr_dbd_t **',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'error'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pbquery',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nrows'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'const void **',
+        'name' => 'args'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pbselect',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_results_t **',
+        'name' => 'res'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'random'
+      },
+      {
+        'type' => 'const void **',
+        'name' => 'args'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pquery',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nrows'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nargs'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'args'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_prepare',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'query'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'label'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t **',
+        'name' => 'statement'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pselect',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_results_t **',
+        'name' => 'res'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'random'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nargs'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'args'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pvbquery',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nrows'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pvbselect',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_results_t **',
+        'name' => 'res'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'random'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg6'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pvquery',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nrows'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg5'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_pvselect',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_results_t **',
+        'name' => 'res'
+      },
+      {
+        'type' => 'apr_dbd_prepared_t *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'random'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg6'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_query',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'nrows'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'statement'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_select',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_results_t **',
+        'name' => 'res'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'statement'
+      },
+      {
+        'type' => 'int',
+        'name' => 'random'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_set_dbname',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_transaction_end',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_transaction_t *',
+        'name' => 'trans'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_transaction_mode_get',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_transaction_t *',
+        'name' => 'trans'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_transaction_mode_set',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_dbd_transaction_t *',
+        'name' => 'trans'
+      },
+      {
+        'type' => 'int',
+        'name' => 'mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbd_transaction_start',
+    'args' => [
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'apr_dbd_transaction_t **',
+        'name' => 'trans'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_dbm_close',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_delete',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_dbm_exists',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_fetch',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_datum_t *',
+        'name' => 'pvalue'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_firstkey',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t *',
+        'name' => 'pkey'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_dbm_freedatum',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_dbm_get_usednames',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pathname'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'used1'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'used2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_get_usednames_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pathname'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'used1'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'used2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_dbm_geterror',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'errcode'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'errbuf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'errbufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_nextkey',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t *',
+        'name' => 'pkey'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_open',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t **',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cntxt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_open_ex',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t **',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cntxt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dbm_store',
+    'args' => [
+      {
+        'type' => 'apr_dbm_t *',
+        'name' => 'dbm'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_datum_t',
+        'name' => 'value'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_close',
+    'args' => [
+      {
+        'type' => 'apr_dir_t *',
+        'name' => 'thedir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_make',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_make_recursive',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_open',
+    'args' => [
+      {
+        'type' => 'apr_dir_t **',
+        'name' => 'new_dir'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'dirname'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_read',
+    'args' => [
+      {
+        'type' => 'apr_finfo_t *',
+        'name' => 'finfo'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'wanted'
+      },
+      {
+        'type' => 'apr_dir_t *',
+        'name' => 'thedir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_remove',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dir_rewind',
+    'args' => [
+      {
+        'type' => 'apr_dir_t *',
+        'name' => 'thedir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_dso_error',
+    'args' => [
+      {
+        'type' => 'apr_dso_handle_t *',
+        'name' => 'dso'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dso_load',
+    'args' => [
+      {
+        'type' => 'apr_dso_handle_t **',
+        'name' => 'res_handle'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ctx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dso_sym',
+    'args' => [
+      {
+        'type' => 'apr_dso_handle_sym_t *',
+        'name' => 'ressym'
+      },
+      {
+        'type' => 'apr_dso_handle_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'symname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_dso_unload',
+    'args' => [
+      {
+        'type' => 'apr_dso_handle_t *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_dynamic_fn_register',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'apr_opt_fn_t *',
+        'name' => 'pfn'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_opt_fn_t *',
+    'name' => 'apr_dynamic_fn_retrieve',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_env_delete',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'envvar'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_env_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'value'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'envvar'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_env_set',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'envvar'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'value'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_append',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'from_path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'to_path'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_attrs_set',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_fileattrs_t',
+        'name' => 'attributes'
+      },
+      {
+        'type' => 'apr_fileattrs_t',
+        'name' => 'attr_mask'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_buffer_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_file_buffer_size_get',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_close',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_copy',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'from_path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'to_path'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_data_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_data_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void *)',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_datasync',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_dup',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'new_file'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'old_file'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_dup2',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'new_file'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'old_file'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_eof',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fptr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_int32_t',
+    'name' => 'apr_file_flags_get',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_flush',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_getc',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'ch'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_gets',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_info_get',
+    'args' => [
+      {
+        'type' => 'apr_finfo_t *',
+        'name' => 'finfo'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'wanted'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_inherit_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_inherit_unset',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_link',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'from_path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'to_path'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_lock',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_mktemp',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'fp'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'templ'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_mtime_set',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'mtime'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_name_get',
+    'args' => [
+      {
+        'type' => 'const char **',
+        'name' => 'new_path'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_namedpipe_create',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'newf'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flag'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_flags_stderr',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_flags_stdin',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_flags_stdout',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_stderr',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_stdin',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_open_stdout',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_perms_set',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_pipe_create',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_pipe_create_ex',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'blocking'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_pipe_timeout_get',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thepipe'
+      },
+      {
+        'type' => 'apr_interval_time_t *',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_pipe_timeout_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thepipe'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_file_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_file_printf',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fptr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'format'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_putc',
+    'args' => [
+      {
+        'type' => 'char',
+        'name' => 'ch'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_puts',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_read',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_read_full',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbytes'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'bytes_read'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_remove',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_rename',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'from_path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'to_path'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_seek',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_seek_where_t',
+        'name' => 'where'
+      },
+      {
+        'type' => 'apr_off_t *',
+        'name' => 'offset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_setaside',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'new_file'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'old_file'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_sync',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_trunc',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fp'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_ungetc',
+    'args' => [
+      {
+        'type' => 'char',
+        'name' => 'ch'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_unlock',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_write',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_write_full',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbytes'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'bytes_written'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_writev',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'const struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nvec'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_file_writev_full',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'const struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nvec'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_encoding',
+    'args' => [
+      {
+        'type' => 'int *',
+        'name' => 'style'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_list_merge',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'liststr'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'pathelts'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_list_split',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t **',
+        'name' => 'pathelts'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'liststr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_merge',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'newpath'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'rootpath'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'addpath'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_filepath_name_get',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'pathname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_root',
+    'args' => [
+      {
+        'type' => 'const char **',
+        'name' => 'rootpath'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'filepath'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_filepath_set',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_fnmatch',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'strings'
+      },
+      {
+        'type' => 'int',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_fnmatch_test',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_generate_random_bytes',
+    'args' => [
+      {
+        'type' => 'unsigned char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_gethostname',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_getnameinfo',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sa'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_getopt',
+    'args' => [
+      {
+        'type' => 'apr_getopt_t *',
+        'name' => 'os'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'opts'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'option_ch'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'option_arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_getopt_init',
+    'args' => [
+      {
+        'type' => 'apr_getopt_t **',
+        'name' => 'os'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      },
+      {
+        'type' => 'int',
+        'name' => 'argc'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'argv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_getopt_long',
+    'args' => [
+      {
+        'type' => 'apr_getopt_t *',
+        'name' => 'os'
+      },
+      {
+        'type' => 'const apr_getopt_option_t *',
+        'name' => 'opts'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'option_ch'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'option_arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_getservbyname',
+    'args' => [
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sockaddr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'servname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_gid_get',
+    'args' => [
+      {
+        'type' => 'apr_gid_t *',
+        'name' => 'groupid'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'groupname'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_gid_name_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'groupname'
+      },
+      {
+        'type' => 'apr_gid_t',
+        'name' => 'groupid'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_child_init',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_create',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_lockmech_e',
+        'name' => 'mech'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_destroy',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_lock',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_global_mutex_lockfile',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_global_mutex_name',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_global_mutex_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_global_mutex_t *',
+        'name' => 'theglobal_mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_trylock',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_global_mutex_unlock',
+    'args' => [
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hash_clear',
+    'args' => [
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_t *',
+    'name' => 'apr_hash_copy',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'h'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned int',
+    'name' => 'apr_hash_count',
+    'args' => [
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_hash_do',
+    'args' => [
+      {
+        'type' => 'apr_hash_do_callback_fn_t *comp',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'rec'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'ht'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_index_t *',
+    'name' => 'apr_hash_first',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_hash_get',
+    'args' => [
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_ssize_t',
+        'name' => 'klen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_t *',
+    'name' => 'apr_hash_make',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_t *',
+    'name' => 'apr_hash_make_custom',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_hashfunc_t',
+        'name' => 'hash_func'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_t *',
+    'name' => 'apr_hash_merge',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'h1'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'h2'
+      },
+      {
+        'type' => 'void * (*merger)(apr_pool_t *p, const void *key, apr_ssize_t klen, const void *h1_val, const void *h2_val, const void *data)',
+        'name' => 'arg3'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_index_t *',
+    'name' => 'apr_hash_next',
+    'args' => [
+      {
+        'type' => 'apr_hash_index_t *',
+        'name' => 'hi'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_hash_t *',
+    'name' => 'apr_hash_overlay',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'overlay'
+      },
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'base'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_hash_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_hash_t *',
+        'name' => 'thehash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hash_set',
+    'args' => [
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'ht'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_ssize_t',
+        'name' => 'klen'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hash_this',
+    'args' => [
+      {
+        'type' => 'apr_hash_index_t *',
+        'name' => 'hi'
+      },
+      {
+        'type' => 'const void **',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_ssize_t *',
+        'name' => 'klen'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned int',
+    'name' => 'apr_hashfunc_default',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_ssize_t *',
+        'name' => 'klen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hook_debug_show',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hook_deregister_all',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hook_sort_all',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_hook_sort_register',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szHookName'
+      },
+      {
+        'type' => 'apr_array_header_t **',
+        'name' => 'aHooks'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_initialize',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_ipsubnet_create',
+    'args' => [
+      {
+        'type' => 'apr_ipsubnet_t **',
+        'name' => 'ipsub'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'ipstr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'mask_or_numbits'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ipsubnet_test',
+    'args' => [
+      {
+        'type' => 'apr_ipsubnet_t *',
+        'name' => 'ipsub'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sa'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_is_empty_array',
+    'args' => [
+      {
+        'type' => 'const apr_array_header_t *',
+        'name' => 'a'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_is_empty_table',
+    'args' => [
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_itoa',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_get_option',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'LDAP *',
+        'name' => 'ldap'
+      },
+      {
+        'type' => 'int',
+        'name' => 'option'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'outvalue'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_info',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'LDAP **',
+        'name' => 'ldap'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'int',
+        'name' => 'portno'
+      },
+      {
+        'type' => 'int',
+        'name' => 'secure'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_is_ldap_url',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_is_ldapi_url',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_is_ldaps_url',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_ldap_rebind_add',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'LDAP *',
+        'name' => 'ld'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'bindDN'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'bindPW'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_ldap_rebind_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_ldap_rebind_remove',
+    'args' => [
+      {
+        'type' => 'LDAP *',
+        'name' => 'ld'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_set_option',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'LDAP *',
+        'name' => 'ldap'
+      },
+      {
+        'type' => 'int',
+        'name' => 'option'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'invalue'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_ssl_deinit',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_ssl_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'cert_auth_file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'cert_file_type'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_url_parse',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'url_in'
+      },
+      {
+        'type' => 'apr_ldap_url_desc_t **',
+        'name' => 'ludpp'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_ldap_url_parse_ext',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'url_in'
+      },
+      {
+        'type' => 'apr_ldap_url_desc_t **',
+        'name' => 'ludpp'
+      },
+      {
+        'type' => 'apr_ldap_err_t **',
+        'name' => 'result_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_ltoa',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'long',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_match_glob',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      },
+      {
+        'type' => 'apr_array_header_t **',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mcast_hops',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_byte_t',
+        'name' => 'ttl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mcast_interface',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'iface'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mcast_join',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'join'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'iface'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'source'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mcast_leave',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'addr'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'iface'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'source'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mcast_loopback',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_byte_t',
+        'name' => 'opt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md4',
+    'args' => [
+      {
+        'type' => 'unsigned char',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md4_final',
+    'args' => [
+      {
+        'type' => 'unsigned char',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'apr_md4_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md4_init',
+    'args' => [
+      {
+        'type' => 'apr_md4_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md4_set_xlate',
+    'args' => [
+      {
+        'type' => 'apr_md4_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'xlate'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md4_update',
+    'args' => [
+      {
+        'type' => 'apr_md4_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5',
+    'args' => [
+      {
+        'type' => 'unsigned char',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5_encode',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'password'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'salt'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5_final',
+    'args' => [
+      {
+        'type' => 'unsigned char',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'apr_md5_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5_init',
+    'args' => [
+      {
+        'type' => 'apr_md5_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5_set_xlate',
+    'args' => [
+      {
+        'type' => 'apr_md5_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'xlate'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_md5_update',
+    'args' => [
+      {
+        'type' => 'apr_md5_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_add',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_size'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_memcache_add_multget_key',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'data_pool'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_hash_t **',
+        'name' => 'values'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_add_server',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'apr_memcache_server_t *',
+        'name' => 'server'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'max_servers'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_memcache_t **',
+        'name' => 'mc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_decr',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'n'
+      },
+      {
+        'type' => 'apr_uint32_t *',
+        'name' => 'new_value'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_delete',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_disable_server',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'apr_memcache_server_t *',
+        'name' => 'ms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_enable_server',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'apr_memcache_server_t *',
+        'name' => 'ms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_memcache_server_t *',
+    'name' => 'apr_memcache_find_server',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'host'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_memcache_server_t *',
+    'name' => 'apr_memcache_find_server_hash',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const apr_uint32_t',
+        'name' => 'hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_memcache_server_t *',
+    'name' => 'apr_memcache_find_server_hash_default',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const apr_uint32_t',
+        'name' => 'hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_getp',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'key'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_uint16_t *',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_memcache_hash',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_memcache_hash_crc32',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_memcache_hash_default',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_incr',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'n'
+      },
+      {
+        'type' => 'apr_uint32_t *',
+        'name' => 'nv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_multgetp',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'temp_pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'data_pool'
+      },
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'values'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_replace',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_size'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_server_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'host'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'min'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'smax'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'max'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'ttl'
+      },
+      {
+        'type' => 'apr_memcache_server_t **',
+        'name' => 'ns'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_set',
+    'args' => [
+      {
+        'type' => 'apr_memcache_t *',
+        'name' => 'mc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'baton'
+      },
+      {
+        'type' => 'const apr_size_t',
+        'name' => 'data_size'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_stats',
+    'args' => [
+      {
+        'type' => 'apr_memcache_server_t *',
+        'name' => 'ms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_memcache_stats_t **',
+        'name' => 'stats'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_memcache_version',
+    'args' => [
+      {
+        'type' => 'apr_memcache_server_t *',
+        'name' => 'ms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'baton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mmap_create',
+    'args' => [
+      {
+        'type' => 'apr_mmap_t **',
+        'name' => 'newmmap'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flag'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cntxt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mmap_delete',
+    'args' => [
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mmap_dup',
+    'args' => [
+      {
+        'type' => 'apr_mmap_t **',
+        'name' => 'new_mmap'
+      },
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'old_mmap'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_mmap_offset',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'addr'
+      },
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mm'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_off_t_toa',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_optional_hook_add',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'void (*pfn)(void)',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPre'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSucc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'apr_optional_hook_get',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_os_default_encoding',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_dir_get',
+    'args' => [
+      {
+        'type' => 'apr_os_dir_t **',
+        'name' => 'thedir'
+      },
+      {
+        'type' => 'apr_dir_t *',
+        'name' => 'dir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_dir_put',
+    'args' => [
+      {
+        'type' => 'apr_dir_t **',
+        'name' => 'dir'
+      },
+      {
+        'type' => 'apr_os_dir_t *',
+        'name' => 'thedir'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_dso_handle_get',
+    'args' => [
+      {
+        'type' => 'apr_os_dso_handle_t *',
+        'name' => 'dso'
+      },
+      {
+        'type' => 'apr_dso_handle_t *',
+        'name' => 'aprdso'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_dso_handle_put',
+    'args' => [
+      {
+        'type' => 'apr_dso_handle_t **',
+        'name' => 'dso'
+      },
+      {
+        'type' => 'apr_os_dso_handle_t',
+        'name' => 'thedso'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_exp_time_get',
+    'args' => [
+      {
+        'type' => 'apr_os_exp_time_t **',
+        'name' => 'ostime'
+      },
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'aprtime'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_exp_time_put',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'aprtime'
+      },
+      {
+        'type' => 'apr_os_exp_time_t **',
+        'name' => 'ostime'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_file_get',
+    'args' => [
+      {
+        'type' => 'apr_os_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_file_put',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'file'
+      },
+      {
+        'type' => 'apr_os_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_global_mutex_get',
+    'args' => [
+      {
+        'type' => 'apr_os_global_mutex_t *',
+        'name' => 'ospmutex'
+      },
+      {
+        'type' => 'apr_global_mutex_t *',
+        'name' => 'pmutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_imp_time_get',
+    'args' => [
+      {
+        'type' => 'apr_os_imp_time_t **',
+        'name' => 'ostime'
+      },
+      {
+        'type' => 'apr_time_t *',
+        'name' => 'aprtime'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_imp_time_put',
+    'args' => [
+      {
+        'type' => 'apr_time_t *',
+        'name' => 'aprtime'
+      },
+      {
+        'type' => 'apr_os_imp_time_t **',
+        'name' => 'ostime'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char*',
+    'name' => 'apr_os_locale_encoding',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_pipe_put',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'file'
+      },
+      {
+        'type' => 'apr_os_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_pipe_put_ex',
+    'args' => [
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'file'
+      },
+      {
+        'type' => 'apr_os_file_t *',
+        'name' => 'thefile'
+      },
+      {
+        'type' => 'int',
+        'name' => 'register_cleanup'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_proc_mutex_get',
+    'args' => [
+      {
+        'type' => 'apr_os_proc_mutex_t *',
+        'name' => 'ospmutex'
+      },
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'pmutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_proc_mutex_put',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t **',
+        'name' => 'pmutex'
+      },
+      {
+        'type' => 'apr_os_proc_mutex_t *',
+        'name' => 'ospmutex'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_shm_get',
+    'args' => [
+      {
+        'type' => 'apr_os_shm_t *',
+        'name' => 'osshm'
+      },
+      {
+        'type' => 'apr_shm_t *',
+        'name' => 'shm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_shm_put',
+    'args' => [
+      {
+        'type' => 'apr_shm_t **',
+        'name' => 'shm'
+      },
+      {
+        'type' => 'apr_os_shm_t *',
+        'name' => 'osshm'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_sock_get',
+    'args' => [
+      {
+        'type' => 'apr_os_sock_t *',
+        'name' => 'thesock'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_sock_make',
+    'args' => [
+      {
+        'type' => 'apr_socket_t **',
+        'name' => 'apr_sock'
+      },
+      {
+        'type' => 'apr_os_sock_info_t *',
+        'name' => 'os_sock_info'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_sock_put',
+    'args' => [
+      {
+        'type' => 'apr_socket_t **',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_os_sock_t *',
+        'name' => 'thesock'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_os_thread_t',
+    'name' => 'apr_os_thread_current',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_os_thread_equal',
+    'args' => [
+      {
+        'type' => 'apr_os_thread_t',
+        'name' => 'tid1'
+      },
+      {
+        'type' => 'apr_os_thread_t',
+        'name' => 'tid2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_thread_get',
+    'args' => [
+      {
+        'type' => 'apr_os_thread_t **',
+        'name' => 'thethd'
+      },
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_thread_put',
+    'args' => [
+      {
+        'type' => 'apr_thread_t **',
+        'name' => 'thd'
+      },
+      {
+        'type' => 'apr_os_thread_t *',
+        'name' => 'thethd'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_threadkey_get',
+    'args' => [
+      {
+        'type' => 'apr_os_threadkey_t *',
+        'name' => 'thekey'
+      },
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_threadkey_put',
+    'args' => [
+      {
+        'type' => 'apr_threadkey_t **',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_os_threadkey_t *',
+        'name' => 'thekey'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_os_uuid_get',
+    'args' => [
+      {
+        'type' => 'unsigned char *',
+        'name' => 'uuid_data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_palloc',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_palloc_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_parse_addr_port',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'addr'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'scope_id'
+      },
+      {
+        'type' => 'apr_port_t *',
+        'name' => 'port'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_password_get',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'prompt'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'pwbuf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'bufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_password_validate',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'passwd'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_pcalloc_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_pmemdup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'm'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_poll',
+    'args' => [
+      {
+        'type' => 'apr_pollfd_t *',
+        'name' => 'aprset'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'numsock'
+      },
+      {
+        'type' => 'apr_int32_t *',
+        'name' => 'nsds'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_poll_method_defname',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollcb_add',
+    'args' => [
+      {
+        'type' => 'apr_pollcb_t *',
+        'name' => 'pollcb'
+      },
+      {
+        'type' => 'apr_pollfd_t *',
+        'name' => 'descriptor'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollcb_create',
+    'args' => [
+      {
+        'type' => 'apr_pollcb_t **',
+        'name' => 'pollcb'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollcb_create_ex',
+    'args' => [
+      {
+        'type' => 'apr_pollcb_t **',
+        'name' => 'pollcb'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pollset_method_e',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollcb_poll',
+    'args' => [
+      {
+        'type' => 'apr_pollcb_t *',
+        'name' => 'pollcb'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_pollcb_cb_t',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'baton'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollcb_remove',
+    'args' => [
+      {
+        'type' => 'apr_pollcb_t *',
+        'name' => 'pollcb'
+      },
+      {
+        'type' => 'apr_pollfd_t *',
+        'name' => 'descriptor'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_add',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      },
+      {
+        'type' => 'const apr_pollfd_t *',
+        'name' => 'descriptor'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_create',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t **',
+        'name' => 'pollset'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_create_ex',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t **',
+        'name' => 'pollset'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pollset_method_e',
+        'name' => 'method'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_destroy',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_pollset_method_name',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_poll',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_int32_t *',
+        'name' => 'num'
+      },
+      {
+        'type' => 'const apr_pollfd_t **',
+        'name' => 'descriptors'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_remove',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      },
+      {
+        'type' => 'const apr_pollfd_t *',
+        'name' => 'descriptor'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pollset_wakeup',
+    'args' => [
+      {
+        'type' => 'apr_pollset_t *',
+        'name' => 'pollset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_abortfunc_t',
+    'name' => 'apr_pool_abort_get',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_abort_set',
+    'args' => [
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abortfunc'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_allocator_t *',
+    'name' => 'apr_pool_allocator_get',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_child_cleanup_set',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_status_t (*plain_cleanup)(void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_status_t (*child_cleanup)(void *)',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_cleanup_for_exec',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_cleanup_kill',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void *)',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_cleanup_null',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_cleanup_register',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_status_t (*plain_cleanup)(void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_status_t (*child_cleanup)(void *)',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_cleanup_run',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void *)',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_clear',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_clear_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_core_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_core_ex_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_ex_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_unmanaged_ex',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_create_unmanaged_ex_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t **',
+        'name' => 'newpool'
+      },
+      {
+        'type' => 'apr_abortfunc_t',
+        'name' => 'abort_fn'
+      },
+      {
+        'type' => 'apr_allocator_t *',
+        'name' => 'allocator'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_destroy',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_destroy_debug',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file_line'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_initialize',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_pool_is_ancestor',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_note_subprocess',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'apr_kill_conditions_e',
+        'name' => 'how'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_pool_parent_get',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_pre_cleanup_register',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_status_t (*plain_cleanup)(void *)',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_tag',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'tag'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_pool_terminate',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_userdata_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_userdata_set',
+    'args' => [
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_pool_userdata_setn',
+    'args' => [
+      {
+        'type' => 'const void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_create',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'new_proc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'progname'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'args'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'env'
+      },
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_detach',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'daemonize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_fork',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_kill',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'sig'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_child_init',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_cleanup',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_create',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_lockmech_e',
+        'name' => 'mech'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_proc_mutex_defname',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_destroy',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_lock',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_proc_mutex_lockfile',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_proc_mutex_name',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_proc_mutex_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_proc_mutex_t *',
+        'name' => 'theproc_mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_trylock',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_mutex_unlock',
+    'args' => [
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_other_child_alert',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reason'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_proc_other_child_refresh',
+    'args' => [
+      {
+        'type' => 'apr_other_child_rec_t *',
+        'name' => 'ocr'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reason'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_proc_other_child_refresh_all',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'reason'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_proc_other_child_register',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'void (*maintenance) (int reason, void *, int status)',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'write_fd'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_proc_other_child_unregister',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_wait',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'exitcode'
+      },
+      {
+        'type' => 'apr_exit_why_e *',
+        'name' => 'exitwhy'
+      },
+      {
+        'type' => 'apr_wait_how_e',
+        'name' => 'waithow'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_proc_wait_all_procs',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'exitcode'
+      },
+      {
+        'type' => 'apr_exit_why_e *',
+        'name' => 'exitwhy'
+      },
+      {
+        'type' => 'apr_wait_how_e',
+        'name' => 'waithow'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_addrspace_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'addrspace'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_child_err_set',
+    'args' => [
+      {
+        'type' => 'struct apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'child_err'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'parent_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_child_errfn_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_child_errfn_t *',
+        'name' => 'errfn'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_child_in_set',
+    'args' => [
+      {
+        'type' => 'struct apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'child_in'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'parent_in'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_child_out_set',
+    'args' => [
+      {
+        'type' => 'struct apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'child_out'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'parent_out'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_cmdtype_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_cmdtype_e',
+        'name' => 'cmd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_create',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t **',
+        'name' => 'new_attr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_detach_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'detach'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_dir_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'dir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_error_check_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'chk'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_group_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'groupname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_io_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_limit_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'what'
+      },
+      {
+        'type' => 'struct rlimit *',
+        'name' => 'limit'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_procattr_user_set',
+    'args' => [
+      {
+        'type' => 'apr_procattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'username'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'password'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_psprintf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pstrcat',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pstrcatv',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nvec'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'nbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pstrdup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pstrmemdup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pstrndup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_pvsprintf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'ap'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_create',
+    'args' => [
+      {
+        'type' => 'apr_queue_t **',
+        'name' => 'queue'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'queue_capacity'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'a'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_interrupt_all',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_pop',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_push',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned int',
+    'name' => 'apr_queue_size',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_term',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_trypop',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_queue_trypush',
+    'args' => [
+      {
+        'type' => 'apr_queue_t *',
+        'name' => 'queue'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_random_add_entropy',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'g'
+      },
+      {
+        'type' => 'const void *',
+        'name' => 'entropy_'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_random_after_fork',
+    'args' => [
+      {
+        'type' => 'apr_proc_t *',
+        'name' => 'proc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_random_barrier',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'g'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_random_init',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'g'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_crypto_hash_t *',
+        'name' => 'pool_hash'
+      },
+      {
+        'type' => 'apr_crypto_hash_t *',
+        'name' => 'key_hash'
+      },
+      {
+        'type' => 'apr_crypto_hash_t *',
+        'name' => 'prng_hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_random_insecure_bytes',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'g'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'random'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_random_insecure_ready',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_random_secure_bytes',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'g'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'random'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_random_secure_ready',
+    'args' => [
+      {
+        'type' => 'apr_random_t *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_random_t *',
+    'name' => 'apr_random_standard_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_acquire',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'resource'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uint32_t',
+    'name' => 'apr_reslist_acquired_count',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_reslist_cleanup_order_set',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_create',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t **',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'int',
+        'name' => 'min'
+      },
+      {
+        'type' => 'int',
+        'name' => 'smax'
+      },
+      {
+        'type' => 'int',
+        'name' => 'hmax'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'ttl'
+      },
+      {
+        'type' => 'apr_reslist_constructor',
+        'name' => 'con'
+      },
+      {
+        'type' => 'apr_reslist_destructor',
+        'name' => 'de'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'params'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_destroy',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_invalidate',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'resource'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_maintain',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_reslist_release',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'resource'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_reslist_timeout_set',
+    'args' => [
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'reslist'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rfc822_date',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'date_str'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_rmm_addr_get',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_rmm_off_t',
+        'name' => 'entity'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rmm_attach',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t **',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_anylock_t *',
+        'name' => 'lock'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'membuf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_rmm_off_t',
+    'name' => 'apr_rmm_calloc',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'reqsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rmm_destroy',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rmm_detach',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rmm_free',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_rmm_off_t',
+        'name' => 'entity'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_rmm_init',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t **',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_anylock_t *',
+        'name' => 'lock'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'membuf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'memsize'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_rmm_off_t',
+    'name' => 'apr_rmm_malloc',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'reqsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_rmm_off_t',
+    'name' => 'apr_rmm_offset_get',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'entity'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_rmm_overhead_get',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'n'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_rmm_off_t',
+    'name' => 'apr_rmm_realloc',
+    'args' => [
+      {
+        'type' => 'apr_rmm_t *',
+        'name' => 'rmm'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'entity'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'reqsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_close',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_delete',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'const apr_sdbm_datum_t',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_fetch',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t *',
+        'name' => 'value'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_firstkey',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_lock',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_nextkey',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_open',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t **',
+        'name' => 'db'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'perms'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_sdbm_rdonly',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_store',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_sdbm_datum_t',
+        'name' => 'value'
+      },
+      {
+        'type' => 'int',
+        'name' => 'opt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sdbm_unlock',
+    'args' => [
+      {
+        'type' => 'apr_sdbm_t *',
+        'name' => 'db'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_setup_signal_thread',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sha1_base64',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'clear'
+      },
+      {
+        'type' => 'int',
+        'name' => 'len'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'out'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sha1_final',
+    'args' => [
+      {
+        'type' => 'unsigned char',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'apr_sha1_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sha1_init',
+    'args' => [
+      {
+        'type' => 'apr_sha1_ctx_t *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sha1_update',
+    'args' => [
+      {
+        'type' => 'apr_sha1_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sha1_update_binary',
+    'args' => [
+      {
+        'type' => 'apr_sha1_ctx_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'const unsigned char *',
+        'name' => 'input'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'inputLen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_shm_attach',
+    'args' => [
+      {
+        'type' => 'apr_shm_t **',
+        'name' => 'm'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'apr_shm_baseaddr_get',
+    'args' => [
+      {
+        'type' => 'const apr_shm_t *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_shm_create',
+    'args' => [
+      {
+        'type' => 'apr_shm_t **',
+        'name' => 'm'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'reqsize'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_shm_destroy',
+    'args' => [
+      {
+        'type' => 'apr_shm_t *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_shm_detach',
+    'args' => [
+      {
+        'type' => 'apr_shm_t *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_shm_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_shm_t *',
+        'name' => 'theshm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_shm_remove',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_shm_size_get',
+    'args' => [
+      {
+        'type' => 'const apr_shm_t *',
+        'name' => 'm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_sigfunc_t *',
+    'name' => 'apr_signal',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'signo'
+      },
+      {
+        'type' => 'apr_sigfunc_t *',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_signal_block',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'signum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_signal_description_get',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'signum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_signal_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pglobal'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_signal_thread',
+    'args' => [
+      {
+        'type' => 'int(*signal_handler)(int signum)',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_signal_unblock',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'signum'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_sleep',
+    'args' => [
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_snprintf',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'format'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_sockaddr_equal',
+    'args' => [
+      {
+        'type' => 'const apr_sockaddr_t *',
+        'name' => 'addr1'
+      },
+      {
+        'type' => 'const apr_sockaddr_t *',
+        'name' => 'addr2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sockaddr_info_get',
+    'args' => [
+      {
+        'type' => 'apr_sockaddr_t **',
+        'name' => 'sa'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'family'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sockaddr_ip_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'addr'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sockaddr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_sockaddr_ip_getbuf',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'buflen'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sockaddr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_accept',
+    'args' => [
+      {
+        'type' => 'apr_socket_t **',
+        'name' => 'new_sock'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'connection_pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_addr_get',
+    'args' => [
+      {
+        'type' => 'apr_sockaddr_t **',
+        'name' => 'sa'
+      },
+      {
+        'type' => 'apr_interface_e',
+        'name' => 'which'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_atmark',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'atmark'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_atreadeof',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'atreadeof'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_bind',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sa'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_close',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thesocket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_connect',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sa'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_create',
+    'args' => [
+      {
+        'type' => 'apr_socket_t **',
+        'name' => 'new_sock'
+      },
+      {
+        'type' => 'int',
+        'name' => 'family'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'int',
+        'name' => 'protocol'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_data_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_data_set',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup)(void*)',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_inherit_set',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thesocket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_inherit_unset',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thesocket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_listen',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'backlog'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_opt_get',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'opt'
+      },
+      {
+        'type' => 'apr_int32_t *',
+        'name' => 'on'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_opt_set',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'opt'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'on'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_socket_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_socket_t *',
+        'name' => 'thesocket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_protocol_get',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'protocol'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_recv',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_recvfrom',
+    'args' => [
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'from'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_send',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_sendfile',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'apr_hdtr_t *',
+        'name' => 'hdtr'
+      },
+      {
+        'type' => 'apr_off_t *',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_sendto',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'where'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_sendv',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'const struct iovec *',
+        'name' => 'vec'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'nvec'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_shutdown',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'thesocket'
+      },
+      {
+        'type' => 'apr_shutdown_how_e',
+        'name' => 'how'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_timeout_get',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_interval_time_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_timeout_set',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_socket_type_get',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sock'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_stat',
+    'args' => [
+      {
+        'type' => 'apr_finfo_t *',
+        'name' => 'finfo'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'wanted'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_strerror',
+    'args' => [
+      {
+        'type' => 'apr_status_t',
+        'name' => 'statcode'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'bufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_strfsize',
+    'args' => [
+      {
+        'type' => 'apr_off_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_strftime',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'retsize'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'max'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'format'
+      },
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'tm'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const apr_strmatch_pattern *',
+    'name' => 'apr_strmatch_precompile',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'case_sensitive'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_strnatcasecmp',
+    'args' => [
+      {
+        'type' => 'char const *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'char const *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_strnatcmp',
+    'args' => [
+      {
+        'type' => 'char const *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'char const *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_strtoff',
+    'args' => [
+      {
+        'type' => 'apr_off_t *',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'end'
+      },
+      {
+        'type' => 'int',
+        'name' => 'base'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_int64_t',
+    'name' => 'apr_strtoi64',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'end'
+      },
+      {
+        'type' => 'int',
+        'name' => 'base'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_strtok',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'str'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'sep'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'last'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_add',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_addn',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_clear',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_table_t *',
+    'name' => 'apr_table_clone',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_compress',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_table_t *',
+    'name' => 'apr_table_copy',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_table_do',
+    'args' => [
+      {
+        'type' => 'void *comp',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'rec'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg3'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const apr_array_header_t *',
+    'name' => 'apr_table_elts',
+    'args' => [
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_table_get',
+    'args' => [
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_table_t *',
+    'name' => 'apr_table_make',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nelts'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_merge',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_mergen',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_overlap',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_table_t *',
+    'name' => 'apr_table_overlay',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 'overlay'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 'base'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_set',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_setn',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_table_unset',
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_table_vdo',
+    'args' => [
+      {
+        'type' => 'void *comp',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'rec'
+      },
+      {
+        'type' => 'const apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'vp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_temp_dir_get',
+    'args' => [
+      {
+        'type' => 'const char **',
+        'name' => 'temp_dir'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_terminate',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_terminate2',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_text_append',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_text_header *',
+        'name' => 'hdr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'text'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_broadcast',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t *',
+        'name' => 'cond'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_create',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t **',
+        'name' => 'cond'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_destroy',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t *',
+        'name' => 'cond'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_thread_cond_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_thread_cond_t *',
+        'name' => 'thethread_cond'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_signal',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t *',
+        'name' => 'cond'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_timedwait',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t *',
+        'name' => 'cond'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_cond_wait',
+    'args' => [
+      {
+        'type' => 'apr_thread_cond_t *',
+        'name' => 'cond'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_create',
+    'args' => [
+      {
+        'type' => 'apr_thread_t **',
+        'name' => 'new_thread'
+      },
+      {
+        'type' => 'apr_threadattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_thread_start_t',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_data_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thread'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_data_set',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup) (void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thread'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_detach',
+    'args' => [
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_exit',
+    'args' => [
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thd'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'retval'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_join',
+    'args' => [
+      {
+        'type' => 'apr_status_t *',
+        'name' => 'retval'
+      },
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_mutex_create',
+    'args' => [
+      {
+        'type' => 'apr_thread_mutex_t **',
+        'name' => 'mutex'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_mutex_destroy',
+    'args' => [
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_mutex_lock',
+    'args' => [
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_thread_mutex_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_thread_mutex_t *',
+        'name' => 'thethread_mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_mutex_trylock',
+    'args' => [
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_mutex_unlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'mutex'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_once',
+    'args' => [
+      {
+        'type' => 'apr_thread_once_t *',
+        'name' => 'control'
+      },
+      {
+        'type' => 'void (*func)(void)',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_once_init',
+    'args' => [
+      {
+        'type' => 'apr_thread_once_t **',
+        'name' => 'control'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_busy_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_create',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t **',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'init_threads'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'max_threads'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_destroy',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_thread_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_thread_t *',
+        'name' => 'thethread'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_idle_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_idle_max_get',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_idle_max_set',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'cnt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_interval_time_t',
+    'name' => 'apr_thread_pool_idle_wait_get',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_interval_time_t',
+    'name' => 'apr_thread_pool_idle_wait_set',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_push',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_thread_start_t',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'param'
+      },
+      {
+        'type' => 'apr_byte_t',
+        'name' => 'priority'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'owner'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_schedule',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_thread_start_t',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'param'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'time'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'owner'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_scheduled_tasks_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_task_owner_get',
+    'args' => [
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'thd'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'owner'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_tasks_cancel',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'owner'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_tasks_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_tasks_high_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_tasks_run_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_thread_max_get',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_thread_max_set',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'cnt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_threads_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_threads_high_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_threads_idle_timeout_count',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_threshold_get',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'apr_thread_pool_threshold_set',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_pool_top',
+    'args' => [
+      {
+        'type' => 'apr_thread_pool_t *',
+        'name' => 'me'
+      },
+      {
+        'type' => 'apr_thread_start_t',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'param'
+      },
+      {
+        'type' => 'apr_byte_t',
+        'name' => 'priority'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'owner'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_create',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t **',
+        'name' => 'rwlock'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_destroy',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'apr_thread_rwlock_pool_get',
+    'args' => [
+      {
+        'type' => 'const apr_thread_rwlock_t *',
+        'name' => 'thethread_rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_rdlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_tryrdlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_trywrlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_unlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_thread_rwlock_wrlock',
+    'args' => [
+      {
+        'type' => 'apr_thread_rwlock_t *',
+        'name' => 'rwlock'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_thread_yield',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadattr_create',
+    'args' => [
+      {
+        'type' => 'apr_threadattr_t **',
+        'name' => 'new_attr'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadattr_detach_get',
+    'args' => [
+      {
+        'type' => 'apr_threadattr_t *',
+        'name' => 'attr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadattr_detach_set',
+    'args' => [
+      {
+        'type' => 'apr_threadattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'on'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadattr_guardsize_set',
+    'args' => [
+      {
+        'type' => 'apr_threadattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'guardsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadattr_stacksize_set',
+    'args' => [
+      {
+        'type' => 'apr_threadattr_t *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'stacksize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_data_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'threadkey'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_data_set',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_status_t (*cleanup) (void *)',
+        'name' => 'arg2'
+      },
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'threadkey'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_private_create',
+    'args' => [
+      {
+        'type' => 'apr_threadkey_t **',
+        'name' => 'key'
+      },
+      {
+        'type' => 'void (*dest)(void *)',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_private_delete',
+    'args' => [
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_private_get',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'new_mem'
+      },
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_threadkey_private_set',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'priv'
+      },
+      {
+        'type' => 'apr_threadkey_t *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_ansi_put',
+    'args' => [
+      {
+        'type' => 'apr_time_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'time_t',
+        'name' => 'input'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_time_clock_hires',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_exp_get',
+    'args' => [
+      {
+        'type' => 'apr_time_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'input'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_exp_gmt',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'input'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_exp_gmt_get',
+    'args' => [
+      {
+        'type' => 'apr_time_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'input'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_exp_lt',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'input'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_time_exp_tz',
+    'args' => [
+      {
+        'type' => 'apr_time_exp_t *',
+        'name' => 'result'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'input'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'offs'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_time_t',
+    'name' => 'apr_time_now',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_tokenize_to_argv',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'arg_str'
+      },
+      {
+        'type' => 'char ***',
+        'name' => 'argv_out'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'token_context'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uid_current',
+    'args' => [
+      {
+        'type' => 'apr_uid_t *',
+        'name' => 'userid'
+      },
+      {
+        'type' => 'apr_gid_t *',
+        'name' => 'groupid'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uid_get',
+    'args' => [
+      {
+        'type' => 'apr_uid_t *',
+        'name' => 'userid'
+      },
+      {
+        'type' => 'apr_gid_t *',
+        'name' => 'groupid'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'username'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uid_homepath_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'dirname'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'username'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uid_name_get',
+    'args' => [
+      {
+        'type' => 'char **',
+        'name' => 'username'
+      },
+      {
+        'type' => 'apr_uid_t',
+        'name' => 'userid'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uri_parse',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'apr_uri_t *',
+        'name' => 'uptr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uri_parse_hostinfo',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostinfo'
+      },
+      {
+        'type' => 'apr_uri_t *',
+        'name' => 'uptr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_port_t',
+    'name' => 'apr_uri_port_of_scheme',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'scheme_str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_uri_unparse',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_uri_t *',
+        'name' => 'uptr'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_uuid_format',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'const apr_uuid_t *',
+        'name' => 'uuid'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_uuid_get',
+    'args' => [
+      {
+        'type' => 'apr_uuid_t *',
+        'name' => 'uuid'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_uuid_parse',
+    'args' => [
+      {
+        'type' => 'apr_uuid_t *',
+        'name' => 'uuid'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uuid_str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_version',
+    'args' => [
+      {
+        'type' => 'apr_version_t *',
+        'name' => 'pvsn'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_version_string',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_vformatter',
+    'args' => [
+      {
+        'type' => 'int (*flush_func)(apr_vformatter_buff_t *b)',
+        'name' => 'arg0'
+      },
+      {
+        'type' => 'apr_vformatter_buff_t *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'ap'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_vsnprintf',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'format'
+      },
+      {
+        'type' => 'va_list',
+        'name' => 'ap'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_wait_for_io_or_timeout',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'for_read'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xlate_close',
+    'args' => [
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'convset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xlate_conv_buffer',
+    'args' => [
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'convset'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'inbuf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'inbytes_left'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'outbuf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'outbytes_left'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_int32_t',
+    'name' => 'apr_xlate_conv_byte',
+    'args' => [
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'convset'
+      },
+      {
+        'type' => 'unsigned char',
+        'name' => 'inchar'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xlate_open',
+    'args' => [
+      {
+        'type' => 'apr_xlate_t **',
+        'name' => 'convset'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'topage'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'frompage'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xlate_sb_get',
+    'args' => [
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'convset'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'onoff'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_xml_empty_elem',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_xml_elem *',
+        'name' => 'elem'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'apr_xml_insert_uri',
+    'args' => [
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'uri_array'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uri'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xml_parse_file',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_xml_parser **',
+        'name' => 'parser'
+      },
+      {
+        'type' => 'apr_xml_doc **',
+        'name' => 'ppdoc'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'xmlfd'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'buffer_length'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_xml_parser *',
+    'name' => 'apr_xml_parser_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xml_parser_done',
+    'args' => [
+      {
+        'type' => 'apr_xml_parser *',
+        'name' => 'parser'
+      },
+      {
+        'type' => 'apr_xml_doc **',
+        'name' => 'pdoc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'apr_xml_parser_feed',
+    'args' => [
+      {
+        'type' => 'apr_xml_parser *',
+        'name' => 'parser'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'apr_xml_parser_geterror',
+    'args' => [
+      {
+        'type' => 'apr_xml_parser *',
+        'name' => 'parser'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'errbuf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'errbufsize'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_xml_quote_elem',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'elem'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'apr_xml_quote_string',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'quotes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'apr_xml_to_text',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const apr_xml_elem *',
+        'name' => 'elem'
+      },
+      {
+        'type' => 'int',
+        'name' => 'style'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'namespaces'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'ns_map'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'pbuf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'psize'
+      }
+    ]
+  }
+];
+
+
+1;
diff --git a/xs/tables/current24/Apache2/StructureTable.pm b/xs/tables/current24/Apache2/StructureTable.pm
new file mode 100644
index 0000000..0bf8530
--- /dev/null
+++ b/xs/tables/current24/Apache2/StructureTable.pm
@@ -0,0 +1,5468 @@
+package Apache2::StructureTable;
+
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# ! WARNING: generated by Apache2::ParseSource/0.02
+# !          Mon Jul  1 12:38:15 2013
+# !          do NOT edit, any changes will be lost !
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+$Apache2::StructureTable = [
+  {
+    'type' => 'ap_HOOK_access_checker_ex_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_access_checker_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_auth_checker_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_check_config_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_check_user_id_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_child_init_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_child_status_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_create_connection_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_create_request_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_default_port_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_drop_privileges_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_end_generation_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_error_log_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_expr_lookup_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_fixups_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_generate_log_id_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_get_mgmt_items_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_get_suexec_identity_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_handler_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_header_parser_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_http_scheme_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_insert_error_filter_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_insert_filter_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_insert_network_bucket_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_log_transaction_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_map_to_storage_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_monitor_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_mpm_get_name_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_mpm_query_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_mpm_register_timed_callback_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_mpm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_note_auth_failure_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_open_logs_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_optional_fn_retrieve_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_post_config_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_post_read_request_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_pre_config_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_pre_connection_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_pre_mpm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_pre_read_request_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_process_connection_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_quick_handler_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_session_decode_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_session_encode_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_session_load_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_session_save_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_status_hook_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_test_config_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_translate_name_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_type_checker_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_watchdog_exit_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_watchdog_init_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_watchdog_need_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_HOOK_watchdog_step_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_LINK_access_checker_ex_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_access_checker_ex_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_access_checker_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_access_checker_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_auth_checker_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_auth_checker_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_check_config_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_check_config_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_check_user_id_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_check_user_id_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_child_init_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_child_init_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_child_status_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_child_status_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_create_connection_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_create_connection_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_create_request_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_create_request_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_default_port_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_default_port_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_drop_privileges_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_drop_privileges_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_end_generation_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_end_generation_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_error_log_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_error_log_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_expr_lookup_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_expr_lookup_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_fixups_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_fixups_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_generate_log_id_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_generate_log_id_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_get_mgmt_items_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_get_mgmt_items_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_get_suexec_identity_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_get_suexec_identity_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_handler_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_handler_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_header_parser_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_header_parser_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_http_scheme_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_http_scheme_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_insert_error_filter_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_insert_error_filter_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_insert_filter_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_insert_filter_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_insert_network_bucket_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_insert_network_bucket_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_log_transaction_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_log_transaction_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_map_to_storage_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_map_to_storage_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_monitor_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_monitor_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_mpm_get_name_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_mpm_get_name_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_mpm_query_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_mpm_query_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_mpm_register_timed_callback_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_mpm_register_timed_callback_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_mpm_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_mpm_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_note_auth_failure_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_note_auth_failure_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_open_logs_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_open_logs_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_optional_fn_retrieve_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_optional_fn_retrieve_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_post_config_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_post_config_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_post_read_request_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_post_read_request_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_pre_config_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_pre_config_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_pre_connection_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_pre_connection_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_pre_mpm_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_pre_mpm_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_pre_read_request_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_pre_read_request_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_process_connection_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_process_connection_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_quick_handler_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_quick_handler_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_session_decode_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_session_decode_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_session_encode_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_session_encode_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_session_load_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_session_load_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_session_save_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_session_save_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_status_hook_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_status_hook_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_test_config_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_test_config_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_translate_name_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_translate_name_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_type_checker_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_type_checker_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_watchdog_exit_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_watchdog_exit_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_watchdog_init_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_watchdog_init_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_watchdog_need_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_watchdog_need_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_LINK_watchdog_step_t',
+    'elts' => [
+      {
+        'type' => 'ap_HOOK_watchdog_step_t *',
+        'name' => 'pFunc'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'szName'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszPredecessors'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'aszSuccessors'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nOrder'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_bucket_error',
+    'elts' => [
+      {
+        'type' => 'apr_bucket_refcount',
+        'name' => 'refcount'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_conf_vector_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_configfile_t',
+    'elts' => [
+      {
+        'type' => 'apr_status_t(*) (char *ch, void *param)',
+        'name' => 'getch'
+      },
+      {
+        'type' => 'apr_status_t(*) (void *buf, apr_size_t bufsiz, void *param)',
+        'name' => 'getstr'
+      },
+      {
+        'type' => 'apr_status_t(*) (void *param)',
+        'name' => 'close'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'param'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'line_number'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_conn_keepalive_e',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_cookie_do',
+    'elts' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'encoded'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'new_cookies'
+      },
+      {
+        'type' => 'int',
+        'name' => 'duplicated'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_dbd_t',
+    'elts' => [
+      {
+        'type' => 'apr_dbd_t *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'const apr_dbd_driver_t *',
+        'name' => 'driver'
+      },
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'prepared'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_directive_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'directive'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'args'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'first_child'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line_num'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'last'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_errorlog_format_item',
+    'elts' => [
+      {
+        'type' => 'ap_errorlog_handler_fn_t *',
+        'name' => 'func'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'min_loglevel'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_errorlog_handler',
+    'elts' => [
+      {
+        'type' => 'ap_errorlog_handler_fn_t *',
+        'name' => 'func'
+      },
+      {
+        'type' => 'int',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_errorlog_handler_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_errorlog_info',
+    'elts' => [
+      {
+        'type' => 'const server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const request_rec *',
+        'name' => 'rmain'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      },
+      {
+        'type' => 'int',
+        'name' => 'line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'int',
+        'name' => 'using_syslog'
+      },
+      {
+        'type' => 'int',
+        'name' => 'startup'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'format'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_expr_eval_ctx_t',
+    'elts' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      },
+      {
+        'type' => 'const ap_expr_info_t *',
+        'name' => 'info'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 're_pmatch'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 're_nmatch'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 're_source'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'vary_this'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'result_string'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reclvl'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_expr_info_t',
+    'elts' => [
+      {
+        'type' => 'ap_expr_t *',
+        'name' => 'root_node'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'line_number'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_expr_list_func_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_lookup_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_lookup_parms',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'const void **',
+        'name' => 'func'
+      },
+      {
+        'type' => 'const void **',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'err'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_expr_op_binary_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_op_unary_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_string_func_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_expr_var_func_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_filter_func',
+    'elts' => [
+      {
+        'type' => 'ap_out_filter_func',
+        'name' => 'out_func'
+      },
+      {
+        'type' => 'ap_in_filter_func',
+        'name' => 'in_func'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_filter_provider_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_filter_rec_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'ap_filter_func',
+        'name' => 'filter_func'
+      },
+      {
+        'type' => 'ap_init_filter_func',
+        'name' => 'filter_init_func'
+      },
+      {
+        'type' => 'ap_filter_rec_t *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'ap_filter_provider_t *',
+        'name' => 'providers'
+      },
+      {
+        'type' => 'ap_filter_type',
+        'name' => 'ftype'
+      },
+      {
+        'type' => 'int',
+        'name' => 'debug'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'proto_flags'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_filter_t',
+    'elts' => [
+      {
+        'type' => 'ap_filter_rec_t *',
+        'name' => 'frec'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ctx'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_filter_type',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_form_pair_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'value'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_generation_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_in_filter_func',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_init_filter_func',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_input_mode_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_list_provider_groups_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_list_provider_names_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_listen_rec',
+    'elts' => [
+      {
+        'type' => 'ap_listen_rec *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'sd'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'bind_addr'
+      },
+      {
+        'type' => 'accept_function',
+        'name' => 'accept_func'
+      },
+      {
+        'type' => 'int',
+        'name' => 'active'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'protocol'
+      },
+      {
+        'type' => 'ap_slave_t *',
+        'name' => 'slave'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_loadavg_t',
+    'elts' => [
+      {
+        'type' => 'float',
+        'name' => 'loadavg'
+      },
+      {
+        'type' => 'float',
+        'name' => 'loadavg5'
+      },
+      {
+        'type' => 'float',
+        'name' => 'loadavg15'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_method_list_t',
+    'elts' => [
+      {
+        'type' => 'apr_int64_t',
+        'name' => 'method_mask'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'method_list'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_mgmt_item_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'description'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'ap_mgmt_type_e',
+        'name' => 'vtype'
+      },
+      {
+        'type' => 'ap_mgmt_value',
+        'name' => 'v'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_mgmt_type_e',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_mgmt_value',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 's_value'
+      },
+      {
+        'type' => 'long',
+        'name' => 'i_value'
+      },
+      {
+        'type' => 'apr_hash_t *',
+        'name' => 'h_value'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_module_symbol_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'modp'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_mpm_callback_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_out_filter_func',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_pcw_dir_cb_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_pcw_srv_cb_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_pod_t',
+    'elts' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'pod_in'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'pod_out'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_reclaim_callback_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_regex_t',
+    'elts' => [
+      {
+        'type' => 'void *',
+        'name' => 're_pcre'
+      },
+      {
+        'type' => 'int',
+        'name' => 're_nsub'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 're_erroffset'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_regmatch_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'rm_so'
+      },
+      {
+        'type' => 'int',
+        'name' => 'rm_eo'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_rxplus_t',
+    'elts' => [
+      {
+        'type' => 'ap_regex_t',
+        'name' => 'rx'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'subs'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'match'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'nmatch'
+      },
+      {
+        'type' => 'ap_regmatch_t *',
+        'name' => 'pmatch'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_sb_handle_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_scoreboard_e',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_slave_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_sload_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'idle'
+      },
+      {
+        'type' => 'int',
+        'name' => 'busy'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'bytes_served'
+      },
+      {
+        'type' => 'unsigned long',
+        'name' => 'access_count'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_slotmem_callback_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_slotmem_instance_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_slotmem_provider_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)',
+        'name' => 'doall'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t **inst, const char *name, apr_size_t item_size, unsigned int item_num, ap_slotmem_type_t type, apr_pool_t *pool)',
+        'name' => 'create'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t **inst, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool)',
+        'name' => 'attach'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, unsigned int item_id, void**mem)',
+        'name' => 'dptr'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, unsigned int item_id, unsigned char *dest, apr_size_t dest_len)',
+        'name' => 'get'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *slot, unsigned int item_id, unsigned char *src, apr_size_t src_len)',
+        'name' => 'put'
+      },
+      {
+        'type' => 'unsigned int(*)(ap_slotmem_instance_t *s)',
+        'name' => 'num_slots'
+      },
+      {
+        'type' => 'unsigned int(*)(ap_slotmem_instance_t *s)',
+        'name' => 'num_free_slots'
+      },
+      {
+        'type' => 'apr_size_t(*)(ap_slotmem_instance_t *s)',
+        'name' => 'slot_size'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, unsigned int *item_id)',
+        'name' => 'grab'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, unsigned int item_id)',
+        'name' => 'release'
+      },
+      {
+        'type' => 'apr_status_t(*)(ap_slotmem_instance_t *s, unsigned int item_id)',
+        'name' => 'fgrab'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_slotmem_type_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_socache_instance_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_socache_iterator_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_unix_identity_t',
+    'elts' => [
+      {
+        'type' => 'uid_t',
+        'name' => 'uid'
+      },
+      {
+        'type' => 'gid_t',
+        'name' => 'gid'
+      },
+      {
+        'type' => 'int',
+        'name' => 'userdir'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_version_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'major'
+      },
+      {
+        'type' => 'int',
+        'name' => 'minor'
+      },
+      {
+        'type' => 'int',
+        'name' => 'patch'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'add_string'
+      }
+    ]
+  },
+  {
+    'type' => 'ap_vhost_iterate_conn_cb',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_watchdog_callback_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'ap_watchdog_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_access_compat_ap_satisfies_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_authn_cache_store_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_dbd_acquire_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_dbd_cacquire_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_dbd_close_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_dbd_open_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_dbd_prepare_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_find_loaded_module_symbol_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_ident_lookup_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_logio_add_bytes_in_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_logio_add_bytes_out_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_logio_get_last_bytes_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_register_rewrite_mapfunc_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_request_insert_filter_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_request_remove_filter_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_session_get_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_session_load_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_session_save_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_session_set_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_signal_server_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_watchdog_get_instance_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_watchdog_register_callback_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_ap_watchdog_set_callback_interval_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_authn_ap_auth_name_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_authn_ap_auth_type_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_authn_ap_list_provider_names_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_authz_ap_list_provider_names_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_authz_some_auth_required_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_modperl_interp_unselect_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_modperl_thx_interp_get_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_cache_check_subgroups_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_cache_checkuserid_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_cache_compare_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_cache_comparedn_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_cache_getuserdn_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_connection_close_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_connection_find_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_connection_open_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_connection_unbind_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_uldap_ssl_supported_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_xml2enc_charset_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_OFN_xml2enc_filter_t
+ ',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_abortfunc_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_allocator_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_anylock_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'union apr_anylock_u_t',
+        'name' => 'lock'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_array_header_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'int',
+        'name' => 'elt_size'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nelts'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nalloc'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'elts'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_brigade_flush',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_bucket',
+    'elts' => [
+      {
+        'type' => '_ANON 68',
+        'name' => 'link'
+      },
+      {
+        'type' => 'const apr_bucket_type_t *',
+        'name' => 'type'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'start'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'void(*)(void *e)',
+        'name' => 'free'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_alloc_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_bucket_brigade',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_bucket_list',
+        'name' => 'list'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'bucket_alloc'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_file',
+    'elts' => [
+      {
+        'type' => 'apr_bucket_refcount',
+        'name' => 'refcount'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'fd'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'readpool'
+      },
+      {
+        'type' => 'int',
+        'name' => 'can_mmap'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_heap',
+    'elts' => [
+      {
+        'type' => 'apr_bucket_refcount',
+        'name' => 'refcount'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'alloc_len'
+      },
+      {
+        'type' => 'void(*)(void *data)',
+        'name' => 'free_func'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_mmap',
+    'elts' => [
+      {
+        'type' => 'apr_bucket_refcount',
+        'name' => 'refcount'
+      },
+      {
+        'type' => 'apr_mmap_t *',
+        'name' => 'mmap'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_pool',
+    'elts' => [
+      {
+        'type' => 'apr_bucket_heap',
+        'name' => 'heap'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_refcount',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'refcount'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_bucket_structs',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_bucket_type_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num_func'
+      },
+      {
+        'type' => 'int',
+        'name' => 'is_metadata'
+      },
+      {
+        'type' => 'void(*)(void *data)',
+        'name' => 'destroy'
+      },
+      {
+        'type' => 'apr_status_t(*)(apr_bucket *b, const char **str, apr_size_t *len,
+                         apr_read_type_e block)',
+        'name' => 'read'
+      },
+      {
+        'type' => 'apr_status_t(*)(apr_bucket *e, apr_pool_t *pool)',
+        'name' => 'setaside'
+      },
+      {
+        'type' => 'apr_status_t(*)(apr_bucket *e, apr_size_t point)',
+        'name' => 'split'
+      },
+      {
+        'type' => 'apr_status_t(*)(apr_bucket *e, apr_bucket **c)',
+        'name' => 'copy'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_byte_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_child_errfn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_cmdtype_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_block_key_mode_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_block_key_type_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_block_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_config_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_driver_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_hash_add_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_hash_finish_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_hash_init_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_hash_t',
+    'elts' => [
+      {
+        'type' => 'apr_crypto_hash_init_t *',
+        'name' => 'init'
+      },
+      {
+        'type' => 'apr_crypto_hash_add_t *',
+        'name' => 'add'
+      },
+      {
+        'type' => 'apr_crypto_hash_finish_t *',
+        'name' => 'finish'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_crypto_key_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_crypto_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_datatype_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_datum_t',
+    'elts' => [
+      {
+        'type' => 'char *',
+        'name' => 'dptr'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'dsize'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_dbd_driver_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_prepared_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_results_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_row_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_transaction_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbd_type_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dbm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_descriptor',
+    'elts' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_dev_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dir_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dso_handle_sym_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_dso_handle_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_exit_why_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_file_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_fileattrs_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_fileperms_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_filetype_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_finfo_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'valid'
+      },
+      {
+        'type' => 'apr_fileperms_t',
+        'name' => 'protection'
+      },
+      {
+        'type' => 'apr_filetype_e',
+        'name' => 'filetype'
+      },
+      {
+        'type' => 'apr_uid_t',
+        'name' => 'user'
+      },
+      {
+        'type' => 'apr_gid_t',
+        'name' => 'group'
+      },
+      {
+        'type' => 'apr_ino_t',
+        'name' => 'inode'
+      },
+      {
+        'type' => 'apr_dev_t',
+        'name' => 'device'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'nlink'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'size'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'csize'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'atime'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'mtime'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'ctime'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'filehand'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_getopt_err_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_getopt_option_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'optch'
+      },
+      {
+        'type' => 'int',
+        'name' => 'has_arg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'description'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_getopt_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cont'
+      },
+      {
+        'type' => 'apr_getopt_err_fn_t *',
+        'name' => 'errfn'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'errarg'
+      },
+      {
+        'type' => 'int',
+        'name' => 'ind'
+      },
+      {
+        'type' => 'int',
+        'name' => 'opt'
+      },
+      {
+        'type' => 'int',
+        'name' => 'reset'
+      },
+      {
+        'type' => 'int',
+        'name' => 'argc'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'argv'
+      },
+      {
+        'type' => 'char const *',
+        'name' => 'place'
+      },
+      {
+        'type' => 'int',
+        'name' => 'interleave'
+      },
+      {
+        'type' => 'int',
+        'name' => 'skip_start'
+      },
+      {
+        'type' => 'int',
+        'name' => 'skip_end'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_gid_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_global_mutex_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_hash_do_callback_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_hash_index_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_hash_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_hashfunc_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_hdtr_t',
+    'elts' => [
+      {
+        'type' => 'iovec *',
+        'name' => 'headers'
+      },
+      {
+        'type' => 'int',
+        'name' => 'numheaders'
+      },
+      {
+        'type' => 'iovec *',
+        'name' => 'trailers'
+      },
+      {
+        'type' => 'int',
+        'name' => 'numtrailers'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_in_addr_t',
+    'elts' => [
+      {
+        'type' => 'in_addr_t',
+        'name' => 's_addr'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_ino_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_int16_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_int32_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_int64_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_interface_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_interval_time_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_ipsubnet_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_kill_conditions_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_ldap_err_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'reason'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'msg'
+      },
+      {
+        'type' => 'int',
+        'name' => 'rc'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_ldap_opt_tls_cert_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'password'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_ldap_url_desc_t',
+    'elts' => [
+      {
+        'type' => 'apr_ldap_url_desc_t *',
+        'name' => 'lud_next'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'lud_scheme'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'lud_host'
+      },
+      {
+        'type' => 'int',
+        'name' => 'lud_port'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'lud_dn'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'lud_attrs'
+      },
+      {
+        'type' => 'int',
+        'name' => 'lud_scope'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'lud_filter'
+      },
+      {
+        'type' => 'char **',
+        'name' => 'lud_exts'
+      },
+      {
+        'type' => 'int',
+        'name' => 'lud_crit_exts'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_lockmech_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_md4_ctx_t',
+    'elts' => [
+      {
+        'type' => 'apr_uint32_t[4]',
+        'name' => 'state'
+      },
+      {
+        'type' => 'apr_uint32_t[2]',
+        'name' => 'count'
+      },
+      {
+        'type' => 'unsigned char[64]',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'xlate'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_md5_ctx_t',
+    'elts' => [
+      {
+        'type' => 'apr_uint32_t[4]',
+        'name' => 'state'
+      },
+      {
+        'type' => 'apr_uint32_t[2]',
+        'name' => 'count'
+      },
+      {
+        'type' => 'unsigned char[64]',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_xlate_t *',
+        'name' => 'xlate'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_memcache_conn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_memcache_hash_func',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_memcache_server_func',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_memcache_server_status_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_memcache_server_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'host'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'apr_memcache_server_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'apr_reslist_t *',
+        'name' => 'conns'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'lock'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'btime'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_memcache_stats_t',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'version'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'uptime'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'time'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'pointer_size'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'rusage_user'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'rusage_system'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'curr_items'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'total_items'
+      },
+      {
+        'type' => 'apr_uint64_t',
+        'name' => 'bytes'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'curr_connections'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'total_connections'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'connection_structures'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'cmd_get'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'cmd_set'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'get_hits'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'get_misses'
+      },
+      {
+        'type' => 'apr_uint64_t',
+        'name' => 'evictions'
+      },
+      {
+        'type' => 'apr_uint64_t',
+        'name' => 'bytes_read'
+      },
+      {
+        'type' => 'apr_uint64_t',
+        'name' => 'bytes_written'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'limit_maxbytes'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'threads'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_memcache_t',
+    'elts' => [
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'nalloc'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'ntotal'
+      },
+      {
+        'type' => 'apr_memcache_server_t **',
+        'name' => 'live_servers'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'hash_baton'
+      },
+      {
+        'type' => 'apr_memcache_hash_func',
+        'name' => 'hash_func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'server_baton'
+      },
+      {
+        'type' => 'apr_memcache_server_func',
+        'name' => 'server_func'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_memcache_value_t',
+    'elts' => [
+      {
+        'type' => 'apr_status_t',
+        'name' => 'status'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'apr_uint16_t',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_memnode_t',
+    'elts' => [
+      {
+        'type' => 'apr_memnode_t *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'apr_memnode_t **',
+        'name' => 'ref'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'index'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'free_index'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'first_avail'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'endp'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_mmap_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'cntxt'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mm'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'size'
+      },
+      {
+        'type' => '_ANON 66',
+        'name' => 'link'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_off_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_opt_fn_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_dir_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_dso_handle_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_exp_time_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'tm_sec'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_min'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_hour'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_mday'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_mon'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_year'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_wday'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_yday'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tm_isdst'
+      },
+      {
+        'type' => 'long int',
+        'name' => 'tm_gmtoff'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'tm_zone'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_os_file_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_global_mutex_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_proc_mutex_t *',
+        'name' => 'proc_mutex'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'thread_mutex'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_os_imp_time_t',
+    'elts' => [
+      {
+        'type' => '__time_t',
+        'name' => 'tv_sec'
+      },
+      {
+        'type' => '__suseconds_t',
+        'name' => 'tv_usec'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_os_proc_mutex_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'crossproc'
+      },
+      {
+        'type' => 'pthread_mutex_t *',
+        'name' => 'pthread_interproc'
+      },
+      {
+        'type' => 'pthread_mutex_t *',
+        'name' => 'intraproc'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_os_proc_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_shm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_sock_info_t',
+    'elts' => [
+      {
+        'type' => 'apr_os_sock_t *',
+        'name' => 'os_sock'
+      },
+      {
+        'type' => 'sockaddr *',
+        'name' => 'local'
+      },
+      {
+        'type' => 'sockaddr *',
+        'name' => 'remote'
+      },
+      {
+        'type' => 'int',
+        'name' => 'family'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'int',
+        'name' => 'protocol'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_os_sock_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_thread_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_os_threadkey_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_other_child_rec_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_pollcb_cb_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_pollcb_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_pollfd_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_datatype_e',
+        'name' => 'desc_type'
+      },
+      {
+        'type' => 'apr_int16_t',
+        'name' => 'reqevents'
+      },
+      {
+        'type' => 'apr_int16_t',
+        'name' => 'rtnevents'
+      },
+      {
+        'type' => 'apr_descriptor',
+        'name' => 'desc'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'client_data'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_pollset_method_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_pollset_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_pool_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_port_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_proc_mutex_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_proc_t',
+    'elts' => [
+      {
+        'type' => 'pid_t',
+        'name' => 'pid'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'in'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'out'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'err'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_procattr_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_queue_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_random_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_read_type_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_reslist_constructor',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_reslist_destructor',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_reslist_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_rmm_off_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_rmm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_sdbm_datum_t',
+    'elts' => [
+      {
+        'type' => 'char *',
+        'name' => 'dptr'
+      },
+      {
+        'type' => 'int',
+        'name' => 'dsize'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_sdbm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_seek_where_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_sha1_ctx_t',
+    'elts' => [
+      {
+        'type' => 'apr_uint32_t[5]',
+        'name' => 'digest'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'count_lo'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'count_hi'
+      },
+      {
+        'type' => 'apr_uint32_t[16]',
+        'name' => 'data'
+      },
+      {
+        'type' => 'int',
+        'name' => 'local'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_shm_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_short_interval_time_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_shutdown_how_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_sigfunc_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_signum_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_size_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_sockaddr_t',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'servname'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'family'
+      },
+      {
+        'type' => 'apr_socklen_t',
+        'name' => 'salen'
+      },
+      {
+        'type' => 'int',
+        'name' => 'ipaddr_len'
+      },
+      {
+        'type' => 'int',
+        'name' => 'addr_str_len'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ipaddr_ptr'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'union _ANON 1',
+        'name' => 'sa'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_socket_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_socklen_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_ssize_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_status_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_strmatch_pattern',
+    'elts' => [
+      {
+        'type' => 'const char *(*)(const apr_strmatch_pattern *this_pattern,
+                           const char *s, apr_size_t slen)',
+        'name' => 'compare'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pattern'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'length'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_table_entry_t',
+    'elts' => [
+      {
+        'type' => 'char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'val'
+      },
+      {
+        'type' => 'apr_uint32_t',
+        'name' => 'key_checksum'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_table_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_text',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'text'
+      },
+      {
+        'type' => 'apr_text *',
+        'name' => 'next'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_text_header',
+    'elts' => [
+      {
+        'type' => 'apr_text *',
+        'name' => 'first'
+      },
+      {
+        'type' => 'apr_text *',
+        'name' => 'last'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_thread_cond_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_mutex_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_once_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_pool_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_rwlock_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_start_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_thread_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_threadattr_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_threadkey_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_time_exp_t',
+    'elts' => [
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_usec'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_sec'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_min'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_hour'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_mday'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_mon'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_year'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_wday'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_yday'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_isdst'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'tm_gmtoff'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_time_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uid_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uint16_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uint32_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uint64_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uintptr_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_uri_t',
+    'elts' => [
+      {
+        'type' => 'char *',
+        'name' => 'scheme'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'hostinfo'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'user'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'password'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'port_str'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'query'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'fragment'
+      },
+      {
+        'type' => 'hostent *',
+        'name' => 'hostent'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'is_initialized'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'dns_looked_up'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'dns_resolved'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_uuid_t',
+    'elts' => [
+      {
+        'type' => 'unsigned char[16]',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_version_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'major'
+      },
+      {
+        'type' => 'int',
+        'name' => 'minor'
+      },
+      {
+        'type' => 'int',
+        'name' => 'patch'
+      },
+      {
+        'type' => 'int',
+        'name' => 'is_dev'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_vformatter_buff_t',
+    'elts' => [
+      {
+        'type' => 'char *',
+        'name' => 'curpos'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'endpos'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_wait_how_e',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_xlate_t',
+    'elts' => []
+  },
+  {
+    'type' => 'apr_xml_attr',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'ns'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'value'
+      },
+      {
+        'type' => 'apr_xml_attr *',
+        'name' => 'next'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_xml_doc',
+    'elts' => [
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'root'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'namespaces'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_xml_elem',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'ns'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'lang'
+      },
+      {
+        'type' => 'apr_text_header',
+        'name' => 'first_cdata'
+      },
+      {
+        'type' => 'apr_text_header',
+        'name' => 'following_cdata'
+      },
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'parent'
+      },
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'first_child'
+      },
+      {
+        'type' => 'apr_xml_attr *',
+        'name' => 'attr'
+      },
+      {
+        'type' => 'apr_xml_elem *',
+        'name' => 'last_child'
+      },
+      {
+        'type' => 'apr_xml_ns_scope *',
+        'name' => 'ns_scope'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'priv'
+      }
+    ]
+  },
+  {
+    'type' => 'apr_xml_parser',
+    'elts' => []
+  },
+  {
+    'type' => 'cmd_parms',
+    'elts' => [
+      {
+        'type' => 'void *',
+        'name' => 'info'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_opts'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'override_list'
+      },
+      {
+        'type' => 'apr_int64_t',
+        'name' => 'limited'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'limited_xmethods'
+      },
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'xlimited'
+      },
+      {
+        'type' => 'ap_configfile_t *',
+        'name' => 'config_file'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'directive'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'temp_pool'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'const command_rec *',
+        'name' => 'cmd'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'context'
+      },
+      {
+        'type' => 'const ap_directive_t *',
+        'name' => 'err_directive'
+      }
+    ]
+  },
+  {
+    'type' => 'command_rec',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'cmd_func',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'cmd_data'
+      },
+      {
+        'type' => 'int',
+        'name' => 'req_override'
+      },
+      {
+        'type' => 'enum cmd_how',
+        'name' => 'args_how'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'errmsg'
+      }
+    ]
+  },
+  {
+    'type' => 'conn_rec',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'base_server'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'vhost_lookup_data'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'local_addr'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'client_addr'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'client_ip'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'remote_host'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'remote_logname'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'local_ip'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'local_host'
+      },
+      {
+        'type' => 'long',
+        'name' => 'id'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'conn_config'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'notes'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'input_filters'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'output_filters'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'sbh'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'bucket_alloc'
+      },
+      {
+        'type' => 'conn_state_t *',
+        'name' => 'cs'
+      },
+      {
+        'type' => 'int',
+        'name' => 'data_in_input_filters'
+      },
+      {
+        'type' => 'int',
+        'name' => 'data_in_output_filters'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'clogging_input_filters'
+      },
+      {
+        'type' => 'signed int',
+        'name' => 'double_reverse'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'aborted'
+      },
+      {
+        'type' => 'ap_conn_keepalive_e',
+        'name' => 'keepalive'
+      },
+      {
+        'type' => 'int',
+        'name' => 'keepalives'
+      },
+      {
+        'type' => 'const struct ap_logconf *',
+        'name' => 'log'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'log_id'
+      },
+      {
+        'type' => 'apr_thread_t *',
+        'name' => 'current_thread'
+      }
+    ]
+  },
+  {
+    'type' => 'core_net_rec',
+    'elts' => []
+  },
+  {
+    'type' => 'htaccess_result',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'dir'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_opts'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'override_list'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'htaccess'
+      },
+      {
+        'type' => 'const struct htaccess_result *',
+        'name' => 'next'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_uri_t',
+    'elts' => [
+      {
+        'type' => 'apr_uri_t',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path_info'
+      }
+    ]
+  },
+  {
+    'type' => 'module',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'version'
+      },
+      {
+        'type' => 'int',
+        'name' => 'minor_version'
+      },
+      {
+        'type' => 'int',
+        'name' => 'module_index'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dynamic_load_handle'
+      },
+      {
+        'type' => 'module_struct *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'unsigned long',
+        'name' => 'magic'
+      },
+      {
+        'type' => 'void(*) (process_rec *process)',
+        'name' => 'rewrite_args'
+      },
+      {
+        'type' => 'void *(*) (apr_pool_t *p, char *dir)',
+        'name' => 'create_dir_config'
+      },
+      {
+        'type' => 'void *(*) (apr_pool_t *p, void *base_conf, void *new_conf)',
+        'name' => 'merge_dir_config'
+      },
+      {
+        'type' => 'void *(*) (apr_pool_t *p, server_rec *s)',
+        'name' => 'create_server_config'
+      },
+      {
+        'type' => 'void *(*) (apr_pool_t *p, void *base_conf,
+                                  void *new_conf)',
+        'name' => 'merge_server_config'
+      },
+      {
+        'type' => 'const command_rec *',
+        'name' => 'cmds'
+      },
+      {
+        'type' => 'void(*) (apr_pool_t *p)',
+        'name' => 'register_hooks'
+      }
+    ]
+  },
+  {
+    'type' => 'piped_log',
+    'elts' => []
+  },
+  {
+    'type' => 'process_rec',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'short_name'
+      },
+      {
+        'type' => 'const char * const *',
+        'name' => 'argv'
+      },
+      {
+        'type' => 'int',
+        'name' => 'argc'
+      }
+    ]
+  },
+  {
+    'type' => 'request_rec',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'connection'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'prev'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'main'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'the_request'
+      },
+      {
+        'type' => 'int',
+        'name' => 'assbackwards'
+      },
+      {
+        'type' => 'int',
+        'name' => 'proxyreq'
+      },
+      {
+        'type' => 'int',
+        'name' => 'header_only'
+      },
+      {
+        'type' => 'int',
+        'name' => 'proto_num'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'protocol'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hostname'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'request_time'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'status_line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'int',
+        'name' => 'method_number'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'method'
+      },
+      {
+        'type' => 'apr_int64_t',
+        'name' => 'allowed'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'allowed_xmethods'
+      },
+      {
+        'type' => 'ap_method_list_t *',
+        'name' => 'allowed_methods'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'sent_bodyct'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'bytes_sent'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'mtime'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'range'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'clength'
+      },
+      {
+        'type' => 'int',
+        'name' => 'chunked'
+      },
+      {
+        'type' => 'int',
+        'name' => 'read_body'
+      },
+      {
+        'type' => 'int',
+        'name' => 'read_chunked'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'expecting_100'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'kept_body'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'body_table'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'remaining'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'read_length'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'headers_in'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'headers_out'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'err_headers_out'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'subprocess_env'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'notes'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'content_type'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'handler'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'content_encoding'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'content_languages'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'vlist_validator'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'user'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'ap_auth_type'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'unparsed_uri'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'canonical_filename'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path_info'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'args'
+      },
+      {
+        'type' => 'int',
+        'name' => 'used_path_info'
+      },
+      {
+        'type' => 'int',
+        'name' => 'eos_sent'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'per_dir_config'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'request_config'
+      },
+      {
+        'type' => 'const struct ap_logconf *',
+        'name' => 'log'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'log_id'
+      },
+      {
+        'type' => 'const struct htaccess_result *',
+        'name' => 'htaccess'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'output_filters'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'input_filters'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'proto_output_filters'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'proto_input_filters'
+      },
+      {
+        'type' => 'int',
+        'name' => 'no_cache'
+      },
+      {
+        'type' => 'int',
+        'name' => 'no_local_copy'
+      },
+      {
+        'type' => 'apr_thread_mutex_t *',
+        'name' => 'invoke_mtx'
+      },
+      {
+        'type' => 'apr_uri_t',
+        'name' => 'parsed_uri'
+      },
+      {
+        'type' => 'apr_finfo_t',
+        'name' => 'finfo'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'useragent_addr'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'useragent_ip'
+      }
+    ]
+  },
+  {
+    'type' => 'server_addr_rec',
+    'elts' => [
+      {
+        'type' => 'server_addr_rec *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'virthost'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'host_addr'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'host_port'
+      }
+    ]
+  },
+  {
+    'type' => 'server_rec',
+    'elts' => [
+      {
+        'type' => 'process_rec *',
+        'name' => 'process'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'next'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'error_fname'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'error_log'
+      },
+      {
+        'type' => 'ap_logconf',
+        'name' => 'log'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'module_config'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'lookup_defaults'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'defn_name'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'defn_line_number'
+      },
+      {
+        'type' => 'char',
+        'name' => 'is_virtual'
+      },
+      {
+        'type' => 'apr_port_t',
+        'name' => 'port'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'server_scheme'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'server_admin'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'server_hostname'
+      },
+      {
+        'type' => 'server_addr_rec *',
+        'name' => 'addrs'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'keep_alive_timeout'
+      },
+      {
+        'type' => 'int',
+        'name' => 'keep_alive_max'
+      },
+      {
+        'type' => 'int',
+        'name' => 'keep_alive'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'names'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'wild_names'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'pathlen'
+      },
+      {
+        'type' => 'int',
+        'name' => 'limit_req_line'
+      },
+      {
+        'type' => 'int',
+        'name' => 'limit_req_fieldsize'
+      },
+      {
+        'type' => 'int',
+        'name' => 'limit_req_fields'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'context'
+      }
+    ]
+  },
+  {
+    'type' => 'session_rec',
+    'elts' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_uuid_t *',
+        'name' => 'uuid'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'remote_user'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'entries'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'encoded'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'expiry'
+      },
+      {
+        'type' => 'long',
+        'name' => 'maxage'
+      },
+      {
+        'type' => 'int',
+        'name' => 'dirty'
+      },
+      {
+        'type' => 'int',
+        'name' => 'cached'
+      },
+      {
+        'type' => 'int',
+        'name' => 'written'
+      }
+    ]
+  },
+  {
+    'type' => 'subrequest_rec',
+    'elts' => []
+  },
+  {
+    'type' => 'unixd_config_rec',
+    'elts' => [
+      {
+        'type' => 'const char *',
+        'name' => 'user_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'group_name'
+      },
+      {
+        'type' => 'uid_t',
+        'name' => 'user_id'
+      },
+      {
+        'type' => 'gid_t',
+        'name' => 'group_id'
+      },
+      {
+        'type' => 'int',
+        'name' => 'suexec_enabled'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'chroot_dir'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'suexec_disabled_reason'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_interp_t',
+    'elts' => [
+      {
+        'type' => 'modperl_interp_pool_t *',
+        'name' => 'mip'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num_requests'
+      },
+      {
+        'type' => 'U8',
+        'name' => 'flags'
+      },
+      {
+        'type' => 'modperl_config_con_t *',
+        'name' => 'ccfg'
+      },
+      {
+        'type' => 'int',
+        'name' => 'refcnt'
+      },
+      {
+        'type' => 'unsigned long',
+        'name' => 'tid'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_interp_pool_t',
+    'elts' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 'server'
+      },
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'modperl_tipool_config_t *',
+        'name' => 'tipool_cfg'
+      },
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'parent'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_tipool_t',
+    'elts' => [
+      {
+        'type' => 'perl_mutex',
+        'name' => 'tiplock'
+      },
+      {
+        'type' => 'perl_cond',
+        'name' => 'available'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'idle'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'busy'
+      },
+      {
+        'type' => 'int',
+        'name' => 'in_use'
+      },
+      {
+        'type' => 'int',
+        'name' => 'size'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'modperl_tipool_config_t *',
+        'name' => 'cfg'
+      },
+      {
+        'type' => 'modperl_tipool_vtbl_t *',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'type' => 'modperl_tipool_config_t',
+    'elts' => [
+      {
+        'type' => 'int',
+        'name' => 'start'
+      },
+      {
+        'type' => 'int',
+        'name' => 'min_spare'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max_spare'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max'
+      },
+      {
+        'type' => 'int',
+        'name' => 'max_requests'
+      }
+    ]
+  }
+];
+
+
+1;
diff --git a/xs/tables/current24/ModPerl/FunctionTable.pm b/xs/tables/current24/ModPerl/FunctionTable.pm
new file mode 100644
index 0000000..0aeb2dc
--- /dev/null
+++ b/xs/tables/current24/ModPerl/FunctionTable.pm
@@ -0,0 +1,8570 @@
+package ModPerl::FunctionTable;
+
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# ! WARNING: generated by ModPerl::ParseSource/0.01
+# !          Mon Jul  1 12:38:19 2013
+# !          do NOT edit, any changes will be lost !
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+$ModPerl::FunctionTable = [
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_access_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_apr_array_header2avrv',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_array_header_t *',
+        'name' => 'array'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_authen_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_authz_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_array_header_t *',
+    'name' => 'modperl_avrv2apr_array_header',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'avrv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_brigade_dump',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'modperl_bucket_sv_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'handler'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'AV *',
+        'name' => 'args'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_connection',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_files',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_per_dir',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_per_srv',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_pre_connection',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'csd'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_callback_process',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_callback_run_handlers',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'modperl_hook_run_mode_e',
+        'name' => 'run_mode'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_cgi_header_parse',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'body'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_child_init_handler',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_cleanup_data_t *',
+    'name' => 'modperl_cleanup_data_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_END',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_access_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_add_var',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_authen_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_authn_provider',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_authz_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_authz_provider',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_child_exit_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_child_init_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_cleanup_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_config_requires',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_fixup_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_header_parser_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_init_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_input_filter_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_max',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_max_requests',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_max_spare',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_min_spare',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_scope',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_interp_start',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_load_module',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_log_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_map_to_storage_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_modules',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_open_logs_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_options',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_output_filter_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_pass_env',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_perl',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_perldo',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_pod',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_pod_cut',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_post_config_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_post_config_requires',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_post_read_request_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_pre_connection_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_process_connection_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_cmd_push_filter_handlers',
+    'args' => [
+      {
+        'type' => 'MpAV **',
+        'name' => 'handlers'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_cmd_push_handlers',
+    'args' => [
+      {
+        'type' => 'MpAV **',
+        'name' => 'handlers'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_requires',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_response_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_set_env',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_set_input_filter',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_set_output_filter',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_set_var',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_switches',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_trace',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'mconfig'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_trans_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_cmd_type_handlers',
+    'args' => [
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'dummy'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'U16 *',
+    'name' => 'modperl_code_attrs',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'CV *',
+        'name' => 'cv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_config_apply_PerlModule',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_config_apply_PerlPostConfigRequire',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_config_apply_PerlRequire',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_config_con_t *',
+    'name' => 'modperl_config_con_new',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_config_dir_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'dir'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_config_dir_merge',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'basev'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'addv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_config_dir_t *',
+    'name' => 'modperl_config_dir_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_config_insert',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptmp'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_options'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'conf'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_config_insert_parms',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_config_insert_request',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_options'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_config_insert_server',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_config_is_perl_option_enabled',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_config_req_cleanup',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_config_req_t *',
+    'name' => 'modperl_config_req_new',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_config_request_cleanup',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char **',
+    'name' => 'modperl_config_srv_argv_init',
+    'args' => [
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'argc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_config_srv_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_config_srv_merge',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'basev'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'addv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_config_srv_t *',
+    'name' => 'modperl_config_srv_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_const_compile',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'arg'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char **',
+    'name' => 'modperl_constants_group_lookup_apache2_const',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char **',
+    'name' => 'modperl_constants_group_lookup_apr_const',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char **',
+    'name' => 'modperl_constants_group_lookup_modperl',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_constants_lookup_apache2_const',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_constants_lookup_apr_const',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_constants_lookup_modperl',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_croak',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'rc'
+      },
+      {
+        'type' => 'const char*',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned long',
+    'name' => 'modperl_debug_level',
+    'args' => []
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_dir_config',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv_val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_clear',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_configure_request_dir',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_configure_request_srv',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_configure_server',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_default_populate',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_hash_keys',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_hv_store',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_init',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_request_populate',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_request_tie',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_request_unpopulate',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_request_untie',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_sync_dir_env_hash2table',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_config_dir_t *',
+        'name' => 'dcfg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_sync_srv_env_hash2table',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_env_unload',
+    'args' => []
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_error_strerror',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_status_t',
+        'name' => 'rc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_errsv',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_errsv_prepend',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pat'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_file2package',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'file'
+      }
+    ]
+  },
+  {
+    'return_type' => 'U16 *',
+    'name' => 'modperl_filter_attributes',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'cvrv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_filter_t *',
+    'name' => 'modperl_filter_mg_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'obj'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_filter_t *',
+    'name' => 'modperl_filter_new',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'modperl_filter_mode_e',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'input_mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_filter_resolve_init_handler',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'handler'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_filter_runtime_add',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'modperl_filter_mode_e',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'modperl_filter_add_t',
+        'name' => 'addfunc'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_fixup_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'U32',
+    'name' => 'modperl_flags_lookup_dir',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'U32',
+    'name' => 'modperl_flags_lookup_srv',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_get_perl_module_config',
+    'args' => [
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'cv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_anon_cnt_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_global_anon_cnt_next',
+    'args' => []
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_global_get',
+    'args' => [
+      {
+        'type' => 'modperl_global_t *',
+        'name' => 'global'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'modperl_global_get_pconf',
+    'args' => []
+  },
+  {
+    'return_type' => 'server_rec *',
+    'name' => 'modperl_global_get_server_rec',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_init',
+    'args' => [
+      {
+        'type' => 'modperl_global_t *',
+        'name' => 'global'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_init_pconf',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_init_server_rec',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec * server_rec',
+        'name' => 'arg1'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_lock',
+    'args' => [
+      {
+        'type' => 'modperl_global_t *',
+        'name' => 'global'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_lock_pconf',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_lock_server_rec',
+    'args' => []
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'modperl_global_request',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'svr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_request_cfg_set',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_request_obj_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'svr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_request_set',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_set',
+    'args' => [
+      {
+        'type' => 'modperl_global_t *',
+        'name' => 'global'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_set_pconf',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_set_server_rec',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'arg0'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_unlock',
+    'args' => [
+      {
+        'type' => 'modperl_global_t *',
+        'name' => 'global'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_unlock_pconf',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_global_unlock_server_rec',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_handler_anon_add',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'anon'
+      },
+      {
+        'type' => 'CV *',
+        'name' => 'cv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'CV *',
+    'name' => 'modperl_handler_anon_get',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'anon'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_handler_anon_init',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_mgv_t *',
+    'name' => 'modperl_handler_anon_next',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'MpAV *',
+    'name' => 'modperl_handler_array_merge',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'MpAV *',
+        'name' => 'base_a'
+      },
+      {
+        'type' => 'MpAV *',
+        'name' => 'add_a'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_connection',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_files',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_per_dir',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_per_srv',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_pre_connection',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_desc_process',
+    'args' => [
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_handler_t *',
+    'name' => 'modperl_handler_dup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'h'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_handler_equal',
+    'args' => [
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'h1'
+      },
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'h2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'MpAV **',
+    'name' => 'modperl_handler_get_handlers',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'modperl_handler_action_e',
+        'name' => 'action'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_handler_lookup',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'MpAV **',
+    'name' => 'modperl_handler_lookup_handlers',
+    'args' => [
+      {
+        'type' => 'modperl_config_dir_t *',
+        'name' => 'dcfg'
+      },
+      {
+        'type' => 'modperl_config_srv_t *',
+        'name' => 'scfg'
+      },
+      {
+        'type' => 'modperl_config_req_t *',
+        'name' => 'rcfg'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'int',
+        'name' => 'idx'
+      },
+      {
+        'type' => 'modperl_handler_action_e',
+        'name' => 'action'
+      },
+      {
+        'type' => 'const char **',
+        'name' => 'desc'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_handler_make_args',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'AV **',
+        'name' => 'avp'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_handler_name',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'handler'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_handler_t *',
+    'name' => 'modperl_handler_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_handler_t *',
+    'name' => 'modperl_handler_new_from_sv',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_handler_perl_add_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'modperl_handler_action_e',
+        'name' => 'action'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_handler_perl_get_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'MpAV **',
+        'name' => 'handp'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_handler_push_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'MpAV *',
+        'name' => 'handlers'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_handler_resolve',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_handler_t **',
+        'name' => 'handp'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_hash_seed_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_hash_seed_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_hash_tie',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_hash_tied_object',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_hash_tied_object_rv',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_header_parser_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_hook_init',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_hook_pre_config',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_init',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_init_globals',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_init_vhost',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'base_server'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_input_filter_add_connection',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_input_filter_add_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_input_filter_flush',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_input_filter_handler',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'input_mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'modperl_input_filter_read',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'wanted'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_input_filter_write',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_interp_cleanup',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_clone_init',
+    'args' => [
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'interp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_destroy',
+    'args' => [
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'interp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_interp_get',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_init',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_mip_walk',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'current_perl'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'parent_perl'
+      },
+      {
+        'type' => 'modperl_interp_pool_t *',
+        'name' => 'mip'
+      },
+      {
+        'type' => 'modperl_interp_mip_walker_t',
+        'name' => 'walker'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_mip_walk_servers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'current_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 'base_server'
+      },
+      {
+        'type' => 'modperl_interp_mip_walker_t',
+        'name' => 'walker'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_interp_new',
+    'args' => [
+      {
+        'type' => 'modperl_interp_pool_t *',
+        'name' => 'mip'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_interp_pool_destroy',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_interp_pool_get',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_interp_pool_select',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_interp_pool_set',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'interp'
+      },
+      {
+        'type' => 'int',
+        'name' => 'cleanup'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_interp_scope_desc',
+    'args' => [
+      {
+        'type' => 'modperl_interp_scope_e',
+        'name' => 'scope'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_interp_select',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_interp_unselect',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_io_apache_init',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_io_handle_tie',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'GV *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ptr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_io_handle_tied',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'GV *',
+        'name' => 'handle'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'classname'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_io_handle_untie',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'GV *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_io_perlio_override_stdin',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_io_perlio_override_stdout',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_io_perlio_restore_stdin',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'GV *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_io_perlio_restore_stdout',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'GV *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_io_tie_stdin',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_io_tie_stdout',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_is_running',
+    'args' => []
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_append',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'new_list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_first',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_last',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_new',
+    'args' => []
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_prepend',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'new_list'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_remove',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'rlist'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_list_remove_data',
+    'args' => [
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'modperl_list_t **',
+        'name' => 'listp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_log_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_map_to_storage_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_mgv_append',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_mgv_as_string',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'package'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_mgv_t *',
+    'name' => 'modperl_mgv_compile',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_mgv_equal',
+    'args' => [
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'mgv1'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'mgv2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_mgv_hash_handlers',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_mgv_t *',
+    'name' => 'modperl_mgv_last',
+    'args' => [
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_mgv_last_name',
+    'args' => [
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_mgv_lookup',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      }
+    ]
+  },
+  {
+    'return_type' => 'GV *',
+    'name' => 'modperl_mgv_lookup_autoload',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_mgv_t *',
+    'name' => 'modperl_mgv_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_mgv_require_module',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_mgv_t *',
+        'name' => 'symbol'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_mgv_resolve',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_handler_t *',
+        'name' => 'handler'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'int',
+        'name' => 'logfailure'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_modglobal_hash_keys',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_modglobal_key_t *',
+    'name' => 'modperl_modglobal_lookup',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_module_add',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'mod_cmds'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_module_config_get_obj',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'pmodule'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'v'
+      }
+    ]
+  },
+  {
+    'return_type' => 'PTR_TBL_t *',
+    'name' => 'modperl_module_config_table_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'create'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_module_config_table_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'table'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_newSVsv_obj',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'stashsv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'obj'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_open_logs_handler',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_options_t *',
+    'name' => 'modperl_options_merge',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_options_t *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'modperl_options_t *new',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_options_t *',
+    'name' => 'modperl_options_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'modperl_options_set',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_options_t *',
+        'name' => 'o'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_output_filter_add_connection',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_output_filter_add_request',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_output_filter_flush',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_output_filter_handler',
+    'args' => [
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'modperl_output_filter_read',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'wanted'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_output_filter_write',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_package_unload',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'package'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_av_push_elts_ref',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'AV *',
+        'name' => 'dst'
+      },
+      {
+        'type' => 'AV *',
+        'name' => 'src'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_call_endav',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_call_list',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'AV *',
+        'name' => 'subs'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_core_global_init',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_destruct',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_perl_destruct_level',
+    'args' => []
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_perl_do_join',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_do_sprintf',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'len'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sarg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_exit',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'status'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_perl_gensym',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'pack'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_global_avcv_call',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_modglobal_key_t *',
+        'name' => 'gkey'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'packlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_global_avcv_clear',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_modglobal_key_t *',
+        'name' => 'gkey'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'packlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_global_avcv_register',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_modglobal_key_t *',
+        'name' => 'gkey'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'packlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_global_request_restore',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_global_request_save',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'HE *',
+    'name' => 'modperl_perl_hv_fetch_he',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'HV *',
+        'name' => 'hv'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'klen'
+      },
+      {
+        'type' => 'U32',
+        'name' => 'hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_init_ids_server',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_perl_module_loaded',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_pp_set',
+    'args' => [
+      {
+        'type' => 'modperl_perl_opcode_e',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_pp_set_all',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_pp_unset',
+    'args' => [
+      {
+        'type' => 'modperl_perl_opcode_e',
+        'name' => 'idx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_perl_pp_unset_all',
+    'args' => []
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_perl_sv_setref_uv',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'rv'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'UV',
+        'name' => 'uv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_pnotes',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'HV **',
+        'name' => 'pnotes'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_post_config_handler',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pconf'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'plog'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'ptemp'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_post_post_config_phase',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_post_read_request_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_pre_connection_handler',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'csd'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_process_connection_handler',
+    'args' => [
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_ptr2obj',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'ptr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_register_auth_provider',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback1'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback2'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_register_auth_provider_name',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_group'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_name'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'provider_version'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'callback1'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'callback2'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_register_handler_hooks',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_register_hooks',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'ssize_t',
+    'name' => 'modperl_request_read',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_require_file',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pv'
+      },
+      {
+        'type' => 'int',
+        'name' => 'logfailure'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_require_module',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'pv'
+      },
+      {
+        'type' => 'int',
+        'name' => 'logfailure'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_response_finish',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_response_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_response_handler_cgi',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_response_init',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_restart_count',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_restart_count_inc',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 'base_server'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_run',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_run_filter',
+    'args' => [
+      {
+        'type' => 'modperl_filter_t *',
+        'name' => 'filter'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'modperl_server_desc',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'modperl_server_pool',
+    'args' => []
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'modperl_server_user_pool',
+    'args' => []
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_set_perl_module_config',
+    'args' => [
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'cfg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_slurp_filename',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'int',
+        'name' => 'tainted'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_spawn_proc_prog',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'command'
+      },
+      {
+        'type' => 'const char ***',
+        'name' => 'argv'
+      },
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'script_in'
+      },
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'script_out'
+      },
+      {
+        'type' => 'apr_file_t **',
+        'name' => 'script_err'
+      }
+    ]
+  },
+  {
+    'return_type' => 'PerlInterpreter *',
+    'name' => 'modperl_startup',
+    'args' => [
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_str_toupper',
+    'args' => [
+      {
+        'type' => 'char *',
+        'name' => 'str'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'modperl_sv2request_rec',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'server_rec *',
+    'name' => 'modperl_sv2server_rec',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_clear',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'PTR_TBL_t *',
+    'name' => 'modperl_svptr_table_clone',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'proto_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'source'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_delete',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_destroy',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void *',
+    'name' => 'modperl_svptr_table_fetch',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_free',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'PTR_TBL_t *',
+    'name' => 'modperl_svptr_table_new',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_split',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_svptr_table_store',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'PTR_TBL_t *',
+        'name' => 'tbl'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'oldv'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'newv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_sys_dlclose',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'handle'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_sys_is_dir',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'modperl_table_get_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'table'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv_val'
+      },
+      {
+        'type' => 'int',
+        'name' => 'do_taint'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_threaded_mpm',
+    'args' => []
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_threads_started',
+    'args' => []
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'modperl_thx_interp_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'thx'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_thx_interp_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'thx'
+      },
+      {
+        'type' => 'modperl_interp_t *',
+        'name' => 'interp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_add',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_destroy',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_init',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_tipool_t *',
+    'name' => 'modperl_tipool_new',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_tipool_config_t *',
+        'name' => 'cfg'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'func'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_list_t *',
+    'name' => 'modperl_tipool_pop',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_putback',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'listp'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num_requests'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_putback_data',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'int',
+        'name' => 'num_requests'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tipool_remove',
+    'args' => [
+      {
+        'type' => 'modperl_tipool_t *',
+        'name' => 'tipool'
+      },
+      {
+        'type' => 'modperl_list_t *',
+        'name' => 'listp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_create',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_tls_t **',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_create_request_rec',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_get',
+    'args' => [
+      {
+        'type' => 'modperl_tls_t *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'void **',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_get_request_rec',
+    'args' => [
+      {
+        'type' => 'request_rec * *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tls_reset_cleanup',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'modperl_tls_t *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_tls_reset_cleanup_request_rec',
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_set',
+    'args' => [
+      {
+        'type' => 'modperl_tls_t *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_tls_set_request_rec',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace',
+    'args' => [
+      {
+        'type' => 'const char *',
+        'name' => 'func'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fmt'
+      },
+      {
+        'type' => '...',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace_level_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'logfile'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'level'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_trace_logfile_set',
+    'args' => [
+      {
+        'type' => 'apr_file_t *',
+        'name' => 'logfile_new'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_trans_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'modperl_type_handler',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_uri_t *',
+    'name' => 'modperl_uri_new',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_wbucket_flush',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'modperl_wbucket_t *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'int',
+        'name' => 'add_flush_bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_wbucket_pass',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'modperl_wbucket_t *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'int',
+        'name' => 'add_flush_bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'modperl_wbucket_write',
+    'attr' => [
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'modperl_wbucket_t *',
+        'name' => 'b'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'buf'
+      },
+      {
+        'type' => 'apr_size_t *',
+        'name' => 'wlen'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_xs_dl_handles_clear',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'modperl_xs_dl_handles_close',
+    'args' => [
+      {
+        'type' => 'void **',
+        'name' => 'handles'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void **',
+    'name' => 'modperl_xs_dl_handles_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'modperl_xs_sv2request_rec',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'CV *',
+        'name' => 'cv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Brigade_cleanup',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Brigade_concat',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Brigade_destroy',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'mpxs_APR__Brigade_first',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_APR__Brigade_flatten',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Brigade_insert_head',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Brigade_insert_tail',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_APR__Brigade_is_empty',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'mpxs_APR__Brigade_last',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__Brigade_length',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'int',
+        'name' => 'read_all'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'mpxs_APR__Brigade_next',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_pool_t *',
+    'name' => 'mpxs_APR__Brigade_pool',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'mpxs_APR__Brigade_prev',
+    'args' => [
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__BucketAlloc_new',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'CLASS'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Bucket_insert_after',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Bucket_insert_before',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'a'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'b'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_APR__Bucket_is_eos',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_APR__Bucket_is_flush',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_bucket *',
+    'name' => 'mpxs_APR__Bucket_new',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'list'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_APR__Bucket_read',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Bucket_remove',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_bucket *',
+        'name' => 'bucket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_APR__Bucket_setaside',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'b_sv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__Finfo_stat',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'fname'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'wanted'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'unsigned long',
+    'name' => 'mpxs_APR__OS_current_thread_id',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Pool_clear',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'obj'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_APR__Socket_fileno',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_int32_t',
+    'name' => 'mpxs_APR__Socket_opt_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'opt'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Socket_opt_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'opt'
+      },
+      {
+        'type' => 'apr_int32_t',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_APR__Socket_poll',
+    'args' => [
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'pool'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 'timeout'
+      },
+      {
+        'type' => 'apr_int16_t',
+        'name' => 'reqevents'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_APR__Socket_recv',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_APR__Socket_timeout_set',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'apr_interval_time_t',
+        'name' => 't'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__String_strfsize',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'size'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_APR__Table_EXISTS',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'apr_table_t *',
+        'name' => 't'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_APR__Table_FETCH',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_APR__Table_NEXTKEY',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'tsv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'key'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__Table_copy',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__Table_make',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      },
+      {
+        'type' => 'int',
+        'name' => 'nelts'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__Table_overlay',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'base'
+      },
+      {
+        'type' => 'apr_table_t *',
+        'name' => 'overlay'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'mpxs_APR__URI_port',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_uri_t *',
+        'name' => 'uri'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'portsv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_APR__URI_rpath',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_uri_t *',
+        'name' => 'apr_uri'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__CmdParms_add_config',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__CmdParms_info',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__CmdParms_override_opts',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Connection_add_input_filter',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Connection_add_output_filter',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_socket_t *',
+    'name' => 'mpxs_Apache2__Connection_client_socket',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 's'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__Connection_get_remote_host',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'int',
+        'name' => 'type'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'dir_config'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Connection_pnotes',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Directive_as_hash',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'tree'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Directive_as_string',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_directive_t *',
+        'name' => 'self'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Filter_ctx',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_Apache2__Filter_fflush',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'filter'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'brigade'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_Apache2__Filter_get_brigade',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      },
+      {
+        'type' => 'ap_input_mode_t',
+        'name' => 'mode'
+      },
+      {
+        'type' => 'apr_read_type_e',
+        'name' => 'block'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'readbytes'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_Apache2__Filter_pass_brigade',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'ap_filter_t *',
+        'name' => 'f'
+      },
+      {
+        'type' => 'apr_bucket_brigade *',
+        'name' => 'bb'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_Apache2__Filter_print',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_Apache2__Filter_read',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Filter_remove',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Filter_seen_eos',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Log_BOOT',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Log_log',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'int',
+        'name' => 'logtype'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__MPM_BOOT',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__MPM_query',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'self'
+      },
+      {
+        'type' => 'int',
+        'name' => 'query_code'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__Module_add',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'cmds'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__Module_ap_api_major_version',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'mod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__Module_ap_api_minor_version',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'module *',
+        'name' => 'mod'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__Module_get_config',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'pmodule'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'ap_conf_vector_t *',
+        'name' => 'v'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__Module_loaded',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_FILENO',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_GETC',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_OPEN',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'self'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg1'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg2'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_add_config',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_options'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_add_input_filter',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_add_output_filter',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_allow_override_opts',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_as_string',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__RequestRec_auth_name',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__RequestRec_auth_type',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_child_terminate',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_content_languages',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'languages'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__RequestRec_content_type',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'type'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__RequestRec_document_root',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'new_root'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_finfo_t *',
+    'name' => 'mpxs_Apache2__RequestRec_finfo',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_finfo_t *',
+        'name' => 'finfo'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_get_handlers',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'const char *',
+    'name' => 'mpxs_Apache2__RequestRec_handler',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_is_perl_option_enabled',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'mpxs_Apache2__RequestRec_location',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_location_merge',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'location'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_new',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'conn_rec *',
+        'name' => 'c'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'base_pool_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_no_cache',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'flag'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uri_t *',
+    'name' => 'mpxs_Apache2__RequestRec_parsed_uri',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_pnotes',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_print',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_proxyreq',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_push_handlers',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_read',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_rflush',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_Apache2__RequestRec_sendfile',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'filename'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__RequestRec_set_basic_credentials',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'username'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'password'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_set_handlers',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => '',
+    'name' => 'mpxs_Apache2__RequestRec_set_last_modified',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'apr_time_t',
+        'name' => 'mtime'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__RequestRec_subprocess_env',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_Apache2__RequestRec_write',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'apr_size_t',
+        'name' => 'len'
+      },
+      {
+        'type' => 'apr_off_t',
+        'name' => 'offset'
+      }
+    ]
+  },
+  {
+    'return_type' => 'request_rec *',
+    'name' => 'mpxs_Apache2__RequestUtil_request',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'svr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__ServerRec_add_config',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'lines'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_Apache2__ServerRec_get_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__ServerRec_is_perl_option_enabled',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__ServerRec_is_virtual',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__ServerRec_loglevel',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'int',
+        'name' => 'loglevel'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__ServerRec_push_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__ServerRec_set_handlers',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'server_rec *',
+        'name' => 's'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__ServerUtil_BOOT',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_Apache2__ServerUtil_server_shutdown_cleanup_register',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_ModPerl__Global_special_list_call',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'package'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_ModPerl__Global_special_list_clear',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'package'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_ModPerl__Global_special_list_register',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'package'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_ModPerl__Util_untaint',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_ap_allow_methods',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'long',
+    'name' => 'mpxs_ap_get_client_block',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'buffer'
+      },
+      {
+        'type' => 'int',
+        'name' => 'bufsiz'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_ap_log_error',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'int',
+        'name' => 'level'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'msg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_ap_register_auth_provider',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_ap_requires',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_ap_rprintf',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_ap_run_sub_req',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_ap_rvputs',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'mpxs_ap_unescape_url',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'url'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_apr_base64_decode',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_apr_base64_encode',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_brigade_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'CLASS'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      },
+      {
+        'type' => 'apr_bucket_alloc_t *',
+        'name' => 'ba'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_ipsubnet_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'ipstr'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'mask_or_numbits'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_apr_password_validate',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'passwd'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'hash'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_apr_pool_DESTROY',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'obj'
+      }
+    ]
+  },
+  {
+    'return_type' => '',
+    'name' => 'mpxs_apr_pool_cleanup',
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'cleanup_data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_apr_pool_cleanup_register',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'p'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'cv'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'arg'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_pool_create',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'parent_pool_obj'
+      }
+    ]
+  },
+  {
+    'return_type' => '',
+    'name' => 'mpxs_apr_pool_parent_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_pool_t *',
+        'name' => 'child_pool'
+      }
+    ]
+  },
+  {
+    'return_type' => '',
+    'name' => 'mpxs_apr_sockaddr_ip_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_sockaddr_t *',
+        'name' => 'sockaddr'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_size_t',
+    'name' => 'mpxs_apr_socket_send',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_socket_t *',
+        'name' => 'socket'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv_buf'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'sv_len'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_interval_time_t',
+    'name' => 'mpxs_apr_socket_timeout_get',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_apr_table_do',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'I32',
+        'name' => 'items'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'mark'
+      },
+      {
+        'type' => 'SV **',
+        'name' => 'sp'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_apr_table_do_cb',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'key'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_thread_mutex_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      },
+      {
+        'type' => 'unsigned int',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_thread_rwlock_create',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      }
+    ]
+  },
+  {
+    'return_type' => 'SV *',
+    'name' => 'mpxs_apr_uri_parse',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'classname'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'p_sv'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'uri_string'
+      }
+    ]
+  },
+  {
+    'return_type' => 'char *',
+    'name' => 'mpxs_apr_uri_unparse',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'apr_uri_t *',
+        'name' => 'uptr'
+      },
+      {
+        'type' => 'unsigned',
+        'name' => 'flags'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uuid_t *',
+    'name' => 'mpxs_apr_uuid_get',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'CLASS'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_uuid_t *',
+    'name' => 'mpxs_apr_uuid_parse',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'CLASS'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'buf'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_cleanup_run',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'void *',
+        'name' => 'data'
+      }
+    ]
+  },
+  {
+    'return_type' => 'void',
+    'name' => 'mpxs_insert_auth_cfg',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'directive'
+      },
+      {
+        'type' => 'char *',
+        'name' => 'val'
+      }
+    ]
+  },
+  {
+    'return_type' => 'apr_status_t',
+    'name' => 'mpxs_setup_client_block',
+    'args' => [
+      {
+        'type' => 'request_rec *',
+        'name' => 'r'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_special_list_do',
+    'attr' => [
+      'static'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter*',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'const char *',
+        'name' => 'name'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'package'
+      },
+      {
+        'type' => 'mpxs_special_list_do_t',
+        'name' => 'func'
+      }
+    ]
+  },
+  {
+    'return_type' => 'modperl_interp_t *',
+    'name' => 'mpxs_ModPerl__Interpreter_current',
+    'attr' => [
+      'static',
+      '__inline__'
+    ],
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'SV *',
+        'name' => 'class'
+      }
+    ]
+  }
+];
+
+
+1;