diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/bat.c vdr-1.4.freesat-tva/bat.c
--- vdr-1.4.reel/bat.c	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/bat.c	2008-10-12 19:54:40.435450958 +0100
@@ -0,0 +1,110 @@
+/*
+ * bat.c: BAT section filter
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: bat.c 1.16 2006/04/15 14:12:21 kls Exp $
+ */
+
+#include "bat.h"
+#include "channels.h"
+#include "config.h"
+#include "libsi/section.h"
+#include "libsi/descriptor.h"
+
+
+
+// --- cBatFilter ------------------------------------------------------------
+
+cBatFilter::cBatFilter()
+{
+  Set(3841, 0x4a);  // BAT - freesat
+}
+
+cBatFilter::~cBatFilter()
+{
+  batMap::iterator p;
+
+  for(p = batmap.begin(); p!=batmap.end(); ++p) {
+      delete p->second;
+  }
+
+}
+
+void cBatFilter::SetStatus(bool On)
+{
+  cFilter::SetStatus(On);
+  
+  batMap::iterator p;
+
+  for(p = batmap.begin(); p!=batmap.end(); ++p) {
+      p->second->Reset();
+  }
+
+}
+
+void cBatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
+{
+  if (!(Source() && Transponder()))
+     return;
+  SI::BAT bat(Data, false);
+  if (!bat.CheckCRCAndParse())
+     return;
+
+  cSectionSyncer  *syncer;
+  batMap::iterator iter;
+  iter = batmap.find(bat.getBouquetId());
+  if ( iter == batmap.end() ) {
+      syncer = new cSectionSyncer();
+      batmap.insert(batMap::value_type(bat.getBouquetId(), syncer));
+  } else {
+      syncer = iter->second;
+  }
+
+  if ( !syncer->Sync(bat.getVersionNumber(), bat.getSectionNumber(), bat.getLastSectionNumber()))
+     return;
+
+  if (!Channels.Lock(true, 10))
+     return;
+  SI::BAT::TransportStream ts;
+  for (SI::Loop::Iterator it; bat.transportStreamLoop.getNext(ts, it); ) {
+      SI::Descriptor *d;
+
+
+      SI::Loop::Iterator it2;
+      char DaBuf[1024];
+      DaBuf[0] = 0;
+
+      for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) {
+          switch (d->getDescriptorTag()) {
+          case SI::DefaultAuthorityDescriptorTag: {
+              SI::DefaultAuthorityDescriptor *da = (SI::DefaultAuthorityDescriptor *)d;
+              da->DefaultAuthority.getText(DaBuf, sizeof(DaBuf));
+              break;
+          }
+          case SI::ServiceListDescriptorTag: {
+              SI::ServiceListDescriptor *sl = (SI::ServiceListDescriptor *)d;
+              SI::ServiceListDescriptor::Service service;
+              SI::Loop::Iterator it3;
+              for (SI::Loop::Iterator it3; sl->serviceLoop.getNext(service, it3); ) {
+                 cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), ts.getOriginalNetworkId(), ts.getTransportStreamId(), service.getServiceId()));
+                 if ( channel == NULL && Setup.UpdateChannels >= 5 ) {
+                 //    channel = Channels.NewChannel(Channel(), "Unknown", "Unknown",  "Unknown", ts.getOriginalNetworkId(), ts.getTransportStreamId(), service.getServiceId());
+                 }
+                 if ( channel && strlen(DaBuf) ) {
+                     channel->SetDefaultAuthority(DaBuf);
+                 }
+              }
+              break;
+          }
+          default:
+              break;
+          }
+          delete d;
+      }
+  }
+  Channels.Unlock();
+}
+
+
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/bat.h vdr-1.4.freesat-tva/bat.h
--- vdr-1.4.reel/bat.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/bat.h	2008-10-12 19:30:25.943733925 +0100
@@ -0,0 +1,29 @@
+/*
+ * bat.h: BAT section filter
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: bat.h 1.2 2004/01/05 14:30:14 kls Exp $
+ */
+
+#ifndef __BAT_H
+#define __BAT_H
+
+#include "filter.h"
+#include <map>
+
+typedef std::map <int, cSectionSyncer *> batMap;
+
+class cBatFilter : public cFilter {
+private:
+  batMap   batmap;
+protected:
+  virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
+public:
+  cBatFilter();
+  ~cBatFilter();
+  virtual void SetStatus(bool On);
+  };
+
+#endif //__BAT_H
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/channels.c vdr-1.4.freesat-tva/channels.c
--- vdr-1.4.reel/channels.c	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/channels.c	2008-10-12 02:53:28.789836702 +0100
@@ -205,6 +205,7 @@
   shortName = strdup("");
   provider = strdup("");
   portalName = strdup("");
+  defaultAuthority = strdup("");
   memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
   inversion    = INVERSION_AUTO;
   bandwidth    = BANDWIDTH_AUTO;
@@ -227,6 +228,7 @@
   shortName = NULL;
   provider = NULL;
   portalName = NULL;
+  defaultAuthority = NULL;
   schedule     = NULL;
   linkChannels = NULL;
   refChannel   = NULL;
@@ -257,6 +259,7 @@
   free(shortName);
   free(provider);
   free(portalName);
+  free(defaultAuthority);
 }
 
 cChannel& cChannel::operator= (const cChannel &Channel)
@@ -265,6 +268,7 @@
   shortName = strcpyrealloc(shortName, Channel.shortName);
   provider = strcpyrealloc(provider, Channel.provider);
   portalName = strcpyrealloc(portalName, Channel.portalName);
+  defaultAuthority = strcpyrealloc(defaultAuthority, Channel.defaultAuthority);
   memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
   return *this;
 }
@@ -399,6 +403,7 @@
   return true;
 }
 
+
 void cChannel::SetId(int Nid, int Tid, int Sid, int Rid)
 {
   if (nid != Nid || tid != Tid || sid != Sid || rid != Rid) {
@@ -452,6 +457,15 @@
      }
 }
 
+void cChannel::SetDefaultAuthority(const char *DefaultAuthority)
+{
+  if (!isempty(DefaultAuthority) && strcmp(defaultAuthority, DefaultAuthority) != 0) {
+     isyslog("setting authority of channel %d to '%s'",Number(), DefaultAuthority);
+     defaultAuthority = strcpyrealloc(defaultAuthority, DefaultAuthority);
+     }
+}
+
+
 #define STRDIFF 0x01
 #define VALDIFF 0x02
 
@@ -745,11 +759,11 @@
         q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs);
         }
      *q = 0;
-     char caidbuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia
+     char caidbuf[MAXCAIDS * 5 + 10 + 256]; // 5: 4 digits plus delimiting ',', 10: paranoia
      q = caidbuf;
      q += IntArrayToString(q, Channel->caids, 16);
      *q = 0;
-     asprintf(&buffer, "%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
+     asprintf(&buffer,"%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d:%s\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid, Channel->defaultAuthority);
      }
   return cString(buffer, true);
 }
@@ -785,17 +799,24 @@
      char *vpidbuf = NULL;
      char *apidbuf = NULL;
      char *caidbuf = NULL;
-     int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid);
+     char *dabuf = NULL;
+     int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d :%a[^:]", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid, &dabuf);
      if (fields >= 9) {
         if (fields == 9) {
            // allow reading of old format
            sid = atoi(caidbuf);
-           delete caidbuf;
+           free(caidbuf);
            caidbuf = NULL;
+	   free(dabuf);
+           dabuf = strdup("");
            caids[0] = tpid;
            caids[1] = 0;
            tpid = 0;
            }
+        if ( fields == 13 ) {
+          // Some sscanf weirdness
+          dabuf[0] = 0;
+        }
         vpid = ppid = 0;
         apids[0] = 0;
         dpids[0] = 0;
@@ -892,13 +913,17 @@
            shortName = strcpyrealloc(shortName, p);
            }
         name = strcpyrealloc(name, namebuf);
+        defaultAuthority = strcpyrealloc(defaultAuthority, dabuf);
 
         free(parambuf);
         free(sourcebuf);
         free(vpidbuf);
         free(apidbuf);
+        if ( caidbuf ) {
         free(caidbuf);
+        }
         free(namebuf);
+        free(dabuf);
         if (!GetChannelID().Valid()) {
            esyslog("ERROR: channel data results in invalid ID!");
            return false;
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/channels.h vdr-1.4.freesat-tva/channels.h
--- vdr-1.4.reel/channels.h	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/channels.h	2008-10-06 18:46:44.403088585 +0100
@@ -120,6 +120,7 @@
   char *shortName;
   char *provider;
   char *portalName;
+  char *defaultAuthority;
   int __BeginData__;
   int frequency; // MHz
   int source;
@@ -169,6 +170,7 @@
   const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; }
   const char *Provider(void) const { return provider; }
   const char *PortalName(void) const { return portalName; }
+  const char *DefaultAuthority(void) const { return defaultAuthority; }
   int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
   int Transponder(void) const;                    ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
   static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
@@ -220,6 +222,7 @@
   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
   void SetName(const char *Name, const char *ShortName, const char *Provider);
   void SetPortalName(const char *PortalName);
+  void SetDefaultAuthority(const char *DefaultAuthority);
   void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
   void SetCaIds(const int *CaIds); // list must be zero-terminated
   void ForceCaIds(const int *CaIds); // list must be zero-terminated // TB: does not check for reserved values
Binary files vdr-1.4.reel/core and vdr-1.4.freesat-tva/core differ
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/device.c vdr-1.4.freesat-tva/device.c
--- vdr-1.4.reel/device.c	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/device.c	2008-10-12 19:32:24.443041929 +0100
@@ -259,6 +259,7 @@
   patFilter = NULL;
   sdtFilter = NULL;
   nitFilter = NULL;
+  batFilter = NULL;
 
   ciHandler = NULL;
   player = NULL;
@@ -694,6 +695,7 @@
      AttachFilter(patFilter = new cPatFilter(this));
      AttachFilter(sdtFilter = new cSdtFilter(patFilter));
      AttachFilter(nitFilter = new cNitFilter);
+     AttachFilter(batFilter = new cBatFilter);
      }
 }
 
@@ -706,8 +708,11 @@
      sectionHandler->Detach(patFilter);
      sectionHandler->Detach(sdtFilter);
      sectionHandler->Detach(nitFilter);
+     sectionHandler->Detach(batFilter);
      delete nitFilter;
      nitFilter = NULL;
+     delete batFilter;
+     batFilter = NULL;
      delete sdtFilter;
      sdtFilter = NULL;
      delete patFilter;
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/device.h vdr-1.4.freesat-tva/device.h
--- vdr-1.4.reel/device.h	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/device.h	2008-10-12 19:31:07.443485932 +0100
@@ -15,6 +15,7 @@
 #include "dvbsubtitle.h"
 #include "eit.h"
 #include "filter.h"
+#include "bat.h"
 #include "nit.h"
 #include "pat.h"
 #include "ringbuffer.h"
@@ -316,6 +317,7 @@
   cPatFilter *patFilter;
   cSdtFilter *sdtFilter;
   cNitFilter *nitFilter;
+  cBatFilter *batFilter;
 protected:
   void StartSectionHandler(void);
        ///< A derived device that provides section data must call
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/eit.c vdr-1.4.freesat-tva/eit.c
--- vdr-1.4.reel/eit.c	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/eit.c	2008-10-12 20:20:00.926645784 +0100
@@ -112,6 +112,8 @@
       SI::Descriptor *d;
       SI::ExtendedEventDescriptors *ExtendedEventDescriptors = NULL;
       SI::ShortEventDescriptor *ShortEventDescriptor = NULL;
+      SI::ContentIdentifierDescriptor *itemCrid = NULL;
+      SI::ContentIdentifierDescriptor *seriesCrid = NULL;
       cLinkChannels *LinkChannels = NULL;
       cComponents *Components = NULL;
       for (SI::Loop::Iterator it2; (d = SiEitEvent.eventDescriptors.getNext(it2)); ) {
@@ -252,10 +254,29 @@
                     }
                  }
                  break;
+            case SI::ContentIdentifierDescriptorTag: {
+                 SI::ContentIdentifierDescriptor *cd = (SI::ContentIdentifierDescriptor *)d;
+                 switch (cd->getCridType()) {
+                   case 0x01:
+                   case 0x31: {
+                        itemCrid = cd;
+                        d = NULL; // so that it is not deleted
+                        break;
+                   }
+                   case 0x02:
+                   case 0x32: {
+                        seriesCrid = cd;
+                        d = NULL; // so that it is not deleted
+                        break;
+                   }
+                 }
+            }
             default: ;
             }
+          if ( d ) {
           delete d;
           }
+          }
 
       if (!rEvent) {
          if (ShortEventDescriptor) {
@@ -273,9 +294,33 @@
             }
          else if (!HasExternalData)
             pEvent->SetDescription(NULL);
+         if (itemCrid && (itemCrid->getCridLocation() == 0)) {
+            char buffer[512];
+            char buffer2[512];
+            strcpy (buffer, channel->DefaultAuthority());
+            buffer2[0] = 0;
+            itemCrid->entry.getText(buffer2, sizeof(buffer2));
+	    if ( strlen(buffer2) ) {
+                 strcat(buffer, buffer2);
+                 pEvent->SetItemCRID(buffer);
+            }
+         }
+         if (seriesCrid && (seriesCrid->getCridLocation() == 0)) {
+            char buffer[512];
+            char buffer2[512];
+            strcpy (buffer, channel->DefaultAuthority());
+            buffer2[0] = 0;
+            seriesCrid->entry.getText(buffer2, sizeof(buffer2));
+	    if ( strlen(buffer2) ) {
+                 strcat(buffer, buffer2);
+                 pEvent->SetSeriesCRID(buffer);
+            }
+         }
          }
       delete ExtendedEventDescriptors;
       delete ShortEventDescriptor;
+      delete itemCrid;
+      delete seriesCrid;
 
       pEvent->SetComponents(Components);
 
@@ -346,11 +391,17 @@
 #ifdef RBLITE
   Set(8191, 0xff);        // Premiere Radio EPG
 #endif
+  // Freesat 
+  Set(3842, 0x4E, 0xFE);  // event info, actual(0x4E)/other(0x4F) TS, present/following
+  Set(3842, 0x50, 0xF0);  // event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
+  Set(3842, 0x60, 0xF0);  // event info, other  TS, schedule(0x60)/schedule for future days(0x6X)
+
 }
 
 void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
 {
   switch (Pid) {
+    case 3842:
     case 0x12: {
          cSchedulesLock SchedulesLock(true, 10);
          cSchedules *Schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock);
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/epg.c vdr-1.4.freesat-tva/epg.c
--- vdr-1.4.reel/epg.c	2008-09-27 09:50:31.281871864 +0100
+++ vdr-1.4.freesat-tva/epg.c	2008-10-06 18:46:44.403088585 +0100
@@ -271,6 +271,8 @@
   startTime = 0;
   duration = 0;
   vps = 0;
+  itemCRID = NULL;
+  seriesCRID = NULL;
   SetSeen();
 }
 
@@ -279,6 +281,8 @@
   free(title);
   free(shortText);
   free(description);
+  free(itemCRID);
+  free(seriesCRID);
   delete components;
 }
 
@@ -375,6 +379,16 @@
   vps = Vps;
 }
 
+void cEvent::SetItemCRID(const char *CRID)
+{
+  itemCRID = strcpyrealloc(itemCRID, CRID);
+}
+
+void cEvent::SetSeriesCRID(const char *CRID)
+{
+  seriesCRID = strcpyrealloc(seriesCRID, CRID);
+}
+
 void cEvent::SetSeen(void)
 {
   seen = time(NULL);
@@ -448,6 +462,10 @@
         }
      if (vps)
         fprintf(f, "%sV %ld\n", Prefix, vps);
+     if (!isempty(itemCRID))
+        fprintf(f, "%sI %s\n", Prefix, itemCRID);
+     if (!isempty(seriesCRID))
+        fprintf(f, "%sR %s\n", Prefix, seriesCRID);
      if (!InfoOnly)
         fprintf(f, "%se\n", Prefix);
      }
@@ -470,6 +488,10 @@
               break;
     case 'V': SetVps(atoi(t));
               break;
+    case 'I': SetItemCRID(t);
+              break;
+    case 'R': SetSeriesCRID(t);
+              break;
     default:  esyslog("ERROR: unexpected tag while reading EPG data: %s", s);
               return false;
     }
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/epg.h vdr-1.4.freesat-tva/epg.h
--- vdr-1.4.reel/epg.h	2008-09-27 09:50:31.281871864 +0100
+++ vdr-1.4.freesat-tva/epg.h	2008-10-06 18:46:44.403088585 +0100
@@ -66,6 +66,8 @@
   int duration;            // Duration of this event in seconds
   time_t vps;              // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
   time_t seen;             // When this event was last seen in the data stream
+  char *itemCRID;          // Item CRID
+  char *seriesCRID;        // Series CRID
 public:
   cEvent(tEventID EventID);
   ~cEvent();
@@ -84,6 +86,8 @@
   time_t EndTime(void) const { return startTime + duration; }
   int Duration(void) const { return duration; }
   time_t Vps(void) const { return vps; }
+  const char *ItemCRID(void) const { return itemCRID; }
+  const char *SeriesCRID(void) const { return seriesCRID; }
   time_t Seen(void) const { return seen; }
   bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; }
   bool HasTimer(void) const;
@@ -103,6 +107,8 @@
   void SetStartTime(time_t StartTime);
   void SetDuration(int Duration);
   void SetVps(time_t Vps);
+  void SetItemCRID(const char *CRID);
+  void SetSeriesCRID(const char *CRID);
   void SetSeen(void);
   cString ToDescr(void) const;
   void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const;
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/freesat.t1 vdr-1.4.freesat-tva/freesat.t1
--- vdr-1.4.reel/freesat.t1	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/freesat.t1	2008-10-12 20:12:06.929408518 +0100
@@ -0,0 +1,1530 @@
+# Huffman Table for FreeSat table 1
+#
+# This table was derived from on-air transmissions. It certainly has omissions 
+# and almost certainly contains errors.  Use entirely at your own risk. 
+#
+# Data taken from MythTV and Freesat EPG Parser by mitsubushi
+# Additions, and corrections made by Dom 
+# More additions and corrections from Jochen Mann 
+#
+# $Id: freesat.t1,v 1.13 2008/10/11 19:38:04 dom Exp $
+#
+
+START:00:T:
+START:010:B:
+START:1000:C:
+START:1001:I:
+START:1101:S:
+START:01100:L:
+START:01110:D:
+START:01111:H:
+START:10100:R:
+START:10101:N:
+START:10110:E:
+START:11000:F:
+START:11001:A:
+START:11100:M:
+START:11101:P:
+START:11110:W:
+START:011011:Q:
+START:101111:G:
+START:111110:J:
+START:0110100:K:
+START:1011101:U:
+START:1111110:O:
+START:01101010:6:
+START:10111000:V:
+START:11111110:Y:
+START:011010111:.:
+START:101110011:2:
+START:111111111:X:
+START:1011100100:Z:
+START:1111111100:8:
+START:10111001010:1:
+START:10111001011:3:
+START:111111110100:4:
+START:111111110101:':
+START:111111110111: :
+START:11111111011000:5:
+START:1111111101101000:9:
+START:111111110110100110:t:
+START:11111111011010011110:ESCAPE:
+ :0000:W:
+ :0011:M:
+ :0100:C:
+ :0101:B:
+ :0111:P:
+ :1001:T:
+ :1100:N:
+ :1111:S:
+ :00011:I:
+ :00100:G:
+ :01100:H:
+ :01101:D:
+ :10000:o:
+ :10001:A:
+ :10100:t:
+ :10110:a:
+ :10111:F:
+ :11010:L:
+ :11011:R:
+ :001011:U:
+ :101011:O:
+ :111001:J:
+ :111010:E:
+ :0001000:f:
+ :0001001:Q:
+ :0001011:V:
+ :0010100:STOP:
+ :0010101:w:
+ :1110000:2:
+ :1110001:K:
+ :1110110:Y:
+ :1110111:i:
+ :00010100:-:
+ :10101001:1:
+ :101010000:&:
+ :101010101:X:
+ :0001010101:r:
+ :1010100010:5:
+ :1010100011:Z:
+ :1010101001:9:
+ :1010101101:s:
+ :1010101110:4:
+ :1010101111:3:
+ :00010101000:7:
+ :00010101100:b:
+ :00010101110:y:
+ :10101010000:':
+ :10101011000:6:
+ :000101011010:v:
+ :000101011011:d:
+ :101010100010: :
+ :101010100011:0:
+ :101010110010:n:
+ :101010110011:8:
+ :0001010100110:g:
+ :0001010111110:u:
+ :00010101001001:.:
+ :00010101001010:ESCAPE:
+ :00010101001011:l:
+ :00010101001111:m:
+ :00010101111110:p:
+ :000101011111111:e:
+ :00010101111111001:c:
+ :000101011111110000:k:
+ :000101011111110001:h:
+ :0001010111100111111:(:
+!:1:STOP:
+!:01: :
+!:0001:!:
+!:000001:0x3a:
+$:1:ESCAPE:
+%:1: :
+&:1: :
+&:01:B:
+&:000:ESCAPE:
+&:001:.:
+':1:s:
+':000:m:
+':010:C:
+':0010:t:
+':0011: :
+':01100:d:
+':01110:v:
+':011011:r:
+':011111:A:
+':0110101:n:
+':01101000:G:
+':01111001:l:
+':011010011:D:
+':011110000:B:
+':011110101:i:
+':011110110:6:
+':0110100100:L:
+':0111101001:STOP:
+':0111101111:w:
+':01101001010:O:
+':01111010000:S:
+':01111011101:N:
+':011110111001:R:
+':0110100101100:a:
+':0110100101110:K:
+':0110100101111:F:
+':0111101110000:0:
+':01111011100010:ESCAPE:
+(:0:ESCAPE:
+):1:STOP:
+*:0:*:
+*:1000:d:
+*:10010:e:
+*:100110:ESCAPE:
++:0:ESCAPE:
+,:1: :
+,:01:0:
+,:001:.:
+-:11: :
+-:011:S:
+-:100:G:
+-:101:O:
+-:0011:T:
+-:0100:U:
+-:00010:D:
+-:000111:I:
+-:010100:F:
+-:010101:o:
+-:0000110:L:
+-:0000111:C:
+-:0010001:A:
+-:0010011:Y:
+-:0101100:B:
+-:00100000:P:
+-:00100001:Z:
+-:01011101:i:
+-:01011110:d:
+-:01011111:H:
+-:001011001:N:
+-:001011011:R:
+-:010110111:.:
+-:0010110000:1:
+-:0010110001:W:
+-:00101101010:a:
+-:00101101011:M:
+-:001011010000:ESCAPE:
+.:1:.:
+.:01:STOP:
+.:0010: :
+.:00001:T:
+.:00010:C:
+.:00110:p:
+.:00111:0:
+.:00011010:W:
+.:000110001:S:
+.:000110110:3:
+.:000110111:B:
+.:0001100000:1:
+.:0001100001:M:
+.:0001100110:c:
+.:00011001111:A:
+.:0001100101100:ESCAPE:
+/:00:1:
+/:10:7:
+/:010:4:
+0:00:6:
+0:01: :
+0:11:0:
+0:1001:p:
+0:1010:STOP:
+0:10000:1:
+0:10111:7:
+0:1011010:s:
+0:10110011:4:
+0:10110110:t:
+0:101101111:%:
+0:1011001000:8:
+0:1011001001:0x3a:
+0:1011001010:5:
+0:1011001011:2:
+0:1011011100:/:
+0:101101110101:,:
+0:10110111010010:ESCAPE:
+1:01:STOP:
+1:000:.:
+1:101:0:
+1:111:1:
+1:0010:2:
+1:0011: :
+1:10010:8:
+1:11000:3:
+1:100000:5:
+1:100001:s:
+1:100010:6:
+1:100011:0x3a:
+1:100110:':
+1:110010:X:
+1:110011:9:
+1:100111001:7:
+1:10011100010:ESCAPE:
+2:0:0:
+2:11:4:
+2:101:STOP:
+2:1001: :
+2:10000:0x3a:
+2:1000101:5:
+2:10001000:.:
+2:10001001:1:
+2:100011011:7:
+2:10001101001:3:
+2:100011010101:':
+2:10001101010000011:8:
+3:0: :
+3:100:STOP:
+3:1100:r:
+3:1101:/:
+3:11100:0:
+3:1110100:0x3a:
+3:1110111000:6: Guess at length
+3:1110111011:9:
+3:11101110011:t:
+3:11101110100:3:
+3:111011100100:ESCAPE:
+3:111011101011:5:
+4:00:STOP:
+4:11: :
+4:1001:0x3a:
+4:1011:/:
+4:10001:8:
+4:10101:.:
+4:101000:0:
+4:1010010:M:
+4:10100111:-:
+4:100001110:P:
+4:100001111:5:
+4:10000100100:ESCAPE:
+4:10000100101:':
+5:0:STOP:
+5:11: :
+5:101:0:
+5:100011:0x3a:
+5:1000001:t:
+5:1000100:3:
+5:10000000:ESCAPE:
+6:01: :
+6:10:0:
+6:111:0x3a:
+6:11001:.:
+6:110000:-:
+6:1100011:4:
+6:1101000:8:
+6:11000100:6:
+6:000000000:STOP:
+6:110001011:9:
+7:1:STOP:
+7:01: :
+7:000:0:
+7:0011:.:
+7:00101:/:
+7:0010000:1:
+7:0010010:5:
+7:00100010:ESCAPE:
+7:00100011:4:
+7:00100110:3:
+7:00100111:2:
+8:1: :
+8:00:0:
+8:010:0x3a:
+8:01101:STOP:
+8:011110:.:
+8:01110011110:ESCAPE:
+8:01110011111:c:
+9:0:1:
+9:110:STOP:
+9:1000:9:
+9:1010:.:
+9:10011:0:
+9:100100: :
+9:100101:8:
+9:101100:7:
+9:101101:/:
+9:101110:6:
+9:1011111:0x3a:
+9:10111101:4:
+9:101111000:ESCAPE:
+9:101111001:3:
+0x3a:1: :
+0x3a:00:0:
+0x3a:011:.:
+0x3a:01011000:ESCAPE:
+0x3a:01011001:T:
+;:1: :
+?:1:STOP:
+?:01: :
+?:001:0x3a:
+?:0001:.:
+A:001:r:
+A:010: :
+A:100:l:
+A:110:n:
+A:0000:m:
+A:0111:g:
+A:1111:d:
+A:00010:w:
+A:01101:c:
+A:10101:t:
+A:10110:f:
+A:10111:i:
+A:11100:s:
+A:000110:u:
+A:000111:STOP:
+A:111010:b:
+A:1010001:v:
+A:1110110:p:
+A:10100000:S:
+A:101000011:P:
+A:10100001000:e:
+A:10100001001:B:
+A:10100001010:1:
+A:11101111011:-:
+A:11101111111:.:
+A:101000010110:k:
+A:101000010111:h:
+A:111011110000:a:
+A:111011110100:y:
+A:1110111100010:x:
+A:1110111100011:':
+A:11101111001010:0x3a:
+A:111011110011100:D:
+A:1110111100111010:ESCAPE:
+B:00:C:
+B:01:B:
+B:101:r:
+B:1001:i:
+B:1100:o:
+B:1101:u:
+B:1110:a:
+B:1111:e:
+B:10001:l:
+B:1000010:y:
+B:10000000:STOP:
+B:10000010:O:
+B:100000111:A:
+B:100001110:S:
+B:10000011000:.:
+B:10000011001:w:
+B:10000111101:h:
+B:10000111110:*:
+B:10000111111: :
+B:10000111100011:T:
+B:100001111000100:ESCAPE:
+C:00:o:
+C:01: :
+C:100:l:
+C:110:h:
+C:1010:r:
+C:1110:a:
+C:10110:i:
+C:10111:e:
+C:111100:u:
+C:111101:B:
+C:1111100:y:
+C:1111110:!:
+C:11111011:.:
+C:111110100:w:
+C:111111100:STOP:
+C:111111110:S:
+C:111111111:T:
+C:1111101011:2:
+C:1111111011:I:
+C:11111010100:4:
+C:11111110101:D:
+C:1111111010010:':
+C:111111101001110:z:
+C:11111110100111101:E:
+C:111111101001111110:ESCAPE:
+D:01:o:
+D:10:a:
+D:000:r:
+D:110:e:
+D:111:i:
+D:00111:u:
+D:001011: :
+D:0010101:J:
+D:0011000:y:
+D:0011011:I:
+D:00110011:0x3a:
+D:001010010:-:
+D:001010011:&:
+D:001100100:':
+D:001101000:STOP:
+D:0010100000:A:
+D:0010100001:h:
+D:00110010101:N:
+D:00110010110:V:
+D:001100101111:w:
+D:0011001010011:d:
+D:00110010100100:ESCAPE:
+D:00110010100101:T:
+E:00:m:
+E:011:v:
+E:101:n:
+E:111:a:
+E:0100:E:
+E:1000:STOP:
+E:1101:x:
+E:10011:d:
+E:11001:l:
+E:010100:4:
+E:010101:y:
+E:010110:u:
+E:100100:r:
+E:110000:i:
+E:0101111:s:
+E:1001010:F:
+E:10010110:R:
+E:11000111: :
+E:010111010:g:
+E:110001100:T:
+E:110001101:':
+E:0101110001:c:
+E:0101110011:q:
+E:1001011100:p:
+E:10010111011:t:
+E:01011100100010:f:
+E:01011100100011:U:
+E:01011100100101:M:
+E:100101110100100:ESCAPE:
+F:00:i:
+F:10:a:
+F:011:r:
+F:110:u:
+F:111:o:
+F:0100:e:
+F:01011:l:
+F:0101000:A:
+F:0101010:O:
+F:01010010: :
+F:010100110:h:
+F:010101101:f:
+F:010101111:L:
+F:01010111001:I:
+F:01010111011:1:
+F:010101100000:M:
+F:0101011000010:y:
+F:010101100001100:ESCAPE:
+G:10:r:
+G:001:M:
+G:010:a:
+G:011:o:
+G:110:i:
+G:111:e:
+G:00001:u:
+G:000001:h:
+G:000111:l:
+G:0000001:y:
+G:0001100:w:
+G:00000000:0x3a:
+G:00011011:C:
+G:0001101010:P:
+G:0001101011: :
+G:00000001010:A:
+G:000000010110:T:
+G:0000000100110:ESCAPE:
+H:0:o:
+H:100:a:
+H:101:i:
+H:110:e:
+H:1110:u:
+H:11110:R:
+H:111111101:y:
+H:111111110:S:
+H:1111111111:r:
+H:111111100011:w:
+H:1111111000101:D:
+H:11111110001000:ESCAPE:
+I:0:T:
+I:100:s:
+I:101:n:
+I:1101:t:
+I:11001: :
+I:11101:':
+I:11111:r:
+I:110000:I:
+I:110001:STOP:
+I:111001:m:
+I:1110000:d:
+I:1110001:N:
+I:1111010:.:
+I:11110000:a:
+I:11110001:Y:
+I:111101110:c:
+I:11110110101:D:
+I:11110110110:f:
+I:11110111100:l:
+I:111101101000:V:
+I:111101101110:o:
+I:1111011010010:,:
+I:1111011010011:A:
+I:1111011110101:g:
+I:1111011111000:C:
+I:1111011111001:0x3a:
+I:11110111101000:B:
+I:11110111110101:b:
+I:1111011110100100:ESCAPE:
+J:00:a:
+J:01:u:
+J:11:e:
+J:101:o:
+J:1001:i:
+J:10000: :
+J:100010:K:
+J:10001110:STOP:
+J:100011001:s:
+J:1000110001:':
+J:100011011000:ESCAPE:
+J:100011011001:D:
+K:01:i:
+K:11:y:
+K:001:e:
+K:101: :
+K:0000:a:
+K:1000:o:
+K:00010:STOP:
+K:00011:r:
+K:100110:n:
+K:100111:S:
+K:10010011:G:
+K:100100011:O:
+K:100100100:h:
+K:100100101:w:
+K:10010001011:u:
+K:100100010000:T:
+K:1001000101010:ESCAPE:
+K:1001000101011:l:
+L:00:a:
+L:10:o:
+L:11:i:
+L:010:e:
+L:0111:u:
+L:01101:K:
+L:0110000:l:
+L:0110010:A:
+L:0110011: :
+L:01100011:y:
+L:0110001000:L:
+L:01100010110010:ESCAPE:
+M:01:a:
+M:10:o:
+M:000:e:
+M:111:i:
+M:0010:T:
+M:1100:y:
+M:1101:u:
+M:00110:STOP:
+M:001111:c:
+M:00111001:r:
+M:00111010:E:
+M:0011100011: :
+M:0011101100:1:
+M:00111000001:h:
+M:001110000001:Q:
+M:00111000000000:0x3a:
+M:001110000000110:ESCAPE:
+M:001110001011111:R:
+N:1:e:
+N:00:o:
+N:011:i:
+N:0101:a:
+N:01001:u:
+N:01000100:E:
+N:010001111:H:
+N:0100010110:Y:
+N:01000101001:':
+N:01000101011:I:
+N:01000101110:A:
+N:010001010100:M:
+N:010001011110: :
+N:010001010101110:ESCAPE:
+N:01000101111100000:STOP:
+O:000:':
+O:010:f:
+O:110:u:
+O:111:n:
+O:0011:l:
+O:1001:m:
+O:01101:r:
+O:01110:d:
+O:10000:p:
+O:10110:STOP:
+O:011001:S:
+O:011111:b:
+O:100011:v:
+O:101010:w:
+O:101011:U:
+O:1011100:T:
+O:01100010:x:
+O:01100011:.:
+O:10001001:t:
+O:10001011: :
+O:10111110:s:
+O:10111111:N:
+O:011000001:g:
+O:100010101:a:
+O:1000100010:i:
+O:1000101001:o:
+O:01100000010:c:
+O:10001010000:2:
+O:01100000011010:ESCAPE:
+P:01:r:
+P:10:l:
+P:000:e:
+P:001:a:
+P:111:o:
+P:1101:i:
+P:110000:D:
+P:110001:u:
+P:110011:h:
+P:11001000: :
+P:11001010:2:
+P:110010011:M:
+P:110010110:S:
+P:11001011100:0x3a:
+P:110010111101:s:
+P:1100101111100:STOP:
+P:1100101111101:G:
+P:110010111100010:C:
+P:110010111100011:ESCAPE:
+Q:1:u:
+Q:001:STOP:
+Q:010:V:
+Q:0111: :
+Q:01101:C:
+Q:011000:ESCAPE:
+R:00:a:
+R:01:o:
+R:11:e:
+R:100:i:
+R:1011:u:
+R:10101:E:
+R:1010011:STOP:
+R:10100101:h:
+R:1010010000:I:
+R:1010010010:y:
+R:1010010011:n:
+R:101001000110: :
+R:1010010001011:S:
+R:1010010001110:N:
+R:10100100010100:&:
+R:10100100011110:T:
+R:10100100011111:1:
+R:101001000101010:ESCAPE:
+S:001:o:
+S:010:p:
+S:011:u:
+S:110:h:
+S:111:t:
+S:0001:a:
+S:1001:e:
+S:1011:c:
+S:00000:n:
+S:10001:i:
+S:10101:k:
+S:000011:w:
+S:101000:m:
+S:0000101:A:
+S:1000010:l:
+S:1010010:q:
+S:00001000:2:
+S:10000000:O:
+S:10000011: :
+S:100000010:y:
+S:100001100:E:
+S:10000001100:B:
+S:10000110100:g:
+S:100000011011:r:
+S:1000011010110:3:
+S:1000011010111:.:
+S:10000001101000:5:
+S:10000001101010:0x3a:
+S:10000001101011:1:
+S:1000000110100110:ESCAPE:
+T:0:h:
+T:101:o:
+T:111:V:
+T:1000:e:
+T:1001:r:
+T:11000:a:
+T:11010:w:
+T:110011:i:
+T:1101111:H:
+T:11001001:y:
+T:11001010:M:
+T:11011000:.:
+T:11011100:u:
+T:11011101:W:
+T:110010110:0x3a:
+T:110010111:4:
+T:1101100100: :
+T:11001000011:s:
+T:110010000000:T:
+T:110010000010:B:
+T:11001000001110:A:
+T:1101100101000000:STOP:
+T:11001000001111100:ESCAPE:
+U:0:n:
+U:10:p:
+U:1101:K:
+U:1111:l:
+U:11000:R:
+U:11100:S:
+U:110011:E:
+U:111011:s:
+U:1100101:g:
+U:1110101:T:
+U:11001001: :
+U:110010001:r:
+U:111010000:2:
+U:11101001010:c:
+U:11101001011100:ESCAPE:
+U:11101001011110:t:
+V:1: :
+V:000:0x3a:
+V:011:i:
+V:0010:e:
+V:0011:a:
+V:0100:3:
+V:010101:C:
+V:010111:STOP:
+V:0101000:':
+V:0101001:4:
+V:0101101:o:
+V:0101100000:s:
+V:0101100001:D:
+V:0101100010:.:
+V:0101100011111:B:
+V:01011000111000:ESCAPE:
+W:01:o:
+W:11:e:
+W:001:h:
+W:100:a:
+W:101:i:
+W:00000:.:
+W:00010:O:
+W:00011:r:
+W:000011:y:
+W:0000100:u:
+W:000010110000:I:
+W:0000101100010:ESCAPE:
+X:10: :
+X:11:t:
+X:010:T:
+X:0000:STOP:
+X:01100010:-:
+X:01100011100:ESCAPE:
+X:01100011101:i:
+Y:1:o:
+Y:01:e:
+Y:000:u:
+Y:0011: :
+Y:001010:a:
+Y:001011000:n:
+Y:00101100111:s:
+Y:0010110101000:STOP:
+Y:0010110101110:ESCAPE:
+Z:1:o:
+Z:00:a:
+Z:010:i:
+Z:01101:u:
+Z:01110:e:
+Z:011110: :
+Z:01111110:STOP:
+a:001:r:
+a:011:t:
+a:100:l:
+a:110:n:
+a:0001:m:
+a:0100:c:
+a:1010:s:
+a:1110:y:
+a:10110: :
+a:10111:d:
+a:11110:i:
+a:11111:k:
+a:000010:b:
+a:000011:STOP:
+a:010110:p:
+a:010111:g:
+a:0000000:e:
+a:0000001:':
+a:0000011:w:
+a:0101001:u:
+a:0101010:z:
+a:0101011:v:
+a:00000101:f:
+a:01010001:h:
+a:000001001:0x3a:
+a:0000010000:!:
+a:0101000000:o:
+a:0101000001:x:
+a:00000100010:-:
+a:00000100011:a:
+a:01010000101:.:
+a:01010000111:,:
+a:010100001000:q:
+a:0101000010010:j:
+a:01010000100111:?:
+a:010100001001101:J:
+a:0101000010011000:ESCAPE:
+b:000:r:
+b:001:o:
+b:010:e:
+b:011:a:
+b:100:i:
+b:1011:u:
+b:1100:y:
+b:1101:l:
+b:1111: :
+b:10101:s:
+b:11100:b:
+b:11101:STOP:
+b:101000:h:
+b:10100111:':
+b:1010011001:t:
+b:1010011010:j:
+b:10100110000:n:
+b:10100110001:d:
+b:10100110111:w:
+b:101001101101:m:
+b:10100110110000:ESCAPE:
+b:10100110110001:0x3a:
+c:00:k:
+c:010:o:
+c:100:h:
+c:110:t:
+c:111:e:
+c:0111:r:
+c:10100: :
+c:10110:i:
+c:10111:a:
+c:011000:l:
+c:011001:y:
+c:011010:s:
+c:011011:STOP:
+c:1010100:c:
+c:1010111:u:
+c:10101010:0x3a:
+c:101011001:D:
+c:1010110100:G:
+c:1010110110:b:
+c:10101100000:L:
+c:10101100001:K:
+c:10101100011:A:
+c:10101101010:q:
+c:10101101110:.:
+c:10101101111:C:
+c:101011000100:n:
+c:101011000101:':
+c:1010110101100:B:
+c:1010110101101:I:
+c:101011010111000:M:
+c:101011010111001:ESCAPE:
+c:101011010111111:F:
+c:1010110101111100:w:
+c:1010110101111101:Q:
+d:11: :
+d:001:e:
+d:100:STOP:
+d:101:a:
+d:0001:y:
+d:0100:i:
+d:0110:s:
+d:00000:o:
+d:01010:d:
+d:000011:u:
+d:010110:r:
+d:010111:l:
+d:011101:v:
+d:011110:g:
+d:0000100:':
+d:0111111:.:
+d:00001010:0x3a:
+d:00001011:h:
+d:01110000:c:
+d:01110010:n:
+d:01110011:w:
+d:011100010:?:
+d:011111000:!:
+d:011111001:-:
+d:011111010:f:
+d:0111000111:m:
+d:0111110110:,:
+d:01111101110:t:
+d:01111101111:b:
+d:0111000110001:p:
+d:01110001100001:z:
+d:011100011000000:ESCAPE:
+e:01: :
+e:000:s:
+e:101:r:
+e:0010:t:
+e:1001:n:
+e:1100:STOP:
+e:1110:a:
+e:1111:w:
+e:10000:l:
+e:11011:e:
+e:001110:m:
+e:100010:c:
+e:100011:d:
+e:0011010:i:
+e:0011011:p:
+e:0011110:b:
+e:1101000:v:
+e:1101011:y:
+e:00110000:g:
+e:00110001:f:
+e:00110010:x:
+e:00111110:k:
+e:00111111:0x3a:
+e:11010011:o:
+e:11010100:':
+e:001100111:h:
+e:110100101:.:
+e:0011001100:P:
+e:0011001101:B:
+e:1101001000:,:
+e:1101010100:V:
+e:1101010101:z:
+e:1101010111:j:
+e:11010010010:4:
+e:11010010011:?:
+e:11010101101:u:
+e:110101011001:-:
+e:1101010110001:!:
+e:11010101100001:q:
+e:110101011000001:G:
+e:1101010110000000:ESCAPE:
+f:0: :
+f:101:o:
+f:1001:t:
+f:1100:a:
+f:1101:i:
+f:1111:e:
+f:10000:.:
+f:11100:r:
+f:11101:f:
+f:100010:STOP:
+f:10001101:y:
+f:10001111:u:
+f:100011101:l:
+f:1000111000:g:
+f:10001110010:-:
+f:100011001011:s:
+f:100011100111:0x3a:
+f:10001110011000:ESCAPE:
+f:10001110011001:b:
+g:00:h:
+g:10: :
+g:010:STOP:
+g:011:e:
+g:1100:i:
+g:11100:0x3a:
+g:11101:r:
+g:11111:a:
+g:110100:s:
+g:110111:l:
+g:111101:u:
+g:1101011:b:
+g:1101100:g:
+g:1101101:o:
+g:1111001:n:
+g:111100011:d:
+g:1101010100:.:
+g:1101010101:,:
+g:1101010110:':
+g:1101010111:t:
+g:1111000101:y:
+g:11110001000:w:
+g:111100010011:m:
+g:11110001001011:?:
+g:111100010010001:f:
+g:111100010010101:;:
+g:1111000100101000:ESCAPE:
+h:0:e:
+h:101:o:
+h:1001:i:
+h:1100:a:
+h:1110: :
+h:1111:t:
+h:11010:r:
+h:11011:STOP:
+h:100000:b:
+h:100001:u:
+h:10001000:w:
+h:10001001:d:
+h:10001010:n:
+h:10001011:y:
+h:10001100:!:
+h:10001101:l:
+h:10001111:.:
+h:100011100:':
+h:1000111010:s:
+h:10001110110:m:
+h:100011101111:0x3a:
+h:10001110111000:f:
+h:10001110111010:c:
+h:1000111011101101:q:
+h:1000111011101110:g:
+h:100011101110111100:h:
+h:100011101110111101:ESCAPE:
+h:100011101110111110:,:
+h:100011101110111111:*:
+i:01:n:
+i:000:c:
+i:1001:o:
+i:1010:l:
+i:1100:g:
+i:1101:s:
+i:1110:t:
+i:1111:e:
+i:00101:a:
+i:00110:v:
+i:10000:r:
+i:10001:d:
+i:10110:m:
+i:001000:p:
+i:001110: :
+i:101111:f:
+i:0011110:z:
+i:0011111:STOP:
+i:1011100:b:
+i:1011101:k:
+i:00100101:-:
+i:00100110:x:
+i:001001001:':
+i:001001111:q:
+i:0010011100:u:
+i:0010011101:i:
+i:00100100001:h:
+i:00100100010:0x3a:
+i:00100100011:w:
+i:0010010000001:,:
+i:0010010000010:y:
+i:00100100000000:.:
+i:001001000000010:ESCAPE:
+i:001001000000011:j:
+j:0:y:
+j:11:o:
+j:101:e:
+j:1001:a:
+j:10001:u:
+j:100001:i:
+j:10000011: :
+k:00: :
+k:10:e:
+k:010:i:
+k:110:STOP:
+k:0110:y:
+k:0111:s:
+k:1111:f:
+k:111001:a:
+k:111010:l:
+k:1110001:0x3a:
+k:1110110:k:
+k:11100000:':
+k:11101111:.:
+k:111000011:w:
+k:111011100:o:
+k:1110000101:h:
+k:11100001000:b:
+k:11100001001:,:
+k:11101110111:n:
+k:111011101010:?:
+k:111011101100:m:
+k:111011101101:!:
+k:1110111010010:u:
+k:1110111010110:d:
+k:1110111010111:t:
+k:11101110100001:j:
+k:111011101000000:p:
+k:1110111010001100:ESCAPE:
+k:1110111010001101:r:
+l:01:e:
+l:000:l:
+l:101:a:
+l:0011:y:
+l:1000:STOP:
+l:1001:d:
+l:1100:o:
+l:1110:i:
+l:1111: :
+l:00100:u:
+l:11010:s:
+l:001010:t:
+l:001011:m:
+l:1101101:k:
+l:11011000:f:
+l:11011100:b:
+l:11011110:':
+l:11011111:c:
+l:110110011:v:
+l:110111010:0x3a:
+l:1101100101:.:
+l:1101110110:w:
+l:11011001000:z:
+l:11011101111:p:
+l:110110010010:h:
+l:1101110111000:g:
+l:1101110111001:,:
+l:11011101110100:r:
+l:11011101110101:n:
+l:11011101110111:-:
+l:110111011101100:!:
+l:1101110111011011:?:
+l:110111011101101000:ESCAPE:
+m:10:e:
+m:001:m:
+m:011: :
+m:111:a:
+m:0000:i:
+m:0001:STOP:
+m:0100:y:
+m:1101:p:
+m:01010:b:
+m:11000:o:
+m:110010:n:
+m:110011:s:
+m:0101100:l:
+m:0101110:f:
+m:01011010:0x3a:
+m:01011110:4:
+m:010110110:h:
+m:010111110:w:
+m:0101101111:':
+m:0101111110:r:
+m:0101111111:u:
+m:01011011101:.:
+m:0101101110000:ESCAPE:
+n:000:i:
+n:100:g:
+n:101: :
+n:110:d:
+n:0011:a:
+n:0100:s:
+n:0110:e:
+n:1110:STOP:
+n:1111:t:
+n:01110:c:
+n:01111:n:
+n:001010:y:
+n:010100:':
+n:010101:k:
+n:010111:o:
+n:0010000:r:
+n:0010011:f:
+n:0010110:u:
+n:0010111:j:
+n:00100010:v:
+n:00100100:-:
+n:00100101:.:
+n:01011000:l:
+n:01011010:x:
+n:01011011:0x3a:
+n:001000111:,:
+n:010110011:m:
+n:0010001100:!:
+n:00100011010:z:
+n:01011001001:?:
+n:01011001010:h:
+n:01011001011:b:
+n:001000110110:B:
+n:010110010000:w:
+n:0101100100011:q:
+n:01011001000101:p:
+n:010110010001000:;:
+n:0101100100010011:ESCAPE:
+o:00:r:
+o:110:n:
+o:0100:f:
+o:0101: :
+o:0110:w:
+o:1000:o:
+o:1011:u:
+o:01111:t:
+o:10010:c:
+o:10100:p:
+o:10101:d:
+o:11100:m:
+o:11110:l:
+o:011100:a:
+o:011101:b:
+o:100110:y:
+o:100111:STOP:
+o:111010:s:
+o:111011:k:
+o:1111101:v:
+o:1111110:g:
+o:11111111:i:
+o:111110001:h:
+o:111110010:!:
+o:111111100:e:
+o:111111101:j:
+o:1111100110:':
+o:11111000001:?:
+o:11111000010:0x3a:
+o:11111001110:z:
+o:11111001111:x:
+o:111110000110:.:
+o:111110000111:-:
+o:11111000000110:,:
+o:11111000000111:G:
+o:111110000001011:):
+o:1111100000010100:S:
+o:111110000001010110:ESCAPE:
+o:111110000001010111:q:
+p:00:e:
+p:100:i:
+p:110:o:
+p:0100:STOP:
+p:0110:s:
+p:1010: :
+p:1110:p:
+p:01110:l:
+p:01111:r:
+p:10110:h:
+p:11110:a:
+p:101110:t:
+p:101111:':
+p:1111100:d:
+p:1111101:m:
+p:1111110:y:
+p:111111101:0x3a:
+p:111111111:!:
+p:1111111100:w:
+p:1111111101:u:
+p:11111110000:b:
+p:11111110010:-:
+p:11111110011:.:
+p:111111100011:n:
+p:1111111000101:k:
+p:11111110001001:,:
+p:111111100010000:ESCAPE:
+q:1:u:
+q:001:0x3a:
+q:0000:ESCAPE:
+q:0001:':
+q:01000:STOP:
+r:000: :
+r:011:i:
+r:101:e:
+r:0011:y:
+r:0100:d:
+r:1000:s:
+r:1001:t:
+r:1100:a:
+r:1101:STOP:
+r:1111:o:
+r:01011:n:
+r:11101:l:
+r:001001:k:
+r:001010:r:
+r:001011:m:
+r:010101:u:
+r:111001:g:
+r:0010000:':
+r:0101001:c:
+r:1110001:0x3a:
+r:00100010:f:
+r:00100011:.:
+r:01010001:b:
+r:11100000:v:
+r:010100000:,:
+r:010100001:p:
+r:111000010:w:
+r:1110000111:j:
+r:11100001100:-:
+r:111000011010:h:
+r:1110000110110:G:
+r:1110000110111100:!:
+r:111000011011110100:*:
+r:1110000110111101010:ESCAPE:
+s:10: :
+s:11:STOP:
+s:011:t:
+s:0000:s:
+s:0010:i:
+s:0011:h:
+s:00011:;:
+s:01010:e:
+s:010001:o:
+s:010011:c:
+s:010110:0x3a:
+s:0001000:.:
+s:0001001:!:
+s:0001011:y:
+s:0100000:p:
+s:0100100:a:
+s:0101111:u:
+s:00010100:,:
+s:00010101:f:
+s:01000011:':
+s:01001011:n:
+s:01011100:l:
+s:01011101:r:
+s:010000101:k:
+s:010010100:d:
+s:0100001001:m:
+s:0100101011:b:
+s:01000010000:?:
+s:01000010001:w:
+s:01001010100:g:
+s:010010101010:q:
+s:01001010101110:-:
+s:010010101011000:ESCAPE:
+t:000:i:
+t:011:STOP:
+t:100: :
+t:111:h:
+t:0010:a:
+t:0100:r:
+t:1010:s:
+t:1011:o:
+t:1101:e:
+t:00111:t:
+t:01010:y:
+t:11000:u:
+t:010110:m:
+t:110010:c:
+t:110011:l:
+t:0011000:':
+t:0011010:0x3a:
+t:00110010:w:
+t:00110110:!:
+t:01011100:.:
+t:01011101:b:
+t:01011110:E:
+t:01011111:f:
+t:001100110:?:
+t:001101110:n:
+t:0011001110:z:
+t:0011011110:d:
+t:00110011111:,:
+t:001100111101:-:
+t:001101111110:):
+t:0011011111110:g:
+t:00110111111110:ESCAPE:
+t:001101111111110:S:
+t:00110111111111100:k:
+t:001101111111111010:j:
+u:00:r:
+u:100:s:
+u:111:n:
+u:0100:e:
+u:0101:m:
+u:1100:t:
+u:01100:c:
+u:01101:g:
+u:01110:b:
+u:10100:p:
+u:10101:i:
+u:10110:l:
+u:11010:d:
+u:11011:a:
+u:011110:STOP:
+u:101110:y:
+u:0111110:z:
+u:1011110: :
+u:01111111:':
+u:011111100:k:
+u:0111111010:f:
+u:0111111011:,:
+u:1011111100:w:
+u:101111110100:v:
+u:101111110101:x:
+u:101111110111:o:
+u:1011111101100:j:
+u:101111110110110:.:
+u:10111111011011100:?:
+v:1:e:
+v:01:i:
+v:001:a:
+v:0001:o:
+v:00000: :
+v:0000100:y:
+v:0000110:STOP:
+v:00001011:s:
+v:000010101:r:
+v:0000101000:ESCAPE:
+v:0000101001:.:
+w:0:s:
+w:100: :
+w:110:STOP:
+w:1011:i:
+w:1110:o:
+w:10100:a:
+w:11110:n:
+w:11111:e:
+w:1010111:y:
+w:10101000:m:
+w:10101011:d:
+w:10101101:l:
+w:101010011:b:
+w:101010100:k:
+w:101010101:r:
+w:1010110001:,:
+w:1010110011:h:
+w:10101100000:c:
+w:10101100001:f:
+w:10101100101:p:
+w:101010010100:g:
+w:101011001000:t:
+w:1010100101010:.:
+w:1010100101011:0x3a:
+w:1010110010011:q:
+w:10101100100101:':
+w:101011001001001:?:
+w:1010110010010000:ESCAPE:
+x:00:p:
+x:10: :
+x:11:t:
+x:0110:STOP:
+x:01000:o:
+x:01010:c:
+x:01110:i:
+x:01111:m:
+x:010010:e:
+x:010110:y:
+x:0100110:u:
+x:0100111:f:
+x:0101111:,:
+x:010111001:a:
+x:0101110101:':
+x:01011101001:x:
+x:010111010000:ESCAPE:
+y:0: :
+y:11:STOP:
+y:10001:o:
+y:10010:s:
+y:10100:a:
+y:10110:l:
+y:10111:0x3a:
+y:100110:d:
+y:1000001:n:
+y:1000010:t:
+y:1010100:':
+y:1010101:b:
+y:1010111:.:
+y:10000000:i:
+y:10000110:,:
+y:10000111:p:
+y:10011100:m:
+y:10011110:c:
+y:10101100:w:
+y:10101101:e:
+y:100000010:?:
+y:100000011:f:
+y:100111010:r:
+y:100111011:g:
+y:1001111100:z:
+y:1001111110:-:
+y:1001111111:T:
+y:100111110110:!:
+y:100111110111:k:
+y:1001111101010:v:
+y:100111110101110:h:
+y:10011111010111100:ESCAPE:
+z:00:z:
+z:01:STOP:
+z:101:i:
+z:1000:y:
+z:1001:e:
+z:1101: :
+z:1110:l:
+z:11110:a:
+z:111110:o:
+z:11111100:m:
+z:11111101:0x3a:
+z:11111111:c:
+z:11111110100:u:
+z:111111101011:!:
+z:11111110101000:ESCAPE:
+z:11111110101010:h:
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/freesat.t2 vdr-1.4.freesat-tva/freesat.t2
--- vdr-1.4.reel/freesat.t2	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/freesat.t2	2008-10-12 20:12:08.429399695 +0100
@@ -0,0 +1,2755 @@
+# Huffman Table for FreeSat table 2
+#
+# This table was derived from on-air transmissions. It certainly has omissions 
+# and almost certainly contains errors.  Use entirely at your own risk. 
+#
+# Data taken from MythTV and Freesat EPG Parser by mitsubushi
+# Additions, and corrections made by Dom 
+# More additions and corrections from Jochen Mann 
+#
+# $Id: freesat.t2,v 1.13 2008/10/11 19:38:04 dom Exp $
+#
+START:010:A:
+START:100:C:
+START:111:T:
+START:0001:J:
+START:0011:D:
+START:1010:S:
+START:00000:H:
+START:00100:I:
+START:00101:R:
+START:01101:F:
+START:01110:.:
+START:01111:W:
+START:10111:M:
+START:11000:B:
+START:11001:P:
+START:11011:N:
+START:000010:O:
+START:011001:[:
+START:101101:L:
+START:110101:E:
+START:0000110:K:
+START:1101000:Y:
+START:1101001:G:
+START:00001110:2:
+START:01100000:p:
+START:01100010:U:
+START:01100011:(:
+START:10110000:1:
+START:10110011:V:
+START:000011110:Q:
+START:101100010:3:
+START:0000111110:9:
+START:0000111111:8:
+START:1011000110:6:
+START:1011000111:5:
+START:1011001000:Z:
+START:1011001001:7:
+START:1011001010:4:
+START:101100101110:X:
+START:101100101111: :
+START:1011001011010:':
+START:1011001011011:":
+START:10110010110000:t:
+START:101100101100010:a:
+START:10110010110001110:ESCAPE:
+0x09:1:ESCAPE:
+0x0a:1:ESCAPE:
+0x0d:1:ESCAPE:
+ :010:a:
+ :100:t:
+ :0001:o:
+ :0010:s:
+ :00110:d:
+ :01100:[:
+ :01111:p:
+ :10101:b:
+ :11001:c:
+ :11010:h:
+ :11100:w:
+ :11101:i:
+ :11111:f:
+ :000000:A:
+ :000011:M:
+ :001111:e:
+ :011100:B:
+ :011101:C:
+ :101000:T:
+ :101101:S:
+ :101110:g:
+ :110000:r:
+ :110110:n:
+ :110111:l:
+ :111101:m:
+ :0000011:v:
+ :0000100:G:
+ :0000101:N:
+ :0011101:y:
+ :0110101:H:
+ :0110111:L:
+ :1010010:J:
+ :1010011:F:
+ :1011001:R:
+ :1011110:u:
+ :1100010:D:
+ :1100011:W:
+ :1111001:P:
+ :00000100:k:
+ :00000101:O:
+ :01101000:-:
+ :01101101:1:
+ :10110001:K:
+ :10111110:j:
+ :11110000:I:
+ :11110001:E:
+ :001110010:q:
+ :001110011:U:
+ :011010010:V:
+ :011011000:Y:
+ :011011001: :
+ :101100001:2:
+ :0011100000:3:
+ :0011100001:8:
+ :0011100010:6:
+ :0110100111:5:
+ :1011000000:(:
+ :1011111100:STOP:
+ :1011111110:7:
+ :00111000110:0:
+ :01101001100:':
+ :01101001101:9:
+ :10110000010:Z:
+ :10111111110:4:
+ :10111111111:Q:
+ :001110001111:X:
+ :0011100011101:`:
+ :1011000001100:ESCAPE:
+ :1011000001101:.:
+ :1011000001110:&:
+ :10110000011110:":
+ :10110000011111:z:
+ :001110001110011:$:
+ :0011100011100100:+:
+ :00111000111001011:x:
+ :001110001110010101:]:
+ :0011100011100101000:/:
+ :0011100011100101001:?:
+!:1: :
+!:01:STOP:
+!:001:.:
+!:0000:0x3a:
+!:0001001:":
+!:0001010:/:
+!:0001011:!:
+!:00010000:):
+!:000100010:':
+!:0001000111:?:
+!:00010001100:ESCAPE:
+!:00010001101:]:
+":11: :
+":001:.:
+":0000:p:
+":0101:B:
+":0111:T:
+":1000:i:
+":00010:f:
+":00011:W:
+":01000:S:
+":01100:t:
+":01101:C:
+":10100:STOP:
+":10111:,:
+":100100:m:
+":101010:n:
+":101011:I:
+":0100110:E:
+":0100111:D:
+":1001010:w:
+":1001011:g:
+":1001100:b:
+":1001101:L:
+":1011000:c:
+":1011001:H:
+":10011110:P:
+":10110100:r:
+":10110111:K:
+":101101010:Y:
+":101101101:A:
+":1001111100:ESCAPE:
+":1001111101:a:
+$:0:1:
+$:11:3:
+$:100:4:
+$:1011:2:
+$:101001:5:
+$:1010000:ESCAPE:
+%:1: :
+%:00:ESCAPE:
+&:1: :
+&:01:w:
+&:001:B:
+&:0000:E:
+&:000110:A:
+&:000101100:ESCAPE:
+&:000101101:P:
+':1:s:
+':001:t:
+':010: :
+':0000:l:
+':01101:r:
+':000100:n:
+':000101:.:
+':000110:C:
+':011000:B:
+':011101:A:
+':0111000:d:
+':0111100:v:
+':00011100:S:
+':00011111:p:
+':01100101:D:
+':01111011:i:
+':01111100:c:
+':01111101:m:
+':01111111:,:
+':000111010:f:
+':000111011:g:
+':011001000:F:
+':011001001:h:
+':011001101:H:
+':011001110:N:
+':011100101:R:
+':011100111:T:
+':011110101:G:
+':011111101:L:
+':0001111000:o:
+':0001111001:K:
+':0001111011:a:
+':0110011001:u:
+':0110011111:O:
+':0111001001:I:
+':0111101000:w:
+':0111101001:b:
+':0111111001:e:
+':00011110101:?:
+':01100110000:E:
+':01100110001:7:
+':01110010000:P:
+':000111101001:W:
+':011001111001:0x3a:
+':011001111010:!:
+':011100100011:J:
+':011111100001:q:
+':011111100011:M:
+':0001111010001:V:
+':0110011110001:9:
+':0110011110100:!:
+':0110011110111:y:
+':0111001000100:8:
+':0111001000101:5:
+':0111001100000:STOP:
+':0111111000000:6:
+':00011110100000:2:
+':00011110100001:0:
+':01100111100001:Y:
+':01111110000010:j:
+':01111110000011:Q:
+':011111100010000:X:
+':011111100010001:U:
+':011111100010010:4:
+':0110011110110100:ESCAPE:
+':0110011110110101:1:
+(:01:1:
+(:000:P:
+(:101:t:
+(:1000:2:
+(:1101:5:
+(:1110:N:
+(:00111:T:
+(:10010:p:
+(:11111:c:
+(:001001:a:
+(:001010:S:
+(:001100:R:
+(:100111:e:
+(:111100:J:
+(:111101:A:
+(:0010110:D:
+(:0011011:K:
+(:1001100:v:
+(:1001101:s:
+(:1100000:b:
+(:1100010:G:
+(:1100100:M:
+(:1100101:H:
+(:1100110:C:
+(:00100000:m:
+(:00100010:o:
+(:00100011:E:
+(:00101110:W:
+(:11000011:g:
+(:11001110:L:
+(:001000010:d:
+(:001011111:U:
+(:001101000:F:
+(:001101010:f:
+(:110000100:w:
+(:110000101:B:
+(:110011111:n:
+(:0010000110:l:
+(:0010000111:9:
+(:0010111100:4:
+(:0010111101:I:
+(:0011010010:3:
+(:0011010111:h:
+(:1100111101:i:
+(:00110100111:V:
+(:00110101100: :
+(:11001111000:k:
+(:001101011011:O:
+(:0011010110100:ESCAPE:
+(:0011010110101:u:
+):0: :
+):11:.:
+):101:STOP:
+):1001:,:
+):10000:0x3a:
+):100011:;:
+):1000101:!:
+):1000100000:ESCAPE:
+*:0:*:
+*:11111:d:
+*:1111001:e:
+*:11110000:i:
+*:111100010:ESCAPE:
++:00:ESCAPE:
++:01: :
+,:1: :
+,:01:S:
+,:001:0:
+,:00000:5:
+,:0000110:b:
+,:00001000:2:
+,:00001001:":
+,:00001011:1:
+,:0000101010:':
+,:000010100100:T:
+,:000010100110:7:
+,:0000101011010:ESCAPE:
+-:00: :
+-:0100:t:
+-:0101:b:
+-:0110:w:
+-:0111:u:
+-:1001:o:
+-:1010:s:
+-:1011:f:
+-:10000:c:
+-:11011:l:
+-:11101:d:
+-:100010:9:
+-:110000:h:
+-:110010:1:
+-:110011:y:
+-:110101:r:
+-:111000:a:
+-:111100:m:
+-:111110:p:
+-:1000110:S:
+-:1101000:e:
+-:1101001:i:
+-:1111011:n:
+-:10001110:C:
+-:11000101:W:
+-:11000111:g:
+-:11100101:J:
+-:11100110:D:
+-:11110101:2:
+-:11111100:7:
+-:11111110:G:
+-:11111111:O:
+-:100011111:H:
+-:110001000:A:
+-:110001100:6:
+-:110001101:B:
+-:111001111:M:
+-:111101000:E:
+-:111101001:L:
+-:111111010:U:
+-:111111011:k:
+-:1000111100:F:
+-:1100010010:j:
+-:1100010011:P:
+-:1110010001:q:
+-:1110010010:5:
+-:1110010011:T:
+-:1110011101:I:
+-:10001111011:K:
+-:11100100000:v:
+-:11100100001:Z:
+-:11100111001:N:
+-:100011110101:R:
+-:111001110001:Y:
+-:1000111101001:0:
+-:10001111010000:4:
+-:10001111010001:z:
+-:11100111000001:V:
+-:11100111000010:3:
+-:11100111000011:8:
+-:111001110000001:Q:
+-:1110011100000000:':
+-:11100111000000010:ESCAPE:
+.:1: :
+.:010:STOP:
+.:0011:.:
+.:00010:i:
+.:00100:0:
+.:00101:c:
+.:000001:u:
+.:0000000:a:
+.:0000001:[:
+.:0001101:3:
+.:00001000:4:
+.:00001110:H:
+.:00011000:S:
+.:00011001:W:
+.:00011100:o:
+.:00011110:1:
+.:000010100:5:
+.:000010101:L:
+.:000010111:p:
+.:000011000:T:
+.:000011001:A:
+.:000011010:M:
+.:000011110:C:
+.:000011111:2:
+.:000111011:D:
+.:000111110:B:
+.:0000100100:N:
+.:0000100110:t:
+.:0000100111:J:
+.:0000101101:R:
+.:0000110111:P:
+.:0001110101:s:
+.:0001111111:I:
+.:00001011000:r:
+.:00001101100:V:
+.:00011101000:w:
+.:00011101001:F:
+.:00011111101:G:
+.:000010010100:E:
+.:000010010101:0x3a:
+.:000010110010:h:
+.:000011011010:,:
+.:000111111000:':
+.:0000100101101:b:
+.:0000100101110:K:
+.:0000100101111:Y:
+.:0000101100111:O:
+.:0000110110110:-:
+.:0001111110010:f:
+.:0001111110011:(:
+.:00001011001100:":
+.:000010010110000:?:
+.:000010010110010:Q:
+.:0000100101100110:U:
+.:0000101100110101:6:
+.:0000101100110111:k:
+.:00001011001101100:d:
+.:000010110011011010:ESCAPE:
+.:000010110011011011:n:
+/:110:1:
+/:111:e:
+/:0000:5:
+/:0010:8:
+/:00010:T:
+/:00011:f:
+/:00110:B:
+/:00111:2:
+/:10001:3:
+/:10010:7:
+/:10100:6:
+/:10110:a:
+/:101111:4:
+/:1000000:F:
+/:1000010:s:
+/:1000011:M:
+/:1001100:H:
+/:1001110:D:
+/:1001111:A:
+/:1010101:S:
+/:10000011:m:
+/:10011010:W:
+/:10101000:G:
+/:10101001:U:
+/:10101100:d:
+/:10101101:O:
+/:10101110:N:
+/:10111001:C:
+/:10111011:P:
+/:100110110:L:
+/:101011110: :
+/:101011111:I:
+/:101110000:E:
+/:101110001:R:
+/:101110100:K:
+/:101110101:t:
+/:1000001001:J:
+/:1000001011:9:
+/:10000010000:v:
+/:10000010001:p:
+/:10000010100:h:
+/:10011011101:o:
+/:10011011110:Q:
+/:10011011111:0:
+/:100000101010:l:
+/:100110111000:V:
+/:0100010111101:c:
+/:10011011100100:ESCAPE:
+/:10011011100101:g:
+0:0:0:
+0:111: :
+0:1001:a:
+0:1011:p:
+0:10001:s:
+0:11000:.:
+0:11001:8:
+0:11011:,:
+0:100000:4:
+0:100001:t:
+0:101001:5:
+0:110100:6:
+0:1010000:3:
+0:1010001:7:
+0:1010101:]:
+0:1010110:-:
+0:1010111:1:
+0:10101000:):
+0:10101001:/:
+0:11010100:STOP:
+0:11010101:9:
+0:11010111:2:
+0:110101100:%:
+0:1101011010:0x3a:
+0:110101101111:m:
+0:11010110110001:l:
+0:11010110110010:;:
+0:11010110110011:':
+0:11010110111010:k:
+0:11010110111011:!:
+0:110101101100000:C:
+0:1101011011000010:ESCAPE:
+1:00:9:
+1:100:1:
+1:111:0:
+1:0101: :
+1:0111:2:
+1:1011:.:
+1:1100:5:
+1:01000:6:
+1:01001:8:
+1:01101:/:
+1:10100:]:
+1:11010:3:
+1:011001:7:
+1:110110:4:
+1:0110000:STOP:
+1:0110001:-:
+1:1010100:):
+1:1010110:0x3a:
+1:1010111:s:
+1:1101110:,:
+1:1101111:x:
+1:10101010:':
+1:101010110:X:
+1:10101011110:t:
+1:10101011111:R:
+1:101010111011:;:
+1:1010101110000:p:
+1:1010101110001:m:
+1:1010101110010:!:
+1:101010111001110:b:
+1:101010111001111:a:
+1:1010101110100110:ESCAPE:
+2:11:0:
+2:000: :
+2:010:.:
+2:100:5:
+2:0011:/:
+2:1011:,:
+2:00100:]:
+2:00101:p:
+2:01101:1:
+2:10101:4:
+2:011000:6:
+2:011001:2:
+2:011100:0x3a:
+2:011101:-:
+2:011111:):
+2:1010000:STOP:
+2:1010010:8:
+2:1010011:9:
+2:01111000:D:
+2:01111001:3:
+2:01111010:t:
+2:01111011:7:
+2:10100010:n:
+2:101000110:a:
+2:1010001110:':
+2:10100011111:;:
+2:101000111100:s:
+2:1010001111010:":
+2:101000111101100:ESCAPE:
+2:101000111101111:L:
+3:00: :
+3:10:0:
+3:110:.:
+3:1110:/:
+3:01000:2:
+3:01001:1:
+3:01010:):
+3:01100:0x3a:
+3:01110:-:
+3:11111:]:
+3:010110:D:
+3:011010:4:
+3:011011:STOP:
+3:011111:5:
+3:111100:,:
+3:0101110:7:
+3:0101111:3:
+3:0111101:6:
+3:1111011:t:
+3:01111001:B:
+3:11110100:8:
+3:111101010:9:
+3:0111100001:;:
+3:1111010110:r:
+3:01111000101:b:
+3:01111000110:':
+3:011110000010:p:
+3:0111100010000:a:
+3:01111000100110:ESCAPE:
+3:010011001101101:m:
+4:01: :
+4:000:4:
+4:100:.:
+4:110:0:
+4:0010:/:
+4:1010:5:
+4:1011:-:
+4:00110:1:
+4:11101:]:
+4:11110:,:
+4:001110:2:
+4:111001:8:
+4:111110:):
+4:0011110:0x3a:
+4:0011111:':
+4:1110000:t:
+4:1110001:3:
+4:11111101:6:
+4:11111110:STOP:
+4:1111110000:9:
+4:1111110010:7:
+4:11111100011:C:
+4:11111100110:;:
+4:111111000101:x:
+4:1111110011101:m:
+4:11111100111110:p:
+4:11111100111111:c:
+4:111111001110010:ESCAPE:
+5:00:0:
+5:10: :
+5:010:.:
+5:0111:p:
+5:1100:5:
+5:01100:/:
+5:11010:a:
+5:11011:-:
+5:11101:6:
+5:011010:3:
+5:111100:2:
+5:111110:8:
+5:111111:]:
+5:0110110:0x3a:
+5:1110000:):
+5:1110001:s:
+5:1110011:,:
+5:1111010:7:
+5:1111011:9:
+5:01101110:4:
+5:11100100:STOP:
+5:11100101:t:
+5:0110111110:c:
+5:0110111111:1:
+5:01101111001:;:
+5:01101111011:m:
+5:011011110001:':
+5:011011110101:k:
+5:0110111101001:l:
+5:01101111010000:ESCAPE:
+5:01101111010001:f:
+6:00: :
+6:10:.:
+6:111:0:
+6:0101:]:
+6:01001:1:
+6:01100:7:
+6:01110:):
+6:11000:,:
+6:11001:0x3a:
+6:11010:/:
+6:010001:-:
+6:011010:5:
+6:011011:4:
+6:011111:8:
+6:110111:t:
+6:0100000:6:
+6:0111100:3:
+6:0111101:2:
+6:1101101:9:
+6:11011000:':
+6:010000100:STOP:
+6:1101100101:a:
+6:11011001110:;:
+6:110110011111110:ESCAPE:
+7:11:.:
+7:001: :
+7:011:0:
+7:101:-:
+7:0000:8:
+7:0100:7:
+7:1001:]:
+7:01010:/:
+7:000101:6:
+7:000110:2:
+7:000111:1:
+7:010111:t:
+7:100000:9:
+7:100010:):
+7:100011:5:
+7:0001001:3:
+7:0101101:,:
+7:1000010:a:
+7:1000011:4:
+7:00010000:STOP:
+7:01011000:0x3a:
+7:01011001:p:
+7:0001000110:;:
+7:00010001000:':
+7:000100011101:?:
+7:0001000100100:ESCAPE:
+7:0001000100101:s:
+8:01: :
+8:000:4:
+8:110:.:
+8:0011:0:
+8:1000:9:
+8:1001:7:
+8:1011:8:
+8:1110:1:
+8:00100:/:
+8:10100:3:
+8:11110:5:
+8:101010:):
+8:111110:6:
+8:111111:]:
+8:0010100:0x3a:
+8:0010101:,:
+8:1010111:t:
+8:00101100:p:
+8:00101101:-:
+8:00101111:a:
+8:10101100:c:
+8:10101101:2:
+8:001011101:STOP:
+8:0010111001:;:
+8:001011100001:':
+8:00101110001110:ESCAPE:
+9:000:5:
+9:001:]:
+9:111:9:
+9:0101:0:
+9:0110:.:
+9:0111:-:
+9:1000:4:
+9:1001:8:
+9:1011:6:
+9:1100: :
+9:1101:7:
+9:01000:2:
+9:10100:3:
+9:010010:1:
+9:010011:/:
+9:101010:t:
+9:1010111:):
+9:10101100:0x3a:
+9:101011010:,:
+9:10101101100:p:
+9:10101101101:;:
+9:10101101111:STOP:
+9:1010110111010:a:
+9:10101101110111:e:
+9:101011011101100:ESCAPE:
+0x3a:1: :
+0x3a:01:0:
+0x3a:00001:1:
+0x3a:00010:T:
+0x3a:0000000:ESCAPE:
+0x3a:0000001:5:
+;:0:ESCAPE:
+;:1: :
+=:1:ESCAPE:
+?:1: :
+?:01:STOP:
+?:000:0x3a:
+?:00100:!:
+?:00111:.:
+?:001010:;:
+?:0010110:':
+?:00101111:,:
+?:001011101:/:
+?:0010111000:ESCAPE:
+@:1101:b:
+@:11000:ESCAPE:
+@:1010111:W:
+@:1101110:n:
+A:01: :
+A:110:D:
+A:111:n:
+A:0000:s:
+A:0001:m:
+A:0010:d:
+A:1000:r:
+A:1011:l:
+A:00110:c:
+A:10010:u:
+A:10100:g:
+A:001111:b:
+A:100111:t:
+A:101011:f:
+A:1010100:w:
+A:1010101:i:
+A:10011001:v:
+A:10011011:p:
+A:001110010:h:
+A:001110100:.:
+A:001110111:B:
+A:100110100:q:
+A:0011100000:C:
+A:0011100010:,:
+A:0011100110:y:
+A:0011101010:S:
+A:0011101100:k:
+A:0011101101:T:
+A:1001100001:R:
+A:1001100010:F:
+A:1001100011:z:
+A:1001101011:a:
+A:00111000010:P:
+A:00111000110:-:
+A:00111010110:A:
+A:00111010111:I:
+A:10011000001:e:
+A:10011010100:N:
+A:10011010101:x:
+A:001110000110:X:
+A:001110000111:K:
+A:001110001110:3:
+A:001110001111:&:
+A:001110011101:M:
+A:001110011111:Y:
+A:0011100111000:L:
+A:0011100111001:W:
+A:0011100111100:*:
+A:1001100000000:o:
+A:1001100000001:1:
+A:1001100000010:':
+A:1001100000011:0x3a:
+A:00111001111010:j:
+A:001110011110110:G:
+A:0011100111101110:O:
+A:00111001111011110:4:
+A:001110011110111110:ESCAPE:
+A:001110011110111111:E:
+B:00:C:
+B:010:a:
+B:101:r:
+B:110:e:
+B:111:B:
+B:0111:i:
+B:1000:u:
+B:1001:o:
+B:01101:l:
+B:01100000:T:
+B:01100001:.:
+B:01100011:y:
+B:01100100:I:
+B:01100110:h:
+B:01100111: :
+B:011000100:A:
+B:0110001010:O:
+B:01100010110:0x3a:
+B:01100101000:&:
+B:01100101001:3:
+B:01100101010:j:
+B:01100101011:M:
+B:01100101110:D:
+B:011000101111:W:
+B:011001011010:,:
+B:011001011011:1:
+B:011001011110:ESCAPE:
+B:011001011111:P:
+B:0110001011100:E:
+B:0110010110011:R:
+B:01100010111011:w:
+B:011000101110100:-:
+B:011001011001001:U:
+B:011001011001010:S:
+B:011001011001011:F:
+B:0110010110010000:Q:
+B:0110010110010001:4:
+C:00:h:
+C:011:B:
+C:100:a:
+C:110:o:
+C:0101:r:
+C:1010:.:
+C:1110: :
+C:1111:l:
+C:01000:':
+C:10111:i:
+C:010011:e:
+C:101101:u:
+C:0100101:y:
+C:1011001:,:
+C:01001001:I:
+C:010010000:A:
+C:1011000000:C:
+C:1011000001:D:
+C:1011000100:S:
+C:1011000101:T:
+C:1011000111:G:
+C:01001000111:w:
+C:10110001101:J:
+C:010010001010:R:
+C:010010001100:2:
+C:101100001000:?:
+C:101100001010:O:
+C:101100001011:H:
+C:101100011000:E:
+C:0100100010110:z:
+C:1011000010011:-:
+C:1011000110011:s:
+C:10110000100101:!:
+C:10110000110000:STOP:
+C:10110001100100:P:
+C:010010001011101:n:
+C:101100001001000:K:
+C:101100001001001:7:
+C:101100011001011:4:
+C:0100100010111000:0x3a:
+C:1011000110010100:F:
+C:01001000101110010:ESCAPE:
+C:01001000101110011:b:
+C:10110000101011001:O:
+D:00:a:
+D:01:,:
+D:100:r:
+D:101:o:
+D:110:e:
+D:1110:i:
+D:111111:u:
+D:1111001: :
+D:1111011:':
+D:11110000:.:
+D:11110001:]:
+D:11111010:y:
+D:111101010:w:
+D:111101011:W:
+D:111110001:N:
+D:111110010:C:
+D:111110111:J:
+D:1111010010:h:
+D:1111100111:I:
+D:1111101101:0x3a:
+D:11110100001:M:
+D:11110100010:&:
+D:11110100011:V:
+D:11111000010:-:
+D:11111000011:G:
+D:11111001100:O:
+D:11111001101:A:
+D:11111011001:S:
+D:111101000000:F:
+D:111101001101:s:
+D:111101001111:d:
+D:111110110000:v:
+D:1111010011100:m:
+D:1111010011101:j:
+D:1111101100010:ESCAPE:
+D:1111101100011:T:
+D:11110100000110:9:
+D:111101000001000:):
+D:111101000001110:8:
+D:111101000001111:7:
+D:1111010000010011:R:
+D:1111010000010100:B:
+D:1111010000010101:4:
+E:000:p:
+E:010:a:
+E:011:n:
+E:110:l:
+E:1001:m:
+E:1010:x:
+E:1110:v:
+E:1111:d:
+E:00100:s:
+E:00110:r:
+E:00111:u:
+E:10000:E:
+E:10001: :
+E:001010:.:
+E:001011:i:
+E:101101:0x3a:
+E:1011000:y:
+E:1011001:t:
+E:1011100:g:
+E:1011110:4:
+E:101110110:w:
+E:101111100:c:
+E:101111110:b:
+E:1011101010:R:
+E:1011101011:F:
+E:1011101111:C:
+E:10111010001:k:
+E:10111010010:f:
+E:10111010011:o:
+E:10111011100:U:
+E:10111011101:L:
+E:10111110101:e:
+E:10111110110:N:
+E:10111111100:h:
+E:10111111111:D:
+E:101111101000:M:
+E:101111101111:':
+E:101111111100:2:
+E:101111111101:-:
+E:1011101000011:q:
+E:1011111010010:O:
+E:1011111010011:A:
+E:10111010000001:S:
+E:10111010000100:):
+E:10111110111000:T:
+E:10111110111001:,:
+E:101110100001010:P:
+E:1011101000010110:ESCAPE:
+E:1011101000010111:z:
+F:00:o:
+F:10:r:
+F:010:e:
+F:110:i:
+F:111:a:
+F:0110:l:
+F:01110:u:
+F:0111100: :
+F:0111101:O:
+F:01111101:A:
+F:01111111:B:
+F:011111100:f:
+F:0111110000:.:
+F:0111110011:L:
+F:01111100010:M:
+F:01111100101:T:
+F:01111110101:C:
+F:01111110110:W:
+F:011111001000:0x3a:
+F:011111101000:U:
+F:011111101001:':
+F:011111101111:1:
+F:0111110010010:y:
+F:0111110010011:,:
+F:01111110111010:I:
+F:011111101110011:h:
+F:0111111011100100:*:
+F:0111111011100101:K:
+F:0111111011101100:F:
+F:0111111011101101:ESCAPE:
+F:01111110111011100:X:
+F:01111110111011101:R:
+G:00:r:
+G:01:a:
+G:101:o:
+G:110:e:
+G:1001:u:
+G:1111:i:
+G:10001:n:
+G:11101:l:
+G:1110000:y:
+G:1110001: :
+G:1110011:w:
+G:10000101:4:
+G:10000111:P:
+G:11100101:h:
+G:100001000:-:
+G:100001100:C:
+G:111001001:M:
+G:1000011010:B:
+G:1110010000:.:
+G:1110010001:I:
+G:10000100100:;:
+G:10000100101:,:
+G:10000100110:A:
+G:10000110111:0x3a:
+G:1000011011000:O:
+G:100001101101000:K:
+G:100001101101001:2:
+G:100001101101011:':
+G:1000011011011100:ESCAPE:
+G:1000011011011110:T:
+G:1000011011011111:S:
+H:00:e:
+H:01:a:
+H:10:o:
+H:110:i:
+H:1111:u:
+H:11100:R:
+H:1110100:P:
+H:1110110:y:
+H:11101011:I:
+H:111011100:Q:
+H:111011101:M:
+H:111011110:A:
+H:111011111: :
+H:1110101000:S:
+H:1110101001:.:
+H:11101010101:G:
+H:111010101001:E:
+H:1110101011101:L:
+H:11101010111101:w:
+H:11101010111110:v:
+H:111010101000101:W:
+H:111010101000110:D:
+H:111010101111110:s:
+H:1110101010001110:ESCAPE:
+H:1110101010001111:r:
+I:0:n:
+I:110:t:
+I:1001:s:
+I:1111:r:
+I:10000:T:
+I:10101:a:
+I:11100: :
+I:100010:c:
+I:101001:m:
+I:101100:z:
+I:101101:.:
+I:101111:d:
+I:111011:I:
+I:1000111:':
+I:1011101:l:
+I:10100000:A:
+I:10100001:v:
+I:10111001:V:
+I:11101001:f:
+I:11101011:o:
+I:100011001:C:
+I:100011010:P:
+I:101000100:w:
+I:101000110:0x3a:
+I:101110000:p:
+I:111010000:R:
+I:111010001:,:
+I:111010101:Y:
+I:1000110000:E:
+I:1000110001:6:
+I:1000110111:q:
+I:1010001011:y:
+I:1010001110:M:
+I:1110101000:g:
+I:1110101001:D:
+I:10001101100:e:
+I:10001101101:5:
+I:10100010100:S:
+I:10100010101:9:
+I:10100011111:F:
+I:10111000100:b:
+I:10111000110:-:
+I:101000111100:B:
+I:101000111101:):
+I:1011100010100:N:
+I:1011100010101:Q:
+I:1011100010110:k:
+I:10111000101111:O:
+I:1011100010111000:ESCAPE:
+I:1011100010111001:h:
+J:00:e:
+J:10:a:
+J:11:o:
+J:011:u:
+J:0101:i:
+J:01000: :
+J:0100110:D:
+J:0100111:.:
+J:01001001:r:
+J:010010110:s:
+J:0100100000:M:
+J:0100100010:J:
+J:0100100011:,:
+J:0100101000:B:
+J:0100101001:-:
+J:0100101110:K:
+J:0100101111:T:
+J:01001000010:C:
+J:01001010110:n:
+J:0100100001110:w:
+J:0100100001111:R:
+J:0100101011100:F:
+J:0100101011111:':
+J:010010101110110:ESCAPE:
+K:00:i:
+K:01:a:
+K:10:e:
+K:1111:y:
+K:11000:n:
+K:11001:o:
+K:11011:r:
+K:11101: :
+K:110100:':
+K:111000:u:
+K:1101011:.:
+K:1110011:l:
+K:11100101:h:
+K:110101000:T:
+K:110101011:G:
+K:111001001:,:
+K:1101010100:w:
+K:11010100101:4:
+K:11010100110:A:
+K:11010101010:3:
+K:11100100000:2:
+K:110101001110:-:
+K:110101010110:0x3a:
+K:110101010111:!:
+K:111001000010:):
+K:111001000101:S:
+K:1101010011110:V:
+K:1110010000110:6:
+K:1110010000111:1:
+K:11010100111111:L:
+K:11100100010000:I:
+K:11100100010001:?:
+K:110101001111100:ESCAPE:
+L:00:i:
+L:10:o:
+L:011:]:
+L:110:e:
+L:111:a:
+L:0100:u:
+L:010100:l:
+L:010101:A:
+L:010111:y:
+L:01011011: :
+L:010110000:I:
+L:010110101:,:
+L:0101100101:':
+L:01011001101:.:
+L:01011001110:C:
+L:01011010010:L:
+L:010110011001:t:
+L:010110100111:S:
+L:0101100110001:h:
+L:0101101001100:J:
+L:01011001100000:E:
+L:010110011000010:T:
+L:010110011000011:P:
+L:010110100000000:D:
+L:010110100110101:j:
+L:0101101001101000:ESCAPE:
+M:00:o:
+M:11:a:
+M:011:e:
+M:101:i:
+M:0101:c:
+M:1001:u:
+M:01001:y:
+M:10001:r:
+M:100000:S:
+M:100001:P:
+M:0100001: :
+M:01000001:C:
+M:01000110:F:
+M:010000000:1:
+M:010001000:h:
+M:010001010:I:
+M:010001110:T:
+M:010001111:X:
+M:0100000010:A:
+M:0100010010:z:
+M:01000101110:.:
+M:010000001101:K:
+M:010000001110:B:
+M:010001001111:s:
+M:010001011000:R:
+M:010001011001:W:
+M:010001011010:O:
+M:0100000011110:,:
+M:0100000011111:':
+M:0100010110111:D:
+M:0100010111100:4:
+M:0100010111110:E:
+M:01000100111000:m:
+M:01000100111010:ESCAPE:
+M:01000101111010:l:
+M:01000101111110:):
+M:01000101111111:w:
+M:010001001110110:t:
+M:010001001110111:V:
+M:010001011011010:6:
+M:010001011011011:2:
+N:00:a:
+N:10:o:
+N:11:e:
+N:011:i:
+N:01010:u:
+N:01011:E:
+N:010010:A:
+N:0100010:y:
+N:0100110:g:
+N:01000001:B:
+N:01000010:I:
+N:01000110:F:
+N:01000111: :
+N:010000001:':
+N:010000111:Y:
+N:010011100:L:
+N:010011101:H:
+N:0100001100:C:
+N:0100111100:W:
+N:0100111110:N:
+N:0100111111:T:
+N:010000110101:M:
+N:010000110111:O:
+N:010011110100:,:
+N:010011110111:h:
+N:0100001101001:.:
+N:0100111101101:ESCAPE:
+N:01000011011010:Q:
+O:111:n:
+O:0000:s:
+O:0001:N:
+O:0011:z:
+O:0100:r:
+O:1000:u:
+O:1010:p:
+O:1011:l:
+O:1101:':
+O:00101:U:
+O:01011:h:
+O:01110:f:
+O:01111:w:
+O:10010:.:
+O:11000: :
+O:001000:o:
+O:001001:J:
+O:010100:b:
+O:010101:m:
+O:011001:H:
+O:011010:O:
+O:011011:v:
+O:100111:c:
+O:110011:x:
+O:1001101:d:
+O:1100100:a:
+O:01100001:t:
+O:01100010:k:
+O:10011000:g:
+O:11001010:R:
+O:011000000:K:
+O:100110010:i:
+O:110010111:V:
+O:0110000011:2:
+O:0110001101:S:
+O:0110001110:B:
+O:1001100110:W:
+O:1001100111:-:
+O:01100000100:,:
+O:01100011000:j:
+O:01100011001:L:
+O:01100011111:I:
+O:11001011001:A:
+O:11001011011:C:
+O:011000001010:0x3a:
+O:011000111100:e:
+O:110010110000:y:
+O:110010110001:/:
+O:110010110100:M:
+O:0110001111011:P:
+O:01100000101110:E:
+O:01100000101111:D:
+O:11001011010101:T:
+O:110010110101000:ESCAPE:
+P:11:a:
+P:000:i:
+P:010:e:
+P:011:l:
+P:100:o:
+P:101:r:
+P:0010:h:
+P:001111:u:
+P:0011010:C:
+P:0011100:.:
+P:0011101: :
+P:00110000:B:
+P:00110010:D:
+P:00110111:s:
+P:001100011:O:
+P:001100111:,:
+P:0011000101:y:
+P:0011001100:M:
+P:0011011000:E:
+P:0011011001:':
+P:0011011011:3:
+P:00110001001:T:
+P:001100010000:L:
+P:001100010001:G:
+P:001100110110:A:
+P:001100110111:S:
+P:001101101000:w:
+P:001101101001:F:
+P:0011001101011:J:
+P:0011011010100:f:
+P:0011011010101:R:
+P:0011011010111:t:
+P:00110011010100:V:
+P:00110110101100:Y:
+P:00110110101101:I:
+P:001100110101011:&:
+P:0011001101010100:ESCAPE:
+Q:1:u:
+Q:00:V:
+Q:011: :
+Q:0101:.:
+Q:01000:a:
+Q:0100100:w:
+Q:0100110:E:
+Q:0100111:C:
+Q:01001011:&:
+Q:010010101:':
+Q:0100101000:T:
+Q:01001010010:ESCAPE:
+R:01:a:
+R:11:o:
+R:100:i:
+R:101:e:
+R:0000:p:
+R:0011:u:
+R:00011:E:
+R:00100:h:
+R:000100: :
+R:001010:y:
+R:00010100:D:
+R:00010110:.:
+R:00101100:T:
+R:00101110:S:
+R:000101010:F:
+R:001011010:B:
+R:001011011:n:
+R:001011111:A:
+R:0001010110:w:
+R:0001011100:N:
+R:0001011101:&:
+R:0001011110:V:
+R:0001011111:H:
+R:0010111101:':
+R:00010101110:t:
+R:00010101111:I:
+R:001011110000:C:
+R:001011110010:O:
+R:00101111000100:,:
+R:00101111000110:U:
+R:00101111000111:M:
+R:00101111001101:ESCAPE:
+R:001011110011100:2:
+S:1:]:
+S:0000:a:
+S:0010:h:
+S:0111:t:
+S:00010:p:
+S:00011:,:
+S:00110:L:
+S:01000:i:
+S:01001:u:
+S:01010:o:
+S:01011:c:
+S:01100:e:
+S:001111:k:
+S:0011100:w:
+S:0110101: :
+S:0110111:m:
+S:00111010:q:
+S:01101000:M:
+S:01101001:n:
+S:01101100:l:
+S:001110110:P:
+S:011011011:y:
+S:0011101110:A:
+S:01101101001:.:
+S:001110111101:r:
+S:001110111110:S:
+S:001110111111:W:
+S:011011010000:C:
+S:011011010101:E:
+S:011011010110:v:
+S:0110110100011:ESCAPE:
+S:0110110101000:I:
+S:0110110101111:g:
+S:00111011110010:4:
+S:00111011110011:1:
+S:01101101000100:O:
+S:01101101011100:z:
+S:011011010001011:B:
+S:011011010111010:H:
+S:011011010111011:T:
+S:0011101111000100:G:
+S:0011101111000111:D:
+S:0110110100010100:-:
+S:0110110101001100:3:
+S:0110110101001101:2:
+S:00111011110001010:':
+S:00111011110001011:?:
+S:01101101010011101:s:
+S:01101101010011110:j:
+S:01101101010011111:b:
+S:011011010001010100:R:
+S:011011010001010110:J:
+S:011011010001010111:F:
+S:011011010100111000:0x3a:
+T:0:h:
+T:100:o:
+T:1010:V:
+T:1011:w:
+T:1100:r:
+T:1111:e:
+T:11010:a:
+T:11011:i:
+T:11100:u:
+T:1110100:H:
+T:1110110:W:
+T:11101010: :
+T:11101011:y:
+T:111011101:M:
+T:111011111:x:
+T:1110111000:S:
+T:11101110010:A:
+T:11101111001:s:
+T:11101111011:J:
+T:111011100111:X:
+T:111011110000:.:
+T:1110111001101:-:
+T:1110111100011:L:
+T:1110111101000:C:
+T:1110111101011:c:
+T:11101110011000:T:
+T:11101110011001:U:
+T:11101111000101:4:
+T:11101111010010:O:
+T:111011110001001:G:
+T:111011110100110:E:
+T:111011110100111:,:
+T:111011110101010:':
+T:1110111100010001:;:
+T:1110111101010010:ESCAPE:
+T:1110111101010111:D:
+T:11101111000100000:0x3a:
+T:11101111010100110:R:
+T:11101111010100111:N:
+T:11101111010101100:I:
+T:11101111010101101:B:
+U:00:K:
+U:10:n:
+U:011:S:
+U:110:p:
+U:1111:l:
+U:01010:s:
+U:01011:r:
+U:11101:R:
+U:010000:g:
+U:111000: :
+U:0100111:.:
+U:1110010:m:
+U:01000100:k:
+U:01000101:t:
+U:01000110:E:
+U:01000111:-:
+U:01001000:F:
+U:01001100:2:
+U:11100110:c:
+U:11100111:N:
+U:010010010:f:
+U:010010100:,:
+U:010010111:Z:
+U:0100101010:h:
+U:0100110100:i:
+U:0100110101:w:
+U:0100110110:a:
+U:01001010110:b:
+U:010010110001:V:
+U:010010110010:P:
+U:010010110011:I:
+U:010010110100:B:
+U:010010110101:A:
+U:010011011111:d:
+U:0100101101101:C:
+U:0100110111101:z:
+U:01001101111000:ESCAPE:
+U:01001101111001:T:
+V:01: :
+V:11:i:
+V:000:.:
+V:001:a:
+V:101:e:
+V:10001:C:
+V:10011:o:
+V:1000001:F:
+V:1000011:I:
+V:10000001:1:
+V:10000101:4:
+V:10010000:r:
+V:10010010:E:
+V:10010011:s:
+V:10010101:':
+V:10010110:0x3a:
+V:10010111:l:
+V:100000001:/:
+V:100001001:-:
+V:100100010:D:
+V:100100011:u:
+V:100101001:,:
+V:1000000001:2:
+V:1000010000:5:
+V:1001010000:;:
+V:10010100010:ESCAPE:
+V:100001000100:7:
+V:100101000110:3:
+V:1000010001010:9:
+V:1000010001110:A:
+V:1000010001111:8:
+V:1001010001111:W:
+V:10010100011101:B:
+W:00:h:
+W:10:i:
+W:011:a:
+W:110:o:
+W:111:e:
+W:0100:r:
+W:01011:O:
+W:0101001: :
+W:0101010:y:
+W:010100000:B:
+W:010100001:.:
+W:010101100:I:
+W:010101110:W:
+W:010101111:A:
+W:0101000100:':
+W:0101000111:T:
+W:01010001100:2:
+W:01010001101:0x3a:
+W:01010110100:H:
+W:01010110110:V:
+W:010101101010:l:
+W:010101101110:s:
+W:010101101111:,:
+W:0101011010111:u:
+W:010101101011011:E:
+W:0101011010110100:ESCAPE:
+X:1: :
+X:000:a:
+X:0011:m:
+X:0111:t:
+X:01010:-:
+X:01011:e:
+X:011000:u:
+X:011001:I:
+X:011011:,:
+X:0100010:V:
+X:0110100:5:
+X:0110101:.:
+X:01000000:S:
+X:01000010:0x3a:
+X:01000111:i:
+X:010000011:':
+X:010000111:X:
+X:0100001100:):
+X:01000011010:ESCAPE:
+Y:1:o:
+Y:00:e:
+Y:010:u:
+Y:01100:a:
+Y:01110:v:
+Y:01111: :
+Y:0110100:n:
+Y:01101010:r:
+Y:01101101:O:
+Y:01101111:i:
+Y:011011000:L:
+Y:011011001:s:
+Y:011011101:m:
+Y:0110101100:.:
+Y:0110111001:P:
+Y:011011100010:2:
+Y:0110111000000:-:
+Y:0110111000110:C:
+Y:0110111000111:,:
+Y:01101110000010:ESCAPE:
+Y:01101110000011:d:
+Z:01:a:
+Z:10:e:
+Z:11:o:
+Z:0010:z:
+Z:0011:i:
+Z:00001:Z:
+Z:00010: :
+Z:00011:u:
+Z:0000011:.:
+Z:00000000:y:
+Z:00000010:,:
+Z:0000001101:-:
+Z:00000011110:ESCAPE:
+[:1:S:
+[:01:A:
+[:0000:2:
+[:0010:R:
+[:0011:1:
+[:000101:n:
+[:0001111:l:
+[:00010011:r:
+[:00011101:b:
+[:000100001:C:
+[:000100010:f:
+[:000100101:M:
+[:000111001:c:
+[:0001000111:K:
+[:0001001000:H:
+[:0001110001:T:
+[:00010000000:J:
+[:00010000001:B:
+[:00010001101:Z:
+[:00010010011:P:
+[:00011100000:L:
+[:000100011000:F:
+[:000100100101:I:
+[:000111000011:N:
+[:0001000110010:s:
+[:0001001001001:G:
+[:0001110000101:D:
+[:00011100001000:O:
+[:000111000010010:ESCAPE:
+[:000111000010011:W:
+]:1:STOP:
+]:01: :
+]:001:.:
+]:0001:[:
+]:00001:0x3a:
+]:000001:,:
+]:00000000:ESCAPE:
+_:1:ESCAPE:
+`:1000000:W:
+`:10100000:o:
+`:1101000010:ESCAPE:
+a:01:n:
+a:001:r:
+a:101:t:
+a:0000:m:
+a:1001:s:
+a:1110: :
+a:1111:l:
+a:00011:d:
+a:10000:i:
+a:11000:y:
+a:11010:c:
+a:000100:p:
+a:100010:u:
+a:100011:v:
+a:110011:g:
+a:110110:b:
+a:110111:k:
+a:0001010:w:
+a:00010111:z:
+a:11001000:.:
+a:11001011:f:
+a:000101100:,:
+a:000101101:':
+a:110010011:e:
+a:110010101:h:
+a:1100101001:x:
+a:11001001000:a:
+a:11001001001:-:
+a:11001001011:j:
+a:11001010000:0x3a:
+a:11001010001:o:
+a:110010010100:q:
+a:11001001010100:!:
+a:11001001010111:?:
+a:1100100101010100:ESCAPE:
+a:1100100101010110:;:
+a:1100100101010111:):
+a:1100100101011001:/:
+a:1100100101011011:@:
+a:11001001010101010:J:
+a:11001001010101011:]:
+a:11001001010110101:L:
+a:110010010101100000:R:
+a:110010010101100001:S:
+a:110010010101100010:V:
+a:11001001010110001110:P:
+a:110010010101100011110:STOP:
+b:00:e:
+b:010:u:
+b:011:a:
+b:100:y:
+b:101:o:
+b:1100:l:
+b:1110:r:
+b:1111:i:
+b:110100:s:
+b:110110: :
+b:110111:b:
+b:11010101:c:
+b:110101000:j:
+b:110101100:,:
+b:110101101:.:
+b:1101010011:':
+b:1101011111:t:
+b:11010100101:0x3a:
+b:11010111000:w:
+b:11010111001:d:
+b:11010111010:h:
+b:11010111011:&:
+b:11010111101:-:
+b:110101111000:m:
+b:110101111001:n:
+b:1101010010000:?:
+b:1101010010010:v:
+b:11010100100010:f:
+b:11010100100111:p:
+b:110101001000111:;:
+b:110101001001101:D:
+b:1101010010001100:/:
+b:11010100100110001:k:
+b:1101010010011000010:ESCAPE:
+b:1101010010011000011:!:
+b:110101001001100000000000:STOP:
+c:00:o:
+c:011:a:
+c:100:e:
+c:110:h:
+c:0100:i:
+c:0101:l:
+c:1011:k:
+c:1111:t:
+c:10100:u:
+c:10101:r:
+c:11100: :
+c:1110100:y:
+c:1110101:c:
+c:11101101:s:
+c:11101110:.:
+c:111011111:,:
+c:1110110001:G:
+c:11101100001:n:
+c:11101100110:D:
+c:11101111000:K:
+c:11101111011:C:
+c:111011000000:0x3a:
+c:111011001001:-:
+c:111011001010:A:
+c:111011001110:L:
+c:111011001111:':
+c:111011110010:d:
+c:111011110100:q:
+c:111011110101:I:
+c:1110110010000:N:
+c:1110110010001:z:
+c:1110111100111:F:
+c:11101100000101:w:
+c:11101100000111:E:
+c:11101100101100:?:
+c:11101111001100:M:
+c:11101111001101:S:
+c:111011000001000:b:
+c:111011000001001:ESCAPE:
+c:111011000001100:!:
+c:111011001011010:Q:
+c:111011001011011:P:
+c:111011001011100:;:
+c:111011001011110:B:
+c:1110110000011011:V:
+c:1110110010111011:m:
+c:1110110010111110:/:
+c:11101100000110101:):
+c:11101100101110100:U:
+c:11101100101111110:W:
+c:111011000001101001:H:
+c:111011001011111110:R:
+c:111011001011111111:T:
+c:11101100101110101000000:STOP:
+d:0: :
+d:101:e:
+d:1100:a:
+d:1110:i:
+d:10001:.:
+d:10011:o:
+d:11011:r:
+d:11111:s:
+d:100001:d:
+d:100101:l:
+d:110100:u:
+d:111101:y:
+d:1001001:-:
+d:1101011:v:
+d:1111000:g:
+d:1111001:,:
+d:10000000:h:
+d:10000001:0x3a:
+d:10000010:m:
+d:10010000:w:
+d:10010001:n:
+d:11010101:':
+d:100000111:f:
+d:1101010001:?:
+d:1101010010:b:
+d:1101010011:c:
+d:10000011000:!:
+d:11010100000:p:
+d:11010100001:t:
+d:100000110010:STOP:
+d:100000110011:):
+d:100000110100:k:
+d:100000110101:;:
+d:100000110111:/:
+d:10000011011010:":
+d:10000011011011:j:
+d:100000110110000:z:
+d:100000110110011:q:
+d:1000001101100011:@:
+d:1000001101100100:ESCAPE:
+d:10000011011001010:]:
+e:10: :
+e:010:s:
+e:110:r:
+e:0000:d:
+e:0011:a:
+e:1111:n:
+e:00010:c:
+e:01100:e:
+e:01101:w:
+e:01111:t:
+e:11100:l:
+e:000110:x:
+e:001000:v:
+e:001001:i:
+e:001010:y:
+e:011100:m:
+e:111010:.:
+e:0001110:f:
+e:0010111:b:
+e:0111010:,:
+e:1110110:p:
+e:00011110:-:
+e:00011111:h:
+e:00101100:k:
+e:01110110:':
+e:11101110:g:
+e:11101111:o:
+e:001011011:0x3a:
+e:0010110100:):
+e:0010110101:q:
+e:0111011101:?:
+e:0111011110:u:
+e:01110111000:z:
+e:01110111110:!:
+e:011101111110:STOP:
+e:011101111111:j:
+e:0111011100110:/:
+e:01110111001001:4:
+e:01110111001010:B:
+e:01110111001110:]:
+e:01110111001111:;:
+e:011101110010000:":
+e:0111011100100011:D:
+e:0111011100101100:ESCAPE:
+e:0111011100101110:@:
+e:01110111001000100:T:
+e:01110111001011111:L:
+e:011101110010110100:V:
+e:011101110010110101:G:
+e:011101110010111100:1:
+e:011101110010111101000:2:
+e:011101110010111101001:N:
+e:0111011100101111011101:P:
+e:0111011100101111011110:M:
+e:0111011100101111011111:H:
+f:00:o:
+f:10: :
+f:010:i:
+f:110:r:
+f:0111:a:
+f:1110:e:
+f:01100:t:
+f:11110:u:
+f:11111:f:
+f:011011:l:
+f:01101000:s:
+f:01101001:y:
+f:011010110:.:
+f:0110101000:?:
+f:0110101011:,:
+f:0110101111:-:
+f:01101010011:0x3a:
+f:01101010100:':
+f:01101010101:g:
+f:011010100100:m:
+f:011010111000:ESCAPE:
+f:011010111010:b:
+f:011010111011:n:
+f:0110101001011:c:
+f:0110101110010:!:
+f:01101011100110:):
+f:01101011100111:w:
+f:011010100101010:/:
+f:0110101001010000:h:
+f:0110101001010110:;:
+f:01101010010101110:k:
+f:01101010010101111:v:
+f:011010100101000100:STOP:
+g:11: :
+g:000:a:
+g:010:h:
+g:101:e:
+g:0011:u:
+g:0110:r:
+g:1000:i:
+g:01110:l:
+g:10010:s:
+g:10011:o:
+g:001001:,:
+g:001010:n:
+g:011110:g:
+g:011111:.:
+g:0010110:y:
+g:00100001:':
+g:00100010:-:
+g:00100011:0x3a:
+g:001000000:d:
+g:001011101:b:
+g:001011110:t:
+g:001011111:w:
+g:0010000010:?:
+g:0010000011:m:
+g:00101110001:!:
+g:00101110011:f:
+g:001011100001:;:
+g:001011100101:STOP:
+g:0010111000000:k:
+g:0010111001000:p:
+g:00101110000010:):
+g:00101110000011:":
+g:001011100100101:c:
+g:001011100100111:/:
+g:0010111001001000:ESCAPE:
+g:0010111001001100:]:
+g:0010111001001101:z:
+g:001011100100100110:v:
+h:0:e:
+h:100:o:
+h:101:i:
+h:110: :
+h:1111:a:
+h:111001:r:
+h:111011:t:
+h:11100001:y:
+h:11100011:l:
+h:11101000:.:
+h:11101001:n:
+h:11101011:u:
+h:111000000:d:
+h:111000100:s:
+h:111010100:,:
+h:1110000011:w:
+h:1110001010:':
+h:1110001011:-:
+h:11101010101:m:
+h:11101010110:0x3a:
+h:11101010111:b:
+h:111000001001:c:
+h:111000001011:?:
+h:111010101000:!:
+h:1110000010000:):
+h:1110000010100:h:
+h:1110000010101:k:
+h:1110101010011:f:
+h:11101010100101:g:
+h:111000001000100:p:
+h:111000001000101:;:
+h:111000001000110:/:
+h:111010101001001:v:
+h:1110101010010000:q:
+h:11101010100100010:ESCAPE:
+h:111010101001000110:":
+h:11101010100100011100:z:
+h:11101010100100011110:]:
+h:11101010100100011111:*:
+h:1110000010001110000000:STOP:
+i:10:n:
+i:000:t:
+i:010:s:
+i:0011:l:
+i:1100:o:
+i:1101:c:
+i:1111:e:
+i:00100:a:
+i:01100:m:
+i:01101:d:
+i:01110:v:
+i:11100:g:
+i:11101:r:
+i:001010:p:
+i:011110:f:
+i:0010110:z:
+i:0111110: :
+i:00101111:b:
+i:01111110:k:
+i:001011100:-:
+i:001011101:x:
+i:0111111100:u:
+i:0111111110:q:
+i:01111111010:.:
+i:01111111110:,:
+i:011111110111:w:
+i:011111111111:':
+i:0111111101101:i:
+i:0111111111101:j:
+i:01111111011001:0x3a:
+i:01111111111000:h:
+i:011111110110000:/:
+i:011111111110011:y:
+i:0111111101100011:?:
+i:0111111111100100:P:
+i:01111111111001011:!:
+i:011111111110010100:):
+i:0111111101100010001:C:
+i:0111111101100010010:ESCAPE:
+i:01111111011000100110:D:
+i:01111111011000100111:;:
+i:0111111101100010000000:STOP:
+j:0:o:
+j:11:u:
+j:101:a:
+j:1001:e:
+j:10000:i:
+j:100011:y:
+j:1000101: :
+j:10001001:.:
+j:100010000:':
+j:1000100011:t:
+j:10001000100:n:
+j:100010001011:s:
+j:1000100010100:ESCAPE:
+j:1000100010101:h:
+k:10: :
+k:11:e:
+k:000:s:
+k:011:i:
+k:0010:.:
+k:01001:y:
+k:001100:':
+k:001101:a:
+k:001110:p:
+k:001111:,:
+k:010100:l:
+k:010101:f:
+k:010110:n:
+k:0100000:/:
+k:0100010:-:
+k:0100011:o:
+k:01011101:0x3a:
+k:010000111:b:
+k:010111000:w:
+k:010111001:m:
+k:010111100:h:
+k:010111110:u:
+k:010111111:k:
+k:0100001000:r:
+k:0100001001:ESCAPE:
+k:0100001010:?:
+k:0100001100:t:
+k:0100001101:g:
+k:0101111011:d:
+k:01000010110:j:
+k:010000101110:):
+k:010111101000:;:
+k:010111101001:c:
+k:0100001011110:v:
+k:0101111010110:!:
+k:010111101011110:":
+k:010111101011111:STOP:
+l:010:a:
+l:011:i:
+l:100:l:
+l:110:e:
+l:111: :
+l:0000:u:
+l:0001:d:
+l:0010:y:
+l:1011:o:
+l:10100:s:
+l:001100:.:
+l:001110:t:
+l:0011010:v:
+l:0011110:f:
+l:1010100:m:
+l:1010101:k:
+l:1010110:p:
+l:00110111:c:
+l:00111110:-:
+l:10101111:,:
+l:001101101:0x3a:
+l:001111111:b:
+l:101011100:':
+l:0011011000:r:
+l:0011011001:h:
+l:0011111100:n:
+l:0011111101:g:
+l:1010111011:w:
+l:10101110100:?:
+l:1010111010100:!:
+l:1010111010110:z:
+l:10101110101011:/:
+l:101011101010100:;:
+l:101011101011100:E:
+l:101011101011101:*:
+l:101011101011111:STOP:
+l:1010111010101011:ESCAPE:
+l:1010111010111100:):
+l:10101110101010100:@:
+l:10101110101010101:j:
+l:10101110101111010:":
+l:101011101011110111:]:
+m:00:a:
+m:01:e:
+m:111: :
+m:1001:p:
+m:1011:o:
+m:1100:i:
+m:10000:.:
+m:10001:s:
+m:11010:u:
+m:11011:m:
+m:101001:y:
+m:101011:b:
+m:1010000:,:
+m:1010100:/:
+m:10100010:]:
+m:101000110:0x3a:
+m:101010100:':
+m:1010001111:r:
+m:1010101011:f:
+m:1010101100:l:
+m:1010101110:n:
+m:10100011100:?:
+m:10100011101:!:
+m:10101010100:STOP:
+m:10101010101:w:
+m:10101011011:h:
+m:10101011110:-:
+m:101010111110:4:
+m:1010101101010:t:
+m:1010101111110:;:
+m:1010101111111:c:
+m:10101011010000:):
+m:10101011010001:ESCAPE:
+m:10101011010011:d:
+m:101010110100101:g:
+m:10101011010010001:v:
+m:10101011010010010:k:
+m:10101011010010011:z:
+n:01: :
+n:001:t:
+n:100:g:
+n:111:d:
+n:0000:s:
+n:1010:a:
+n:1101:e:
+n:10110:c:
+n:11000:i:
+n:000111:.:
+n:101111:n:
+n:110011:o:
+n:0001001:u:
+n:0001011:v:
+n:0001100:f:
+n:1011100:k:
+n:1011101:':
+n:1100100:y:
+n:1100101:,:
+n:00010000:m:
+n:00010100:l:
+n:00010101:-:
+n:000100011:w:
+n:000110101:0x3a:
+n:0001000101:z:
+n:0001101000:h:
+n:0001101100:b:
+n:0001101101:j:
+n:0001101110:r:
+n:00010001000:p:
+n:00011010011:x:
+n:00011011111:?:
+n:000100010011:;:
+n:000110100101:):
+n:000110111100:!:
+n:000110111101:q:
+n:0001000100100:/:
+n:0001000100101:STOP:
+n:0001101001000:ESCAPE:
+n:00011010010010:B:
+n:0001101001001100:]:
+n:0001101001001101:":
+n:0001101001001110:@:
+o:001:u:
+o:011: :
+o:100:r:
+o:111:n:
+o:0000:l:
+o:1100:m:
+o:1101:f:
+o:00010:v:
+o:01000:s:
+o:01001:p:
+o:10100:t:
+o:10101:o:
+o:10111:w:
+o:000110:k:
+o:000111:i:
+o:010100:g:
+o:010111:c:
+o:101101:d:
+o:0101011:e:
+o:0101100:y:
+o:0101101:a:
+o:1011001:b:
+o:01010101:h:
+o:10110000:.:
+o:010101000:-:
+o:010101001:,:
+o:1011000101:':
+o:1011000111:x:
+o:10110001001:0x3a:
+o:10110001101:z:
+o:101100010001:?:
+o:101100011001:j:
+o:1011000100000:!:
+o:1011000110001:q:
+o:10110001100000:/:
+o:10110001100001:):
+o:1011000100001101:;:
+o:1011000100001110:G:
+o:10110001000011000:":
+o:10110001000011110:ESCAPE:
+o:101100010000110010:]:
+o:101100010000110011:@:
+o:1011000100001111101:STOP:
+o:1011000100001111110:B:
+o:10110001000011111110:O:
+o:10110001000011111111:C:
+p:001:l:
+p:010: :
+p:011:o:
+p:101:r:
+p:111:e:
+p:0000:p:
+p:1100:a:
+p:1101:i:
+p:00011:t:
+p:10000:u:
+p:10001:h:
+p:10010:s:
+p:000101:m:
+p:0001001:d:
+p:1001101:y:
+p:1001110:.:
+p:1001111:,:
+p:00010000:-:
+p:000100011:?:
+p:100110001:0x3a:
+p:1001100100:':
+p:1001100101:]:
+p:1001100110:+:
+p:1001100111:b:
+p:00010001001:f:
+p:00010001010:k:
+p:00010001011:!:
+p:10011000001:c:
+p:10011000010:n:
+p:10011000011:w:
+p:000100010000:STOP:
+p:000100010001:;:
+p:100110000001:/:
+p:1001100000001:g:
+p:10011000000001:):
+p:100110000000001:":
+p:10011000000000000:ESCAPE:
+q:1:u:
+q:000:,:
+q:001:.:
+q:011: :
+q:01001:b:
+q:01010:':
+q:01011:i:
+q:010001:a:
+q:010000100:ESCAPE:
+r:000:a:
+r:001:o:
+r:100:i:
+r:110: :
+r:111:e:
+r:0100:s:
+r:0101:t:
+r:01110:d:
+r:10100:n:
+r:10101:y:
+r:011010:u:
+r:011011:m:
+r:011111:k:
+r:101101:l:
+r:101110:.:
+r:101111:r:
+r:0110000:f:
+r:0110010:,:
+r:0110011:v:
+r:1011000:c:
+r:1011001:g:
+r:01100011:':
+r:01111000:-:
+r:01111001:b:
+r:01111011:p:
+r:011000101:0x3a:
+r:011110100:w:
+r:0111101010:?:
+r:0111101011:h:
+r:01100010010:!:
+r:011000100001:q:
+r:011000100010:j:
+r:011000100011:STOP:
+r:011000100110:/:
+r:0110001000001:;:
+r:0110001001111:):
+r:01100010011101:z:
+r:011000100000001:":
+r:011000100000011:]:
+r:0110001000000100:x:
+r:0110001000000101:ESCAPE:
+r:01100010000000011:Z:
+s:0: :
+s:101:t:
+s:1000:.:
+s:1110:e:
+s:10011:,:
+s:11000:o:
+s:11001:s:
+s:11110:h:
+s:11111:i:
+s:100101:c:
+s:110100:u:
+s:110110:p:
+s:1101111:a:
+s:10010001:n:
+s:10010011:m:
+s:11010100:y:
+s:11010110:0x3a:
+s:11011100:l:
+s:11011101:k:
+s:100100001:b:
+s:100100100:f:
+s:110101010:w:
+s:110101111:':
+s:1001000000:!:
+s:1001000001:g:
+s:1001001010:r:
+s:1101010110:?:
+s:1101010111:-:
+s:1101011101:q:
+s:11010111001:d:
+s:100100101100:/:
+s:100100101101:):
+s:100100101111:STOP:
+s:110101110000:]:
+s:110101110001:;:
+s:1001001011101:v:
+s:100100101110001:":
+s:100100101110011:z:
+s:1001001011100000:j:
+s:1001001011100001:ESCAPE:
+s:10010010111001011:@:
+s:100100101110010101:T:
+t:10:h:
+t:000:i:
+t:010:o:
+t:011:e:
+t:111: :
+t:0010:a:
+t:00110:u:
+t:11001:r:
+t:11011:s:
+t:001111:.:
+t:110001:t:
+t:110100:y:
+t:0011101:c:
+t:1100001:l:
+t:00111001:-:
+t:11000000:v:
+t:11000001:m:
+t:11010101:w:
+t:11010110:,:
+t:11010111:':
+t:001110000:n:
+t:0011100011:?:
+t:1101010001:b:
+t:1101010010:0x3a:
+t:00111000100:!:
+t:11010100000:z:
+t:11010100110:d:
+t:11010100111:f:
+t:110101000010:x:
+t:0011100010100:g:
+t:0011100010101:;:
+t:1101010000110:p:
+t:00111000101100:P:
+t:00111000101101:STOP:
+t:00111000101111:):
+t:11010100001110:/:
+t:11010100001111:k:
+t:0011100010111000:@:
+t:0011100010111010:E:
+t:00111000101110011:]:
+t:00111000101110111:":
+t:001110001011100100:F:
+t:001110001011101100:ESCAPE:
+t:0011100010111001010:j:
+t:0011100010111011010:1:
+u:011:t:
+u:101:n:
+u:110:s:
+u:111:r:
+u:0001:d:
+u:0010:e:
+u:0101:l:
+u:1000:p:
+u:00000:b:
+u:00001: :
+u:00110:i:
+u:01000:a:
+u:01001:g:
+u:10010:c:
+u:10011:m:
+u:0011100:y:
+u:00111010:z:
+u:00111100:':
+u:00111110:f:
+u:00111111:k:
+u:001111010:,:
+u:0011101101:-:
+u:0011101110:o:
+u:0011110110:.:
+u:0011110111:x:
+u:00111011000:w:
+u:00111011110:0x3a:
+u:001110110010:q:
+u:001110111110:h:
+u:001110111111:v:
+u:0011101100110:j:
+u:001110110011100:u:
+u:001110110011101:?:
+u:0011101100111110:/:
+u:0011101100111111:!:
+u:00111011001111001:ESCAPE:
+u:001110110011110100:;:
+u:001110110011110111:):
+u:0011101100111101010:T:
+u:0011101100111100010000000:STOP:
+v:1:e:
+v:01:i:
+v:000:a:
+v:0011:o:
+v:00101:.:
+v:001001: :
+v:00100001:':
+v:00100011:y:
+v:001000000:u:
+v:001000100:s:
+v:0010001010:r:
+v:00100000100:-:
+v:00100000110:,:
+v:00100010110:n:
+v:001000001010:g:
+v:001000001011:v:
+v:001000001111:l:
+v:001000101110:@:
+v:001000101111:0x3a:
+v:0010000011101:k:
+v:001000001110010:t:
+v:0010000011100110:d:
+v:001000001110011110:ESCAPE:
+w:00:i:
+w:011:e:
+w:100: :
+w:101:s:
+w:110:h:
+w:0101:a:
+w:1111:o:
+w:01000:.:
+w:01001:w:
+w:11100:n:
+w:1110110:r:
+w:11101010:,:
+w:11101011:l:
+w:11101111:y:
+w:111010010:c:
+w:111011101:b:
+w:1110100010:0x3a:
+w:1110100110:m:
+w:1110100111:':
+w:1110111000:d:
+w:11101000000:f:
+w:11101000001:]:
+w:11101000010:!:
+w:11101000111:k:
+w:11101110010:-:
+w:111010000111:g:
+w:111010001100:?:
+w:111010001101:t:
+w:111011100111:p:
+w:1110100001101:u:
+w:1110111001101:):
+w:11101000011000:STOP:
+w:11101110011001:j:
+w:111011100110001:q:
+w:1110111001100000:/:
+w:11101110011000010:;:
+w:1110111001100001100:ESCAPE:
+x:01:p:
+x:11:t:
+x:101: :
+x:0000:i:
+x:0010:a:
+x:1000:c:
+x:00010:u:
+x:00111:e:
+x:10011:-:
+x:000110:f:
+x:001101:o:
+x:100100:.:
+x:0001110:,:
+x:0001111:m:
+x:0011001:y:
+x:10010101:':
+x:10010110:q:
+x:001100000:s:
+x:100101000:0x3a:
+x:100101110:h:
+x:0011000011:?:
+x:1001010010:l:
+x:1001011110:w:
+x:10010100110:x:
+x:10010100111:b:
+x:10010111111:):
+x:001100001011:/:
+x:0011000010100:4:
+x:0011000010101:!:
+x:1001011111011:;:
+x:100101111101001:v:
+x:1001011111001000:STOP:
+x:1001011111010000:ESCAPE:
+y:1: :
+y:000:o:
+y:0011:s:
+y:0101:.:
+y:01001:,:
+y:01100:e:
+y:01110:':
+y:001001:a:
+y:001010:i:
+y:001011:d:
+y:010001:n:
+y:011011:0x3a:
+y:011111:l:
+y:0010000:w:
+y:0110100:t:
+y:0110101:m:
+y:0111101:-:
+y:00100011:b:
+y:01000000:?:
+y:01000001:r:
+y:01000010:p:
+y:01000011:f:
+y:01111001:c:
+y:0010001001:;:
+y:0010001010:J:
+y:0111100000:h:
+y:0111100001:!:
+y:0111100011:g:
+y:00100010000:):
+y:00100010111:/:
+y:01111000101:]:
+y:001000100011:k:
+y:001000101100:ESCAPE:
+y:001000101101:u:
+y:011110001001:STOP:
+y:0010001000100:z:
+y:0111100010001:":
+y:00100010001011:j:
+y:01111000100001:2:
+y:001000100010100:y:
+y:001000100010101:x:
+y:0111100010000000:v:
+y:0111100010000001:T:
+y:0111100010000011:P:
+z:10:e:
+z:001:a:
+z:011:z:
+z:110: :
+z:111:i:
+z:0001:l:
+z:0100:y:
+z:01010:o:
+z:000000:c:
+z:000010:,:
+z:000011:.:
+z:010110:w:
+z:0000010:':
+z:00000110:0x3a:
+z:00000111:t:
+z:01011101:m:
+z:010111000:k:
+z:010111100:-:
+z:010111101:u:
+z:010111111:b:
+z:01011100100:s:
+z:01011100101:/:
+z:01011100111:d:
+z:01011111001:p:
+z:01011111011:?:
+z:010111001100:h:
+z:010111110000:@:
+z:010111110100:):
+z:0101111100011:v:
+z:0101111101010:g:
+z:01011100110111:r:
+z:01011111000100:q:
+z:01011111000101:n:
+z:01011111010110:ESCAPE:
+z:010111001101001:STOP:
+}:0000100000: :
+~:1:ESCAPE:
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/descriptor.h vdr-1.4.freesat-tva/include/libsi/descriptor.h
--- vdr-1.4.reel/include/libsi/descriptor.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/include/libsi/descriptor.h	2008-10-06 18:46:44.403088585 +0100
@@ -361,6 +361,25 @@
    virtual void Parse();
 };
 
+class ContentIdentifierDescriptor : public Descriptor {
+public:
+  String entry;
+  int getCridType() const;
+  int getCridLocation() const;
+//  virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); }
+   private:
+      const descr_content_identifier *s;
+protected:
+  virtual void Parse();
+};
+
+class DefaultAuthorityDescriptor : public Descriptor {
+public:
+   String DefaultAuthority; //ID
+protected:
+   virtual void Parse();
+};
+
 //abstract base class
 class MultilingualNameDescriptor : public Descriptor {
 public:
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/freesat.h vdr-1.4.freesat-tva/include/libsi/freesat.h
--- vdr-1.4.reel/include/libsi/freesat.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/include/libsi/freesat.h	2008-10-06 18:46:27.403674056 +0100
@@ -0,0 +1,12 @@
+
+
+#ifndef FREESAT_H
+#define FREESAT_H
+
+#include <sys/types.h>
+
+extern char *freesat_huffman_decode(const unsigned char *compressed, size_t size); 
+
+#endif
+
+
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/headers.h vdr-1.4.freesat-tva/include/libsi/headers.h
--- vdr-1.4.reel/include/libsi/headers.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/include/libsi/headers.h	2008-10-06 18:46:44.403088585 +0100
@@ -1673,11 +1673,39 @@
    u_char descriptor_length                      :8;
 };
 
+struct entry_tva_id {
+   u_char tva_id_hi                              :8;
+   u_char tva_id_lo                              :8;
+#if BYTE_ORDER == BIG_ENDIAN
+   u_char reserved                               :5;
+   u_char running_status                         :3;
+#else
+   u_char running_status                         :3;
+   u_char reserved                               :5;
+#endif
+};
+
+
 /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */
 
 struct descr_content_identifier {
    u_char descriptor_tag                         :8;
    u_char descriptor_length                      :8;
+#if BYTE_ORDER == BIG_ENDIAN
+   u_char crid_type                              :6;
+   u_char crid_location                          :2;
+#else
+   u_char crid_location                          :2;
+   u_char crid_type                              :6;
+#endif
+  union {
+    u_char crid_length                           :8;
+    u_char crid_ref_hi                           :8;
+  };
+  union {
+    u_char crid_byte                             :8;
+    u_char crid_ref_lo                           :8;
+  };
 };
 
 /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/si.h vdr-1.4.freesat-tva/include/libsi/si.h
--- vdr-1.4.reel/include/libsi/si.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/include/libsi/si.h	2008-10-12 03:59:25.264431644 +0100
@@ -28,7 +28,7 @@
                TableIdNIT_other  = 0x41, //network information section, other network
                TableIdSDT = 0x42, //service description section
                TableIdSDT_other  = 0x46,
-               TableIdBAT = 0x46, //bouquet association section
+               TableIdBAT = 0x4a, //bouquet association section
                TableIdEIT_presentFollowing = 0x4E, //event information section
                TableIdEIT_presentFollowing_other = 0x4F,
                //range from 0x50 to 0x5F
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/bat.h vdr-1.4.freesat-tva/include/vdr/bat.h
--- vdr-1.4.reel/include/vdr/bat.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/include/vdr/bat.h	2008-10-12 19:30:25.943733925 +0100
@@ -0,0 +1,29 @@
+/*
+ * bat.h: BAT section filter
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: bat.h 1.2 2004/01/05 14:30:14 kls Exp $
+ */
+
+#ifndef __BAT_H
+#define __BAT_H
+
+#include "filter.h"
+#include <map>
+
+typedef std::map <int, cSectionSyncer *> batMap;
+
+class cBatFilter : public cFilter {
+private:
+  batMap   batmap;
+protected:
+  virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
+public:
+  cBatFilter();
+  ~cBatFilter();
+  virtual void SetStatus(bool On);
+  };
+
+#endif //__BAT_H
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/channels.h vdr-1.4.freesat-tva/include/vdr/channels.h
--- vdr-1.4.reel/include/vdr/channels.h	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/include/vdr/channels.h	2008-10-06 18:46:44.403088585 +0100
@@ -120,6 +120,7 @@
   char *shortName;
   char *provider;
   char *portalName;
+  char *defaultAuthority;
   int __BeginData__;
   int frequency; // MHz
   int source;
@@ -169,6 +170,7 @@
   const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; }
   const char *Provider(void) const { return provider; }
   const char *PortalName(void) const { return portalName; }
+  const char *DefaultAuthority(void) const { return defaultAuthority; }
   int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
   int Transponder(void) const;                    ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
   static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
@@ -220,6 +222,7 @@
   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
   void SetName(const char *Name, const char *ShortName, const char *Provider);
   void SetPortalName(const char *PortalName);
+  void SetDefaultAuthority(const char *DefaultAuthority);
   void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
   void SetCaIds(const int *CaIds); // list must be zero-terminated
   void ForceCaIds(const int *CaIds); // list must be zero-terminated // TB: does not check for reserved values
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/device.h vdr-1.4.freesat-tva/include/vdr/device.h
--- vdr-1.4.reel/include/vdr/device.h	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/include/vdr/device.h	2008-10-12 19:31:07.443485932 +0100
@@ -15,6 +15,7 @@
 #include "dvbsubtitle.h"
 #include "eit.h"
 #include "filter.h"
+#include "bat.h"
 #include "nit.h"
 #include "pat.h"
 #include "ringbuffer.h"
@@ -316,6 +317,7 @@
   cPatFilter *patFilter;
   cSdtFilter *sdtFilter;
   cNitFilter *nitFilter;
+  cBatFilter *batFilter;
 protected:
   void StartSectionHandler(void);
        ///< A derived device that provides section data must call
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/epg.h vdr-1.4.freesat-tva/include/vdr/epg.h
--- vdr-1.4.reel/include/vdr/epg.h	2008-09-27 09:50:31.281871864 +0100
+++ vdr-1.4.freesat-tva/include/vdr/epg.h	2008-10-06 18:46:44.403088585 +0100
@@ -66,6 +66,8 @@
   int duration;            // Duration of this event in seconds
   time_t vps;              // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
   time_t seen;             // When this event was last seen in the data stream
+  char *itemCRID;          // Item CRID
+  char *seriesCRID;        // Series CRID
 public:
   cEvent(tEventID EventID);
   ~cEvent();
@@ -84,6 +86,8 @@
   time_t EndTime(void) const { return startTime + duration; }
   int Duration(void) const { return duration; }
   time_t Vps(void) const { return vps; }
+  const char *ItemCRID(void) const { return itemCRID; }
+  const char *SeriesCRID(void) const { return seriesCRID; }
   time_t Seen(void) const { return seen; }
   bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; }
   bool HasTimer(void) const;
@@ -103,6 +107,8 @@
   void SetStartTime(time_t StartTime);
   void SetDuration(int Duration);
   void SetVps(time_t Vps);
+  void SetItemCRID(const char *CRID);
+  void SetSeriesCRID(const char *CRID);
   void SetSeen(void);
   cString ToDescr(void) const;
   void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const;
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/descriptor.c vdr-1.4.freesat-tva/libsi/descriptor.c
--- vdr-1.4.reel/libsi/descriptor.c	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/descriptor.c	2008-10-06 18:46:44.403088585 +0100
@@ -643,6 +643,29 @@
    textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier));
 }
 
+void ContentIdentifierDescriptor::Parse() {
+   int offset=0;
+   data.setPointerAndOffset<const descr_content_identifier>(s, offset);
+   if (s->crid_location == 0) {
+     entry.setData(data+(offset-1), s->crid_length);
+   }
+   else {
+      entry.setData(data+(offset-1), 2);
+   }
+}
+
+int ContentIdentifierDescriptor::getCridType() const {
+   return s->crid_type;
+}
+
+int ContentIdentifierDescriptor::getCridLocation() const {
+   return s->crid_location;
+}
+
+void DefaultAuthorityDescriptor::Parse() {
+   DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority));
+}
+
 void MultilingualNameDescriptor::Parse() {
    nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
 }
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/descriptor.h vdr-1.4.freesat-tva/libsi/descriptor.h
--- vdr-1.4.reel/libsi/descriptor.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/descriptor.h	2008-10-06 18:46:44.403088585 +0100
@@ -361,6 +361,25 @@
    virtual void Parse();
 };
 
+class ContentIdentifierDescriptor : public Descriptor {
+public:
+  String entry;
+  int getCridType() const;
+  int getCridLocation() const;
+//  virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); }
+   private:
+      const descr_content_identifier *s;
+protected:
+  virtual void Parse();
+};
+
+class DefaultAuthorityDescriptor : public Descriptor {
+public:
+   String DefaultAuthority; //ID
+protected:
+   virtual void Parse();
+};
+
 //abstract base class
 class MultilingualNameDescriptor : public Descriptor {
 public:
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/freesat.c vdr-1.4.freesat-tva/libsi/freesat.c
--- vdr-1.4.reel/libsi/freesat.c	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/libsi/freesat.c	2008-10-06 18:46:27.403674056 +0100
@@ -0,0 +1,360 @@
+/* FreeSat Huffman decoder for VDR
+ *
+ * Insert GPL licence
+ */
+
+/* The following features can be controlled:
+ *
+ * FREESAT_DATA_DIRECTORY   - Directory where the freesat.tX files are stored
+ * FREESAT_ARCHIVE_MESSAGES - Store raw huffman strings in /var/tmp/
+ * FREESAT_PRINT_MISSED_DECODING - Append missed hexcodes to end of string
+ * FREESAT_NO_SYSLOG             - Disable use of isyslog
+ */
+
+#include "freesat.h"
+#include <stdlib.h> 
+#include <string.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+
+#define RELOAD_TIME     600      /* Minimum time between checking for updated tables */
+#ifndef FREESAT_DATA_DIRECTORY
+#define FREESAT_DATA_DIRECTORY       "/video/"
+#endif
+#define TABLE1_FILENAME FREESAT_DATA_DIRECTORY "freesat.t1"
+#define TABLE2_FILENAME FREESAT_DATA_DIRECTORY "freesat.t2"
+
+#ifndef FREESAT_NO_SYSLOG
+#include "../tools.h"
+/* Logging via vdr */
+#ifndef isyslog
+#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO,  a) : void() )
+#endif
+void syslog_with_tid(int priority, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
+#else
+#define isyslog(a...) 
+#endif
+
+
+
+struct hufftab { 
+    unsigned int value; 
+    short bits; 
+    char next; 
+}; 
+ 
+#define START   '\0' 
+#define STOP    '\0' 
+#define ESCAPE  '\1' 
+ 
+
+int freesat_decode_error = 0;  /* If set an error has occurred during decoding */
+
+static struct hufftab *tables[2][256];
+static int             table_size[2][256];
+static time_t          load_time = 0;
+
+static void load_file(int tableid, char *filename);
+
+
+static void freesat_table_load()
+{
+    struct stat sb;
+    time_t      now = time(NULL);
+    int         i;
+
+    /* Only reload if we've never loaded, or it's more than 10 minutes away */
+    if ( load_time != 0 ) {
+        int reload = 1;
+        if ( now - load_time < RELOAD_TIME ) {
+            return;
+        }
+        if ( stat(TABLE1_FILENAME,&sb) == 0 ) {
+            if ( sb.st_mtime < load_time ) {
+                if ( stat(TABLE2_FILENAME,&sb) == 0 ) {
+                    if ( sb.st_mtime < load_time ) {
+                        reload = 0;
+                    }
+                }
+            }
+        }
+        if ( reload == 0 ) {
+            return;
+        }
+    } 
+
+    /* Reset the load time */
+    load_time = now;
+
+
+    /* Reset all the tables */
+    for ( i = 0 ; i < 256; i++ ) {
+        if ( tables[0][i] != NULL ) {
+            free(tables[0][i]);
+        }
+        if ( tables[1][i] ) {
+            free(tables[1][i]);
+        }
+        tables[0][i] = NULL;
+        tables[1][i] = NULL;
+        table_size[0][i] = 0;
+        table_size[1][i] = 0;
+    }
+
+    /* And load the files up */
+    load_file(1, TABLE1_FILENAME);
+    load_file(2, TABLE2_FILENAME);
+}
+
+
+/** \brief Convert a textual character description into a value
+ *
+ *  \param str - Encoded (in someway) string
+ *
+ *  \return Raw character
+ */
+static unsigned char resolve_char(char *str)
+{
+    int val;
+    if ( strcmp(str,"ESCAPE") == 0 ) {
+        return ESCAPE;
+    } else if ( strcmp(str,"STOP") == 0 ) {
+        return STOP;
+    } else if ( strcmp(str,"START") == 0 ) {
+        return START;
+    } else if ( sscanf(str,"0x%02x", &val) == 1 ) {
+        return val;
+    }
+    return str[0];
+
+
+}
+
+
+/** \brief Decode a binary string into a value
+ *
+ *  \param binary - Binary string to decode
+ *
+ *  \return Decoded value
+ */
+static unsigned long decode_binary(char *binary)
+{
+    unsigned long mask = 0x80000000;
+    unsigned long maskval = 0;
+    unsigned long val = 0;
+    size_t i;
+
+    for ( i = 0; i < strlen(binary); i++ ) {
+        if ( binary[i] == '1' ) {
+            val |= mask;
+        }
+        maskval |= mask;
+        mask >>= 1;
+    }
+    return val;
+}
+
+/** \brief Load an individual freesat data file
+ *
+ *  \param tableid   - Table id that should be loaded
+ *  \param filename  - Filename to load
+ */
+static void load_file(int tableid, char *filename)
+{
+    char     buf[1024];
+    char    *from, *to, *binary; 
+    FILE    *fp;
+
+    tableid--;
+
+    if ( ( fp = fopen(filename,"r") ) != NULL ) {
+        isyslog("Loading table %d Filename <%s>",tableid + 1, filename);
+
+        while ( fgets(buf,sizeof(buf),fp) != NULL ) {
+            from = binary = to = NULL;
+            int elems = sscanf(buf,"%a[^:]:%a[^:]:%a[^:]:", &from, &binary, &to);
+            if ( elems == 3 ) {
+                int bin_len = strlen(binary);
+                int from_char = resolve_char(from);
+                char to_char = resolve_char(to);
+                unsigned long bin = decode_binary(binary);
+                int i = table_size[tableid][from_char]++;
+
+                tables[tableid][from_char] = (struct hufftab *)realloc(tables[tableid][from_char], (i+1) * sizeof(tables[tableid][from_char][0]));
+                tables[tableid][from_char][i].value = bin;
+                tables[tableid][from_char][i].next = to_char;
+                tables[tableid][from_char][i].bits = bin_len;
+                free(from);
+                free(to);
+                free(binary);
+            }
+        }
+    } else {
+        isyslog("Cannot load <%s> for table %d",filename,tableid + 1);
+    }
+}
+
+#ifdef FREESAT_ARCHIVE_MESSAGES
+static void write_message(const unsigned char *src, size_t size)
+{
+    static FILE *fp = NULL;
+    static int  written = 0;
+    static int  suffix = 0;
+    char buf[32768];
+
+    if ( written > 10000 ) {
+        fclose(fp);
+        fp = NULL;
+        written = 0;
+    }
+    if ( fp == NULL ) {
+        snprintf(buf,sizeof(buf),"mkdir -p /var/tmp/%d",getpid());
+        system(buf);
+
+        snprintf(buf,sizeof(buf),"/var/tmp/%d/freesat.%d",getpid(),suffix);
+        fp = fopen(buf, "w");
+        suffix = (suffix + 1)%1000;
+    }
+    size_t offs = 0;
+    size_t i;
+    for (  i = 0; i < size; i++ ) {
+        offs += snprintf(buf + offs, sizeof(buf) - offs, "%02x", src[i]);
+    }
+    fprintf(fp, "%s\n",buf);
+    fflush(fp);
+    written++;
+}
+#endif
+
+/** \brief Decode an EPG string as necessary
+ *
+ *  \param src - Possibly encoded string
+ *  \param size - Size of the buffer
+ *
+ *  \retval NULL - Can't decode
+ *  \return A decoded string
+ */
+char  *freesat_huffman_decode( const unsigned char *src, size_t size) 
+{ 
+    int tableid;
+
+    freesat_decode_error = 0;
+
+#ifdef FREESAT_ARCHIVE_MESSAGES
+    write_message(src, size);
+#endif
+    if (src[0] == 0x1f && (src[1] == 1 || src[1] == 2)) {
+        int    uncompressed_len = 30;
+        char * uncompressed = (char *)calloc(1,uncompressed_len + 1);
+        unsigned value = 0, byte = 2, bit = 0; 
+        int p = 0; 
+        int lastch = START; 
+
+        tableid = src[1] - 1;
+        while (byte < 6 && byte < size) {
+            value |= src[byte] << ((5-byte) * 8); 
+            byte++; 
+        } 
+  
+        freesat_table_load();   /**< Load the tables as necessary */
+
+        do {
+            int found = 0; 
+            unsigned bitShift = 0; 
+            if (lastch == ESCAPE) {
+                char nextCh = (value >> 24) & 0xff; 
+                found = 1; 
+                // Encoded in the next 8 bits. 
+                // Terminated by the first ASCII character. 
+                bitShift = 8; 
+                if ((nextCh & 0x80) == 0) 
+                    lastch = nextCh; 
+                if (p >= uncompressed_len) {
+                    uncompressed_len += 10;
+                    uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1);
+                }
+                uncompressed[p++] = nextCh; 
+                uncompressed[p] = 0;
+            } else {
+                int j;
+                for ( j = 0; j < table_size[tableid][lastch]; j++) {
+                    unsigned mask = 0, maskbit = 0x80000000; 
+                    short kk;
+                    for ( kk = 0; kk < tables[tableid][lastch][j].bits; kk++) {
+                        mask |= maskbit; 
+                        maskbit >>= 1; 
+                    } 
+                    if ((value & mask) == tables[tableid][lastch][j].value) {
+                        char nextCh = tables[tableid][lastch][j].next; 
+                        bitShift = tables[tableid][lastch][j].bits; 
+                        if (nextCh != STOP && nextCh != ESCAPE) {
+                            if (p >= uncompressed_len) {
+                                uncompressed_len += 10;
+                                uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1);
+                            }
+                            uncompressed[p++] = nextCh; 
+                            uncompressed[p] = 0;
+                        } 
+                        found = 1;
+                        lastch = nextCh; 
+                        break; 
+                    } 
+                } 
+            } 
+            if (found) {
+                // Shift up by the number of bits. 
+                unsigned b;
+                for ( b = 0; b < bitShift; b++) 
+                { 
+                    value = (value << 1) & 0xfffffffe; 
+                    if (byte < size) 
+                        value |= (src[byte] >> (7-bit)) & 1; 
+                    if (bit == 7) 
+                    { 
+                        bit = 0; 
+                        byte++; 
+                    } 
+                    else bit++; 
+                } 
+            } else {
+#ifdef FREESAT_PRINT_MISSED_DECODING
+                char  temp[1020];
+                size_t   tlen = 0;
+
+                tlen = snprintf(temp,sizeof(temp),"...[%02x][%02x][%02x][%02x]",(value >> 24 ) & 0xff, (value >> 16 ) & 0xff, (value >> 8) & 0xff, value &0xff);
+                do {
+                    // Shift up by the number of bits. 
+                    unsigned b;
+                    for ( b = 0; b < 8; b++) {
+                        value = (value << 1) & 0xfffffffe; 
+                        if (byte < size) 
+                            value |= (src[byte] >> (7-bit)) & 1; 
+                        if (bit == 7) {
+                            bit = 0; 
+                            byte++; 
+                        } 
+                        else bit++; 
+                    } 
+                    tlen += snprintf(temp+tlen, sizeof(temp) - tlen,"[%02x]", value & 0xff);
+                } while ( tlen < sizeof(temp) - 6 && byte <  size);
+                
+                uncompressed_len += tlen;
+                uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1);
+                freesat_decode_error = 1;
+                strcpy(uncompressed + p, temp);
+#endif
+                isyslog("Missing table %d entry: <%s>",tableid + 1, uncompressed);
+                // Entry missing in table. 
+                return uncompressed; 
+            } 
+        } while (lastch != STOP && value != 0); 
+ 
+        return uncompressed;
+    } 
+    return NULL; 
+} 
+
+
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/freesat.h vdr-1.4.freesat-tva/libsi/freesat.h
--- vdr-1.4.reel/libsi/freesat.h	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/libsi/freesat.h	2008-10-06 18:46:27.403674056 +0100
@@ -0,0 +1,12 @@
+
+
+#ifndef FREESAT_H
+#define FREESAT_H
+
+#include <sys/types.h>
+
+extern char *freesat_huffman_decode(const unsigned char *compressed, size_t size); 
+
+#endif
+
+
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/headers.h vdr-1.4.freesat-tva/libsi/headers.h
--- vdr-1.4.reel/libsi/headers.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/headers.h	2008-10-06 18:46:44.403088585 +0100
@@ -1673,11 +1673,39 @@
    u_char descriptor_length                      :8;
 };
 
+struct entry_tva_id {
+   u_char tva_id_hi                              :8;
+   u_char tva_id_lo                              :8;
+#if BYTE_ORDER == BIG_ENDIAN
+   u_char reserved                               :5;
+   u_char running_status                         :3;
+#else
+   u_char running_status                         :3;
+   u_char reserved                               :5;
+#endif
+};
+
+
 /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */
 
 struct descr_content_identifier {
    u_char descriptor_tag                         :8;
    u_char descriptor_length                      :8;
+#if BYTE_ORDER == BIG_ENDIAN
+   u_char crid_type                              :6;
+   u_char crid_location                          :2;
+#else
+   u_char crid_location                          :2;
+   u_char crid_type                              :6;
+#endif
+  union {
+    u_char crid_length                           :8;
+    u_char crid_ref_hi                           :8;
+  };
+  union {
+    u_char crid_byte                             :8;
+    u_char crid_ref_lo                           :8;
+  };
 };
 
 /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/Makefile vdr-1.4.freesat-tva/libsi/Makefile
--- vdr-1.4.reel/libsi/Makefile	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/Makefile	2008-10-06 18:57:22.381462928 +0100
@@ -17,13 +17,14 @@
 
 INCLUDES +=
 
-DEFINES +=
+DEFINES += -DFREESAT_DATA_DIRECTORY=\"/etc/vdr/\"
+DEFINES += -DFREESAT_PRINT_MISSED_DECODING -DFREESAT_ARCHIVE_MESSAGES
 
 LIBS +=
 
 ### The object files (add further files here):
 
-OBJS = util.o si.o section.o descriptor.o
+OBJS = util.o si.o section.o descriptor.o freesat.o
 
 ### Implicit rules:
 
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/si.c vdr-1.4.freesat-tva/libsi/si.c
--- vdr-1.4.reel/libsi/si.c	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/si.c	2008-10-12 20:16:38.427825418 +0100
@@ -15,7 +15,9 @@
 #include <iconv.h>
 #include <malloc.h>
 #include <string.h>
+#include <stdio.h>
 #include "descriptor.h"
+#include "freesat.h"
 
 namespace SI {
 
@@ -395,6 +397,8 @@
   return false;
 }
 
+#include <stdio.h>
+
 // originally from libdtv, Copyright Rolf Hakenes <hakenes@hippomi.de>
 void String::decodeText(char *buffer, int size) {
    const unsigned char *from=data.getData(0);
@@ -405,6 +409,21 @@
       return;
       }
    bool singleByte;
+
+
+   if ( from[0] == 0x1f ) {
+       char *temp = freesat_huffman_decode(from, len);
+       if (temp ) {
+           len = strlen(temp);
+           len = len < size - 1 ? len : size - 1;
+           strncpy(buffer, temp, len);
+           buffer[len] = 0;
+           free(temp);
+           return;
+       }
+   }
+
+
    const char *cs = getCharacterTable(from, len, &singleByte);
    // FIXME Need to make this UTF-8 aware (different control codes).
    // However, there's yet to be found a broadcaster that actually
@@ -434,6 +453,7 @@
 
 void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) {
    const unsigned char *from=data.getData(0);
+   unsigned char *temp = NULL;
    char *to=buffer;
    char *toShort=shortVersion;
    int IsShortName=0;
@@ -443,6 +463,14 @@
       *toShort = '\0';
       return;
       }
+
+
+   if ( from[0] == 0x1f ) {
+       temp = ( unsigned char *)freesat_huffman_decode(from, len);
+       from = temp;
+   }
+
+
    bool singleByte;
    const char *cs = getCharacterTable(from, len, &singleByte);
    // FIXME Need to make this UTF-8 aware (different control codes).
@@ -480,6 +508,7 @@
       if (convertCharacterTable(shortVersion, strlen(shortVersion), convShortVersion, sizeof(convShortVersion), cs))
          strncpy(shortVersion, convShortVersion, strlen(convShortVersion) + 1);
    }
+   if (temp) free(temp);
 }
 
 Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor) {
@@ -599,6 +628,12 @@
          case ExtensionDescriptorTag:
             d=new ExtensionDescriptor();
             break;
+         case ContentIdentifierDescriptorTag:
+            d=new ContentIdentifierDescriptor();
+            break;
+         case DefaultAuthorityDescriptorTag:
+            d=new DefaultAuthorityDescriptor();
+            break;
 
          //note that it is no problem to implement one
          //of the unimplemented descriptors.
@@ -641,10 +676,8 @@
          case TransportStreamDescriptorTag:
 
          //defined in ETSI EN 300 468 v 1.7.1
-         case DefaultAuthorityDescriptorTag:
          case RelatedContentDescriptorTag:
          case TVAIdDescriptorTag:
-         case ContentIdentifierDescriptorTag:
          case TimeSliceFecIdentifierDescriptorTag:
          case ECMRepetitionRateDescriptorTag:
          case EnhancedAC3DescriptorTag:
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/si.h vdr-1.4.freesat-tva/libsi/si.h
--- vdr-1.4.reel/libsi/si.h	2008-09-27 09:50:29.781782204 +0100
+++ vdr-1.4.freesat-tva/libsi/si.h	2008-10-12 03:59:25.264431644 +0100
@@ -28,7 +28,7 @@
                TableIdNIT_other  = 0x41, //network information section, other network
                TableIdSDT = 0x42, //service description section
                TableIdSDT_other  = 0x46,
-               TableIdBAT = 0x46, //bouquet association section
+               TableIdBAT = 0x4a, //bouquet association section
                TableIdEIT_presentFollowing = 0x4E, //event information section
                TableIdEIT_presentFollowing_other = 0x4F,
                //range from 0x50 to 0x5F
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/Makefile vdr-1.4.freesat-tva/Makefile
--- vdr-1.4.reel/Makefile	2008-09-27 17:51:41.052673227 +0100
+++ vdr-1.4.freesat-tva/Makefile	2008-10-12 18:21:52.467746393 +0100
@@ -56,7 +56,8 @@
        receiver.o recorder.o recording.o reelcamlink.o reelboxbase.o remote.o remux.o  \
        ringbuffer.o sdt.o sections.o skinclassic.o skins.o skinsttng.o sources.o spu.o status.o \
        svdrp.o themes.o thread.o \
-       timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o dvdIndex.o
+       timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o dvdIndex.o \
+	bat.o
 
 
 # SUBMENU + TinyXML +HELP
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/README.freesat vdr-1.4.freesat-tva/README.freesat
--- vdr-1.4.reel/README.freesat	1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.4.freesat-tva/README.freesat	2008-10-06 18:46:26.903691289 +0100
@@ -0,0 +1,33 @@
+Freesat EPG patch for vdr
+
+Installation:
+
+1. Apply the patch
+2. make clean && make vdr
+3. Install vdr
+4. Copy freesat.t1 and freesat.t2 to /etc/vdr
+
+Restart VDR - enjoy a 7 day EPG with Freesat.
+
+Updates:
+
+VDR will reload the freesat.t1 and freesat.t2 every 10 minutes should the contents
+of them be changed.
+
+Advance configuration:
+
+1. Edit libsi/Makefile and add the following to DEFINES:
+
+  FREESAT_DATA_DIRECTORY   - Directory where the freesat.tX files are stored
+  FREESAT_ARCHIVE_MESSAGES - Store raw huffman strings in /var/tmp/pid/freesat.X
+  FREESAT_PRINT_MISSED_DECODING - Append missed hexcodes to end of string
+  FREESAT_NO_SYSLOG             - Disable use of isyslog
+
+Credits:
+
+Original code from MythTV
+Huffman codes updated with data from mitsubushi, Jochen Mann and dom
+
+Enjoy,
+
+dom /at/ suborbital.org.uk
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/sdt.c vdr-1.4.freesat-tva/sdt.c
--- vdr-1.4.reel/sdt.c	2008-09-27 09:50:30.781842057 +0100
+++ vdr-1.4.freesat-tva/sdt.c	2008-10-12 20:15:06.428361226 +0100
@@ -126,6 +126,14 @@
                      }
                  }
                  break;
+            case SI::DefaultAuthorityDescriptorTag: {
+                 SI::DefaultAuthorityDescriptor *da = (SI::DefaultAuthorityDescriptor *)d;
+                   char DaBuf[1024];
+                   da->DefaultAuthority.getText(DaBuf, sizeof(DaBuf));
+		   if ( channel ) {
+                      channel->SetDefaultAuthority(DaBuf);
+		   } 
+              }
             default: ;
             }
           delete d;
Binary files vdr-1.4.reel/tinyxml/libtinyxml.a and vdr-1.4.freesat-tva/tinyxml/libtinyxml.a differ
Binary files vdr-1.4.reel/vdr and vdr-1.4.freesat-tva/vdr differ
diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/vdr.5 vdr-1.4.freesat-tva/vdr.5
--- vdr-1.4.reel/vdr.5	2008-09-27 09:50:30.781842057 +0100
+++ vdr-1.4.freesat-tva/vdr.5	2008-10-06 18:46:44.403088585 +0100
@@ -177,6 +177,9 @@
 .B RID
 The Radio ID of this channel (typically 0, may be used to distinguish channels where
 NID, TID and SID are all equal).
+.TP
+.B Default Authority
+The Default Authority for CRIDs on this channel (TVAnytime).
 .PP
 A particular channel can be uniquely identified by its \fBchannel\ ID\fR,
 which is a string that looks like this:
@@ -612,6 +615,8 @@
 \fBD\fR@<description>
 \fBX\fR@<stream> <type> <language> <descr>
 \fBV\fR@<vps time>
+\fBI\fR@<item CRID>
+\fBR\fR@<series CRID>
 \fBe\fR@
 \fBc\fR@
 .TE
@@ -645,6 +650,8 @@
 <language>     @is the three letter language code (optionally two codes, separated by '+')
 <descr>        @is the description of this stream component
 <vps time>     @is the Video Programming Service time of this event
+<item CRID>    @is the CRID of this event (TVAnytime)
+<series CRID>  @is the CRID of the series which this event is part of (TVAnytime)
 .TE
 
 This file will be read at program startup in order to restore the results of
