]> git.saurik.com Git - cydia.git/commitdiff
Compile Cydia to arm64 by linking with APT 1.4~b1.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 28 Dec 2016 08:30:34 +0000 (00:30 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 28 Dec 2016 08:30:34 +0000 (00:30 -0800)
17 files changed:
.gitignore
.gitmodules
MobileCydia.mm
apt [new submodule]
apt-contrib/apt-pkg [new symlink]
apt-deb/apt-pkg [new symlink]
apt-extra/apti18n.h [new file with mode: 0644]
apt-extra/config.h [new file with mode: 0644]
apt-extra/endian.h [new file with mode: 0644]
apt-tag/apt-pkg/tagfile-keys.cc [new file with mode: 0644]
apt-tag/apt-pkg/tagfile-keys.h [new file with mode: 0644]
apt.h [new file with mode: 0644]
cydia.control
fdstream.hpp [new file with mode: 0644]
make.sh [new file with mode: 0755]
makefile
uikit.sh

index 9a6cc7c239e1ad8a50aa6d0d6aecdefd7100d836..c8bf50a19fc1675c6e7da347eeeef6e61e4a618e 100644 (file)
@@ -14,3 +14,5 @@ Version.h
 cfversion
 setnsfpn
 bins
+Objects
+cydo
index f66923f8be7fe453e3038ff48afb9f654b403651..cc667a697c27de8fc6e6cfa7ba86b0e46e7059e9 100644 (file)
@@ -4,3 +4,6 @@
 [submodule "icu"]
        path = icu
        url = git://git.saurik.com/apple/icu.git
+[submodule "apt"]
+       path = apt
+       url = git://git.saurik.com/apt.git
index ed88ae275760fcb5f2cda21da1a7abacfbb9f8d4..813a382cd75640ec29698ea7bff20cff37f68c43 100644 (file)
 #include <WebKit/DOMHTMLIFrameElement.h>
 
 #include <algorithm>
+#include <fstream>
 #include <iomanip>
 #include <set>
 #include <sstream>
 #include <string>
 
-#include <ext/stdio_filebuf.h>
+#include "fdstream.hpp"
 
 #undef ABS
 
+#include "apt.h"
 #include <apt-pkg/acquire.h>
 #include <apt-pkg/acquire-item.h>
 #include <apt-pkg/algorithms.h>
@@ -500,6 +502,10 @@ static _finline CFStringRef CYStringCreate(const char *data, size_t size) {
         CFStringCreateWithBytesNoCopy(kCFAllocatorDefault, reinterpret_cast<const uint8_t *>(data), size, kCFStringEncodingISOLatin1, NO, kCFAllocatorNull);
 }
 
+static _finline CFStringRef CYStringCreate(const std::string &data) {
+    return CYStringCreate(data.data(), data.size());
+}
+
 static _finline CFStringRef CYStringCreate(const char *data) {
     return CYStringCreate(data, strlen(data));
 }
@@ -2513,15 +2519,7 @@ struct PackageNameOrdering :
         _end
 
         _profile(Package$parse$Tagline)
-            const char *start, *end;
-            if (parser->ShortDesc(start, end)) {
-                const char *stop(reinterpret_cast<const char *>(memchr(start, '\n', end - start)));
-                if (stop == NULL)
-                    stop = end;
-                while (stop != start && stop[-1] == '\r')
-                    --stop;
-                parsed->tagline_.set(pool_, start, stop - start);
-            }
+            parsed->tagline_.set(pool_, parser->ShortDesc());
         _end
 
         _profile(Package$parse$Retain)
@@ -2550,7 +2548,7 @@ struct PackageNameOrdering :
 
         version_ = version;
 
-        pkgCache::PkgIterator iterator(version.ParentPkg());
+        pkgCache::PkgIterator iterator(version_.ParentPkg());
         iterator_ = iterator;
 
         _profile(Package$initWithVersion$Version)
@@ -2558,7 +2556,7 @@ struct PackageNameOrdering :
         _end
 
         _profile(Package$initWithVersion$Cache)
-            name_.set(NULL, iterator.Display());
+            name_.set(NULL, version_.Display());
 
             latest_.set(NULL, StripVersion_(version_.VerStr()));
 
@@ -2622,7 +2620,11 @@ struct PackageNameOrdering :
         } while (false); _end
 
         _profile(Package$initWithVersion$Tags)
+#ifdef __arm64__
+            pkgCache::TagIterator tag(version_.TagList());
+#else
             pkgCache::TagIterator tag(iterator.TagList());
+#endif
             if (!tag.end()) {
                 tags_ = [NSMutableArray arrayWithCapacity:8];
 
@@ -2852,23 +2854,12 @@ struct PackageNameOrdering :
 
 @synchronized (database_) {
     pkgRecords::Parser &parser([database_ records]->Lookup(file_));
-
-    const char *start, *end;
-    if (!parser.ShortDesc(start, end))
+    std::string value(parser.ShortDesc());
+    if (value.empty())
         return nil;
-
-    if (end - start > 200)
-        end = start + 200;
-
-    /*
-    if (const char *stop = reinterpret_cast<const char *>(memchr(start, '\n', end - start)))
-        end = stop;
-
-    while (end != start && end[-1] == '\r')
-        --end;
-    */
-
-    return [(id) CYStringCreate(start, end - start) autorelease];
+    if (value.size() > 200)
+        value.resize(200);
+    return [(id) CYStringCreate(value) autorelease];
 } }
 
 - (unichar) index {
@@ -3541,8 +3532,7 @@ class CydiaLogCleaner :
 }
 
 - (void) _readCydia:(NSNumber *)fd {
-    __gnu_cxx::stdio_filebuf<char> ib([fd intValue], std::ios::in);
-    std::istream is(&ib);
+    boost::fdistream is([fd intValue]);
     std::string line;
 
     static RegEx finish_r("finish:([^:]*)");
@@ -3568,8 +3558,7 @@ class CydiaLogCleaner :
 }
 
 - (void) _readStatus:(NSNumber *)fd {
-    __gnu_cxx::stdio_filebuf<char> ib([fd intValue], std::ios::in);
-    std::istream is(&ib);
+    boost::fdistream is([fd intValue]);
     std::string line;
 
     static RegEx conffile_r("status: [^ ]* : conffile-prompt : (.*?) *");
@@ -3625,8 +3614,7 @@ class CydiaLogCleaner :
 }
 
 - (void) _readOutput:(NSNumber *)fd {
-    __gnu_cxx::stdio_filebuf<char> ib([fd intValue], std::ios::in);
-    std::istream is(&ib);
+    boost::fdistream is([fd intValue]);
     std::string line;
 
     while (std::getline(is, line)) {
@@ -3653,7 +3641,11 @@ class CydiaLogCleaner :
 @synchronized (self) {
     if (static_cast<pkgDepCache *>(cache_) == NULL)
         return nil;
-    pkgCache::PkgIterator iterator(cache_->FindPkg([name UTF8String]));
+    pkgCache::PkgIterator iterator(cache_->FindPkg([name UTF8String]
+#ifdef __arm64__
+        , "any"
+#endif
+    ));
     return iterator.end() ? nil : [Package packageWithIterator:iterator withZone:NULL inPool:NULL database:self];
 } }
 
@@ -4372,6 +4364,7 @@ static _H<NSMutableSet> Diversions_;
 
 + (NSArray *) _attributeKeys {
     return [NSArray arrayWithObjects:
+        @"bittage",
         @"bbsnum",
         @"build",
         @"cells",
@@ -4403,6 +4396,17 @@ static _H<NSMutableSet> Diversions_;
     return Cydia_;
 }
 
+- (unsigned) bittage {
+#if 0
+#elif defined(__arm64__)
+    return 64;
+#elif defined(__arm__)
+    return 32;
+#else
+    return 0;
+#endif
+}
+
 - (NSString *) build {
     return System_;
 }
@@ -6277,7 +6281,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
                 NSString *directory = [stack lastObject];
                 [stack addObject:[file stringByAppendingString:@"/"]];
                 [files_ replaceObjectAtIndex:i withObject:[NSString stringWithFormat:@"%*s%@",
-                    ([stack count] - 2) * 3, "",
+                    int(([stack count] - 2) * 3), "",
                     [file substringFromIndex:[directory length]]
                 ]];
             }
@@ -10215,7 +10219,18 @@ static NSMutableDictionary *AutoreleaseDeepMutableCopyOfDictionary(CFTypeRef typ
     return [(NSMutableDictionary *) copy autorelease];
 }
 
+int main_store(int, char *argv[]);
+
 int main(int argc, char *argv[]) {
+#ifdef __arm64__
+    const char *argv0(argv[0]);
+    if (const char *slash = strrchr(argv0, '/'))
+        argv0 = slash + 1;
+    if (false);
+    else if (!strcmp(argv0, "store"))
+        return main_store(argc, argv);
+#endif
+
     int fd(open("/tmp/cydia.log", O_WRONLY | O_APPEND | O_CREAT, 0644));
     dup2(fd, 2);
     close(fd);
@@ -10313,7 +10328,7 @@ int main(int argc, char *argv[]) {
 
     if (lang != NULL) {
         setenv("LANG", lang, true);
-        std::setlocale(LC_ALL, lang);
+        setlocale(LC_ALL, lang);
     }
     /* }}} */
     /* Index Collation {{{ */
@@ -10560,8 +10575,12 @@ int main(int argc, char *argv[]) {
     _assert(pkgInitConfig(*_config));
     _assert(pkgInitSystem(*_config, _system));
 
-    if (lang != NULL)
-        _config->Set("APT::Acquire::Translation", lang);
+    _config->Set("Acquire::AllowInsecureRepositories", true);
+    _config->Set("Acquire::Check-Valid-Until", false);
+    _config->Set("Dir::Bin::Methods::store", "/Applications/Cydia.app/store");
+
+    _config->Set("pkgCacheGen::ForceEssential", "");
+    _config->Set("APT::Acquire::Translation", "environment");
 
     // XXX: this timeout might be important :(
     //_config->Set("Acquire::http::Timeout", 15);
@@ -10582,7 +10601,7 @@ int main(int argc, char *argv[]) {
 
     std::string logs("/var/mobile/Library/Logs/Cydia");
     mkdir(logs.c_str(), 0755);
-    _config->Set("Dir::Log::Terminal", logs + "/apt.log");
+    _config->Set("Dir::Log", logs);
 
     _config->Set("Dir::Bin::dpkg", "/usr/libexec/cydia/cydo");
     /* }}} */
diff --git a/apt b/apt
new file mode 160000 (submodule)
index 0000000..1242b3b
--- /dev/null
+++ b/apt
@@ -0,0 +1 @@
+Subproject commit 1242b3bdaf3d3682a945f10f0e537bdb3b0599d5
diff --git a/apt-contrib/apt-pkg b/apt-contrib/apt-pkg
new file mode 120000 (symlink)
index 0000000..c7d0c77
--- /dev/null
@@ -0,0 +1 @@
+../apt/apt-pkg/contrib
\ No newline at end of file
diff --git a/apt-deb/apt-pkg b/apt-deb/apt-pkg
new file mode 120000 (symlink)
index 0000000..40a128e
--- /dev/null
@@ -0,0 +1 @@
+../apt/apt-pkg/deb
\ No newline at end of file
diff --git a/apt-extra/apti18n.h b/apt-extra/apti18n.h
new file mode 100644 (file)
index 0000000..a425267
--- /dev/null
@@ -0,0 +1,7 @@
+#define setlocale(a, b)
+#define textdomain(a)
+#define bindtextdomain(a, b)
+#define _(x) x
+#define P_(msg,plural,n) (n == 1 ? msg : plural)
+#define N_(x) x
+#define dgettext(d, m) m
diff --git a/apt-extra/config.h b/apt-extra/config.h
new file mode 100644 (file)
index 0000000..d281ff5
--- /dev/null
@@ -0,0 +1,48 @@
+#undef WORDS_BIGENDIAN
+
+#define HAVE_TIMEGM
+
+//#cmakedefine HAVE_ZLIB
+//#cmakedefine HAVE_BZ2
+//#cmakedefine HAVE_LZMA
+//#cmakedefine HAVE_LZ4
+
+/* These two are used by the statvfs shim for glibc2.0 and bsd */
+/* Define if we have sys/vfs.h */
+//#cmakedefine HAVE_VFS_H
+//#cmakedefine HAVE_STRUCT_STATFS_F_TYPE
+
+#undef HAVE_MOUNT_H
+
+#undef HAVE_SYS_ENDIAN_H
+#define HAVE_MACHINE_ENDIAN_H
+
+#define HAVE_PTHREAD
+
+#undef HAVE_GETRESUID
+#undef HAVE_GETRESGID
+#undef HAVE_SETRESUID
+#undef HAVE_SETRESGID
+
+#undef HAVE_PTSNAME_R
+
+#define COMMON_ARCH "iphoneos-arm"
+#define PACKAGE "cydia" // XXX
+#define PACKAGE_VERSION "${PACKAGE_VERSION}" // XXX
+#define PACKAGE_MAIL "saurik@saurik.com"
+
+#define CMAKE_INSTALL_FULL_BINDIR "/usr/bin"
+#define STATE_DIR "/var/lib/apt"
+#define CACHE_DIR "/var/cache/apt"
+#define LOG_DIR "/var/log/apt"
+#define CONF_DIR "/etc/apt"
+#define LIBEXEC_DIR "/usr/lib/apt"
+#define BIN_DIR "/usr/bin"
+
+#define ROOT_GROUP "wheel"
+
+#define APT_8_CLEANER_HEADERS
+#define APT_9_CLEANER_HEADERS
+#define APT_10_CLEANER_HEADERS
+
+#define SHA2_UNROLL_TRANSFORM
diff --git a/apt-extra/endian.h b/apt-extra/endian.h
new file mode 100644 (file)
index 0000000..0de2c02
--- /dev/null
@@ -0,0 +1 @@
+#include <machine/endian.h>
diff --git a/apt-tag/apt-pkg/tagfile-keys.cc b/apt-tag/apt-pkg/tagfile-keys.cc
new file mode 100644 (file)
index 0000000..9a67820
--- /dev/null
@@ -0,0 +1,3771 @@
+#include "apt-pkg/tagfile-keys.h"
+#ifdef __GNUC__
+typedef uint16_t __attribute__((aligned (1))) triehash_uu16;
+typedef char static_assert16[__alignof__(triehash_uu16) == 1 ? 1 : -1];
+typedef uint32_t __attribute__((aligned (1))) triehash_uu32;
+typedef char static_assert32[__alignof__(triehash_uu32) == 1 ? 1 : -1];
+typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
+//\0[__alignof__(triehash_uu64) == 1 ? 1 : -1];
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define onechar(c, s, l) (((uint64_t)(c)) << (s))
+#else
+#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))
+#endif
+#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)
+#define TRIE_HASH_MULTI_BYTE
+#endif
+#endif /*GNUC */
+#ifdef TRIE_HASH_MULTI_BYTE
+static enum pkgTagSection::Key pkgTagHash3(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('t', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('a', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                return pkgTagSection::Key::Tag;
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash4(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('b', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('u', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                switch(string[3] | 0x20) {
+                case 0| onechar('s', 0, 8):
+                    return pkgTagSection::Key::Bugs;
+                }
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('h', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('a', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('1', 0, 8):
+                    return pkgTagSection::Key::SHA1;
+                }
+            }
+            break;
+        case 0| onechar('i', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('z', 0, 8):
+                switch(string[3] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    return pkgTagSection::Key::Size;
+                }
+            }
+        }
+        break;
+    case 0| onechar('t', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('a', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3] | 0x20) {
+                case 0| onechar('k', 0, 8):
+                    return pkgTagSection::Key::Task;
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash5(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('c', 0, 32)| onechar('l', 8, 32)| onechar('a', 16, 32)| onechar('s', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('s', 0, 8):
+            return pkgTagSection::Key::Class;
+        }
+        break;
+    case 0| onechar('f', 0, 32)| onechar('i', 8, 32)| onechar('l', 16, 32)| onechar('e', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('s', 0, 8):
+            return pkgTagSection::Key::Files;
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash6(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('b', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('a', 16, 32)| onechar('r', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('y', 0, 8):
+                return pkgTagSection::Key::Binary;
+            }
+            break;
+        case 0| onechar('r', 0, 32)| onechar('e', 8, 32)| onechar('a', 16, 32)| onechar('k', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                return pkgTagSection::Key::Breaks;
+            }
+        }
+        break;
+    case 0| onechar('f', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('o', 0, 32)| onechar('r', 8, 32)| onechar('m', 16, 32)| onechar('a', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('t', 0, 8):
+                return pkgTagSection::Key::Format;
+            }
+        }
+        break;
+    case 0| onechar('m', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[2]) {
+            case 0| onechar('5', 0, 8):
+                switch(string[3] | 0x20) {
+                case 0| onechar('s', 0, 8):
+                    switch(string[4] | 0x20) {
+                    case 0| onechar('u', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('m', 0, 8):
+                            return pkgTagSection::Key::MD5sum;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('o', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('r', 0, 32)| onechar('i', 8, 32)| onechar('g', 16, 32)| onechar('i', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('n', 0, 8):
+                return pkgTagSection::Key::Origin;
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('h', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('a', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('2', 0, 8):
+                    switch(string[4]) {
+                    case 0| onechar('5', 0, 8):
+                        switch(string[5]) {
+                        case 0| onechar('6', 0, 8):
+                            return pkgTagSection::Key::SHA256;
+                        }
+                    }
+                    break;
+                case 0| onechar('5', 0, 8):
+                    switch(string[4]) {
+                    case 0| onechar('1', 0, 8):
+                        switch(string[5]) {
+                        case 0| onechar('2', 0, 8):
+                            return pkgTagSection::Key::SHA512;
+                        }
+                    }
+                }
+            }
+            break;
+        case 0| onechar('o', 0, 8):
+            switch(*((triehash_uu32*) &string[2]) | 0x20202020) {
+            case 0| onechar('u', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('e', 24, 32):
+                return pkgTagSection::Key::Source;
+            }
+            break;
+        case 0| onechar('t', 0, 8):
+            switch(*((triehash_uu32*) &string[2]) | 0x20202020) {
+            case 0| onechar('a', 0, 32)| onechar('t', 8, 32)| onechar('u', 16, 32)| onechar('s', 24, 32):
+                return pkgTagSection::Key::Status;
+            }
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(string[4] | 0x20) {
+                    case 0| onechar('h', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('g', 0, 8):
+                            return pkgTagSection::Key::Vcs_Hg;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash7(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('d', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('e', 0, 32)| onechar('p', 8, 32)| onechar('e', 16, 32)| onechar('n', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('d', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('s', 0, 8):
+                    return pkgTagSection::Key::Depends;
+                }
+            }
+        }
+        break;
+    case 0| onechar('p', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('a', 0, 32)| onechar('c', 8, 32)| onechar('k', 16, 32)| onechar('a', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    return pkgTagSection::Key::Package;
+                }
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('e', 0, 32)| onechar('c', 8, 32)| onechar('t', 16, 32)| onechar('i', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('o', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('n', 0, 8):
+                    return pkgTagSection::Key::Section;
+                }
+            }
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(string[4] | 0x20) {
+                    case 0| onechar('b', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('z', 0, 8):
+                            switch(string[6] | 0x20) {
+                            case 0| onechar('r', 0, 8):
+                                return pkgTagSection::Key::Vcs_Bzr;
+                            }
+                        }
+                        break;
+                    case 0| onechar('c', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('v', 0, 8):
+                            switch(string[6] | 0x20) {
+                            case 0| onechar('s', 0, 8):
+                                return pkgTagSection::Key::Vcs_Cvs;
+                            }
+                        }
+                        break;
+                    case 0| onechar('g', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('i', 0, 8):
+                            switch(string[6] | 0x20) {
+                            case 0| onechar('t', 0, 8):
+                                return pkgTagSection::Key::Vcs_Git;
+                            }
+                        }
+                        break;
+                    case 0| onechar('m', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('t', 0, 8):
+                            switch(string[6] | 0x20) {
+                            case 0| onechar('n', 0, 8):
+                                return pkgTagSection::Key::Vcs_Mtn;
+                            }
+                        }
+                        break;
+                    case 0| onechar('s', 0, 8):
+                        switch(string[5] | 0x20) {
+                        case 0| onechar('v', 0, 8):
+                            switch(string[6] | 0x20) {
+                            case 0| onechar('n', 0, 8):
+                                return pkgTagSection::Key::Vcs_Svn;
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        case 0| onechar('e', 0, 8):
+            switch(*((triehash_uu32*) &string[2]) | 0x20202020) {
+            case 0| onechar('r', 0, 32)| onechar('s', 8, 32)| onechar('i', 16, 32)| onechar('o', 24, 32):
+                switch(string[6] | 0x20) {
+                case 0| onechar('n', 0, 8):
+                    return pkgTagSection::Key::Version;
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash8(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('e', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('n', 0, 32)| onechar('h', 8, 32)| onechar('a', 16, 32)| onechar('n', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('c', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        return pkgTagSection::Key::Enhances;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('f', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('i', 0, 32)| onechar('l', 8, 32)| onechar('e', 16, 32)| onechar('n', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('a', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('m', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('e', 0, 8):
+                        return pkgTagSection::Key::Filename;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('h', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('o', 0, 32)| onechar('m', 8, 32)| onechar('e', 16, 32)| onechar('p', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('a', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('g', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('e', 0, 8):
+                        return pkgTagSection::Key::Homepage;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('o', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('p', 0, 32)| onechar('t', 8, 32)| onechar('i', 16, 32)| onechar('o', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('n', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('a', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('l', 0, 8):
+                        return pkgTagSection::Key::Optional;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('p', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('r', 0, 32)| onechar('i', 8, 32)| onechar('o', 16, 32)| onechar('r', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('i', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('t', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('y', 0, 8):
+                        return pkgTagSection::Key::Priority;
+                    }
+                }
+            }
+            break;
+        case 0| onechar('r', 0, 32)| onechar('o', 8, 32)| onechar('v', 16, 32)| onechar('i', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('d', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        return pkgTagSection::Key::Provides;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('r', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('e', 0, 32)| onechar('p', 8, 32)| onechar('l', 16, 32)| onechar('a', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('c', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        return pkgTagSection::Key::Replaces;
+                    }
+                }
+            }
+            break;
+        case 0| onechar('e', 0, 32)| onechar('v', 8, 32)| onechar('i', 16, 32)| onechar('s', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('i', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('o', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('n', 0, 8):
+                        return pkgTagSection::Key::Revision;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('u', 0, 32)| onechar('g', 8, 32)| onechar('g', 16, 32)| onechar('e', 24, 32):
+            switch(string[5] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('t', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        return pkgTagSection::Key::Suggests;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+                    case 0| onechar('a', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('h', 24, 32):
+                        return pkgTagSection::Key::Vcs_Arch;
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash9(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('c', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('o', 0, 64)| onechar('n', 8, 64)| onechar('f', 16, 64)| onechar('f', 24, 64)| onechar('i', 32, 64)| onechar('l', 40, 64)| onechar('e', 48, 64)| onechar('s', 56, 64):
+            return pkgTagSection::Key::Conffiles;
+            break;
+        case 0| onechar('o', 0, 64)| onechar('n', 8, 64)| onechar('f', 16, 64)| onechar('l', 24, 64)| onechar('i', 32, 64)| onechar('c', 40, 64)| onechar('t', 48, 64)| onechar('s', 56, 64):
+            return pkgTagSection::Key::Conflicts;
+        }
+        break;
+    case 0| onechar('d', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('i', 0, 64)| onechar('r', 8, 64)| onechar('e', 16, 64)| onechar('c', 24, 64)| onechar('t', 32, 64)| onechar('o', 40, 64)| onechar('r', 48, 64)| onechar('y', 56, 64):
+            return pkgTagSection::Key::Directory;
+        }
+        break;
+    case 0| onechar('e', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('s', 0, 64)| onechar('s', 8, 64)| onechar('e', 16, 64)| onechar('n', 24, 64)| onechar('t', 32, 64)| onechar('i', 40, 64)| onechar('a', 48, 64)| onechar('l', 56, 64):
+            return pkgTagSection::Key::Essential;
+        }
+        break;
+    case 0| onechar('i', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('m', 0, 64)| onechar('p', 8, 64)| onechar('o', 16, 64)| onechar('r', 24, 64)| onechar('t', 32, 64)| onechar('a', 40, 64)| onechar('n', 48, 64)| onechar('t', 56, 64):
+            return pkgTagSection::Key::Important;
+        }
+        break;
+    case 0| onechar('t', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('e', 0, 64)| onechar('s', 8, 64)| onechar('t', 16, 64)| onechar('s', 24, 64)| onechar('u', 32, 64)| onechar('i', 40, 64)| onechar('t', 48, 64)| onechar('e', 56, 64):
+            return pkgTagSection::Key::Testsuite;
+        }
+        break;
+    case 0| onechar('u', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('p', 0, 64)| onechar('l', 8, 64)| onechar('o', 16, 64)| onechar('a', 24, 64)| onechar('d', 32, 64)| onechar('e', 40, 64)| onechar('r', 48, 64)| onechar('s', 56, 64):
+            return pkgTagSection::Key::Uploaders;
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+                    case 0| onechar('d', 0, 32)| onechar('a', 8, 32)| onechar('r', 16, 32)| onechar('c', 24, 32):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('s', 0, 8):
+                            return pkgTagSection::Key::Vcs_Darcs;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash10(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('m', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('a', 0, 32)| onechar('i', 8, 32)| onechar('n', 16, 32)| onechar('t', 24, 32):
+            switch(*((triehash_uu32*) &string[5]) | 0x20202020) {
+            case 0| onechar('a', 0, 32)| onechar('i', 8, 32)| onechar('n', 16, 32)| onechar('e', 24, 32):
+                switch(string[9] | 0x20) {
+                case 0| onechar('r', 0, 8):
+                    return pkgTagSection::Key::Maintainer;
+                }
+            }
+            break;
+        case 0| onechar('u', 0, 32)| onechar('l', 8, 32)| onechar('t', 16, 32)| onechar('i', 24, 32):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[6]) | 0x20202020) {
+                case 0| onechar('a', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('h', 24, 32):
+                    return pkgTagSection::Key::Multi_Arch;
+                }
+            }
+        }
+        break;
+    case 0| onechar('r', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('e', 0, 64)| onechar('c', 8, 64)| onechar('o', 16, 64)| onechar('m', 24, 64)| onechar('m', 32, 64)| onechar('e', 40, 64)| onechar('n', 48, 64)| onechar('d', 56, 64):
+            switch(string[9] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                return pkgTagSection::Key::Recommends;
+            }
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+                    case 0| onechar('b', 0, 32)| onechar('r', 8, 32)| onechar('o', 16, 32)| onechar('w', 24, 32):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('s', 0, 8):
+                            switch(string[9] | 0x20) {
+                            case 0| onechar('e', 0, 8):
+                                return pkgTagSection::Key::Vcs_Browse;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash11(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('b', 0, 8):
+        switch(*((triehash_uu32*) &string[1]) | 0x20202020) {
+        case 0| onechar('u', 0, 32)| onechar('i', 8, 32)| onechar('l', 16, 32)| onechar('t', 24, 32):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[6]) | 0x20202020) {
+                case 0| onechar('u', 0, 32)| onechar('s', 8, 32)| onechar('i', 16, 32)| onechar('n', 24, 32):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('g', 0, 8):
+                        return pkgTagSection::Key::Built_Using;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('d', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('e', 0, 64)| onechar('s', 8, 64)| onechar('c', 16, 64)| onechar('r', 24, 64)| onechar('i', 32, 64)| onechar('p', 40, 64)| onechar('t', 48, 64)| onechar('i', 56, 64):
+            switch(string[9] | 0x20) {
+            case 0| onechar('o', 0, 8):
+                switch(string[10] | 0x20) {
+                case 0| onechar('n', 0, 8):
+                    return pkgTagSection::Key::Description;
+                }
+            }
+        }
+        break;
+    case 0| onechar('p', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('r', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('e', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+                    case 0| onechar('d', 0, 32)| onechar('e', 8, 32)| onechar('p', 16, 32)| onechar('e', 24, 32):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('n', 0, 8):
+                            switch(string[9] | 0x20) {
+                            case 0| onechar('d', 0, 8):
+                                switch(string[10] | 0x20) {
+                                case 0| onechar('s', 0, 8):
+                                    return pkgTagSection::Key::Pre_Depends;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('r', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('e', 0, 64)| onechar('c', 8, 64)| onechar('o', 16, 64)| onechar('m', 24, 64)| onechar('m', 32, 64)| onechar('e', 40, 64)| onechar('n', 48, 64)| onechar('d', 56, 64):
+            switch(string[9] | 0x20) {
+            case 0| onechar('e', 0, 8):
+                switch(string[10] | 0x20) {
+                case 0| onechar('d', 0, 8):
+                    return pkgTagSection::Key::Recommended;
+                }
+            }
+        }
+        break;
+    case 0| onechar('v', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('c', 0, 8):
+            switch(string[2] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[3]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+                    case 0| onechar('b', 0, 32)| onechar('r', 8, 32)| onechar('o', 16, 32)| onechar('w', 24, 32):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('s', 0, 8):
+                            switch(string[9] | 0x20) {
+                            case 0| onechar('e', 0, 8):
+                                switch(string[10] | 0x20) {
+                                case 0| onechar('r', 0, 8):
+                                    return pkgTagSection::Key::Vcs_Browser;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash12(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('a', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('h', 24, 32):
+        switch(*((triehash_uu64*) &string[4]) | 0x2020202020202020) {
+        case 0| onechar('i', 0, 64)| onechar('t', 8, 64)| onechar('e', 16, 64)| onechar('c', 24, 64)| onechar('t', 32, 64)| onechar('u', 40, 64)| onechar('r', 48, 64)| onechar('e', 56, 64):
+            return pkgTagSection::Key::Architecture;
+        }
+        break;
+    case 0| onechar('p', 0, 32)| onechar('a', 8, 32)| onechar('c', 16, 32)| onechar('k', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('a', 0, 8):
+            switch(string[5] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    switch(string[7]) {
+                    case 0| onechar('-', 0, 8):
+                        switch(*((triehash_uu32*) &string[8]) | 0x20202020) {
+                        case 0| onechar('l', 0, 32)| onechar('i', 8, 32)| onechar('s', 16, 32)| onechar('t', 24, 32):
+                            return pkgTagSection::Key::Package_List;
+                            break;
+                        case 0| onechar('t', 0, 32)| onechar('y', 8, 32)| onechar('p', 16, 32)| onechar('e', 24, 32):
+                            return pkgTagSection::Key::Package_Type;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash13(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[6]) | 0x20202020) {
+                case 0| onechar('d', 0, 32)| onechar('e', 8, 32)| onechar('p', 16, 32)| onechar('e', 24, 32):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('n', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('d', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('s', 0, 8):
+                                return pkgTagSection::Key::Build_Depends;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('c', 0, 32)| onechar('h', 8, 32)| onechar('e', 16, 32)| onechar('c', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('k', 0, 32)| onechar('s', 8, 32)| onechar('u', 16, 32)| onechar('m', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('m', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('d', 0, 8):
+                            switch(string[12]) {
+                            case 0| onechar('5', 0, 8):
+                                return pkgTagSection::Key::Checksums_Md5;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash14(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('c', 0, 32)| onechar('h', 8, 32)| onechar('e', 16, 32)| onechar('c', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('k', 0, 32)| onechar('s', 8, 32)| onechar('u', 16, 32)| onechar('m', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('h', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('a', 0, 8):
+                                switch(string[13]) {
+                                case 0| onechar('1', 0, 8):
+                                    return pkgTagSection::Key::Checksums_Sha1;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('c', 0, 32)| onechar('o', 8, 32)| onechar('n', 16, 32)| onechar('f', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('i', 0, 8):
+            switch(string[5] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                switch(string[6]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[7]) | 0x20202020) {
+                    case 0| onechar('v', 0, 32)| onechar('e', 8, 32)| onechar('r', 16, 32)| onechar('s', 24, 32):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('i', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('o', 0, 8):
+                                switch(string[13] | 0x20) {
+                                case 0| onechar('n', 0, 8):
+                                    return pkgTagSection::Key::Config_Version;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('s', 16, 32)| onechar('t', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('a', 0, 32)| onechar('l', 8, 32)| onechar('l', 16, 32)| onechar('e', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('d', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[10]) | 0x20202020) {
+                    case 0| onechar('s', 0, 32)| onechar('i', 8, 32)| onechar('z', 16, 32)| onechar('e', 24, 32):
+                        return pkgTagSection::Key::Installed_Size;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('k', 0, 32)| onechar('e', 8, 32)| onechar('r', 16, 32)| onechar('n', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('e', 0, 8):
+            switch(string[5] | 0x20) {
+            case 0| onechar('l', 0, 8):
+                switch(string[6]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[7]) | 0x20202020) {
+                    case 0| onechar('v', 0, 32)| onechar('e', 8, 32)| onechar('r', 16, 32)| onechar('s', 24, 32):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('i', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('o', 0, 8):
+                                switch(string[13] | 0x20) {
+                                case 0| onechar('n', 0, 8):
+                                    return pkgTagSection::Key::Kernel_Version;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('m', 0, 32)| onechar('s', 8, 32)| onechar('d', 16, 32)| onechar('o', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('s', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu64*) &string[6]) | 0x2020202020202020) {
+                case 0| onechar('f', 0, 64)| onechar('i', 8, 64)| onechar('l', 16, 64)| onechar('e', 24, 64)| onechar('n', 32, 64)| onechar('a', 40, 64)| onechar('m', 48, 64)| onechar('e', 56, 64):
+                    return pkgTagSection::Key::MSDOS_Filename;
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash15(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu64*) &string[6]) | 0x2020202020202020) {
+                case 0| onechar('c', 0, 64)| onechar('o', 8, 64)| onechar('n', 16, 64)| onechar('f', 24, 64)| onechar('l', 32, 64)| onechar('i', 40, 64)| onechar('c', 48, 64)| onechar('t', 56, 64):
+                    switch(string[14] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        return pkgTagSection::Key::Build_Conflicts;
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('d', 0, 32)| onechar('e', 8, 32)| onechar('s', 16, 32)| onechar('c', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('r', 0, 32)| onechar('i', 8, 32)| onechar('p', 16, 32)| onechar('t', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('i', 0, 8):
+                switch(string[9] | 0x20) {
+                case 0| onechar('o', 0, 8):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('n', 0, 8):
+                        switch(string[11]) {
+                        case 0| onechar('-', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('m', 0, 8):
+                                switch(string[13] | 0x20) {
+                                case 0| onechar('d', 0, 8):
+                                    switch(string[14]) {
+                                    case 0| onechar('5', 0, 8):
+                                        return pkgTagSection::Key::Description_md5;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 32)| onechar('u', 8, 32)| onechar('b', 16, 32)| onechar('a', 24, 32):
+        switch(*((triehash_uu64*) &string[4]) | 0x2020202020202020) {
+        case 0| onechar('r', 0, 64)| onechar('c', 8, 64)| onechar('h', 16, 64)| onechar('i', 24, 64)| onechar('t', 32, 64)| onechar('e', 40, 64)| onechar('c', 48, 64)| onechar('t', 56, 64):
+            switch(string[12] | 0x20) {
+            case 0| onechar('u', 0, 8):
+                switch(string[13] | 0x20) {
+                case 0| onechar('r', 0, 8):
+                    switch(string[14] | 0x20) {
+                    case 0| onechar('e', 0, 8):
+                        return pkgTagSection::Key::Subarchitecture;
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash16(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('c', 0, 32)| onechar('h', 8, 32)| onechar('e', 16, 32)| onechar('c', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('k', 0, 32)| onechar('s', 8, 32)| onechar('u', 16, 32)| onechar('m', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('s', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('h', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('a', 0, 8):
+                                switch(string[13]) {
+                                case 0| onechar('2', 0, 8):
+                                    switch(string[14]) {
+                                    case 0| onechar('5', 0, 8):
+                                        switch(string[15]) {
+                                        case 0| onechar('6', 0, 8):
+                                            return pkgTagSection::Key::Checksums_Sha256;
+                                        }
+                                    }
+                                    break;
+                                case 0| onechar('5', 0, 8):
+                                    switch(string[14]) {
+                                    case 0| onechar('1', 0, 8):
+                                        switch(string[15]) {
+                                        case 0| onechar('2', 0, 8):
+                                            return pkgTagSection::Key::Checksums_Sha512;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('p', 0, 32)| onechar('a', 8, 32)| onechar('c', 16, 32)| onechar('k', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('a', 0, 8):
+            switch(string[5] | 0x20) {
+            case 0| onechar('g', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('e', 0, 8):
+                    switch(string[7]) {
+                    case 0| onechar('-', 0, 8):
+                        switch(*((triehash_uu64*) &string[8]) | 0x2020202020202020) {
+                        case 0| onechar('r', 0, 64)| onechar('e', 8, 64)| onechar('v', 16, 64)| onechar('i', 24, 64)| onechar('s', 32, 64)| onechar('i', 40, 64)| onechar('o', 48, 64)| onechar('n', 56, 64):
+                            return pkgTagSection::Key::Package_Revision;
+                        }
+                        break;
+                    case 0| onechar('_', 0, 8):
+                        switch(*((triehash_uu64*) &string[8]) | 0x2020202020202020) {
+                        case 0| onechar('r', 0, 64)| onechar('e', 8, 64)| onechar('v', 16, 64)| onechar('i', 24, 64)| onechar('s', 32, 64)| onechar('i', 40, 64)| onechar('o', 48, 64)| onechar('n', 56, 64):
+                            return pkgTagSection::Key::Package__Revision;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('t', 0, 32)| onechar('r', 8, 32)| onechar('i', 16, 32)| onechar('g', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('g', 0, 32)| onechar('e', 8, 32)| onechar('r', 16, 32)| onechar('s', 24, 32):
+            switch(string[8]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[9]) | 0x20202020) {
+                case 0| onechar('a', 0, 32)| onechar('w', 8, 32)| onechar('a', 16, 32)| onechar('i', 24, 32):
+                    switch(string[13] | 0x20) {
+                    case 0| onechar('t', 0, 8):
+                        switch(string[14] | 0x20) {
+                        case 0| onechar('e', 0, 8):
+                            switch(string[15] | 0x20) {
+                            case 0| onechar('d', 0, 8):
+                                return pkgTagSection::Key::Triggers_Awaited;
+                            }
+                        }
+                    }
+                    break;
+                case 0| onechar('p', 0, 32)| onechar('e', 8, 32)| onechar('n', 16, 32)| onechar('d', 24, 32):
+                    switch(string[13] | 0x20) {
+                    case 0| onechar('i', 0, 8):
+                        switch(string[14] | 0x20) {
+                        case 0| onechar('n', 0, 8):
+                            switch(string[15] | 0x20) {
+                            case 0| onechar('g', 0, 8):
+                                return pkgTagSection::Key::Triggers_Pending;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash17(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 0| onechar('d', 0, 8):
+        switch(string[1] | 0x20) {
+        case 0| onechar('m', 0, 8):
+            switch(string[2]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[3]) | 0x20202020) {
+                case 0| onechar('u', 0, 32)| onechar('p', 8, 32)| onechar('l', 16, 32)| onechar('o', 24, 32):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('a', 0, 8):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('d', 0, 8):
+                            switch(string[9]) {
+                            case 0| onechar('-', 0, 8):
+                                switch(*((triehash_uu32*) &string[10]) | 0x20202020) {
+                                case 0| onechar('a', 0, 32)| onechar('l', 8, 32)| onechar('l', 16, 32)| onechar('o', 24, 32):
+                                    switch(string[14] | 0x20) {
+                                    case 0| onechar('w', 0, 8):
+                                        switch(string[15] | 0x20) {
+                                        case 0| onechar('e', 0, 8):
+                                            switch(string[16] | 0x20) {
+                                            case 0| onechar('d', 0, 8):
+                                                return pkgTagSection::Key::Dm_Upload_Allowed;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('s', 0, 8):
+        switch(*((triehash_uu64*) &string[1]) | 0x2020202020202020) {
+        case 0| onechar('t', 0, 64)| onechar('a', 8, 64)| onechar('n', 16, 64)| onechar('d', 24, 64)| onechar('a', 32, 64)| onechar('r', 40, 64)| onechar('d', 48, 64)| onechar('s', 56, 64):
+            switch(string[9]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[10]) | 0x20202020) {
+                case 0| onechar('v', 0, 32)| onechar('e', 8, 32)| onechar('r', 16, 32)| onechar('s', 24, 32):
+                    switch(string[14] | 0x20) {
+                    case 0| onechar('i', 0, 8):
+                        switch(string[15] | 0x20) {
+                        case 0| onechar('o', 0, 8):
+                            switch(string[16] | 0x20) {
+                            case 0| onechar('n', 0, 8):
+                                return pkgTagSection::Key::Standards_Version;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash18(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[6]) | 0x20202020) {
+                case 0| onechar('d', 0, 32)| onechar('e', 8, 32)| onechar('p', 16, 32)| onechar('e', 24, 32):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('n', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('d', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('s', 0, 8):
+                                switch(string[13]) {
+                                case 0| onechar('-', 0, 8):
+                                    switch(*((triehash_uu32*) &string[14]) | 0x20202020) {
+                                    case 0| onechar('a', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('h', 24, 32):
+                                        return pkgTagSection::Key::Build_Depends_Arch;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        case 0| onechar('t', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(string[6] | 0x20) {
+                case 0| onechar('f', 0, 8):
+                    switch(string[7] | 0x20) {
+                    case 0| onechar('o', 0, 8):
+                        switch(string[8] | 0x20) {
+                        case 0| onechar('r', 0, 8):
+                            switch(string[9]) {
+                            case 0| onechar('-', 0, 8):
+                                switch(*((triehash_uu64*) &string[10]) | 0x2020202020202020) {
+                                case 0| onechar('p', 0, 64)| onechar('r', 8, 64)| onechar('o', 16, 64)| onechar('f', 24, 64)| onechar('i', 32, 64)| onechar('l', 40, 64)| onechar('e', 48, 64)| onechar('s', 56, 64):
+                                    return pkgTagSection::Key::Built_For_Profiles;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('t', 0, 32)| onechar('e', 8, 32)| onechar('s', 16, 32)| onechar('t', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('s', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('t', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('e', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu64*) &string[10]) | 0x2020202020202020) {
+                    case 0| onechar('t', 0, 64)| onechar('r', 8, 64)| onechar('i', 16, 64)| onechar('g', 24, 64)| onechar('g', 32, 64)| onechar('e', 40, 64)| onechar('r', 48, 64)| onechar('s', 56, 64):
+                        return pkgTagSection::Key::Testsuite_Triggers;
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash19(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu32*) &string[6]) | 0x20202020) {
+                case 0| onechar('d', 0, 32)| onechar('e', 8, 32)| onechar('p', 16, 32)| onechar('e', 24, 32):
+                    switch(string[10] | 0x20) {
+                    case 0| onechar('n', 0, 8):
+                        switch(string[11] | 0x20) {
+                        case 0| onechar('d', 0, 8):
+                            switch(string[12] | 0x20) {
+                            case 0| onechar('s', 0, 8):
+                                switch(string[13]) {
+                                case 0| onechar('-', 0, 8):
+                                    switch(*((triehash_uu32*) &string[14]) | 0x20202020) {
+                                    case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('d', 16, 32)| onechar('e', 24, 32):
+                                        switch(string[18] | 0x20) {
+                                        case 0| onechar('p', 0, 8):
+                                            return pkgTagSection::Key::Build_Depends_Indep;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('s', 16, 32)| onechar('t', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('a', 0, 32)| onechar('l', 8, 32)| onechar('l', 16, 32)| onechar('e', 24, 32):
+            switch(string[8] | 0x20) {
+            case 0| onechar('r', 0, 8):
+                switch(string[9]) {
+                case 0| onechar('-', 0, 8):
+                    switch(*((triehash_uu32*) &string[10]) | 0x20202020) {
+                    case 0| onechar('m', 0, 32)| onechar('e', 8, 32)| onechar('n', 16, 32)| onechar('u', 24, 32):
+                        switch(string[14]) {
+                        case 0| onechar('-', 0, 8):
+                            switch(*((triehash_uu32*) &string[15]) | 0x20202020) {
+                            case 0| onechar('i', 0, 32)| onechar('t', 8, 32)| onechar('e', 16, 32)| onechar('m', 24, 32):
+                                return pkgTagSection::Key::Installer_Menu_Item;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 0| onechar('o', 0, 32)| onechar('r', 8, 32)| onechar('i', 16, 32)| onechar('g', 24, 32):
+        switch(*((triehash_uu32*) &string[4]) | 0x20202020) {
+        case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('a', 16, 32)| onechar('l', 24, 32):
+            switch(string[8]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu64*) &string[9]) | 0x2020202020202020) {
+                case 0| onechar('m', 0, 64)| onechar('a', 8, 64)| onechar('i', 16, 64)| onechar('n', 24, 64)| onechar('t', 32, 64)| onechar('a', 40, 64)| onechar('i', 48, 64)| onechar('n', 56, 64):
+                    switch(string[17] | 0x20) {
+                    case 0| onechar('e', 0, 8):
+                        switch(string[18] | 0x20) {
+                        case 0| onechar('r', 0, 8):
+                            return pkgTagSection::Key::Original_Maintainer;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash20(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu64*) &string[6]) | 0x2020202020202020) {
+                case 0| onechar('c', 0, 64)| onechar('o', 8, 64)| onechar('n', 16, 64)| onechar('f', 24, 64)| onechar('l', 32, 64)| onechar('i', 40, 64)| onechar('c', 48, 64)| onechar('t', 56, 64):
+                    switch(string[14] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        switch(string[15]) {
+                        case 0| onechar('-', 0, 8):
+                            switch(*((triehash_uu32*) &string[16]) | 0x20202020) {
+                            case 0| onechar('a', 0, 32)| onechar('r', 8, 32)| onechar('c', 16, 32)| onechar('h', 24, 32):
+                                return pkgTagSection::Key::Build_Conflicts_Arch;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash21(const char *string)
+{
+    switch(*((triehash_uu32*) &string[0]) | 0x20202020) {
+    case 0| onechar('b', 0, 32)| onechar('u', 8, 32)| onechar('i', 16, 32)| onechar('l', 24, 32):
+        switch(string[4] | 0x20) {
+        case 0| onechar('d', 0, 8):
+            switch(string[5]) {
+            case 0| onechar('-', 0, 8):
+                switch(*((triehash_uu64*) &string[6]) | 0x2020202020202020) {
+                case 0| onechar('c', 0, 64)| onechar('o', 8, 64)| onechar('n', 16, 64)| onechar('f', 24, 64)| onechar('l', 32, 64)| onechar('i', 40, 64)| onechar('c', 48, 64)| onechar('t', 56, 64):
+                    switch(string[14] | 0x20) {
+                    case 0| onechar('s', 0, 8):
+                        switch(string[15]) {
+                        case 0| onechar('-', 0, 8):
+                            switch(*((triehash_uu32*) &string[16]) | 0x20202020) {
+                            case 0| onechar('i', 0, 32)| onechar('n', 8, 32)| onechar('d', 16, 32)| onechar('e', 24, 32):
+                                switch(string[20] | 0x20) {
+                                case 0| onechar('p', 0, 8):
+                                    return pkgTagSection::Key::Build_Conflicts_Indep;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+#else
+static enum pkgTagSection::Key pkgTagHash3(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 't':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 'g':
+                return pkgTagSection::Key::Tag;
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash4(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'g':
+                switch(string[3] | 0x20) {
+                case 's':
+                    return pkgTagSection::Key::Bugs;
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 'h':
+            switch(string[2] | 0x20) {
+            case 'a':
+                switch(string[3]) {
+                case '1':
+                    return pkgTagSection::Key::SHA1;
+                }
+            }
+            break;
+        case 'i':
+            switch(string[2] | 0x20) {
+            case 'z':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    return pkgTagSection::Key::Size;
+                }
+            }
+        }
+        break;
+    case 't':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 'k':
+                    return pkgTagSection::Key::Task;
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash5(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'c':
+        switch(string[1] | 0x20) {
+        case 'l':
+            switch(string[2] | 0x20) {
+            case 'a':
+                switch(string[3] | 0x20) {
+                case 's':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        return pkgTagSection::Key::Class;
+                    }
+                }
+            }
+        }
+        break;
+    case 'f':
+        switch(string[1] | 0x20) {
+        case 'i':
+            switch(string[2] | 0x20) {
+            case 'l':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        return pkgTagSection::Key::Files;
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash6(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'i':
+            switch(string[2] | 0x20) {
+            case 'n':
+                switch(string[3] | 0x20) {
+                case 'a':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 'y':
+                            return pkgTagSection::Key::Binary;
+                        }
+                    }
+                }
+            }
+            break;
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'e':
+                switch(string[3] | 0x20) {
+                case 'a':
+                    switch(string[4] | 0x20) {
+                    case 'k':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            return pkgTagSection::Key::Breaks;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'f':
+        switch(string[1] | 0x20) {
+        case 'o':
+            switch(string[2] | 0x20) {
+            case 'r':
+                switch(string[3] | 0x20) {
+                case 'm':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            return pkgTagSection::Key::Format;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'm':
+        switch(string[1] | 0x20) {
+        case 'd':
+            switch(string[2]) {
+            case '5':
+                switch(string[3] | 0x20) {
+                case 's':
+                    switch(string[4] | 0x20) {
+                    case 'u':
+                        switch(string[5] | 0x20) {
+                        case 'm':
+                            return pkgTagSection::Key::MD5sum;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'o':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'g':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'n':
+                            return pkgTagSection::Key::Origin;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 'h':
+            switch(string[2] | 0x20) {
+            case 'a':
+                switch(string[3]) {
+                case '2':
+                    switch(string[4]) {
+                    case '5':
+                        switch(string[5]) {
+                        case '6':
+                            return pkgTagSection::Key::SHA256;
+                        }
+                    }
+                    break;
+                case '5':
+                    switch(string[4]) {
+                    case '1':
+                        switch(string[5]) {
+                        case '2':
+                            return pkgTagSection::Key::SHA512;
+                        }
+                    }
+                }
+            }
+            break;
+        case 'o':
+            switch(string[2] | 0x20) {
+            case 'u':
+                switch(string[3] | 0x20) {
+                case 'r':
+                    switch(string[4] | 0x20) {
+                    case 'c':
+                        switch(string[5] | 0x20) {
+                        case 'e':
+                            return pkgTagSection::Key::Source;
+                        }
+                    }
+                }
+            }
+            break;
+        case 't':
+            switch(string[2] | 0x20) {
+            case 'a':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 'u':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            return pkgTagSection::Key::Status;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'h':
+                        switch(string[5] | 0x20) {
+                        case 'g':
+                            return pkgTagSection::Key::Vcs_Hg;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash7(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'd':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'p':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 'n':
+                        switch(string[5] | 0x20) {
+                        case 'd':
+                            switch(string[6] | 0x20) {
+                            case 's':
+                                return pkgTagSection::Key::Depends;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'p':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'k':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'g':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                return pkgTagSection::Key::Package;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'o':
+                            switch(string[6] | 0x20) {
+                            case 'n':
+                                return pkgTagSection::Key::Section;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'b':
+                        switch(string[5] | 0x20) {
+                        case 'z':
+                            switch(string[6] | 0x20) {
+                            case 'r':
+                                return pkgTagSection::Key::Vcs_Bzr;
+                            }
+                        }
+                        break;
+                    case 'c':
+                        switch(string[5] | 0x20) {
+                        case 'v':
+                            switch(string[6] | 0x20) {
+                            case 's':
+                                return pkgTagSection::Key::Vcs_Cvs;
+                            }
+                        }
+                        break;
+                    case 'g':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 't':
+                                return pkgTagSection::Key::Vcs_Git;
+                            }
+                        }
+                        break;
+                    case 'm':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            switch(string[6] | 0x20) {
+                            case 'n':
+                                return pkgTagSection::Key::Vcs_Mtn;
+                            }
+                        }
+                        break;
+                    case 's':
+                        switch(string[5] | 0x20) {
+                        case 'v':
+                            switch(string[6] | 0x20) {
+                            case 'n':
+                                return pkgTagSection::Key::Vcs_Svn;
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'r':
+                switch(string[3] | 0x20) {
+                case 's':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'o':
+                            switch(string[6] | 0x20) {
+                            case 'n':
+                                return pkgTagSection::Key::Version;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash8(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'e':
+        switch(string[1] | 0x20) {
+        case 'n':
+            switch(string[2] | 0x20) {
+            case 'h':
+                switch(string[3] | 0x20) {
+                case 'a':
+                    switch(string[4] | 0x20) {
+                    case 'n':
+                        switch(string[5] | 0x20) {
+                        case 'c':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    return pkgTagSection::Key::Enhances;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'f':
+        switch(string[1] | 0x20) {
+        case 'i':
+            switch(string[2] | 0x20) {
+            case 'l':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 'n':
+                        switch(string[5] | 0x20) {
+                        case 'a':
+                            switch(string[6] | 0x20) {
+                            case 'm':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    return pkgTagSection::Key::Filename;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'h':
+        switch(string[1] | 0x20) {
+        case 'o':
+            switch(string[2] | 0x20) {
+            case 'm':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 'p':
+                        switch(string[5] | 0x20) {
+                        case 'a':
+                            switch(string[6] | 0x20) {
+                            case 'g':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    return pkgTagSection::Key::Homepage;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'o':
+        switch(string[1] | 0x20) {
+        case 'p':
+            switch(string[2] | 0x20) {
+            case 't':
+                switch(string[3] | 0x20) {
+                case 'i':
+                    switch(string[4] | 0x20) {
+                    case 'o':
+                        switch(string[5] | 0x20) {
+                        case 'n':
+                            switch(string[6] | 0x20) {
+                            case 'a':
+                                switch(string[7] | 0x20) {
+                                case 'l':
+                                    return pkgTagSection::Key::Optional;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'p':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 't':
+                                switch(string[7] | 0x20) {
+                                case 'y':
+                                    return pkgTagSection::Key::Priority;
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            case 'o':
+                switch(string[3] | 0x20) {
+                case 'v':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'd':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    return pkgTagSection::Key::Provides;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'r':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'p':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'c':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    return pkgTagSection::Key::Replaces;
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            case 'v':
+                switch(string[3] | 0x20) {
+                case 'i':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 'o':
+                                switch(string[7] | 0x20) {
+                                case 'n':
+                                    return pkgTagSection::Key::Revision;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'g':
+                switch(string[3] | 0x20) {
+                case 'g':
+                    switch(string[4] | 0x20) {
+                    case 'e':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            switch(string[6] | 0x20) {
+                            case 't':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    return pkgTagSection::Key::Suggests;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'r':
+                            switch(string[6] | 0x20) {
+                            case 'c':
+                                switch(string[7] | 0x20) {
+                                case 'h':
+                                    return pkgTagSection::Key::Vcs_Arch;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash9(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'c':
+        switch(string[1] | 0x20) {
+        case 'o':
+            switch(string[2] | 0x20) {
+            case 'n':
+                switch(string[3] | 0x20) {
+                case 'f':
+                    switch(string[4] | 0x20) {
+                    case 'f':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 'l':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        return pkgTagSection::Key::Conffiles;
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    case 'l':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 'c':
+                                switch(string[7] | 0x20) {
+                                case 't':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        return pkgTagSection::Key::Conflicts;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'd':
+        switch(string[1] | 0x20) {
+        case 'i':
+            switch(string[2] | 0x20) {
+            case 'r':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 'c':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            switch(string[6] | 0x20) {
+                            case 'o':
+                                switch(string[7] | 0x20) {
+                                case 'r':
+                                    switch(string[8] | 0x20) {
+                                    case 'y':
+                                        return pkgTagSection::Key::Directory;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'e':
+        switch(string[1] | 0x20) {
+        case 's':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 'e':
+                    switch(string[4] | 0x20) {
+                    case 'n':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            switch(string[6] | 0x20) {
+                            case 'i':
+                                switch(string[7] | 0x20) {
+                                case 'a':
+                                    switch(string[8] | 0x20) {
+                                    case 'l':
+                                        return pkgTagSection::Key::Essential;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'i':
+        switch(string[1] | 0x20) {
+        case 'm':
+            switch(string[2] | 0x20) {
+            case 'p':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            switch(string[6] | 0x20) {
+                            case 'a':
+                                switch(string[7] | 0x20) {
+                                case 'n':
+                                    switch(string[8] | 0x20) {
+                                    case 't':
+                                        return pkgTagSection::Key::Important;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 't':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        switch(string[5] | 0x20) {
+                        case 'u':
+                            switch(string[6] | 0x20) {
+                            case 'i':
+                                switch(string[7] | 0x20) {
+                                case 't':
+                                    switch(string[8] | 0x20) {
+                                    case 'e':
+                                        return pkgTagSection::Key::Testsuite;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'u':
+        switch(string[1] | 0x20) {
+        case 'p':
+            switch(string[2] | 0x20) {
+            case 'l':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'd':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 'r':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        return pkgTagSection::Key::Uploaders;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5] | 0x20) {
+                        case 'a':
+                            switch(string[6] | 0x20) {
+                            case 'r':
+                                switch(string[7] | 0x20) {
+                                case 'c':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        return pkgTagSection::Key::Vcs_Darcs;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash10(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'm':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'n':
+                    switch(string[4] | 0x20) {
+                    case 't':
+                        switch(string[5] | 0x20) {
+                        case 'a':
+                            switch(string[6] | 0x20) {
+                            case 'i':
+                                switch(string[7] | 0x20) {
+                                case 'n':
+                                    switch(string[8] | 0x20) {
+                                    case 'e':
+                                        switch(string[9] | 0x20) {
+                                        case 'r':
+                                            return pkgTagSection::Key::Maintainer;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'l':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'a':
+                                switch(string[7] | 0x20) {
+                                case 'r':
+                                    switch(string[8] | 0x20) {
+                                    case 'c':
+                                        switch(string[9] | 0x20) {
+                                        case 'h':
+                                            return pkgTagSection::Key::Multi_Arch;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'r':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 'm':
+                        switch(string[5] | 0x20) {
+                        case 'm':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 'n':
+                                    switch(string[8] | 0x20) {
+                                    case 'd':
+                                        switch(string[9] | 0x20) {
+                                        case 's':
+                                            return pkgTagSection::Key::Recommends;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'b':
+                        switch(string[5] | 0x20) {
+                        case 'r':
+                            switch(string[6] | 0x20) {
+                            case 'o':
+                                switch(string[7] | 0x20) {
+                                case 'w':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            return pkgTagSection::Key::Vcs_Browse;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash11(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 't':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'u':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    switch(string[8] | 0x20) {
+                                    case 'i':
+                                        switch(string[9] | 0x20) {
+                                        case 'n':
+                                            switch(string[10] | 0x20) {
+                                            case 'g':
+                                                return pkgTagSection::Key::Built_Using;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'd':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 'c':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 'p':
+                                switch(string[7] | 0x20) {
+                                case 't':
+                                    switch(string[8] | 0x20) {
+                                    case 'i':
+                                        switch(string[9] | 0x20) {
+                                        case 'o':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                return pkgTagSection::Key::Description;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'p':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'e':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5] | 0x20) {
+                        case 'e':
+                            switch(string[6] | 0x20) {
+                            case 'p':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'n':
+                                        switch(string[9] | 0x20) {
+                                        case 'd':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                return pkgTagSection::Key::Pre_Depends;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'r':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 'm':
+                        switch(string[5] | 0x20) {
+                        case 'm':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 'n':
+                                    switch(string[8] | 0x20) {
+                                    case 'd':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'd':
+                                                return pkgTagSection::Key::Recommended;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'v':
+        switch(string[1] | 0x20) {
+        case 'c':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3]) {
+                case '-':
+                    switch(string[4] | 0x20) {
+                    case 'b':
+                        switch(string[5] | 0x20) {
+                        case 'r':
+                            switch(string[6] | 0x20) {
+                            case 'o':
+                                switch(string[7] | 0x20) {
+                                case 'w':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'r':
+                                                return pkgTagSection::Key::Vcs_Browser;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash12(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'a':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'h':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 't':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7] | 0x20) {
+                                case 'c':
+                                    switch(string[8] | 0x20) {
+                                    case 't':
+                                        switch(string[9] | 0x20) {
+                                        case 'u':
+                                            switch(string[10] | 0x20) {
+                                            case 'r':
+                                                switch(string[11] | 0x20) {
+                                                case 'e':
+                                                    return pkgTagSection::Key::Architecture;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'p':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'k':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'g':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7]) {
+                                case '-':
+                                    switch(string[8] | 0x20) {
+                                    case 'l':
+                                        switch(string[9] | 0x20) {
+                                        case 'i':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 't':
+                                                    return pkgTagSection::Key::Package_List;
+                                                }
+                                            }
+                                        }
+                                        break;
+                                    case 't':
+                                        switch(string[9] | 0x20) {
+                                        case 'y':
+                                            switch(string[10] | 0x20) {
+                                            case 'p':
+                                                switch(string[11] | 0x20) {
+                                                case 'e':
+                                                    return pkgTagSection::Key::Package_Type;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash13(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'd':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'p':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                switch(string[11] | 0x20) {
+                                                case 'd':
+                                                    switch(string[12] | 0x20) {
+                                                    case 's':
+                                                        return pkgTagSection::Key::Build_Depends;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'c':
+        switch(string[1] | 0x20) {
+        case 'h':
+            switch(string[2] | 0x20) {
+            case 'e':
+                switch(string[3] | 0x20) {
+                case 'c':
+                    switch(string[4] | 0x20) {
+                    case 'k':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            switch(string[6] | 0x20) {
+                            case 'u':
+                                switch(string[7] | 0x20) {
+                                case 'm':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 'm':
+                                                switch(string[11] | 0x20) {
+                                                case 'd':
+                                                    switch(string[12]) {
+                                                    case '5':
+                                                        return pkgTagSection::Key::Checksums_Md5;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash14(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'c':
+        switch(string[1] | 0x20) {
+        case 'h':
+            switch(string[2] | 0x20) {
+            case 'e':
+                switch(string[3] | 0x20) {
+                case 'c':
+                    switch(string[4] | 0x20) {
+                    case 'k':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            switch(string[6] | 0x20) {
+                            case 'u':
+                                switch(string[7] | 0x20) {
+                                case 'm':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 'h':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'a':
+                                                        switch(string[13]) {
+                                                        case '1':
+                                                            return pkgTagSection::Key::Checksums_Sha1;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        case 'o':
+            switch(string[2] | 0x20) {
+            case 'n':
+                switch(string[3] | 0x20) {
+                case 'f':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'g':
+                            switch(string[6]) {
+                            case '-':
+                                switch(string[7] | 0x20) {
+                                case 'v':
+                                    switch(string[8] | 0x20) {
+                                    case 'e':
+                                        switch(string[9] | 0x20) {
+                                        case 'r':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'o':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'n':
+                                                            return pkgTagSection::Key::Config_Version;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'i':
+        switch(string[1] | 0x20) {
+        case 'n':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'l':
+                            switch(string[6] | 0x20) {
+                            case 'l':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'd':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'z':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'e':
+                                                            return pkgTagSection::Key::Installed_Size;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'k':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 'r':
+                switch(string[3] | 0x20) {
+                case 'n':
+                    switch(string[4] | 0x20) {
+                    case 'e':
+                        switch(string[5] | 0x20) {
+                        case 'l':
+                            switch(string[6]) {
+                            case '-':
+                                switch(string[7] | 0x20) {
+                                case 'v':
+                                    switch(string[8] | 0x20) {
+                                    case 'e':
+                                        switch(string[9] | 0x20) {
+                                        case 'r':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'o':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'n':
+                                                            return pkgTagSection::Key::Kernel_Version;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'm':
+        switch(string[1] | 0x20) {
+        case 's':
+            switch(string[2] | 0x20) {
+            case 'd':
+                switch(string[3] | 0x20) {
+                case 'o':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'f':
+                                switch(string[7] | 0x20) {
+                                case 'i':
+                                    switch(string[8] | 0x20) {
+                                    case 'l':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                switch(string[11] | 0x20) {
+                                                case 'a':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'm':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'e':
+                                                            return pkgTagSection::Key::MSDOS_Filename;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash15(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'c':
+                                switch(string[7] | 0x20) {
+                                case 'o':
+                                    switch(string[8] | 0x20) {
+                                    case 'n':
+                                        switch(string[9] | 0x20) {
+                                        case 'f':
+                                            switch(string[10] | 0x20) {
+                                            case 'l':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'c':
+                                                        switch(string[13] | 0x20) {
+                                                        case 't':
+                                                            switch(string[14] | 0x20) {
+                                                            case 's':
+                                                                return pkgTagSection::Key::Build_Conflicts;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'd':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 'c':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 'i':
+                            switch(string[6] | 0x20) {
+                            case 'p':
+                                switch(string[7] | 0x20) {
+                                case 't':
+                                    switch(string[8] | 0x20) {
+                                    case 'i':
+                                        switch(string[9] | 0x20) {
+                                        case 'o':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                switch(string[11]) {
+                                                case '-':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'm':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'd':
+                                                            switch(string[14]) {
+                                                            case '5':
+                                                                return pkgTagSection::Key::Description_md5;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'b':
+                switch(string[3] | 0x20) {
+                case 'a':
+                    switch(string[4] | 0x20) {
+                    case 'r':
+                        switch(string[5] | 0x20) {
+                        case 'c':
+                            switch(string[6] | 0x20) {
+                            case 'h':
+                                switch(string[7] | 0x20) {
+                                case 'i':
+                                    switch(string[8] | 0x20) {
+                                    case 't':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'c':
+                                                switch(string[11] | 0x20) {
+                                                case 't':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'u':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'r':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'e':
+                                                                return pkgTagSection::Key::Subarchitecture;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash16(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'c':
+        switch(string[1] | 0x20) {
+        case 'h':
+            switch(string[2] | 0x20) {
+            case 'e':
+                switch(string[3] | 0x20) {
+                case 'c':
+                    switch(string[4] | 0x20) {
+                    case 'k':
+                        switch(string[5] | 0x20) {
+                        case 's':
+                            switch(string[6] | 0x20) {
+                            case 'u':
+                                switch(string[7] | 0x20) {
+                                case 'm':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 's':
+                                                switch(string[11] | 0x20) {
+                                                case 'h':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'a':
+                                                        switch(string[13]) {
+                                                        case '2':
+                                                            switch(string[14]) {
+                                                            case '5':
+                                                                switch(string[15]) {
+                                                                case '6':
+                                                                    return pkgTagSection::Key::Checksums_Sha256;
+                                                                }
+                                                            }
+                                                            break;
+                                                        case '5':
+                                                            switch(string[14]) {
+                                                            case '1':
+                                                                switch(string[15]) {
+                                                                case '2':
+                                                                    return pkgTagSection::Key::Checksums_Sha512;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'p':
+        switch(string[1] | 0x20) {
+        case 'a':
+            switch(string[2] | 0x20) {
+            case 'c':
+                switch(string[3] | 0x20) {
+                case 'k':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'g':
+                            switch(string[6] | 0x20) {
+                            case 'e':
+                                switch(string[7]) {
+                                case '-':
+                                    switch(string[8] | 0x20) {
+                                    case 'r':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'v':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 's':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'i':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'o':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'n':
+                                                                    return pkgTagSection::Key::Package_Revision;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                    break;
+                                case '_':
+                                    switch(string[8] | 0x20) {
+                                    case 'r':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'v':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 's':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'i':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'o':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'n':
+                                                                    return pkgTagSection::Key::Package__Revision;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 't':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'g':
+                    switch(string[4] | 0x20) {
+                    case 'g':
+                        switch(string[5] | 0x20) {
+                        case 'e':
+                            switch(string[6] | 0x20) {
+                            case 'r':
+                                switch(string[7] | 0x20) {
+                                case 's':
+                                    switch(string[8]) {
+                                    case '-':
+                                        switch(string[9] | 0x20) {
+                                        case 'a':
+                                            switch(string[10] | 0x20) {
+                                            case 'w':
+                                                switch(string[11] | 0x20) {
+                                                case 'a':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'i':
+                                                        switch(string[13] | 0x20) {
+                                                        case 't':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'e':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'd':
+                                                                    return pkgTagSection::Key::Triggers_Awaited;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                            break;
+                                        case 'p':
+                                            switch(string[10] | 0x20) {
+                                            case 'e':
+                                                switch(string[11] | 0x20) {
+                                                case 'n':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'd':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'i':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'n':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'g':
+                                                                    return pkgTagSection::Key::Triggers_Pending;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash17(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'd':
+        switch(string[1] | 0x20) {
+        case 'm':
+            switch(string[2]) {
+            case '-':
+                switch(string[3] | 0x20) {
+                case 'u':
+                    switch(string[4] | 0x20) {
+                    case 'p':
+                        switch(string[5] | 0x20) {
+                        case 'l':
+                            switch(string[6] | 0x20) {
+                            case 'o':
+                                switch(string[7] | 0x20) {
+                                case 'a':
+                                    switch(string[8] | 0x20) {
+                                    case 'd':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 'a':
+                                                switch(string[11] | 0x20) {
+                                                case 'l':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'l':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'o':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'w':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'e':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'd':
+                                                                        return pkgTagSection::Key::Dm_Upload_Allowed;
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 's':
+        switch(string[1] | 0x20) {
+        case 't':
+            switch(string[2] | 0x20) {
+            case 'a':
+                switch(string[3] | 0x20) {
+                case 'n':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5] | 0x20) {
+                        case 'a':
+                            switch(string[6] | 0x20) {
+                            case 'r':
+                                switch(string[7] | 0x20) {
+                                case 'd':
+                                    switch(string[8] | 0x20) {
+                                    case 's':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 'v':
+                                                switch(string[11] | 0x20) {
+                                                case 'e':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'r':
+                                                        switch(string[13] | 0x20) {
+                                                        case 's':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'i':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'o':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'n':
+                                                                        return pkgTagSection::Key::Standards_Version;
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash18(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'd':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'p':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                switch(string[11] | 0x20) {
+                                                case 'd':
+                                                    switch(string[12] | 0x20) {
+                                                    case 's':
+                                                        switch(string[13]) {
+                                                        case '-':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'a':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'r':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'c':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'h':
+                                                                            return pkgTagSection::Key::Build_Depends_Arch;
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    case 't':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'f':
+                                switch(string[7] | 0x20) {
+                                case 'o':
+                                    switch(string[8] | 0x20) {
+                                    case 'r':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 'p':
+                                                switch(string[11] | 0x20) {
+                                                case 'r':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'o':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'f':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'i':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'l':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'e':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 's':
+                                                                            return pkgTagSection::Key::Built_For_Profiles;
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 't':
+        switch(string[1] | 0x20) {
+        case 'e':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 's':
+                        switch(string[5] | 0x20) {
+                        case 'u':
+                            switch(string[6] | 0x20) {
+                            case 'i':
+                                switch(string[7] | 0x20) {
+                                case 't':
+                                    switch(string[8] | 0x20) {
+                                    case 'e':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 't':
+                                                switch(string[11] | 0x20) {
+                                                case 'r':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'i':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'g':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'g':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'e':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'r':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 's':
+                                                                            return pkgTagSection::Key::Testsuite_Triggers;
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash19(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'd':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'p':
+                                        switch(string[9] | 0x20) {
+                                        case 'e':
+                                            switch(string[10] | 0x20) {
+                                            case 'n':
+                                                switch(string[11] | 0x20) {
+                                                case 'd':
+                                                    switch(string[12] | 0x20) {
+                                                    case 's':
+                                                        switch(string[13]) {
+                                                        case '-':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'i':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'n':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'd':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'e':
+                                                                            switch(string[18] | 0x20) {
+                                                                            case 'p':
+                                                                                return pkgTagSection::Key::Build_Depends_Indep;
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'i':
+        switch(string[1] | 0x20) {
+        case 'n':
+            switch(string[2] | 0x20) {
+            case 's':
+                switch(string[3] | 0x20) {
+                case 't':
+                    switch(string[4] | 0x20) {
+                    case 'a':
+                        switch(string[5] | 0x20) {
+                        case 'l':
+                            switch(string[6] | 0x20) {
+                            case 'l':
+                                switch(string[7] | 0x20) {
+                                case 'e':
+                                    switch(string[8] | 0x20) {
+                                    case 'r':
+                                        switch(string[9]) {
+                                        case '-':
+                                            switch(string[10] | 0x20) {
+                                            case 'm':
+                                                switch(string[11] | 0x20) {
+                                                case 'e':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'n':
+                                                        switch(string[13] | 0x20) {
+                                                        case 'u':
+                                                            switch(string[14]) {
+                                                            case '-':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'i':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 't':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'e':
+                                                                            switch(string[18] | 0x20) {
+                                                                            case 'm':
+                                                                                return pkgTagSection::Key::Installer_Menu_Item;
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case 'o':
+        switch(string[1] | 0x20) {
+        case 'r':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'g':
+                    switch(string[4] | 0x20) {
+                    case 'i':
+                        switch(string[5] | 0x20) {
+                        case 'n':
+                            switch(string[6] | 0x20) {
+                            case 'a':
+                                switch(string[7] | 0x20) {
+                                case 'l':
+                                    switch(string[8]) {
+                                    case '-':
+                                        switch(string[9] | 0x20) {
+                                        case 'm':
+                                            switch(string[10] | 0x20) {
+                                            case 'a':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'n':
+                                                        switch(string[13] | 0x20) {
+                                                        case 't':
+                                                            switch(string[14] | 0x20) {
+                                                            case 'a':
+                                                                switch(string[15] | 0x20) {
+                                                                case 'i':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'n':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'e':
+                                                                            switch(string[18] | 0x20) {
+                                                                            case 'r':
+                                                                                return pkgTagSection::Key::Original_Maintainer;
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash20(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'c':
+                                switch(string[7] | 0x20) {
+                                case 'o':
+                                    switch(string[8] | 0x20) {
+                                    case 'n':
+                                        switch(string[9] | 0x20) {
+                                        case 'f':
+                                            switch(string[10] | 0x20) {
+                                            case 'l':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'c':
+                                                        switch(string[13] | 0x20) {
+                                                        case 't':
+                                                            switch(string[14] | 0x20) {
+                                                            case 's':
+                                                                switch(string[15]) {
+                                                                case '-':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'a':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'r':
+                                                                            switch(string[18] | 0x20) {
+                                                                            case 'c':
+                                                                                switch(string[19] | 0x20) {
+                                                                                case 'h':
+                                                                                    return pkgTagSection::Key::Build_Conflicts_Arch;
+                                                                                }
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+static enum pkgTagSection::Key pkgTagHash21(const char *string)
+{
+    switch(string[0] | 0x20) {
+    case 'b':
+        switch(string[1] | 0x20) {
+        case 'u':
+            switch(string[2] | 0x20) {
+            case 'i':
+                switch(string[3] | 0x20) {
+                case 'l':
+                    switch(string[4] | 0x20) {
+                    case 'd':
+                        switch(string[5]) {
+                        case '-':
+                            switch(string[6] | 0x20) {
+                            case 'c':
+                                switch(string[7] | 0x20) {
+                                case 'o':
+                                    switch(string[8] | 0x20) {
+                                    case 'n':
+                                        switch(string[9] | 0x20) {
+                                        case 'f':
+                                            switch(string[10] | 0x20) {
+                                            case 'l':
+                                                switch(string[11] | 0x20) {
+                                                case 'i':
+                                                    switch(string[12] | 0x20) {
+                                                    case 'c':
+                                                        switch(string[13] | 0x20) {
+                                                        case 't':
+                                                            switch(string[14] | 0x20) {
+                                                            case 's':
+                                                                switch(string[15]) {
+                                                                case '-':
+                                                                    switch(string[16] | 0x20) {
+                                                                    case 'i':
+                                                                        switch(string[17] | 0x20) {
+                                                                        case 'n':
+                                                                            switch(string[18] | 0x20) {
+                                                                            case 'd':
+                                                                                switch(string[19] | 0x20) {
+                                                                                case 'e':
+                                                                                    switch(string[20] | 0x20) {
+                                                                                    case 'p':
+                                                                                        return pkgTagSection::Key::Build_Conflicts_Indep;
+                                                                                    }
+                                                                                }
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return pkgTagSection::Key::Unknown;
+}
+#endif /* TRIE_HASH_MULTI_BYTE */
+ enum pkgTagSection::Key pkgTagHash(const char *string, size_t length)
+{
+    switch (length) {
+    case 3:
+        return pkgTagHash3(string);
+    case 4:
+        return pkgTagHash4(string);
+    case 5:
+        return pkgTagHash5(string);
+    case 6:
+        return pkgTagHash6(string);
+    case 7:
+        return pkgTagHash7(string);
+    case 8:
+        return pkgTagHash8(string);
+    case 9:
+        return pkgTagHash9(string);
+    case 10:
+        return pkgTagHash10(string);
+    case 11:
+        return pkgTagHash11(string);
+    case 12:
+        return pkgTagHash12(string);
+    case 13:
+        return pkgTagHash13(string);
+    case 14:
+        return pkgTagHash14(string);
+    case 15:
+        return pkgTagHash15(string);
+    case 16:
+        return pkgTagHash16(string);
+    case 17:
+        return pkgTagHash17(string);
+    case 18:
+        return pkgTagHash18(string);
+    case 19:
+        return pkgTagHash19(string);
+    case 20:
+        return pkgTagHash20(string);
+    case 21:
+        return pkgTagHash21(string);
+    default:
+        return pkgTagSection::Key::Unknown;
+    }
+}
diff --git a/apt-tag/apt-pkg/tagfile-keys.h b/apt-tag/apt-pkg/tagfile-keys.h
new file mode 100644 (file)
index 0000000..cfd08d5
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef TRIE_HASH_pkgTagHash
+#define TRIE_HASH_pkgTagHash
+#include <stddef.h>
+#include <stdint.h>
+#include <apt-pkg/tagfile.h>
+enum class pkgTagSection::Key {
+    Architecture = 0,
+    Binary = 1,
+    Breaks = 2,
+    Bugs = 3,
+    Build_Conflicts = 4,
+    Build_Conflicts_Arch = 5,
+    Build_Conflicts_Indep = 6,
+    Build_Depends = 7,
+    Build_Depends_Arch = 8,
+    Build_Depends_Indep = 9,
+    Built_For_Profiles = 10,
+    Built_Using = 11,
+    Checksums_Md5 = 12,
+    Checksums_Sha1 = 13,
+    Checksums_Sha256 = 14,
+    Checksums_Sha512 = 15,
+    Class = 16,
+    Conffiles = 17,
+    Config_Version = 18,
+    Conflicts = 19,
+    Depends = 20,
+    Description = 21,
+    Description_md5 = 22,
+    Directory = 23,
+    Dm_Upload_Allowed = 24,
+    Enhances = 25,
+    Essential = 26,
+    Files = 28,
+    Filename = 27,
+    Format = 29,
+    Homepage = 30,
+    Important = 31,
+    Installed_Size = 32,
+    Installer_Menu_Item = 33,
+    Kernel_Version = 34,
+    MD5sum = 36,
+    MSDOS_Filename = 37,
+    Maintainer = 35,
+    Multi_Arch = 38,
+    Optional = 39,
+    Origin = 40,
+    Original_Maintainer = 41,
+    Package = 42,
+    Package_List = 43,
+    Package_Revision = 45,
+    Package_Type = 46,
+    Package__Revision = 44,
+    Pre_Depends = 47,
+    Priority = 48,
+    Provides = 49,
+    Recommended = 50,
+    Recommends = 51,
+    Replaces = 52,
+    Revision = 53,
+    SHA1 = 55,
+    SHA256 = 56,
+    SHA512 = 57,
+    Section = 54,
+    Size = 58,
+    Source = 59,
+    Standards_Version = 60,
+    Status = 61,
+    Subarchitecture = 62,
+    Suggests = 63,
+    Tag = 64,
+    Task = 65,
+    Testsuite = 66,
+    Testsuite_Triggers = 67,
+    Triggers_Awaited = 68,
+    Triggers_Pending = 69,
+    Uploaders = 70,
+    Vcs_Bzr = 74,
+    Vcs_Cvs = 75,
+    Vcs_Git = 77,
+    Vcs_Hg = 78,
+    Vcs_Mtn = 79,
+    Vcs_Svn = 80,
+    Vcs_Arch = 71,
+    Vcs_Browse = 72,
+    Vcs_Browser = 73,
+    Vcs_Darcs = 76,
+    Version = 81,
+    Unknown = -1,
+};
+ enum pkgTagSection::Key pkgTagHash(const char *string, size_t length);
+#endif                       /* TRIE_HASH_pkgTagHash */
diff --git a/apt.h b/apt.h
new file mode 100644 (file)
index 0000000..c00968c
--- /dev/null
+++ b/apt.h
@@ -0,0 +1,30 @@
+#ifndef APT_H
+#define APT_H
+
+#include <unistd.h>
+
+template <typename Type_>
+Type_ *memrchr(Type_ *data, int value, int size) {
+    for (int i = 0; i != size; ++i)
+        if (data[size - i - 1] == value)
+            return data + size - i - 1;
+    return 0;
+}
+
+template <typename Type_>
+static Type_ *strchrnul(Type_ *s, int c) {
+    while (*s != c && *s != '\0')
+        ++s;
+    return s;
+}
+
+#define faccessat(arg0, arg1, arg2, arg3) \
+    access(arg1, arg2)
+
+#if 0
+#include <syslog.h>
+static unsigned nonce(0);
+#define _trace() syslog(LOG_ERR, "_trace():%s[%u] #%u\n", __FILE__, __LINE__, ++nonce)
+#endif
+
+#endif//APT_H
index a83995e135e9c0cc04c39af9c305b344b31e65fe..c8bfbbe94d372a200bb8d8be74b78f5260454a2f 100644 (file)
@@ -5,9 +5,9 @@ Maintainer: Jay Freeman (saurik) <saurik@saurik.com>
 Architecture: iphoneos-arm
 Version: 
 Replaces: bigboss, bigbossbetarepo, com.sosiphone.addcydia, cydia-sources, ispazio.net, modmyifone, saurik, ste, yellowsn0w.com, zodttd
-Depends: apt7-lib, apt7-key, cydia-lproj (>= 1.1.10), darwintools, debianutils, org.thebigboss.repo.icons, sed, shell-cmds, system-cmds, uikittools (>= 1.1.4)
+Depends: apt7-lib, apt7-key, cydia-lproj (>= 1.1.10), darwintools, debianutils, dpkg (>= 1.18), org.thebigboss.repo.icons, sed, shell-cmds, system-cmds, uikittools (>= 1.1.4)
 Conflicts: bigboss, bigbossbetarepo, com.sosiphone.addcydia, cydia-sources, ispazio.net, modmyifone, ste, yellowsn0w.com, zodttd
-Pre-Depends: debianutils
+Pre-Depends: debianutils, dpkg (>= 1.14.25-8)
 Provides: bigbossbetarepo, cydia-sources
 Description: graphical iPhone front-end for APT
 Name: Cydia Installer
diff --git a/fdstream.hpp b/fdstream.hpp
new file mode 100644 (file)
index 0000000..585e03d
--- /dev/null
@@ -0,0 +1,184 @@
+/* The following code declares classes to read from and write to
+ * file descriptore or file handles.
+ *
+ * See
+ *      http://www.josuttis.com/cppcode
+ * for details and the latest version.
+ *
+ * - open:
+ *      - integrating BUFSIZ on some systems?
+ *      - optimized reading of multiple characters
+ *      - stream for reading AND writing
+ *      - i18n
+ *
+ * (C) Copyright Nicolai M. Josuttis 2001.
+ * Permission to copy, use, modify, sell and distribute this software
+ * is granted provided this copyright notice appears in all copies.
+ * This software is provided "as is" without express or implied
+ * warranty, and with no claim as to its suitability for any purpose.
+ *
+ * Version: Jul 28, 2002
+ * History:
+ *  Jul 28, 2002: bugfix memcpy() => memmove()
+ *                fdinbuf::underflow(): cast for return statements
+ *  Aug 05, 2001: first public version
+ */
+#ifndef BOOST_FDSTREAM_HPP
+#define BOOST_FDSTREAM_HPP
+
+#include <istream>
+#include <ostream>
+#include <streambuf>
+// for EOF:
+#include <cstdio>
+// for memmove():
+#include <cstring>
+
+
+// low-level read and write functions
+#ifdef _MSC_VER
+# include <io.h>
+#else
+# include <unistd.h>
+//extern "C" {
+//    int write (int fd, const char* buf, int num);
+//    int read (int fd, char* buf, int num);
+//}
+#endif
+
+
+// BEGIN namespace BOOST
+namespace boost {
+
+
+/************************************************************
+ * fdostream
+ * - a stream that writes on a file descriptor
+ ************************************************************/
+
+
+class fdoutbuf : public std::streambuf {
+  protected:
+    int fd;    // file descriptor
+  public:
+    // constructor
+    fdoutbuf (int _fd) : fd(_fd) {
+    }
+  protected:
+    // write one character
+    virtual int_type overflow (int_type c) {
+        if (c != EOF) {
+            char z = c;
+            if (write (fd, &z, 1) != 1) {
+                return EOF;
+            }
+        }
+        return c;
+    }
+    // write multiple characters
+    virtual
+    std::streamsize xsputn (const char* s,
+                            std::streamsize num) {
+        return write(fd,s,num);
+    }
+};
+
+class fdostream : public std::ostream {
+  protected:
+    fdoutbuf buf;
+  public:
+    fdostream (int fd) : std::ostream(0), buf(fd) {
+        rdbuf(&buf);
+    }
+};
+
+
+/************************************************************
+ * fdistream
+ * - a stream that reads on a file descriptor
+ ************************************************************/
+
+class fdinbuf : public std::streambuf {
+  protected:
+    int fd;    // file descriptor
+  protected:
+    /* data buffer:
+     * - at most, pbSize characters in putback area plus
+     * - at most, bufSize characters in ordinary read buffer
+     */
+    static const int pbSize = 4;        // size of putback area
+    static const int bufSize = 1024;    // size of the data buffer
+    char buffer[bufSize+pbSize];        // data buffer
+
+  public:
+    /* constructor
+     * - initialize file descriptor
+     * - initialize empty data buffer
+     * - no putback area
+     * => force underflow()
+     */
+    fdinbuf (int _fd) : fd(_fd) {
+        setg (buffer+pbSize,     // beginning of putback area
+              buffer+pbSize,     // read position
+              buffer+pbSize);    // end position
+    }
+
+  protected:
+    // insert new characters into the buffer
+    virtual int_type underflow () {
+#ifndef _MSC_VER
+        using std::memmove;
+#endif
+
+        // is read position before end of buffer?
+        if (gptr() < egptr()) {
+            return traits_type::to_int_type(*gptr());
+        }
+
+        /* process size of putback area
+         * - use number of characters read
+         * - but at most size of putback area
+         */
+        int numPutback;
+        numPutback = gptr() - eback();
+        if (numPutback > pbSize) {
+            numPutback = pbSize;
+        }
+
+        /* copy up to pbSize characters previously read into
+         * the putback area
+         */
+        memmove (buffer+(pbSize-numPutback), gptr()-numPutback,
+                numPutback);
+
+        // read at most bufSize new characters
+        int num;
+        num = read (fd, buffer+pbSize, bufSize);
+        if (num <= 0) {
+            // ERROR or EOF
+            return EOF;
+        }
+
+        // reset buffer pointers
+        setg (buffer+(pbSize-numPutback),   // beginning of putback area
+              buffer+pbSize,                // read position
+              buffer+pbSize+num);           // end of buffer
+
+        // return next character
+        return traits_type::to_int_type(*gptr());
+    }
+};
+
+class fdistream : public std::istream {
+  protected:
+    fdinbuf buf;
+  public:
+    fdistream (int fd) : std::istream(0), buf(fd) {
+        rdbuf(&buf);
+    }
+};
+
+
+} // END namespace boost
+
+#endif /*BOOST_FDSTREAM_HPP*/
diff --git a/make.sh b/make.sh
new file mode 100755 (executable)
index 0000000..0b27981
--- /dev/null
+++ b/make.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+DEVELOPER_DIR=/Applications/Xcode-5.1.1.app make "$@"
index 496c1adcefd394dffa668adfab677e387c1b82dc..d11d85c80271a9337ee6c03f3b60efd816bf8a7f 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,32 +1,56 @@
-gxx := $(shell xcrun --sdk iphoneos -f g++)
-sdk := $(shell xcodebuild -sdk iphoneos -version Path)
+.DELETE_ON_ERROR:
+.SECONDARY:
+
+dpkg := dpkg-deb -Zlzma
+version := $(shell ./version.sh)
 
-flags := 
+flag := 
+plus :=
 link := 
 libs := 
 
-dpkg := dpkg-deb -Zlzma
+gxx := $(shell xcrun --sdk iphoneos -f g++)
+cycc := $(gxx)
+
+sdk := $(shell xcodebuild -sdk iphoneos -version Path)
+cycc += -isysroot $(sdk)
+cycc += -idirafter /usr/include
+cycc += -F$(sdk)/System/Library/PrivateFrameworks
+
+cycc += -arch arm64
+cycc += -Xarch_arm64 -miphoneos-version-min=7.0
+
+cycc += -fmessage-length=0
+cycc += -gfull -O2
+cycc += -fvisibility=hidden
 
-flags += -F$(sdk)/System/Library/PrivateFrameworks
-flags += -I. -isystem sysroot/usr/include
-flags += -fmessage-length=0
-flags += -g0 -O2
-flags += -fvisibility=hidden
+link += -Wl,-dead_strip
+link += -Wl,-no_dead_strip_inits_and_terms
+link += -Wl,-s
 
-flags += -idirafter icu/icuSources/common
-flags += -idirafter icu/icuSources/i18n
+flag += -Xarch_arm64 -Iapt
+flag += -Xarch_arm64 -Iapt-contrib
+flag += -Xarch_arm64 -Iapt-deb
+flag += -Xarch_arm64 -Iapt-extra
+flag += -Xarch_arm64 -Iapt-tag
 
-flags += -Wall
+flag += -I.
+flag += -isystem sysroot/usr/include
 
-flags += -Wno-unknown-warning-option
-flags += -Wno-logical-op-parentheses
-flags += -Wno-dangling-else
-flags += -Wno-shift-op-parentheses
-flags += -Wno-deprecated-declarations
+flag += -idirafter icu/icuSources/common
+flag += -idirafter icu/icuSources/i18n
 
-xflags :=
-xflags += -fobjc-call-cxx-cdtors
-xflags += -fvisibility-inlines-hidden
+flag += -Wall
+flag += -Wno-dangling-else
+flag += -Wno-deprecated-declarations
+flag += -Wno-objc-protocol-method-implementation
+flag += -Wno-logical-op-parentheses
+flag += -Wno-shift-op-parentheses
+flag += -Wno-unknown-pragmas
+flag += -Wno-unknown-warning-option
+
+plus += -fobjc-call-cxx-cdtors
+plus += -fvisibility-inlines-hidden
 
 link += -Lsysroot/usr/lib
 link += -multiply_defined suppress
@@ -42,20 +66,14 @@ libs += -framework SystemConfiguration
 libs += -framework WebCore
 libs += -framework WebKit
 
-libs += -lapt-pkg
+libs += -Xarch_armv6 -Wl,-lapt-pkg
+libs += -Xarch_arm64 -Wl,Objects/libapt64.a
 libs += -licucore
 
 uikit := 
 uikit += -framework UIKit
 
-version := $(shell ./version.sh)
-
-cycc = $(gxx) -arch armv6 -o $@ -miphoneos-version-min=2.0 -isysroot $(sdk) -idirafter /usr/include -F{sysroot,}/Library/Frameworks
-
-cycc += -marm # @synchronized
-cycc += -mcpu=arm1176jzf-s
-cycc += -mllvm -arm-reserve-r9
-link += -lgcc_s.1
+link += -Wl,-segalign,4000
 
 dirs := Menes CyteKit Cydia SDURLCache
 
@@ -74,6 +92,37 @@ object := $(object:.m=.o)
 object := $(object:.mm=.o)
 object := $(object:%=Objects/%)
 
+libapt := 
+libapt += $(wildcard apt/apt-pkg/*.cc)
+libapt += $(wildcard apt/apt-pkg/deb/*.cc)
+libapt += $(wildcard apt/apt-pkg/contrib/*.cc)
+libapt += apt-tag/apt-pkg/tagfile-keys.cc
+libapt += apt/methods/store.cc
+libapt := $(filter-out %/srvrec.cc,$(libapt))
+libapt := $(patsubst %.cc,Objects/%.o,$(libapt))
+
+link += -Xarch_arm64 -Wl,-lz,-liconv
+
+flag += -DAPT_PKG_EXPOSE_STRING_VIEW
+flag += -Dsighandler_t=sig_t
+
+aptc := $(cycc) $(flag)
+aptc += -include apt.h
+aptc += -Wno-deprecated-register
+aptc += -Wno-unused-private-field
+aptc += -Wno-unused-variable
+
+cycc += -arch armv6
+cycc += -Xarch_armv6 -miphoneos-version-min=2.0
+flag += -Xarch_armv6 -marm # @synchronized
+flag += -Xarch_armv6 -mcpu=arm1176jzf-s
+flag += -mllvm -arm-reserve-r9
+link += -Xarch_armv6 -Wl,-lgcc_s.1
+
+plus += -std=c++11
+#plus += -Wp,-stdlib=libc++
+#link += libcxx/lib/libc++.a
+
 images := $(shell find MobileCydia.app/ -type f -name '*.png')
 images := $(images:%=Images/%)
 
@@ -85,25 +134,30 @@ clean:
        rm -f MobileCydia postinst
        rm -rf Objects/ Images/
 
+Objects/%.o: %.cc $(header) apt.h apt-extra/*.h
+       @mkdir -p $(dir $@)
+       @echo "[cycc] $<"
+       @$(aptc) $(plus) -c -o $@ $< -Dmain=main_$(basename $(notdir $@))
+
 Objects/%.o: %.c $(header)
        @mkdir -p $(dir $@)
        @echo "[cycc] $<"
-       @$(cycc) -c -x c $<
+       @$(cycc) -c -o $@ -x c $< $(flag)
 
 Objects/%.o: %.m $(header)
        @mkdir -p $(dir $@)
        @echo "[cycc] $<"
-       @$(cycc) -c $< $(flags)
+       @$(cycc) -c -o $@ $< $(flag)
 
 Objects/%.o: %.cpp $(header)
        @mkdir -p $(dir $@)
        @echo "[cycc] $<"
-       @$(cycc) -std=c++11 -c $< $(flags) $(xflags)
+       @$(cycc) $(plus) -c -o $@ $< $(flag)
 
 Objects/%.o: %.mm $(header)
        @mkdir -p $(dir $@)
        @echo "[cycc] $<"
-       @$(cycc) -std=c++11 -c $< $(flags) $(xflags)
+       @$(cycc) $(plus) -c -o $@ $< $(flag)
 
 Objects/Version.o: Version.h
 
@@ -117,9 +171,13 @@ sysroot: sysroot.sh
        @echo 1>&2
        @exit 1
 
-MobileCydia: sysroot $(object) entitlements.xml
-       @echo "[link] $(object:Objects/%=%)"
-       @$(cycc) $(filter %.o,$^) $(flags) $(link) $(libs) $(uikit) -Wl,-sdk_version,8.0
+Objects/libapt64.a: $(libapt)
+       @echo "[arch] $@"
+       @ar -rc $@ $^
+
+MobileCydia: sysroot $(object) entitlements.xml Objects/libapt64.a
+       @echo "[link] $@"
+       @$(cycc) -o $@ $(filter %.o,$^) $(link) $(libs) $(uikit) -Wl,-sdk_version,8.0
        @mkdir -p bins
        @cp -a $@ bins/$@-$(version)
        @echo "[strp] $@"
@@ -130,19 +188,19 @@ MobileCydia: sysroot $(object) entitlements.xml
        @ldid -T0 -Sentitlements.xml $@ || { rm -f $@ && false; }
 
 cfversion: cfversion.mm
-       $(cycc) $(filter %.mm,$^) $(flags) $(link) -framework CoreFoundation
+       $(cycc) -o $@ $(filter %.mm,$^) $(flag) $(link) -framework CoreFoundation
        @ldid -T0 -S $@
 
 setnsfpn: setnsfpn.cpp
-       $(cycc) $(filter %.cpp,$^) $(flags) $(link)
+       $(cycc) -o $@ $(filter %.cpp,$^) $(flag) $(link)
        @ldid -T0 -S $@
 
 cydo: cydo.cpp
-       $(cycc) -std=c++11 $(filter %.cpp,$^) $(flags) $(link) -Wno-deprecated-writable-strings
+       $(cycc) $(plus) -o $@ $(filter %.cpp,$^) $(flag) $(link) -Wno-deprecated-writable-strings
        @ldid -T0 -S $@
 
 postinst: postinst.mm CyteKit/stringWithUTF8Bytes.mm CyteKit/stringWithUTF8Bytes.h CyteKit/UCPlatform.h
-       $(cycc) -std=c++11 $(filter %.mm,$^) $(flags) $(link) -framework CoreFoundation -framework Foundation -framework UIKit
+       $(cycc) $(plus) -o $@ $(filter %.mm,$^) $(flag) $(link) -framework CoreFoundation -framework Foundation -framework UIKit
        @ldid -T0 -S $@
 
 debs/cydia_$(version)_iphoneos-arm.deb: MobileCydia preinst postinst cfversion setnsfpn cydo $(images) $(shell find MobileCydia.app) cydia.control Library/firmware.sh Library/move.sh Library/startup
@@ -160,7 +218,6 @@ debs/cydia_$(version)_iphoneos-arm.deb: MobileCydia preinst postinst cfversion s
        cp -a setnsfpn _/usr/libexec/cydia
        
        cp -a cydo _/usr/libexec/cydia
-       sudo chmod 6755 _/usr/libexec/cydia/cydo
        
        mkdir -p _/Library
        cp -a LaunchDaemons _/Library/LaunchDaemons
@@ -169,6 +226,7 @@ debs/cydia_$(version)_iphoneos-arm.deb: MobileCydia preinst postinst cfversion s
        cp -a MobileCydia.app _/Applications/Cydia.app
        rm -rf _/Applications/Cydia.app/*.lproj
        cp -a MobileCydia _/Applications/Cydia.app/Cydia
+       ln -s Cydia _/Applications/Cydia.app/store
        
        cd MobileCydia.app && find . -name '*.png' -exec cp -af ../Images/MobileCydia.app/{} ../_/Applications/Cydia.app/{} ';'
        
@@ -184,6 +242,7 @@ debs/cydia_$(version)_iphoneos-arm.deb: MobileCydia preinst postinst cfversion s
        
        sudo chown -R 0 _
        sudo chgrp -R 0 _
+       sudo chmod 6755 _/usr/libexec/cydia/cydo
        
        mkdir -p debs
        ln -sf debs/cydia_$(version)_iphoneos-arm.deb Cydia.deb
index 903e1ba8beff5cf5ef8b0eec5b5a450f9793b7ad..be7d701519d486d2da30fc993d41f95f318bb122 100755 (executable)
--- a/uikit.sh
+++ b/uikit.sh
@@ -1,2 +1,2 @@
 #!/bin/bash
-LANG=C exec /sw/bin/sed -i -e 's@\(\x0C\x00\x00\x00\x4C\x00\x00\x00\x18\x00\x00\x00\x02\x00\x00\x00\)\x00...\(\x00\x00\x01\x00/System/Library/Frameworks/UIKit.framework/UIKit\x00\x00\x00\x00\)@\1\x00\x00\xF6\x0C\2@' "$1"
+LANG=C exec /sw/bin/sed -i -e 's@\(\x0C\x00\x00\x00\x4C\x00\x00\x00\x18\x00\x00\x00\x02\x00\x00\x00\)\x00...\(\x00\x00\x01\x00/System/Library/Frameworks/UIKit.framework/UIKit\x00\x00\x00\x00\)@\1\x00\x00\xF6\x0C\2@g' "$1"