diff -Naur /usr/src_original/commands/reboot/Makefile /usr/src/commands/reboot/Makefile
--- /usr/src_original/commands/reboot/Makefile	2005-09-07 08:43:23.000000000 +0000
+++ /usr/src/commands/reboot/Makefile	2009-10-04 23:53:24.000000000 +0000
@@ -1,8 +1,8 @@
 # Makefile for shutdown / halt / reboot.
 
 CFLAGS=$(OPT) -D_MINIX -D_POSIX_SOURCE
-LDFLAGS=-i
-CC=exec cc
+LDFLAGS=-i 
+CC=exec cc  
 
 PROGRAMS=	shutdown halt tinyhalt
 MANUALS=	shutdown.8 halt.8 reboot.2 reboot.8
@@ -14,7 +14,7 @@
 	install -S 4kw $@
 
 halt:	halt.o log.o
-	$(CC) $(LDFLAGS) -o halt halt.o log.o
+	$(CC) $(LDFLAGS) -o halt halt.o log.o -lrt
 	install -S 4kw $@
 
 tinyhalt:	tinyhalt.c
diff -Naur /usr/src_original/commands/reboot/halt.c /usr/src/commands/reboot/halt.c
--- /usr/src_original/commands/reboot/halt.c	2006-04-03 14:50:07.000000000 +0000
+++ /usr/src/commands/reboot/halt.c	2009-10-04 23:53:24.000000000 +0000
@@ -21,6 +21,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
+#include <minix/rt.h>
 
 void write_log _ARGS(( void ));
 void usage _ARGS(( void ));
@@ -47,7 +48,7 @@
   struct stat dummy;
   char *monitor_code = "";
   pid_t pid;
-
+  
   if ((prog = strrchr(argv[0],'/')) == NULL) prog = argv[0]; else prog++;
 
   if (strcmp(prog, "halt") == 0) flag = RBT_HALT;
@@ -118,6 +119,14 @@
   /* Tell init to stop spawning getty's. */
   kill(1, SIGTERM);
 
+  /* Build scheduling bridge.
+   * This allows system processes to get a lower priority than
+   * real-time processes. Otherwise system will not shutdown properly.
+   */
+  if (rt_set_sched_bridge(1) != 0) {
+      printf("Setting up scheduling bridge failed!\n");
+  }    
+  
   /* Give everybody a chance to die peacefully. */
   printf("Sending SIGTERM to all processes ...\n");
   kill(-1, SIGTERM);
diff -Naur /usr/src_original/commands/simple/Makefile /usr/src/commands/simple/Makefile
--- /usr/src_original/commands/simple/Makefile	2006-04-12 21:51:01.000000000 +0000
+++ /usr/src/commands/simple/Makefile	2009-10-04 23:53:25.000000000 +0000
@@ -212,6 +212,13 @@
 	writeisofs \
 	xargs \
 	yes \
+	edftop \
+	rt_set_sched_edf \
+	rt_set_sched_rm_pu \
+	rt_set_sched_rm_pnu \
+	klog_set_cs \
+	klog_set_ci \
+	klog_copy \
 	#
 
 all:	$(ALL)
@@ -901,6 +908,33 @@
 	$(CCLD) -o $@ $?
 	@install -S 4kw $@
 
+edftop:	edftop.c
+	$(CCLD) -o $@ $? -lcurses -lm
+
+rt_set_sched_edf:	rt_set_sched_edf.c
+	$(CCLD) -o $@ $? -lrt
+	@install -S 4kw $@
+
+rt_set_sched_rm_pu:	rt_set_sched_rm_pu.c
+	$(CCLD) -o $@ $? -lrt
+	@install -S 4kw $@
+
+rt_set_sched_rm_pnu:	rt_set_sched_rm_pnu.c
+	$(CCLD) -o $@ $? -lrt
+	@install -S 4kw $@
+
+klog_set_cs:	klog_set_cs.c
+	$(CCLD) -o $@ $? -lklog
+	@install -S 4kw $@
+
+klog_set_ci:	klog_set_ci.c
+	$(CCLD) -o $@ $? -lklog
+	@install -S 4kw $@
+
+klog_copy:	klog_copy.c
+	$(CCLD) -o $@ $? -lklog
+	@install -S 4kw $@
+
 install:	\
 	/usr/bin/add_route \
 		/usr/bin/del_route \
@@ -1116,6 +1150,13 @@
 	/bin/pwd \
 	/bin/sync \
 	/bin/umount \
+	/usr/bin/edftop \
+	/usr/bin/rt_set_sched_edf \
+	/usr/bin/rt_set_sched_rm_pu \
+	/usr/bin/rt_set_sched_rm_pnu \
+	/usr/bin/klog_set_cs \
+	/usr/bin/klog_set_ci \
+	/usr/bin/klog_copy \
 	#
 
 /usr/bin/add_route:	add_route
@@ -1728,5 +1769,26 @@
 /bin/umount:	/usr/bin/umount
 	install -lcs $? $@
 
+/usr/bin/edftop:	edftop
+	install -cs -o bin $? $@
+
+/usr/bin/rt_set_sched_edf:	rt_set_sched_edf
+	install -cs -o bin $? $@
+
+/usr/bin/rt_set_sched_rm_pu:	rt_set_sched_rm_pu
+	install -cs -o bin $? $@
+
+/usr/bin/rt_set_sched_rm_pnu:	rt_set_sched_rm_pnu
+	install -cs -o bin $? $@
+
+/usr/bin/klog_set_cs:	klog_set_cs
+	install -cs -o bin $? $@
+
+/usr/bin/klog_set_ci:	klog_set_ci
+	install -cs -o bin $? $@
+
+/usr/bin/klog_copy:	klog_copy
+	install -cs -o bin $? $@
+
 clean:
 	rm -rf $(ALL) a.out core
diff -Naur /usr/src_original/commands/simple/edftop.c /usr/src/commands/simple/edftop.c
--- /usr/src_original/commands/simple/edftop.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/edftop.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,367 @@
+
+/* Author: Ben Gras <beng@few.vu.nl>  17 march 2006 */
+
+/* Modified top to display information for edf processes
+ * called edftop, by Bianco Zandbergen (20 june 2009)
+ */
+#define _MINIX 1
+#define _POSIX_SOURCE 1
+
+#include <stdio.h>
+#include <pwd.h>
+#include <curses.h>
+#include <timers.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <termcap.h>
+#include <termios.h>
+#include <time.h>
+#include <string.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include <sys/ioc_tty.h>
+#include <sys/times.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/select.h>
+
+#include <minix/ipc.h>
+#include <minix/config.h>
+#include <minix/type.h>
+#include <minix/const.h>
+
+#include <math.h>
+
+#include "../../servers/pm/mproc.h"
+#include "../../kernel/const.h"
+#include "../../kernel/proc.h"
+
+#define  TC_BUFFER  1024        /* Size of termcap(3) buffer    */
+#define  TC_STRINGS  200        /* Enough room for cm,cl,so,se  */
+
+char *Tclr_all;
+
+int print_memory(struct pm_mem_info *pmi)
+{
+        int h;
+        int largest_bytes = 0, total_bytes = 0; 
+        for(h = 0; h < _NR_HOLES; h++) {
+                if(pmi->pmi_holes[h].h_base && pmi->pmi_holes[h].h_len) {
+                        int bytes;
+                        bytes = pmi->pmi_holes[h].h_len << CLICK_SHIFT;
+                        if(bytes > largest_bytes) largest_bytes = bytes;
+                        total_bytes += bytes;
+                }
+        }
+
+    printf("Mem: %dK Free, %dK Contiguous Free\n",
+        total_bytes/1024, largest_bytes/1024);
+
+    return 1;
+}
+
+int print_load(double *loads, int nloads)
+{
+    int i;
+    printf("load averages: ");
+    for(i = 0; i < nloads; i++)
+        printf("%s %.2f", (i > 0) ? "," : "", loads[i]);
+    printf("\n");
+    return 1;
+}
+
+#define PROCS (NR_PROCS+NR_TASKS)
+
+int print_proc_summary(struct proc *proc)
+{
+    int p, alive, running, sleeping;
+
+    alive = running = sleeping = 0;
+
+    for(p = 0; p < PROCS; p++) {
+        if(p - NR_TASKS == IDLE)
+            continue;
+        if(proc[p].p_rts_flags & SLOT_FREE)
+            continue;
+        alive++;
+        if(proc[p].p_rts_flags & ~SLOT_FREE)
+            sleeping++;
+        else
+            running++;
+    }
+    printf("%d processes: %d running, %d sleeping\n",
+        alive, running, sleeping);
+    return 1;
+}
+
+static struct tp {
+    struct proc *p;
+    int ticks;
+} tick_procs[PROCS];
+
+int cmp_ticks(const void *v1, const void *v2)
+{
+    struct tp *p1 = (struct tp *) v1, *p2 = (struct tp *) v2;
+    if(p1->ticks < p2->ticks)
+        return 1;
+    if(p1->ticks > p2->ticks)
+        return -1;
+    if(p1->p->p_nr < p2->p->p_nr)
+        return -1;
+    if(p1->p->p_nr > p2->p->p_nr)
+        return 1;
+    return 0;
+}
+
+void print_procs(int maxlines,
+    struct proc *proc1, struct proc *proc2, int dt,
+    struct mproc *mproc)
+{
+    int p, nprocs, tot=0;
+    int idleticks = 0, kernelticks = 0, systemticks = 0;
+
+    if(dt < 1) return;
+
+    for(p = nprocs = 0; p < PROCS; p++) {
+        if(proc2[p].p_rts_flags & SLOT_FREE)
+            continue;
+        tick_procs[nprocs].p = proc2 + p;
+        if(proc1[p].p_endpoint == proc2[p].p_endpoint) {
+            tick_procs[nprocs].ticks =
+                proc2[p].p_user_time-proc1[p].p_user_time;
+        } else {
+            tick_procs[nprocs].ticks =
+                proc2[p].p_user_time;
+        }
+        if(p-NR_TASKS == IDLE) {
+            idleticks = tick_procs[nprocs].ticks;
+            continue;
+        }
+
+        /* Kernel task time, not counting IDLE */
+        if(proc2[p].p_nr < 0)
+            kernelticks += tick_procs[nprocs].ticks;
+        else if(mproc[proc2[p].p_nr].mp_procgrp == 0)
+            systemticks += tick_procs[nprocs].ticks;
+        nprocs++;
+    }
+
+    qsort(tick_procs, nprocs, sizeof(tick_procs[0]), cmp_ticks);
+
+    printf("CPU states: %6.2f%% user, %6.2f%% system, %6.2f%% kernel, %6.2f%% idle",
+        100.0*(dt-systemticks-kernelticks-idleticks)/dt,
+        100.0*systemticks/dt,
+        100.0*kernelticks/dt,
+        100.0*idleticks/dt);
+    printf("\n\n");
+    maxlines -= 2;
+
+    printf("PNR   ENDPT  ST PERIOD CTIME  PRD#  TLP TLNP     USED RESERVED  %%U MD COMMAND\n");
+    maxlines--;
+
+    /* prints EDF process list */
+    for(p=0; p < PROCS; p++) {
+        if (proc2[p].p_rts_flags & SLOT_FREE) continue;
+       
+        if (proc2[p].p_rt != 1) continue;
+        
+        if (maxlines-- <= 0) break;
+        
+        /* print state */
+        printf("%3d", proc2[p].p_nr);
+
+        /* print endpoint */
+        printf(" %7d", proc2[p].p_endpoint);
+        
+        /* print state */
+        if (proc2[p].p_rts_flags == 0) {
+            printf(" RUN");
+        } else if (proc2[p].p_rts_flags & NEXTPERIOD) {
+            printf(" WNP");
+        } else if (proc2[p].p_rts_flags != 0) {
+            printf(" BLK");
+        } else {    
+            printf("       ");
+        }    
+
+        /* print period in ticks */
+        printf(" %6d", proc2[p].p_rt_period);
+
+        /* print calculation time per period in ticks */
+        printf(" %5d", proc2[p].p_rt_calctime);
+
+        /* print current period number (unfinished period) */
+        printf(" %5u", proc2[p].p_rt_periodnr);
+
+        /* print calculation time left in current period */
+        printf(" %4d", proc2[p].p_rt_ticksleft);
+
+        /* print ticks till next period start (deadline) */
+        printf(" %4d", proc2[p].p_rt_nextperiod);
+
+        /* print total used ticks and total reserved ticks */
+        printf(" %8u %8u", proc2[p].p_rt_totalused, proc2[p].p_rt_totalreserved);
+
+        /* print percentage of ticks used */
+        if (proc2[p].p_rt_totalused == 0 || proc2[p].p_rt_totalreserved == 0) {
+            printf("  ??"); /* prevent divide by zero */
+        } else {
+            printf(" %3.0f", (float)((float)(proc2[p].p_rt_totalused / (float)proc2[p].p_rt_totalreserved) * (float)100));
+        }
+        
+        /* print missed deadlines */
+        printf(" %2u", proc2[p].p_rt_missed_dl);
+        
+        /* print process name */
+        printf(" %s\n", proc2[p].p_name);
+    }
+}
+
+void showtop(int r)
+{
+#define NLOADS 3
+    double loads[NLOADS];
+    int nloads, i, p, lines = 0;
+    static struct proc prev_proc[PROCS], proc[PROCS];
+    struct winsize winsize;
+        static struct pm_mem_info pmi;
+    static int prev_uptime, uptime;
+    static struct mproc mproc[NR_PROCS];
+    struct tms tms;
+
+    uptime = times(&tms);
+
+    if(ioctl(STDIN_FILENO, TIOCGWINSZ, &winsize) != 0) {
+        perror("TIOCGWINSZ");
+        fprintf(stderr, "TIOCGWINSZ failed\n");
+        exit(1);
+    }
+
+        if(getsysinfo(PM_PROC_NR, SI_MEM_ALLOC, &pmi) < 0) {
+        fprintf(stderr, "getsysinfo() for SI_MEM_ALLOC failed.\n");
+        exit(1);;
+    }
+
+    if(getsysinfo(PM_PROC_NR, SI_KPROC_TAB, proc) < 0) {
+        fprintf(stderr, "getsysinfo() for SI_KPROC_TAB failed.\n");
+        exit(1);
+    }
+
+    if(getsysinfo(PM_PROC_NR, SI_PROC_TAB, mproc) < 0) {
+        fprintf(stderr, "getsysinfo() for SI_PROC_TAB failed.\n");
+        exit(1);
+    }
+
+    if((nloads = getloadavg(loads, NLOADS)) != NLOADS) {
+        fprintf(stderr, "getloadavg() failed - %d loads\n", nloads);
+        exit(1);
+    }
+
+
+    printf("%s", Tclr_all);
+
+    lines += print_load(loads, NLOADS);
+    lines += print_proc_summary(proc);
+    lines += print_memory(&pmi);
+
+    if(winsize.ws_row > 0) r = winsize.ws_row;
+
+    print_procs(r - lines - 2, prev_proc,
+        proc, uptime-prev_uptime, mproc);
+
+    memcpy(prev_proc, proc, sizeof(prev_proc));
+    prev_uptime = uptime;
+}
+
+void init(int *rows)
+{
+    char  *term;
+    static char   buffer[TC_BUFFER], strings[TC_STRINGS];
+    char *s = strings, *v;
+
+    *rows = 0;
+
+    if(!(term = getenv("TERM"))) {
+        fprintf(stderr, "No TERM set\n");
+        exit(1);
+    }
+
+    if ( tgetent( buffer, term ) != 1 ) {
+        fprintf(stderr, "tgetent failed for term %s\n", term);
+        exit(1);
+    }
+
+    if ( (Tclr_all = tgetstr( "cl", &s )) == NULL )
+        Tclr_all = "\f";
+
+    if((v = tgetstr ("li", &s)) != NULL)
+        sscanf(v, "%d", rows);
+    if(*rows < 1) *rows = 24;
+    if(!initscr()) {
+        fprintf(stderr, "initscr() failed\n");
+        exit(1);
+    }
+    cbreak();
+    nl();
+}
+
+void sigwinch(int sig) { }
+
+int main(int argc, char *argv[])
+{
+    int r, c, s = 0, orig;
+
+    init(&r);
+
+    while((c=getopt(argc, argv, "s:")) != EOF) {
+        switch(c) {
+            case 's':
+                s = atoi(optarg);
+                break;
+            default:
+                fprintf(stderr,
+                    "Usage: %s [-s<secdelay>]\n", argv[0]);
+                return 1;
+        }
+    }
+
+    if(s < 1) 
+        s = 2;
+
+    /* Catch window size changes so display is updated properly right away. */
+    signal(SIGWINCH, sigwinch);
+
+    while(1) {
+        fd_set fds;
+        int ns;
+        struct timeval tv;
+        showtop(r);
+        tv.tv_sec = s;
+        tv.tv_usec = 0;
+
+        FD_ZERO(&fds);
+        FD_SET(STDIN_FILENO, &fds);
+        if((ns=select(STDIN_FILENO+1, &fds, NULL, NULL, &tv)) < 0
+            && errno != EINTR) {
+            perror("select");
+            sleep(1);
+        }
+
+        if(ns > 0 && FD_ISSET(STDIN_FILENO, &fds)) {
+            char c;
+            if(read(STDIN_FILENO, &c, 1) == 1) {
+                switch(c) {
+                    case 'q':
+                        return 0;
+                        break;
+                }
+            }
+        }
+    }
+
+    return 0;
+}
+
diff -Naur /usr/src_original/commands/simple/klog_copy.c /usr/src/commands/simple/klog_copy.c
--- /usr/src_original/commands/simple/klog_copy.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/klog_copy.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <minix/klog.h>
+
+struct klog_entry klog[KLOG_SIZE];
+
+int main(void)
+{
+    int i;
+
+    if (klog_copy(&klog) != 0) {
+        printf("Copying kernel log failed!\n");
+        return -1;
+    }
+
+    for (i=0;i<KLOG_SIZE;i++) {
+        printf("%d %d %s\n", klog[i].klog_time, klog[i].klog_endpoint, klog[i].klog_name);
+    }
+
+    return 0;
+        
+}
diff -Naur /usr/src_original/commands/simple/klog_set_ci.c /usr/src/commands/simple/klog_set_ci.c
--- /usr/src_original/commands/simple/klog_set_ci.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/klog_set_ci.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <minix/klog.h>
+
+int main(void)
+{
+    if (klog_set(KLOG_CLOCKINT) != 0) {
+        printf("Enabling kernel log (on clock interrupt) failed!\n");
+        return -1;
+    }
+
+    return 0;
+}
diff -Naur /usr/src_original/commands/simple/klog_set_cs.c /usr/src/commands/simple/klog_set_cs.c
--- /usr/src_original/commands/simple/klog_set_cs.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/klog_set_cs.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <minix/klog.h>
+
+int main(void)
+{
+    if (klog_set(KLOG_CONTEXTSWITCH) != 0) {
+        printf("Enabling kernel log (on context switch) failed!\n");
+        return -1;
+    }
+
+    return 0;
+}
diff -Naur /usr/src_original/commands/simple/rt_set_sched_edf.c /usr/src/commands/simple/rt_set_sched_edf.c
--- /usr/src_original/commands/simple/rt_set_sched_edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/rt_set_sched_edf.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <minix/rt.h>
+
+int main(void)
+{
+    if (rt_set_sched_edf() == 0) {
+        printf("RT scheduler set to EDF\n");
+        return 0;
+    } else {
+        printf("Setting RT scheduler to EDF failed!\n");
+        return 1;
+    }   
+}
diff -Naur /usr/src_original/commands/simple/rt_set_sched_rm_pnu.c /usr/src/commands/simple/rt_set_sched_rm_pnu.c
--- /usr/src_original/commands/simple/rt_set_sched_rm_pnu.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/rt_set_sched_rm_pnu.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <minix/rt.h>
+
+int main(void)
+{
+    if (rt_set_sched_rm(PRIO_NOT_UNIQUE) == 0) {
+        printf("RT scheduler set to RM prio not unique\n");
+        return 0;
+    } else {
+        printf("Setting RT scheduler to RM prio not unique failed!\n");
+        return 1;
+    }   
+}
diff -Naur /usr/src_original/commands/simple/rt_set_sched_rm_pu.c /usr/src/commands/simple/rt_set_sched_rm_pu.c
--- /usr/src_original/commands/simple/rt_set_sched_rm_pu.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/commands/simple/rt_set_sched_rm_pu.c	2009-10-04 23:53:25.000000000 +0000
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <minix/rt.h>
+
+int main(void)
+{
+    if (rt_set_sched_rm(PRIO_UNIQUE) == 0) {
+        printf("RT scheduler set to RM prio unique\n");
+        return 0;
+    } else {
+        printf("Setting RT scheduler to RM prio unique failed!\n");
+        return 1;
+    }   
+}
diff -Naur /usr/src_original/drivers/memory/ramdisk/image.s /usr/src/drivers/memory/ramdisk/image.s
--- /usr/src_original/drivers/memory/ramdisk/image.s	2006-05-03 23:40:10.000000000 +0000
+++ /usr/src/drivers/memory/ramdisk/image.s	2009-10-04 23:53:13.000000000 +0000
@@ -1024,7 +1024,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x41, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1032,7 +1032,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x41, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1040,7 +1040,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x90, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x59, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x1e, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00
 .data1 	0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00
 .data1 	0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00
@@ -1048,7 +1048,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x4c, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x59, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x22, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
 .data1 	0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00
 .data1 	0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00
@@ -1056,7 +1056,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x54, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x3c, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x27, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00
 .data1 	0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00
 .data1 	0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1064,7 +1064,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x34, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x3c, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x27, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00
 .data1 	0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00
 .data1 	0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1072,7 +1072,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x08, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x59, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x1e, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x2f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00
 .data1 	0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00
 .data1 	0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00
@@ -1080,7 +1080,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x3e, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x27, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00
 .data1 	0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00
 .data1 	0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1088,7 +1088,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x84, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x3f, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x27, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00
 .data1 	0x3c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1096,7 +1096,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe4, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x59, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x26, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x3e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00
 .data1 	0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00
 .data1 	0x42, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00
@@ -1104,7 +1104,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x34, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x4f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00
 .data1 	0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00
 .data1 	0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00
@@ -1112,7 +1112,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x58, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x12, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x75, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00
 .data1 	0x77, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00
 .data1 	0x79, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00
@@ -1120,7 +1120,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc0, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x40, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x7b, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1128,7 +1128,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x41, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x7d, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00
 .data1 	0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
 .data1 	0x81, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00
@@ -1136,7 +1136,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1144,7 +1144,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1152,7 +1152,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1160,7 +1160,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1168,7 +1168,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1176,7 +1176,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x82, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1184,7 +1184,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1192,7 +1192,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1200,7 +1200,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1208,7 +1208,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1216,7 +1216,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x86, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1224,7 +1224,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x87, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1232,7 +1232,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1240,7 +1240,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x88, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1248,7 +1248,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x89, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1256,7 +1256,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1264,7 +1264,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1272,7 +1272,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1280,7 +1280,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1288,7 +1288,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1296,7 +1296,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1304,7 +1304,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x8f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1312,7 +1312,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1320,7 +1320,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1328,7 +1328,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x90, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1336,7 +1336,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x91, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1344,7 +1344,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x92, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1352,7 +1352,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x93, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1360,7 +1360,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1368,7 +1368,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x94, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1376,7 +1376,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x95, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1384,7 +1384,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1392,7 +1392,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x97, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1400,7 +1400,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1408,7 +1408,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x98, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1416,7 +1416,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x99, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1424,7 +1424,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1432,7 +1432,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1440,7 +1440,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1448,7 +1448,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1456,7 +1456,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1464,7 +1464,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1472,7 +1472,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x9f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1480,7 +1480,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1488,7 +1488,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1496,7 +1496,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1504,7 +1504,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1512,7 +1512,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1520,7 +1520,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1528,7 +1528,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1536,7 +1536,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1544,7 +1544,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1552,7 +1552,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1560,7 +1560,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1568,7 +1568,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1576,7 +1576,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1584,7 +1584,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1592,7 +1592,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xaa, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1600,7 +1600,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1608,7 +1608,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1616,7 +1616,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1624,7 +1624,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xad, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1632,7 +1632,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xae, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1640,7 +1640,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xaf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1648,7 +1648,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1656,7 +1656,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1664,7 +1664,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1672,7 +1672,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1680,7 +1680,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1688,7 +1688,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1696,7 +1696,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1704,7 +1704,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1712,7 +1712,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1720,7 +1720,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1728,7 +1728,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1736,7 +1736,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x12, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1744,7 +1744,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1752,7 +1752,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1760,7 +1760,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xba, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1768,7 +1768,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xbb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1776,7 +1776,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1784,7 +1784,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1792,7 +1792,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xbd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1800,7 +1800,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xbe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1808,7 +1808,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1816,7 +1816,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1824,7 +1824,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1832,7 +1832,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1840,7 +1840,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1848,7 +1848,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1856,7 +1856,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1864,7 +1864,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1872,7 +1872,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1880,7 +1880,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1888,7 +1888,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1896,7 +1896,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1904,7 +1904,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1912,7 +1912,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1920,7 +1920,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xc9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1928,7 +1928,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xca, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1936,7 +1936,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xcb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1944,7 +1944,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1952,7 +1952,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xcc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1960,7 +1960,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xcd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1968,7 +1968,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xce, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1976,7 +1976,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xcf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1984,7 +1984,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -1992,7 +1992,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2000,7 +2000,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2008,7 +2008,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2016,7 +2016,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2024,7 +2024,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2032,7 +2032,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2040,7 +2040,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2048,7 +2048,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2056,7 +2056,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2064,7 +2064,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2072,7 +2072,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2080,7 +2080,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2088,7 +2088,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xd9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2096,7 +2096,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xda, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2104,7 +2104,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xdb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2112,7 +2112,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2120,7 +2120,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xdc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2128,7 +2128,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xdd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2136,7 +2136,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xde, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2144,7 +2144,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xdf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2152,7 +2152,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2160,7 +2160,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2168,7 +2168,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2176,7 +2176,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2184,7 +2184,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2192,7 +2192,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2200,7 +2200,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2208,7 +2208,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2216,7 +2216,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2224,7 +2224,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2232,7 +2232,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2240,7 +2240,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2248,7 +2248,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2256,7 +2256,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xe9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2264,7 +2264,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xea, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2272,7 +2272,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xeb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2280,7 +2280,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x22, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2288,7 +2288,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xec, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2296,7 +2296,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2304,7 +2304,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xee, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2312,7 +2312,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xef, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2320,7 +2320,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x23, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2328,7 +2328,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2336,7 +2336,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2344,7 +2344,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2352,7 +2352,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2360,7 +2360,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2368,7 +2368,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x25, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2376,7 +2376,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2384,7 +2384,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2392,7 +2392,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2400,7 +2400,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2408,7 +2408,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x26, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2416,7 +2416,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2424,7 +2424,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2432,7 +2432,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xfa, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2440,7 +2440,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xfb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2448,7 +2448,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x27, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2456,7 +2456,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2464,7 +2464,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xfd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2472,7 +2472,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2480,7 +2480,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2488,15 +2488,15 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
+.data1 	0x90, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2504,7 +2504,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2512,7 +2512,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb0, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x7f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2520,7 +2520,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb0, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x7e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2528,7 +2528,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2536,7 +2536,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa0, 0x21, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2544,7 +2544,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x92, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2552,7 +2552,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x20, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2560,7 +2560,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa0, 0x21, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2568,7 +2568,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2576,7 +2576,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x61, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2584,7 +2584,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa4, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2592,7 +2592,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa4, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2600,7 +2600,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2608,7 +2608,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2616,7 +2616,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x11, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2624,7 +2624,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2632,31 +2632,31 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xb6, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x13, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
+.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
+.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00
+.data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2664,7 +2664,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa4, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2672,7 +2672,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x80, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x7d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2680,7 +2680,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xa4, 0x21, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2688,7 +2688,7 @@
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0xed, 0x41, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-.data1 	0x5a, 0x3f, 0x59, 0x44, 0x00, 0x00, 0x00, 0x00
+.data1 	0x2d, 0x78, 0xc6, 0x4a, 0x00, 0x00, 0x00, 0x00
 .data1 	0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 .data1 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
diff -Naur /usr/src_original/include/lib.h /usr/src/include/lib.h
--- /usr/src_original/include/lib.h	2005-06-01 14:30:59.000000000 +0000
+++ /usr/src/include/lib.h	2009-10-04 23:53:14.000000000 +0000
@@ -26,6 +26,9 @@
 #define MM                 PM_PROC_NR
 #define FS                 FS_PROC_NR
 
+/* synchronisation server */
+#define SS                 SS_PROC_NR
+
 _PROTOTYPE( int __execve, (const char *_path, char *const _argv[], 
 			char *const _envp[], int _nargs, int _nenvps)	);
 _PROTOTYPE( int _syscall, (int _who, int _syscallnr, message *_msgptr)	);
diff -Naur /usr/src_original/include/minix/callnr.h /usr/src/include/minix/callnr.h
--- /usr/src_original/include/minix/callnr.h	2006-03-10 16:10:04.000000000 +0000
+++ /usr/src/include/minix/callnr.h	2009-10-04 23:53:14.000000000 +0000
@@ -1,5 +1,13 @@
 #define NCALLS		  95	/* number of system calls allowed */
 
+/* call nrs for RTMINIX3 */
+#define RT_SET_SCHED  45
+#define RT_SET        57  
+#define RT_NEXTPERIOD 58
+#define RT_SET_SCHED_BRIDGE 64
+#define KLOG_SET      49
+#define KLOG_COPY     50
+
 #define EXIT		   1 
 #define FORK		   2 
 #define READ		   3 
diff -Naur /usr/src_original/include/minix/com.h /usr/src/include/minix/com.h
--- /usr/src_original/include/minix/com.h	2006-03-10 16:10:04.000000000 +0000
+++ /usr/src/include/minix/com.h	2009-10-04 23:53:14.000000000 +0000
@@ -37,11 +37,12 @@
 #define PM_PROC_NR	  0	/* process manager */
 #define FS_PROC_NR 	  1	/* file system */
 #define RS_PROC_NR 	  2	/* reincarnation server */
-#define MEM_PROC_NR 	  3  	/* memory driver (RAM disk, null, etc.) */
+#define MEM_PROC_NR   3 /* memory driver (RAM disk, null, etc.) */
 #define LOG_PROC_NR	  4	/* log device driver */
 #define TTY_PROC_NR	  5	/* terminal (TTY) driver */
-#define DS_PROC_NR	  6    	/* data store server */
-#define INIT_PROC_NR	  7    	/* init -- goes multiuser */
+#define DS_PROC_NR	  6 /* data store server */
+#define SS_PROC_NR    7 /* semaphore server */
+#define INIT_PROC_NR  8 /* init -- goes multiuser */
 
 /* Number of processes contained in the system image. */
 #define NR_BOOT_PROCS 	(NR_TASKS + INIT_PROC_NR + 1)
@@ -279,7 +280,16 @@
 #  define SYS_VM_SETBUF  (KERNEL_CALL + 29)	/* sys_vm_setbuf() */
 #  define SYS_VM_MAP  	 (KERNEL_CALL + 30)	/* sys_vm_map() */
 
-#define NR_SYS_CALLS	31	/* number of system calls */ 
+/* requests for real-time minix 3 and kernel logging */
+#  define SYS_RT_SET_SCHED      (KERNEL_CALL + 31) /* sys_rt_set_sched() */
+#  define SYS_RT_SET            (KERNEL_CALL + 32) /* sys_rt_set() */
+#  define SYS_RT_SHOW_DATA      (KERNEL_CALL + 33) /* sys_rt_show_data() */
+#  define SYS_RT_NEXTPERIOD     (KERNEL_CALL + 34) /* sys_rt_nextperiod() */
+#  define SYS_RT_SCHED_BRIDGE   (KERNEL_CALL + 35) /* sys_rt_sched_bridge() */
+#  define SYS_KLOG_SET          (KERNEL_CALL + 36) /* sys_klog_set() */
+#  define SYS_KLOG_COPY         (KERNEL_CALL + 37) /* sys_klog_copy() */
+
+#define NR_SYS_CALLS	38	/* number of system calls */ 
 
 /* Subfunctions for SYS_PRIVCTL */
 #define SYS_PRIV_INIT		1	/* Initialize a privilege structure */
diff -Naur /usr/src_original/include/minix/klog.h /usr/src/include/minix/klog.h
--- /usr/src_original/include/minix/klog.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/include/minix/klog.h	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,37 @@
+/* Main header file for kernel logging.
+ * Processes using this functionality must be linked with libklog
+ */
+
+#ifndef KLOG_H
+#define KLOG_H
+
+/* number of entries in the kernel log */
+#define KLOG_SIZE 1024
+
+/* message fields */
+#define KLOG_STATE m1_i1
+#define KLOG_TYPE  m1_i2
+#define KLOG_ENDPT m1_i1
+#define KLOG_PTR   m1_p1
+
+/* kernel log type */
+#define KLOG_CONTEXTSWITCH  1
+#define KLOG_CLOCKINT       2
+
+/* declaration of the kernel log entry structure */
+struct klog_entry {
+    int klog_time;
+    int klog_endpoint;
+    char klog_type;
+    char klog_name[8];
+    int klog_data;
+};    
+
+#ifndef _SYSTEM
+/* library function prototypes */
+int klog_set(int type);
+int klog_copy(void *data);
+#endif
+
+#endif
+
diff -Naur /usr/src_original/include/minix/rt.h /usr/src/include/minix/rt.h
--- /usr/src_original/include/minix/rt.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/include/minix/rt.h	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,37 @@
+/* Main header file for Real-time functionality.
+ * Processes using these functionality should be linked with librt.
+ */
+#ifndef RT_H
+#define RT_H
+
+#include <ansi.h>
+
+/* scheduler type definitions */
+#define SCHED_UNDEFINED     0
+#define SCHED_RM            1
+#define SCHED_EDF           2
+
+/* priority policies for Rate-Monotonic */
+#define PRIO_UNIQUE         1
+#define PRIO_NOT_UNIQUE     2
+
+
+/* message fields for real-time related system calls */
+#define RT_ENDPT        m7_i1
+#define RT_SCHED        m7_i2
+#define RM_PRIO         m7_i3
+#define RM_PRIO_POLICY  m7_i4
+#define EDF_PERIOD      m7_i3
+#define EDF_CALCTIME    m7_i4
+#define RT_SCHED_BRIDGE m1_i1
+
+/* library function prototypes */
+_PROTOTYPE( int rt_set_sched_edf, (void) );
+_PROTOTYPE( int rt_set_sched_rm, (int prio_policy) );
+_PROTOTYPE( int rt_set_edf, (int period, int calctime) );
+_PROTOTYPE( int rt_set_rm, (int prio) );
+_PROTOTYPE( int rt_set_sched_bridge, (int state) );
+_PROTOTYPE( int rt_nextperiod, (void) );
+
+#endif
+
diff -Naur /usr/src_original/include/minix/sem.h /usr/src/include/minix/sem.h
--- /usr/src_original/include/minix/sem.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/include/minix/sem.h	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,63 @@
+/* Main header file for semaphores.
+ * Processes using this functionality should be linked with libsem.
+ */
+#ifndef SEM_H
+#define SEM_H
+
+typedef int sem_t;
+
+/* semaphore actions */
+#define SEM_CREATE      1
+#define SEM_TAKE        2
+#define SEM_GIVE        3
+#define SEM_FLUSH       4
+#define SEM_DELETE      5
+#define SEM_PROCEXIT    6
+#define SEM_VALUE       7       
+
+/* semaphore types */
+#define SEM_MUTEX       1
+#define SEM_BINARY      2
+#define SEM_COUNTING    3
+
+/* semaphore return values */
+#define SEM_INVALID_HANDLER     1
+#define SEM_INVALID_TYPE        2
+#define SEM_INVALID_VALUE       3
+#define SEM_INVALID_SIZE        4
+#define SEM_INVALID_BLOCK       5
+#define SEM_NO_AVAILABLE        6
+#define SEM_INVALID_MUTEX_GIVE  7
+#define SEM_ALREADY_FREE        8
+#define SEM_IN_USE              9
+
+#ifndef OK
+#define OK                      0
+#endif
+
+/* sem_take block types */
+#define WAIT_FOREVER    0
+#define NO_WAIT         1
+
+/* message fields for IPC */
+#define SEM_F_TYPE      m1_i1
+#define SEM_F_VALUE     m1_i2
+#define SEM_F_SIZE      m1_i3
+#define SEM_F_HANDLER   m1_i1
+#define SEM_F_BLOCK     m1_i2
+#define SEM_F_ENDPT     m1_i1
+
+#ifndef _SYSTEM
+/* library function prototypes */
+_PROTOTYPE(int sem_b_create, (sem_t *handler, int value));
+_PROTOTYPE(int sem_m_create, (sem_t *handler));
+_PROTOTYPE(int sem_c_create, (sem_t *handler, int value, int size));
+_PROTOTYPE(int sem_take, (sem_t handler, int block));
+_PROTOTYPE(int sem_give, (sem_t handler));
+_PROTOTYPE(int sem_flush, (sem_t handler));
+_PROTOTYPE(int sem_delete, (sem_t handler));
+_PROTOTYPE(int sem_value, (sem_t handler, int *value));
+#endif
+
+#endif
+
diff -Naur /usr/src_original/include/minix/syslib.h /usr/src/include/minix/syslib.h
--- /usr/src_original/include/minix/syslib.h	2006-03-24 14:16:06.000000000 +0000
+++ /usr/src/include/minix/syslib.h	2009-10-04 23:53:14.000000000 +0000
@@ -172,5 +172,16 @@
 _PROTOTYPE( char *pci_dev_name, (U16_t vid, U16_t did)			);
 _PROTOTYPE( char *pci_slot_name, (int devind)				);
 
+/* real-time minix 3*/
+_PROTOTYPE( int sys_rt_set_sched, (int type, int policy) );
+_PROTOTYPE( int sys_rt_set, (int endpoint, int sched, int param1, int param2) );
+_PROTOTYPE( int sys_rt_nextperiod, (int endpoint) );
+_PROTOTYPE( int sys_rt_sched_bridge, (int state) );
+_PROTOTYPE( int sys_rt_show_data, (void) );
+
+/* kernel logger */
+_PROTOTYPE( int sys_klog_set, (int state, int type) );
+_PROTOTYPE( int sys_klog_copy, (int endpoint, void * data_ptr) );
+  
 #endif /* _SYSLIB_H */
 
diff -Naur /usr/src_original/kernel/clock.c /usr/src/kernel/clock.c
--- /usr/src_original/kernel/clock.c	2006-03-16 09:33:35.000000000 +0000
+++ /usr/src/kernel/clock.c	2009-10-04 23:53:14.000000000 +0000
@@ -6,6 +6,7 @@
  * CLOCK task thus is hidden from the outside world.  
  *
  * Changes:
+ *   May 19, 2009   Support for real-time scheduling (EDF and RM) (Bianco Zandbergen)
  *   Oct 08, 2005   reordering and comment editing (A. S. Woodhull)
  *   Mar 18, 2004   clock interface moved to SYSTEM task (Jorrit N. Herder) 
  *   Sep 30, 2004   source code documentation updated  (Jorrit N. Herder)
@@ -33,6 +34,8 @@
 #include "proc.h"
 #include <signal.h>
 #include <minix/com.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
 
 /* Function prototype for PRIVATE functions. */ 
 FORWARD _PROTOTYPE( void init_clock, (void) );
@@ -99,6 +102,8 @@
 PRIVATE int do_clocktick(m_ptr)
 message *m_ptr;				/* pointer to request message */
 {
+register struct proc **xpp;
+register struct proc *temp_p;
 /* Despite its name, this routine is not called on every clock tick. It
  * is called on those clock ticks when a lot of work needs to be done.
  */
@@ -121,6 +126,160 @@
 		TMR_NEVER : clock_timers->tmr_exp_time;
   }
 
+  /* Unfortunately we don't know what event triggered do_clocktick.
+   * If the real-time scheduler is EDF we will have to check for the following things:
+   * - The current scheduled EDF process has missed the deadline.
+   * - The current EDF process has no ticks left in this period.
+   * - Check for processes in the wait queue from which a new period starts.     
+   */   
+  if (rt_sched == SCHED_EDF) {
+
+      /* Check for missed deadline of currently scheduled EDF proc.
+       * This is the case if there is a EDF process scheduled AND
+       * that process has ticks left in this period AND the number of ticks left
+       * till next period is 0. The number of ticks left till next period equals the deadline.
+       */
+      if (edf_rp != NIL_PROC && edf_rp->p_rt_ticksleft > 0 && edf_rp->p_rt_nextperiod == 0) {
+          
+          /* Remove EDF process from scheduling queue */
+          lock_dequeue(edf_rp);
+          
+          /* update total used ticks before ticksleft will be reset */
+          edf_rp->p_rt_totalused += (edf_rp->p_rt_calctime - edf_rp->p_rt_ticksleft);
+          
+          /* New period for this process starts immiately because
+           * a deadline is the same as a new period start.
+           */
+          edf_rp->p_rt_nextperiod = edf_rp->p_rt_period;
+
+          /* New period new calculation time */
+          edf_rp->p_rt_ticksleft = edf_rp->p_rt_calctime;
+
+          /* update period counter for stats */
+          edf_rp->p_rt_periodnr++;
+
+          /* update deadline counter for stats */
+          edf_rp->p_rt_missed_dl++;
+
+          /* update total reserved ticks for stats*/
+          edf_rp->p_rt_totalreserved += edf_rp->p_rt_calctime;
+
+          /* Add process to the run queue sorted on deadline. 
+           * First find the right place in the queue.
+           */
+          xpp = &edf_run_head;
+          while (*xpp != NIL_PROC && (*xpp)->p_rt_nextperiod <= edf_rp->p_rt_nextperiod) {
+              xpp = &(*xpp)->p_rt_link;
+          }
+
+          /* Add process to the run queue */    
+          edf_rp->p_rt_link = *xpp;
+          *xpp = edf_rp;
+
+          /* This process is not scheduled any more */
+          edf_rp = NIL_PROC;
+
+          /* Check which process has the earliest deadline and may be scheduled now */
+          edf_sched();
+      }
+
+      /* Check for no ticks left of currently scheduled EDF process. 
+       * This is the case if there is an EDF process scheduled AND
+       * this process has no ticks left in the current period.
+       */
+      if (edf_rp != NIL_PROC && edf_rp->p_rt_ticksleft <= 0) {
+          
+          /* Remove process from scheduling queue */
+          lock_dequeue(edf_rp);
+
+          #if 0
+          kprintf("do_clocktick: no ticks left: %d\n", edf_rp->p_endpoint);
+          #endif 
+
+          /* Add process to the wait queue waiting for next period start.
+           * First we have to find the right place in the queue.
+           * The queue is sorted on next period start.
+           */
+          xpp = &edf_wait_head;
+          while (*xpp != NIL_PROC && (*xpp)->p_rt_nextperiod <= edf_rp->p_rt_nextperiod) {
+              xpp = &(*xpp)->p_rt_link;
+          }  
+
+          /* Add process to the wait queue */  
+          edf_rp->p_rt_link = *xpp;
+          *xpp = edf_rp;
+
+          /* Set the NEXTPERIOD bit in the run time flags.
+           * A process is only runnable if p_rts_flags == 0.
+           * This ensures that no other code (i.e IPC code)
+           * will add the process in the scheduling queue while the 
+           * process is still waiting for the next period start.
+           */
+          edf_rp->p_rts_flags |= NEXTPERIOD;
+
+          /* This process is not scheduled any more */
+          edf_rp = NIL_PROC;
+
+          /* Check which process has the earliest deadline and may be scheduled now */
+          edf_sched(); 
+      }    
+     
+      /* check for processes with a new period start.
+       * We check only the head of the wait queue because the
+       * queue is sorted on next period start. If the head of the queue has
+       * p_rt_nextperiod == 0 it will be removed from the wait queue and added
+       * to the run queue. We will repeat this process until the head of the queue has
+       * ticks left till the next period because multiple processes can have a new period start
+       * at the same time.
+       */
+      while (edf_wait_head != NIL_PROC && 
+             edf_wait_head->p_rt_nextperiod == 0) {
+          
+          /* update total ticks used before ticksleft is reset */
+          edf_wait_head->p_rt_totalused += (edf_wait_head->p_rt_calctime - edf_wait_head->p_rt_ticksleft);
+          
+          /* reset the ticks till next period */
+          edf_wait_head->p_rt_nextperiod = edf_wait_head->p_rt_period;
+
+          /* reset the calculation time left */
+          edf_wait_head->p_rt_ticksleft = edf_wait_head->p_rt_calctime;
+
+          /* This process will be runnable so clear the NEXTPERIOD bit in
+           * p_rts_flags.
+           */
+          edf_wait_head->p_rts_flags &= ~(NEXTPERIOD);
+          
+          /* increase period counter for stats */
+          edf_wait_head->p_rt_periodnr++;
+
+          /* update total reserved ticks for stats */
+          edf_wait_head->p_rt_totalreserved += edf_wait_head->p_rt_calctime;
+          
+          /* Add process to the run queue that is sorted on deadline.
+           * First we have to find the right place in the list.
+           */
+          xpp = &edf_run_head;
+          while (*xpp != NIL_PROC && (*xpp)->p_rt_nextperiod <= edf_wait_head->p_rt_nextperiod) {
+              xpp = &(*xpp)->p_rt_link;
+          }    
+          
+          /* Add process to the run queue and
+           * remove process from wait queue.
+           */
+          temp_p = edf_wait_head->p_rt_link; /* save the new head of wait queue to temp_p */
+          edf_wait_head->p_rt_link = *xpp; /* set the next process pointer of the process we add */
+          *xpp = edf_wait_head; /* point to the process we add */
+          edf_wait_head = temp_p; /* set the new head of the wait queue, we saved this in temp_p */
+          
+          /* Because we changed the run queue we will have to check
+           * which process has the earliest deadline and should be scheduled now.
+           */
+          edf_sched();
+              
+      }     
+          
+  }   
+      
   /* Inhibit sending a reply. */
   return(EDONTREPLY);
 }
@@ -188,7 +347,10 @@
  *		since at worst the previous process would be billed.
  */
   register unsigned ticks;
-
+  register struct proc *ap; /* used for EDF accounting */
+  char call_do_clocktick = 0; /* used for EDF accounting */
+  char rq_md = 0; /* has some processed missed deadline in run queue? we need to resort in that case */
+  
   /* Acknowledge the PS/2 clock interrupt. */
   if (machine.ps_mca) outb(PORT_B, inb(PORT_B) | CLOCK_ACK_BIT);
 
@@ -209,15 +371,250 @@
   if (! (priv(proc_ptr)->s_flags & BILLABLE)) {
       bill_ptr->p_sys_time += ticks;
       bill_ptr->p_ticks_left -= ticks;
+
+      /* real-time processes don't use p_ticks_left
+       * but should they be billed too?
+       * We currently don't bill them.
+       * Remove the comments to do so.
+       * Please note that a process can get a negative
+       * p_rt_ticksleft if it can be billed.
+       */
+      
+      /*if (is_rtp(bill_ptr)) {
+          bill_ptr->p_rt_ticksleft--;
+      }*/    
   }
 
   /* Update load average. */
   load_update();
+  
+  /* Kernel schedule logging.
+   * Keeps track of all processes running when clock interrupt
+   * happens. First we check if we have to log.
+   */
+  if (klog_state == 1 && klog_type == KLOG_CLOCKINT && klog_ptr < KLOG_SIZE) {
+      klog[klog_ptr].klog_data = proc_ptr->p_nr; /* process number */
+      klog[klog_ptr].klog_endpoint = proc_ptr->p_endpoint; /* process endpoint */
+      klog[klog_ptr].klog_time = get_uptime(); /* time in ticks since boot */
+      strcpy(klog[klog_ptr].klog_name, proc_ptr->p_name);   /* name of process */
+      klog_ptr++;
+
+      if (klog_ptr >= KLOG_SIZE) {
+          /* kernel log buffer is full.
+           * We disable logging by setting klog_state to 0.
+           * We set klog_ptr to 0 for a next log start.
+           */
+          kprintf("klog buffer full!\n");
+          klog_state = 0;
+          klog_ptr = 0;
+      }       
+  }
+  
+  /* generic accounting for real-time processes */
+  if (is_rtp(proc_ptr)) {
+      
+      /* make sure quantum never reaches zero.
+       * We don't use p_ticks_left for RT processes.
+       */
+      proc_ptr->p_ticks_left = 100;
+  }
 
+  /* if the RT scheduler is EDF
+   * we will have to do accounting on
+   * all four EDF data structures.
+   */
+  if (rt_sched == SCHED_EDF) {
+          
+      /* Do accounting for the currently
+       * scheduled EDF process, if there is one.
+       */
+      if (edf_rp != NIL_PROC) {
+              
+          /* decrease ticks left in current period */
+          edf_rp->p_rt_ticksleft--;
+          
+          if (edf_rp->p_rt_nextperiod > 0) {
+              /* decrease ticks till next period (deadline) */
+              edf_rp->p_rt_nextperiod--;
+          }
+              
+          /* check if process has no ticks left
+           * in current period AND if the process
+           * has missed the deadline. In both cases
+           * do_clocktick should be run
+           */
+          if (edf_rp->p_rt_ticksleft == 0 ||
+              edf_rp->p_rt_nextperiod == 0) {
+              call_do_clocktick = 1;
+
+              #if EDF_PRINT_MD == 1
+              if (edf_rp->p_rt_nextperiod == 0) {
+                  kprintf("Process %d %s has missed deadline (edf_rp)\n", edf_rp->p_endpoint, edf_rp->p_name);
+              }
+              #endif
+          }    
+      }
+
+      /* Do accounting for the run queue.
+       * We will check all processes in the queue.
+       */
+      ap = edf_run_head;
+      while (ap != NIL_PROC) {
+          if (ap->p_rt_nextperiod > 0) {
+                 
+              /* decrease ticks till next period */
+              ap->p_rt_nextperiod--;
+              
+              if (ap->p_rt_nextperiod == 0) {
+                  /* No ticks left till next period but the process
+                   * has not used all calculation time.
+                   * It missed the deadline. We leave the process in the queue
+                   * but we start a new period.  
+                   */
+
+                  /* update total used ticks before ticksleft will be reset */
+                  ap->p_rt_totalused += (ap->p_rt_calctime - ap->p_rt_ticksleft);
+                  
+                  /* reset ticks left till next period
+                   * and calculation time left in current period.
+                   */
+                  ap->p_rt_nextperiod = ap->p_rt_period; 
+                  ap->p_rt_ticksleft = ap->p_rt_calctime;
+
+                  /* update period counter for stats */
+                  ap->p_rt_periodnr++;
+
+                  /* update deadline counter for stats */
+                  ap->p_rt_missed_dl++;
+
+                  /* update total reserved ticks for stats */
+                  ap->p_rt_totalreserved += ap->p_rt_calctime;
+
+                  /* we need to resort the queue */
+                  rq_md = 1;
+
+                  #if EDF_PRINT_MD == 1
+                  kprintf("Process %d %s has missed deadline (RQ)\n", ap->p_endpoint, ap->p_name);
+                  #endif
+              }
+          }
+          ap = ap->p_rt_link; /* get next process in the queue */
+      }
+
+      /* If a process has missed the deadline in the run queue, the deadline
+       * will be renewed. In that case we will have to resort the run queue to
+       * keep it sorted on deadline. We use a bubble sort algorithm here.
+       * The c node precedes the a and e node pointing to the node to which the
+       * comparisons are being made.
+       */
+      if (rq_md != 0) {
+          struct proc *a = NIL_PROC;
+          struct proc *b = NIL_PROC;
+          struct proc *c = NIL_PROC;
+          struct proc *e = NIL_PROC;
+          struct proc *tmp = NIL_PROC;
+          
+          while(e != edf_run_head->p_rt_link) {
+              c = a = edf_run_head;
+              b = a->p_rt_link;
+ 
+              while(a != e) {
+                  if(a->p_rt_nextperiod > b->p_rt_nextperiod) {
+                      if(a == edf_run_head) {
+                          tmp = b->p_rt_link;
+                          b->p_rt_link = a;
+                          a->p_rt_link = tmp;
+                          edf_run_head = b;
+                          c = b;
+                      } else {
+                          tmp = b->p_rt_link;
+                          b->p_rt_link = a;
+                          a->p_rt_link = tmp;
+                          c->p_rt_link = b;
+                          c = b;
+                      }
+                  } else {
+                      c = a;
+                      a = a->p_rt_link;
+                  }
+                  
+                  b = a->p_rt_link;
+                  if(b == e) {
+                      e = a;
+                  }                 
+              }
+          }
+      }
+
+      /* Do accounting for the wait queue.
+       * We will check all processes in the queue.
+       */
+      ap = edf_wait_head;
+      while (ap != NIL_PROC) {
+          if (ap->p_rt_nextperiod > 0) {
+              
+              /* decrease ticks till next period */
+              ap->p_rt_nextperiod--;
+              
+              if (ap->p_rt_nextperiod == 0) {
+                  /* new period start for this process.
+                   * We will have to call do_clocktick.
+                   */
+                  call_do_clocktick = 1;
+              }    
+          }
+          ap = ap->p_rt_link; /* get next process in the queue */
+      }
+
+      /* Do accounting for the block list.
+       * We will check all processes in the list.
+       */
+      ap = edf_block_head;
+      while (ap != NIL_PROC) {
+          if (ap->p_rt_nextperiod > 0) {
+                  
+              /* decrease ticks till next period */
+              ap->p_rt_nextperiod--;
+  
+              if (ap->p_rt_nextperiod == 0) {
+                  /* No ticks left till next period and the process
+                   * has not used all calculation time. The process missed the deadline.
+                   * We leave the process in the block list but start a new period.
+                   */
+
+                  /* update total used ticks before ticksleft will be reset */
+                  ap->p_rt_totalused += (ap->p_rt_calctime - ap->p_rt_ticksleft);
+                  
+                  /* reset ticks left till next period
+                   * and calculation time left in current period.
+                   */
+                  ap->p_rt_nextperiod = ap->p_rt_period;
+                  ap->p_rt_ticksleft = ap->p_rt_calctime;
+
+                  /* update period counter for stats */
+                  ap->p_rt_periodnr++;
+
+                  /* update deadline counter for stats */
+                  ap->p_rt_missed_dl++;
+
+                  /* update total reserved ticks for stats */
+                  ap->p_rt_totalreserved += ap->p_rt_calctime;
+
+                  #if EDF_PRINT_MD
+                  kprintf("Process %d %s has missed deadline (BQ)\n", ap->p_endpoint, ap->p_name);
+                  #endif
+              }
+          }
+          ap = ap->p_rt_link; /* get next process in the list */
+      }    
+
+      /* done with EDF accounting */      
+  }    
+  
   /* Check if do_clocktick() must be called. Done for alarms and scheduling.
    * Some processes, such as the kernel tasks, cannot be preempted. 
    */ 
-  if ((next_timeout <= realtime) || (proc_ptr->p_ticks_left <= 0)) {
+  if ((next_timeout <= realtime) || (proc_ptr->p_ticks_left <= 0) || (call_do_clocktick != 0)) {
       prev_ptr = proc_ptr;			/* store running process */
       lock_notify(HARDWARE, CLOCK);		/* send notification */
   } 
diff -Naur /usr/src_original/kernel/config.h /usr/src/kernel/config.h
--- /usr/src_original/kernel/config.h	2006-02-10 16:53:50.000000000 +0000
+++ /usr/src/kernel/config.h	2009-10-04 23:53:14.000000000 +0000
@@ -43,6 +43,15 @@
 #define USE_PHYSVCOPY  	   1	/* vector with physical copy requests */
 #define USE_MEMSET  	   1	/* write char to a given memory area */
 
+/* for real-time */
+#define USE_RT_SET_SCHED        1 /* set the real-time scheduler */
+#define USE_RT_SET              1 /* transform a normal process to a real-time process */
+#define USE_RT_SHOW_DATA        1 /* dump RT scheduler info */
+#define USE_RT_NEXTPERIOD       1 /* give up calculation time for EDF scheduled processes */
+#define USE_RT_SET_SCHED_BRIDGE 1 /* set the RT scheduling bridge state */
+#define USE_KLOG_SET            1 /* set the kernel log state */
+#define USE_KLOG_COPY           1 /* copy kernel log to user application */
+
 /* Length of program names stored in the process table. This is only used
  * for the debugging dumps that can be generated with the IS server. The PM
  * server keeps its own copy of the program name.  
@@ -78,5 +87,11 @@
 #define DEBUG_SCHED_CHECK  0	/* sanity check of scheduling queues */
 #define DEBUG_TIME_LOCKS   0	/* measure time spent in locks */
 
+/* print missed deadlines of EDF scheduler */
+#define EDF_PRINT_MD       0
+
+/* print debug info for prioritized IPC */
+#define DEBUG_IPC          0
+
 #endif /* CONFIG_H */
 
diff -Naur /usr/src_original/kernel/proc.c /usr/src/kernel/proc.c
--- /usr/src_original/kernel/proc.c	2006-03-16 09:33:35.000000000 +0000
+++ /usr/src/kernel/proc.c	2009-10-04 23:53:14.000000000 +0000
@@ -10,8 +10,11 @@
  *   lock_send:	      send a message to a process
  *   lock_enqueue:    put a process on one of the scheduling queues 
  *   lock_dequeue:    remove a process from the scheduling queues
+ *   edf_rp:          check which process with earliest deadline may now be scheduled (EDF scheduler only)
+ *   show_rt_data:    dump schedule info for RM and EDF
  *
  * Changes:
+ *   May 19, 2009     added support for EDF and RM scheduling, prioritized IPC (Bianco Zandbergen)
  *   Aug 19, 2005     rewrote scheduling code  (Jorrit N. Herder)
  *   Jul 25, 2005     rewrote system call handling  (Jorrit N. Herder)
  *   May 26, 2005     rewrote message passing functions  (Jorrit N. Herder)
@@ -43,6 +46,8 @@
 #include "kernel.h"
 #include "proc.h"
 #include <signal.h>
+#include <string.h>
+#include <minix/rt.h>
 
 /* Scheduling and message passing functions. The functions are available to 
  * other parts of the kernel through lock_...(). The lock temporarily disables 
@@ -307,7 +312,61 @@
 	/* Destination is indeed waiting for this message. */
 	CopyMess(caller_ptr->p_nr, caller_ptr, m_ptr, dst_ptr,
 		 dst_ptr->p_messbuf);
-	if ((dst_ptr->p_rts_flags &= ~RECEIVING) == 0) enqueue(dst_ptr);
+	if ((dst_ptr->p_rts_flags &= ~RECEIVING) == 0) {
+        
+        if (! is_rtp(dst_ptr) || rt_sched == SCHED_RM) {
+            /* destination process is not real-time or real-time and using
+             * Rate-Monotonic scheduling. In this case we use the normale
+             * procedure which is simply add the process to the scheduling queue.
+             */
+            enqueue(dst_ptr);
+        
+        } else if (is_rtp(dst_ptr) && rt_sched == SCHED_EDF) {
+            /* destination is a real-time process scheduled using EDF.
+             * We will have to remove the process from the block list and
+             * add it to the run queue. Afterwards we check which EDF process
+             * has the earliest deadline and may now be scheduled.
+             */
+
+            /* Remove destination process from the block list.
+             * We first have to find the process in the list.
+             */
+            xpp = &edf_block_head;
+            while (*xpp != NIL_PROC && *xpp != dst_ptr) {
+                xpp = &(*xpp)->p_rt_link;
+            }
+
+            /* *xpp == NIL_PROC if the list was empty or
+             * if the list was not empty and the process was not found.
+             */
+            if (*xpp != NIL_PROC) {
+                /* remove destination process from the block list.
+                 * We do this to change the pointer that points to the destination process
+                 * to the next process pointer of the destination process.
+                 */
+                *xpp = (*xpp)->p_rt_link;
+            }
+         
+            /* Add dst to EDF run queue which is sorted on deadline.
+             * We first have to find the right place in the list. */
+            xpp = &edf_run_head;
+            while (*xpp != NIL_PROC && (*xpp)->p_rt_nextperiod <= dst_ptr->p_rt_nextperiod) {
+                xpp = &(*xpp)->p_rt_link; 
+            }
+
+            /* Add process to the run queue */
+            dst_ptr->p_rt_link = *xpp;
+            *xpp = dst_ptr;
+
+            /* Check which process has the earliest deadline and 
+             * should be scheduled now.
+             */
+            edf_sched();
+            
+        } else {
+            panic("mini_send() failed\n", NO_NUM);
+        }
+    }    
   } else if ( ! (flags & NON_BLOCKING)) {
 	/* Destination is not waiting.  Block and dequeue caller. */
 	caller_ptr->p_messbuf = m_ptr;
@@ -315,17 +374,97 @@
 	caller_ptr->p_rts_flags |= SENDING;
 	caller_ptr->p_sendto_e = dst_e;
 
-	/* Process is now blocked.  Put in on the destination's queue. */
-	xpp = &dst_ptr->p_caller_q;		/* find end of list */
-	while (*xpp != NIL_PROC) xpp = &(*xpp)->p_q_link;	
-	*xpp = caller_ptr;			/* add caller to end */
-	caller_ptr->p_q_link = NIL_PROC;	/* mark new end of list */
+    #if DEBUG_IPC == 1
+    xpp = &dst_ptr->p_caller_q;
+    if (*xpp != NIL_PROC) {
+        kprintf(" ---\n");
+        kprintf("IPC: recv Q bef. %s:", dst_ptr->p_name);
+        while (*xpp != NIL_PROC) {
+            kprintf(" [%d:%s]", (*xpp)->p_priority, (*xpp)->p_name);
+            xpp = &(*xpp)->p_q_link;
+        }
+        kprintf("\n");
+    }
+    #endif
+            
+    /* Process is now blocked.  Put in on the destination's queue. 
+     * We use this queue as a prioritized queue. The queue is ordered
+     * on p_priority which is the minix scheduling priority. This way
+     * processes with a higher priority will be served earlier.
+     * First we have to find the right place in the queue.
+     */
+	xpp = &dst_ptr->p_caller_q;		
+	while (*xpp != NIL_PROC && (*xpp)->p_priority <= caller_ptr->p_priority) {
+
+        if (is_rtp(caller_ptr) && rt_sched == SCHED_RM) {
+            /* The while loop will exit if the next process in the list has a
+             * lower minix priority (higher p_priority value). 
+             * if multiple processes with the same priority
+             * are in the queue it will add the process to the end, just before the process
+             * with a higher priority.
+             * Processes scheduled using Rate-Monotonic share the same minix priority.
+             * The priority among multiple RM processes is defined by p_rt_priority.
+             * Because of this a RM process should not always be added to the end of
+             * the processes with the same priority. Instead one has to look at the p_rt_priority
+             * and if the next process is a RM process with a lower RM priority (higher p_rt_priority value)
+             * we will break the while loop.
+             */
+            if (is_rtp(*xpp) && (*xpp)->p_rt_priority > caller_ptr->p_rt_priority) {
+                break;
+            }    
+        }
+        
+        xpp = &(*xpp)->p_q_link;
+    }    
+
+    /* Add process to the destination's queue */
+    caller_ptr->p_q_link = *xpp;
+    *xpp = caller_ptr;
+
+    #if DEBUG_IPC == 1
+    xpp = &dst_ptr->p_caller_q;
+    if ( (*xpp)->p_q_link != NIL_PROC ) {
+        kprintf("IPC: recv Q aft. %s:", dst_ptr->p_name);
+        while (*xpp != NIL_PROC) {
+            kprintf(" [%d:%s]", (*xpp)->p_priority, (*xpp)->p_name);
+            xpp = &(*xpp)->p_q_link;
+        }
+        kprintf("\n");
+    }
+    #endif
+    
+    /* if the caller is a real-time process scheduled using EDF
+     * we have to add the caller to the EDF block list.
+     */
+    if (is_rtp(caller_ptr) && rt_sched == SCHED_EDF) {
+        
+        /* First we search the right place in the list.
+         * This is not very important and we could have
+         * just add it to the front. In this case we add
+         * the process to the end of the list.
+         */
+        xpp = &edf_block_head;
+        while (*xpp != NIL_PROC) {
+            xpp = &(*xpp)->p_rt_link;
+        }  
+        
+        /* Add process to the EDF block list */
+        caller_ptr->p_rt_link = *xpp;
+        *xpp = caller_ptr;
+
+        /* process is removed from scheduling queue */
+        edf_rp = NIL_PROC;
+        
+        /* Check which process with earliest deadline may be scheduled now */
+        edf_sched();
+    }
   } else {
 	return(ENOTREADY);
   }
   return(OK);
 }
 
+
 /*===========================================================================*
  *				mini_receive				     * 
  *===========================================================================*/
@@ -417,7 +556,32 @@
       caller_ptr->p_getfrom_e = src_e;		
       caller_ptr->p_messbuf = m_ptr;
       if (caller_ptr->p_rts_flags == 0) dequeue(caller_ptr);
-      caller_ptr->p_rts_flags |= RECEIVING;		
+      caller_ptr->p_rts_flags |= RECEIVING;	
+        
+      /* if the caller is a real-time process scheduled
+       * using EDF, we put this process on the edf block list.
+       * The order of the block list is not important. In this case
+       * we add the process to the end of the list.
+       */
+      if (is_rtp(caller_ptr) && rt_sched == SCHED_EDF) {
+          
+          /* find end of block list */
+          xpp = &edf_block_head;
+          while (*xpp != NIL_PROC) {
+              xpp = &(*xpp)->p_rt_link;
+          }
+
+          /* Add process to the block list */
+          caller_ptr->p_rt_link = *xpp;
+          *xpp = caller_ptr;
+
+          /* Process is not scheduled any more */
+          edf_rp = NIL_PROC;
+
+          /* Check if an EDF  process with earliest deadline can be scheduled */
+          edf_sched();
+      }     
+      
       return(OK);
   } else {
       return(ENOTREADY);
@@ -509,7 +673,8 @@
  */
   int q;	 				/* scheduling queue to use */
   int front;					/* add to front or back */
-
+  register struct proc **xpp;
+  
 #if DEBUG_SCHED_CHECK
   check_runqueues("enqueue");
   if (rp->p_ready) kprintf("enqueue() already ready process\n");
@@ -519,20 +684,51 @@
   sched(rp, &q, &front);
 
   /* Now add the process to the queue. */
-  if (rdy_head[q] == NIL_PROC) {		/* add to empty queue */
-      rdy_head[q] = rdy_tail[q] = rp; 		/* create a new queue */
-      rp->p_nextready = NIL_PROC;		/* mark new end */
-  } 
-  else if (front) {				/* add to head of queue */
-      rp->p_nextready = rdy_head[q];		/* chain head of queue */
-      rdy_head[q] = rp;				/* set new queue head */
-  } 
-  else {					/* add to tail of queue */
-      rdy_tail[q]->p_nextready = rp;		/* chain tail of queue */	
-      rdy_tail[q] = rp;				/* set new queue tail */
-      rp->p_nextready = NIL_PROC;		/* mark new end */
-  }
+  if(! is_rtp(rp) || (is_rtp(rp) && rt_sched == SCHED_EDF)) {
+      
+      /* process is not real-time or process is real-time and
+       * scheduled using EDF.
+       */
+      if (rdy_head[q] == NIL_PROC) {		/* add to empty queue */
+          rdy_head[q] = rdy_tail[q] = rp; 		/* create a new queue */
+          rp->p_nextready = NIL_PROC;		/* mark new end */
+      } 
+      else if (front) {				/* add to head of queue */
+          rp->p_nextready = rdy_head[q];		/* chain head of queue */
+          rdy_head[q] = rp;				/* set new queue head */
+      } 
+      else {					/* add to tail of queue */
+          rdy_tail[q]->p_nextready = rp;		/* chain tail of queue */	
+          rdy_tail[q] = rp;				/* set new queue tail */
+          rp->p_nextready = NIL_PROC;		/* mark new end */
+      }
+  } else if (is_rtp(rp) && rt_sched == SCHED_RM) {
+      
+      /* process is real-time and scheduled using
+       * Rate-monotic. The queue used by Rate-Monotic is ordered by p_rt_priority
+       * ascending. The lower the priority number the higher the priority.
+       * We will have to search the queue for the right place to insert this process.
+       */
+      xpp = &rdy_head[q];
+      
+      /* find the right place in the scheduling queue */
+      while (*xpp != NIL_PROC && (*xpp)->p_rt_priority <= rp->p_rt_priority) {
+          xpp = &(*xpp)->p_nextready;
+      }
+      
+      /* insert process in the scheduling queue */
+      rp->p_nextready = *xpp;
+      *xpp = rp;
 
+      /* Even though we don't use the tail at all,
+       * we want to keep the scheduler debug routines happy.
+       */
+      if (rp->p_nextready == NIL_PROC) {
+          rdy_tail[q] = rp;
+      }      
+  } else {
+      panic("Unknown scheduler type in enqueue()", NO_NUM);
+  }    
   /* Now select the next process to run. */
   pick_proc();			
 
@@ -607,13 +803,40 @@
 
   /* Check whether the process has time left. Otherwise give a new quantum 
    * and lower the process' priority, unless the process already is in the 
-   * lowest queue.  
+   * lowest queue. Only check when the process is NOT real-time!
    */
-  if (! time_left) {				/* quantum consumed ? */
+  if (! time_left && !is_rtp(rp)) {				/* quantum consumed ? */
       rp->p_ticks_left = rp->p_quantum_size; 	/* give new quantum */
       if (rp->p_priority < (IDLE_Q-1)) {  	 
           rp->p_priority += 1;			/* lower priority */
+
+
+          /* We don't want processes that are lowered in priority
+           * end up in the real-time queue. There are two policies:
+           * allow processes to get a lower priority than RT processes
+           * or not. rt_sched_bridge holds this policy. Before the system shuts
+           * down we will have to allow processes to get a lower priority than
+           * RT processes otherwise the system will not shutdown properly.
+           */
+          if (rp->p_priority == RT_Q) {
+              if (! rt_sched_bridge) {
+                  /* We don't allow processes that have a higher priority than
+                   * RT processes to get a lower priority than RT processes.
+                   * The lowest priority is the priority above the RT priority.
+                   * Please note that the lower the priority number the higher the
+                   * priority.
+                   */
+                  rp->p_priority = RT_Q - 1;
+              } else {
+                  /* We allow processes with a high priority that is lowered in
+                   * priority to get a lower priority than RT processes.
+                   * The highest process below RT processes is USER_Q.
+                   */
+                  rp->p_priority = USER_Q;
+              }
+          }    
       }
+
   }
 
   /* If there is time left, the process is added to the front of its queue, 
@@ -635,7 +858,8 @@
  */
   register struct proc *rp;			/* process to run */
   int q;					/* iterate over queues */
-
+  static int prev_logged = NONE;
+  
   /* Check each of the scheduling queues for ready processes. The number of
    * queues is defined in proc.h, and priorities are set in the task table.
    * The lowest queue contains IDLE, which is always ready.
@@ -645,6 +869,43 @@
           next_ptr = rp;			/* run process 'rp' next */
           if (priv(rp)->s_flags & BILLABLE)	 	
               bill_ptr = rp;			/* bill for system time */
+
+          /* Kernel schedule logging which
+           * keeps track of all context switches
+           * First check if we have to log.
+           */
+          if (klog_state == 1 && klog_type == KLOG_CONTEXTSWITCH && klog_ptr < KLOG_SIZE) {
+             
+              /* We hold the previous logged process in prev_logged because we
+               * dont want double entries from the clock and system task.
+               * These tasks can use dequeue and enqueue functions which call pick_proc.
+               * We want to avoid those 'fake' entries.
+               */
+              if (! ((rp->p_endpoint == CLOCK || rp->p_endpoint == SYSTEM) && 
+                     (rp->p_endpoint == prev_logged))) {
+                  
+                  klog[klog_ptr].klog_data = rp->p_nr; /* save process number */
+                  klog[klog_ptr].klog_endpoint = rp->p_endpoint; /* save endpoint */
+                  klog[klog_ptr].klog_time = get_uptime(); /* save current time in ticks since boot*/
+              
+                  strcpy(klog[klog_ptr].klog_name, rp->p_name); /* save process name */
+
+                  prev_logged = rp->p_endpoint; /* set the prev_logged var */
+                  klog_ptr++; /* increase kernel log pointer */
+                  
+                  if (klog_ptr >= KLOG_SIZE) {
+                      /* Kernel log buffer is full.
+                       * We disable logging by setting klog_state to 0.
+                       * We also reset klog_ptr and prev_logged.
+                       */
+                      kprintf("klog buffer full!\n");
+                      klog_state = 0;
+                      klog_ptr = 0;
+                      prev_logged = NONE;
+                 }
+              }
+          }
+
           return;				 
       }
   }
@@ -673,6 +934,21 @@
 	      if (rp->p_rts_flags == 0) dequeue(rp);	/* take off queue */
 	      ticks_added += rp->p_quantum_size;	/* do accounting */
 	      rp->p_priority -= 1;			/* raise priority */
+
+          /* We don't want processes that are highered in priority
+           * to end up in the real-time queue. In normal cases they
+           * get a priority higher than the RT priority. We just do a 
+           * check for safety if a process is allowed to get this priority.
+           */
+          if (rp->p_priority == RT_Q) {
+              if (rp->p_max_priority <= (RT_Q - 1)) {
+                  rp->p_priority = RT_Q - 1;
+              } else {
+                  /* should not happen */
+                  rp->p_priority = USER_Q;
+              }
+          }    
+          
 	      if (rp->p_rts_flags == 0) enqueue(rp);	/* put on queue */
 	  }
 	  else {
@@ -788,3 +1064,152 @@
 	return ok;
 }
 
+/*===========================================================================*
+ *              edf_sched                                                    *
+ *===========================================================================*/
+#define DEBUG_EDF_SCHED 0 
+PUBLIC void edf_sched(void)
+{
+  struct proc *temp_p;
+
+  /* if no EDF process is scheduled, check if an EDF process
+   * can be scheduled. If an EDF process is scheduled check if there is a
+   * other process with an earlier deadline, and schedule that process.
+   */
+  
+  if (edf_rp == NIL_PROC) {
+      /* no EDF process is scheduled,
+       * Check if the EDF run queue is not empty.
+       * If it is not empty run the head process.
+       */
+      if (edf_run_head != NIL_PROC) {
+          
+          /* new EDF process to schedule */
+          edf_rp = edf_run_head;
+
+          /* remove the new process from the run queue */
+          edf_run_head = edf_rp->p_rt_link;
+          
+          /* add process to the scheduling queue */
+          lock_enqueue(edf_rp);
+          
+          #if DEBUG_EDF_SCHED == 1
+          kprintf("edf_sched(): edf_rp = %s %d\n", edf_rp->p_name, edf_rp->p_endpoint);
+          #endif 
+      } else {
+          /* edf run queue is empty, no process to run */
+          #if DEBUG_EDF_SCHED == 1
+          kprintf("edf_sched(): edf_rp = NONE\n");
+          #endif
+      }
+  } else if (edf_run_head != NIL_PROC &&
+             edf_run_head->p_rt_nextperiod < edf_rp->p_rt_nextperiod) {
+      
+      struct proc * prev_p;
+      /* The head process in the EDF run queue has an earlier deadline
+       * than the current scheduled EDF process. Remove the current scheduled EDF 
+       * process from the scheduling queue and schedule the 
+       * process with the earliest deadline.
+       */
+      
+      /* remove the current process from the scheduling queue */
+      lock_dequeue(edf_rp);
+
+      /* Remove the now scheduled EDF process from the run queue and
+       * save it in prev_p. Add the previous running process to the EDF
+       * run queue.
+       */
+
+      /* save the previous running process to prev_p */
+      prev_p = edf_rp; 
+
+      /* We replace the head of the run queue so prev_p will be linked to the same
+       * process as the new schedulable EDF process is linking. The new schedulable EDF process is
+       * still the head of the EDF run queue.
+       */
+      prev_p->p_rt_link = edf_run_head->p_rt_link; 
+      
+      /* new EDF process to run */
+      edf_rp = edf_run_head;
+
+      /* edf_rp contains only one process so
+       * edf_rp is not linked to other processes
+       */
+      edf_rp->p_rt_link = NIL_PROC;
+      
+      /* substitute the current schedulable process with the previous scheduled process
+       * in the EDF run queue.
+       */
+      edf_run_head = prev_p;
+      
+      /* add the new schedulable EDF process to the scheduling queue */
+      lock_enqueue(edf_rp);
+      
+      #if DEBUG_EDF_SCHED == 1
+      kprintf("edf_sched(): edf_rp = %s %d\n", edf_rp->p_name, edf_rp->p_endpoint);
+      #endif
+  }      
+}
+
+/*===========================================================================*
+ *              show_rt_data                                                 *
+ *===========================================================================*/
+PUBLIC void show_rt_data(void)
+{
+  struct proc **xpp;
+  
+  /* Dump scheduling info for Real-time Schedulers.
+   * Currently Rate-Monotonic and Earliest Deadline First is supported.
+   */
+  
+  if (rt_sched == SCHED_EDF) {
+      
+      /* Current RT scheduler is Earliest Deadline First.
+       * Display processes in edf_rp, run queue, block list and wait queue.
+       */
+      
+      kprintf("- edf_rp: ");
+      if (edf_rp != NIL_PROC) {
+          kprintf("[%d:%d:%d]", edf_rp->p_endpoint, edf_rp->p_rt_nextperiod, edf_rp->p_rt_ticksleft);
+      }
+
+      kprintf(" RQ: ");
+      xpp = &edf_run_head;
+      while (*xpp != NIL_PROC) {
+          kprintf("[%d:%d] ", (*xpp)->p_endpoint, (*xpp)->p_rt_nextperiod);
+          xpp = &(*xpp)->p_rt_link;
+      }
+
+      kprintf(" BQ: ");
+      xpp = &edf_block_head;
+      while (*xpp != NIL_PROC) {
+          kprintf("[%d:%d] ", (*xpp)->p_endpoint, (*xpp)->p_rt_nextperiod);
+          xpp = &(*xpp)->p_rt_link;
+      }
+      
+      kprintf(" WQ: ");
+      xpp = &edf_wait_head;
+      while (*xpp != NIL_PROC) {
+          kprintf("[%d:%d] ", (*xpp)->p_endpoint, (*xpp)->p_rt_nextperiod);
+          xpp = &(*xpp)->p_rt_link;
+      }
+
+      kprintf("\n");
+  } else if (rt_sched == SCHED_RM) {
+      
+      /* Current RT scheduler is Rate-Monotonic.
+       * Display processes in the Rate-Monotonic queue.
+       */
+      
+      kprintf("RM Q: ");
+       
+      xpp = &rdy_head[RT_Q];
+      while (*xpp != NIL_PROC) {
+          kprintf("[%d:%d:%s] ", (*xpp)->p_rt_priority, (*xpp)->p_endpoint, (*xpp)->p_name);
+          xpp = &(*xpp)->p_nextready;
+      }
+
+      kprintf("\n");    
+  }      
+}   
+
diff -Naur /usr/src_original/kernel/proc.h /usr/src/kernel/proc.h
--- /usr/src_original/kernel/proc.h	2006-03-15 12:01:58.000000000 +0000
+++ /usr/src/kernel/proc.h	2009-10-04 23:53:14.000000000 +0000
@@ -10,6 +10,7 @@
  * struct proc, be sure to change sconst.h to match.
  */
 #include <minix/com.h>
+#include <minix/klog.h>
 #include "protect.h"
 #include "const.h"
 #include "priv.h"
@@ -54,6 +55,21 @@
 
   int p_endpoint;		/* endpoint number, generation-aware */
 
+  /* fields for Real-time */
+  char p_rt; 			/* is process real-time? */
+  int p_rt_priority;    /* static priority used by RM scheduler */
+  int p_rt_period;      /* period of current process, used by EDF scheduler */
+  int p_rt_calctime;    /* calculation time in each period, used by EDF scheduler */
+  int p_rt_nextperiod;  /* ticks till next period start, used by EDF scheduler */
+  int p_rt_ticksleft;   /* calculation time left in current period, used by EDF scheduler */
+  struct proc *p_rt_link; /* used by EDF scheduler to link processes in the EDF data structures */
+  
+  /* fields for Real-time: EDF statistics */
+  unsigned int p_rt_periodnr; /* period counter */
+  unsigned int p_rt_totalreserved; /* total reserved ticks */
+  unsigned int p_rt_totalused; /* total used ticks */
+  unsigned int p_rt_missed_dl; /* missed deadline counter */
+  
 #if DEBUG_SCHED_CHECK
   int p_ready, p_found;
 #endif
@@ -70,6 +86,7 @@
 #define NO_PRIV		0x80	/* keep forked system process from running */
 #define NO_PRIORITY    0x100	/* process has been stopped */
 #define NO_ENDPOINT    0x200	/* process cannot send or receive messages */
+#define NEXTPERIOD     0x400   /* EDF process is waiting for next period */
 
 /* Misc flags */
 #define REPLY_PENDING	0x01	/* reply to IPC_REQUEST is pending */
@@ -81,11 +98,12 @@
  * priority user processes to run round-robin with IDLE. 
  */
 #define NR_SCHED_QUEUES   16	/* MUST equal minimum priority + 1 */
-#define TASK_Q		   0	/* highest, used for kernel tasks */
-#define MAX_USER_Q  	   0    /* highest priority for user processes */   
-#define USER_Q  	   7    /* default (should correspond to nice 0) */   
-#define MIN_USER_Q	  14	/* minimum priority for user processes */
-#define IDLE_Q		  15    /* lowest, only IDLE process goes here */
+#define TASK_Q		       0	/* highest, used for kernel tasks */
+#define MAX_USER_Q         0    /* highest priority for user processes */   
+#define USER_Q  	       8    /* default (should correspond to nice 0) */   
+#define MIN_USER_Q	      14	/* minimum priority for user processes */
+#define IDLE_Q		      15    /* lowest, only IDLE process goes here */
+#define RT_Q               7    /* Queue for real-time processes */
 
 /* Magic process table addresses. */
 #define BEG_PROC_ADDR (&proc[0])
@@ -116,4 +134,44 @@
 EXTERN struct proc *rdy_head[NR_SCHED_QUEUES]; /* ptrs to ready list headers */
 EXTERN struct proc *rdy_tail[NR_SCHED_QUEUES]; /* ptrs to ready list tails */
 
+/* macro for checking if a process is real-time */
+#define is_rtp(p) ((p)->p_rt != 0)
+
+/* variables for RT scheduling and kernel logging */
+
+/* RT scheduler */
+EXTERN int rt_sched;
+
+/* scheduling bridge state */
+EXTERN int rt_sched_bridge;
+
+/* priority policy for Rate-Monotonic scheduling.
+ * Priority can be enforced to be unique.
+ */
+EXTERN int rm_prio_policy;
+
+/* current scheduled EDF process */
+EXTERN struct proc *edf_rp;
+
+/* Head of EDF processes that are ready */
+EXTERN struct proc *edf_run_head;
+
+/* Head of EDF processes that are waiting till next period starts */
+EXTERN struct proc *edf_wait_head;
+
+/* Head of EDF processes that are blocked and still have calculation time left */
+EXTERN struct proc *edf_block_head; 
+
+/* kernel log state. If 1 log. */
+EXTERN int klog_state;
+
+/* what to log? */
+EXTERN int klog_type;
+
+/* kernel log */
+EXTERN struct klog_entry klog[KLOG_SIZE];
+
+/* Pointer to next entry in kernel log */
+EXTERN int klog_ptr;
+
 #endif /* PROC_H */
diff -Naur /usr/src_original/kernel/proto.h /usr/src/kernel/proto.h
--- /usr/src_original/kernel/proto.h	2006-03-15 16:15:23.000000000 +0000
+++ /usr/src/kernel/proto.h	2009-10-04 23:53:14.000000000 +0000
@@ -39,6 +39,9 @@
 #define isokendpt_d(e, p, f) isokendpt_f((e), (p), (f))
 #endif
 
+_PROTOTYPE( void edf_sched, (void) );
+_PROTOTYPE( void show_rt_data, (void) );
+
 /* start.c */
 _PROTOTYPE( void cstart, (U16_t cs, U16_t ds, U16_t mds,
 				U16_t parmoff, U16_t parmsize)		);
diff -Naur /usr/src_original/kernel/system/.depend /usr/src/kernel/system/.depend
--- /usr/src_original/kernel/system/.depend	2006-05-03 23:38:28.000000000 +0000
+++ /usr/src/kernel/system/.depend	2009-10-04 23:53:14.000000000 +0000
@@ -548,6 +548,72 @@
 do_privctl.o:	/usr/include/timers.h
 do_privctl.o:	do_privctl.c
 
+do_rt_set.o:	../config.h
+do_rt_set.o:	../const.h
+do_rt_set.o:	../debug.h
+do_rt_set.o:	../glo.h
+do_rt_set.o:	../ipc.h
+do_rt_set.o:	../kernel.h
+do_rt_set.o:	../priv.h
+do_rt_set.o:	../proc.h
+do_rt_set.o:	../protect.h
+do_rt_set.o:	../proto.h
+do_rt_set.o:	../system.h
+do_rt_set.o:	../type.h
+do_rt_set.o:	/usr/include/ansi.h
+do_rt_set.o:	/usr/include/errno.h
+do_rt_set.o:	/usr/include/ibm/bios.h
+do_rt_set.o:	/usr/include/ibm/cpu.h
+do_rt_set.o:	/usr/include/ibm/interrupt.h
+do_rt_set.o:	/usr/include/ibm/portio.h
+do_rt_set.o:	/usr/include/ibm/ports.h
+do_rt_set.o:	/usr/include/limits.h
+do_rt_set.o:	/usr/include/minix/com.h
+do_rt_set.o:	/usr/include/minix/config.h
+do_rt_set.o:	/usr/include/minix/const.h
+do_rt_set.o:	/usr/include/minix/ipc.h
+do_rt_set.o:	/usr/include/minix/rt.h
+do_rt_set.o:	/usr/include/minix/sys_config.h
+do_rt_set.o:	/usr/include/minix/type.h
+do_rt_set.o:	/usr/include/sys/dir.h
+do_rt_set.o:	/usr/include/sys/resource.h
+do_rt_set.o:	/usr/include/sys/types.h
+do_rt_set.o:	/usr/include/timers.h
+do_rt_set.o:	do_rt_set.c
+
+do_rt_set_sched.o:	../config.h
+do_rt_set_sched.o:	../const.h
+do_rt_set_sched.o:	../debug.h
+do_rt_set_sched.o:	../glo.h
+do_rt_set_sched.o:	../ipc.h
+do_rt_set_sched.o:	../kernel.h
+do_rt_set_sched.o:	../priv.h
+do_rt_set_sched.o:	../proc.h
+do_rt_set_sched.o:	../protect.h
+do_rt_set_sched.o:	../proto.h
+do_rt_set_sched.o:	../system.h
+do_rt_set_sched.o:	../type.h
+do_rt_set_sched.o:	/usr/include/ansi.h
+do_rt_set_sched.o:	/usr/include/errno.h
+do_rt_set_sched.o:	/usr/include/ibm/bios.h
+do_rt_set_sched.o:	/usr/include/ibm/cpu.h
+do_rt_set_sched.o:	/usr/include/ibm/interrupt.h
+do_rt_set_sched.o:	/usr/include/ibm/portio.h
+do_rt_set_sched.o:	/usr/include/ibm/ports.h
+do_rt_set_sched.o:	/usr/include/limits.h
+do_rt_set_sched.o:	/usr/include/minix/com.h
+do_rt_set_sched.o:	/usr/include/minix/config.h
+do_rt_set_sched.o:	/usr/include/minix/const.h
+do_rt_set_sched.o:	/usr/include/minix/ipc.h
+do_rt_set_sched.o:	/usr/include/minix/rt.h
+do_rt_set_sched.o:	/usr/include/minix/sys_config.h
+do_rt_set_sched.o:	/usr/include/minix/type.h
+do_rt_set_sched.o:	/usr/include/sys/dir.h
+do_rt_set_sched.o:	/usr/include/sys/resource.h
+do_rt_set_sched.o:	/usr/include/sys/types.h
+do_rt_set_sched.o:	/usr/include/timers.h
+do_rt_set_sched.o:	do_rt_set_sched.c
+
 do_sdevio.o:	../config.h
 do_sdevio.o:	../const.h
 do_sdevio.o:	../debug.h
diff -Naur /usr/src_original/kernel/system/Makefile /usr/src/kernel/system/Makefile
--- /usr/src_original/kernel/system/Makefile	2005-09-30 12:54:59.000000000 +0000
+++ /usr/src/kernel/system/Makefile	2009-10-04 23:53:14.000000000 +0000
@@ -47,6 +47,13 @@
 	$(SYSTEM)(do_iopenable.o) \
 	$(SYSTEM)(do_vm.o) \
 	$(SYSTEM)(do_vm_setbuf.o) \
+	$(SYSTEM)(do_rt_set_sched.o) \
+	$(SYSTEM)(do_rt_set.o) \
+	$(SYSTEM)(do_rt_show_data.o) \
+	$(SYSTEM)(do_rt_nextperiod.o) \
+	$(SYSTEM)(do_rt_set_sched_bridge.o) \
+	$(SYSTEM)(do_klog_set.o) \
+	$(SYSTEM)(do_klog_copy.o) \
 
 $(SYSTEM):	$(OBJECTS)
 	aal cr $@ *.o
@@ -151,3 +158,24 @@
 
 $(SYSTEM)(do_vm_setbuf.o):	do_vm_setbuf.c
 	$(CC) do_vm_setbuf.c
+
+$(SYSTEM)(do_rt_set_sched.o): do_rt_set_sched.c
+	$(CC) do_rt_set_sched.c
+
+$(SYSTEM)(do_rt_set.o): do_rt_set.c
+	$(CC) do_rt_set.c
+
+$(SYSTEM)(do_rt_show_data.o): do_rt_show_data.c
+	$(CC) do_rt_show_data.c
+
+$(SYSTEM)(do_rt_nextperiod.o): do_rt_nextperiod.c
+	$(CC) do_rt_nextperiod.c
+
+$(SYSTEM)(do_rt_set_sched_bridge.o): do_rt_set_sched_bridge.c
+	$(CC) do_rt_set_sched_bridge.c
+
+$(SYSTEM)(do_klog_set.o): do_klog_set.c
+	$(CC) do_klog_set.c
+
+$(SYSTEM)(do_klog_copy.o): do_klog_copy.c
+	$(CC) do_klog_copy.c
diff -Naur /usr/src_original/kernel/system/do_exit.c /usr/src/kernel/system/do_exit.c
--- /usr/src_original/kernel/system/do_exit.c	2006-03-15 12:01:59.000000000 +0000
+++ /usr/src/kernel/system/do_exit.c	2009-10-04 23:53:14.000000000 +0000
@@ -8,6 +8,7 @@
 #include "../system.h"
 
 #include <minix/endpoint.h>
+#include <minix/rt.h>
 
 #if USE_EXIT
 
@@ -87,6 +88,71 @@
   /* Clean up virtual memory */
   if (rc->p_misc_flags & MF_VM)
   	vm_map_default(rc);
+
+  /* additional clean-up for real-time processes */
+  if (is_rtp(rc)) {
+      
+      #if 0
+      kprintf("Exit from RT process %d %s\n", rc->endpoint, rc->p_name);
+      #endif    
+      
+      /* set process slot to non-RT */
+      rc->p_rt = 0;
+
+      /* additional clean-up for EDF processes */
+      if (rt_sched == SCHED_EDF) {
+          /* remove process from one of the EDF data structures */
+          
+          /* check edf_rp */
+          if (edf_rp != NIL_PROC && edf_rp == rc) {
+              edf_rp = NIL_PROC;
+              
+              /* This process was last running.
+               * Check if other EDF process can run now.
+               */    
+              edf_sched();
+          } else {
+             
+              /* check run queue */
+              xpp = &edf_run_head;
+              while (*xpp != NIL_PROC && *xpp != rc) {
+                  xpp = &(*xpp)->p_rt_link;
+              }
+              
+              /* *xpp only equals NIL_PROC if
+               * the queue is empty or the process is not found.
+               */
+              if (*xpp != NIL_PROC) {
+                  /* Remove process from queue.
+                   * The pointer pointing to the exited process
+                   * will point to the process linked (pointed) 
+                   * by the exited process. 
+                   */
+                  *xpp = (*xpp)->p_rt_link;
+              }
+
+              /* check  block list */
+              xpp = &edf_block_head;
+              while (*xpp != NIL_PROC && *xpp != rc) {
+                  xpp = &(*xpp)->p_rt_link;
+              }
+
+              if (*xpp != NIL_PROC) {
+                  *xpp = (*xpp)->p_rt_link;
+              }    
+
+              /* check  wait queue */
+              xpp = &edf_wait_head;
+              while (*xpp != NIL_PROC && *xpp != rc) {
+                  xpp = &(*xpp)->p_rt_link;
+              }
+
+              if (*xpp != NIL_PROC) {
+                  *xpp = (*xpp)->p_rt_link;
+              }    
+          }    
+      }
+  }    
 }
 
 #endif /* USE_EXIT */
diff -Naur /usr/src_original/kernel/system/do_klog_copy.c /usr/src/kernel/system/do_klog_copy.c
--- /usr/src_original/kernel/system/do_klog_copy.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_klog_copy.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,64 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_KLOG_COPY
+ *
+ * The parameters for this kernel call are:
+ *    m1_i1:    KLOG_ENDPT    Endpoint of user program
+ *    m1_p1:    KLOG_PTR      (virtual) pointer to kernel log in user program
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/klog.h>
+
+/*===========================================================================*
+ *                  do_klog_copy                                             *
+ *===========================================================================*/
+PUBLIC int do_klog_copy(message *m_ptr)
+{
+  /* Copy the kernel log from the kernel to a user program. */
+    
+  size_t length; /* We store the kernel log size in bytes here */
+  phys_bytes src_phys; /* We store the physical address of the log in the kernel here */
+  phys_bytes dst_phys; /* We store the physical address of the log in the user program here */
+  int proc_nr; /* process number of user program */
+  
+  /* calculate the size of the kernel log which is
+   * the size of a struct klog_entry multiplied by the 
+   * number of entries in the log. KLOG_SIZE is defined in
+   * <minix/klog.h>. This is the number of bytes we are gonna copy.
+   */
+  length = sizeof(struct klog_entry) * KLOG_SIZE;
+  
+  /* We can't use virtual memory addresses to copy from kernel to
+   * user program. We will have to translate both the source and destination
+   * to physical addresses.
+   */
+  
+  /* Translate virtual address of the log in the kernel
+   * to the physical address.
+   */
+  src_phys = vir2phys(&klog);
+  
+  /* Check if endpoint of user program is valid and get the process number */
+  if (! isokendpt(m_ptr->KLOG_ENDPT, &proc_nr)) {
+      return (EFAULT);
+  }
+
+  /* Translate the virtual address of the log in the user program
+   * to the physical address.
+   */
+  dst_phys = numap_local(proc_nr, (vir_bytes) m_ptr->KLOG_PTR, length);
+
+  /* translating went wrong if this is true */
+  if (src_phys == 0 || dst_phys == 0) {
+      kprintf("systask: do_klog_copy() src_phys or dst_phys == 0\n");
+      return (EFAULT);
+  }
+
+  /* finally copy the log to the user program */
+  phys_copy(src_phys, dst_phys, length);  
+  
+  return (OK);    
+}
+
diff -Naur /usr/src_original/kernel/system/do_klog_set.c /usr/src/kernel/system/do_klog_set.c
--- /usr/src_original/kernel/system/do_klog_set.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_klog_set.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,44 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_KLOG_SET
+ *
+ * The parameters for this kernel call are:
+ *    m1_i1:    KLOG_STATE       Kernel logger state
+ *    m1_i2     KLOG_TYPE        Kernel log type
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/klog.h>
+
+/*===========================================================================*
+ *                  do_klog_set                                              *
+ *===========================================================================*/
+PUBLIC int do_klog_set(message *m_ptr)
+{
+
+  /* check if the type specified is valid */
+  if (m_ptr->KLOG_TYPE != KLOG_CONTEXTSWITCH &&
+      m_ptr->KLOG_TYPE != KLOG_CLOCKINT) {
+      
+      return EINVAL;
+  }  
+    
+  /* Set the kernel logger state.
+   * If set to 1 it will log untill the buffer is full.
+   * If the buffer is full the state will be set back to 0.
+   */
+  klog_state = m_ptr->KLOG_STATE;
+
+  /* Set the kernel log type
+   * If set to KLOG_CONTEXTSWITCH it will log every process
+   * that will run next after a context switch.
+   * If set to KLOG_CLOCKINT it will log every process
+   * that was running when the clock interrupt happened.
+   */
+  klog_type = m_ptr->KLOG_TYPE; 
+  
+  return (OK);    
+}
+
+
diff -Naur /usr/src_original/kernel/system/do_nice.c /usr/src/kernel/system/do_nice.c
--- /usr/src_original/kernel/system/do_nice.c	2006-03-10 16:10:04.000000000 +0000
+++ /usr/src/kernel/system/do_nice.c	2009-10-04 23:53:14.000000000 +0000
@@ -24,9 +24,12 @@
   /* Extract the message parameters and do sanity checking. */
   if(!isokendpt(m_ptr->PR_ENDPT, &proc_nr)) return EINVAL;
   if (iskerneln(proc_nr)) return(EPERM);
+  
   pri = m_ptr->PR_PRIORITY;
   rp = proc_addr(proc_nr);
 
+  if (is_rtp(rp)) return (EPERM); /* don't allow nice for RT processes */
+
   if (pri == PRIO_STOP) {
 
       /* Take process off the scheduling queues. */
@@ -45,6 +48,8 @@
       if (new_q < MAX_USER_Q) new_q = MAX_USER_Q;	/* shouldn't happen */
       if (new_q > MIN_USER_Q) new_q = MIN_USER_Q;	/* shouldn't happen */
 
+      if (new_q == RT_Q && !is_rtp(rp)) return (EINVAL); /* don't allow other processes in the RT queue */
+      
       /* Make sure the process is not running while changing its priority. 
        * Put the process back in its new queue if it is runnable.
        */
diff -Naur /usr/src_original/kernel/system/do_rt_nextperiod.c /usr/src/kernel/system/do_rt_nextperiod.c
--- /usr/src_original/kernel/system/do_rt_nextperiod.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_rt_nextperiod.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,103 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_RT_NEXTPERIOD
+ *
+ * The parameters for this kernel call are:
+ *    m7_i1:    RT_ENDPT  Endpoint of process that wants to give up calc time
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/rt.h>
+
+
+/*===========================================================================*
+ *                  do_rt_nextperiod                                         *
+ *===========================================================================*/
+PUBLIC int do_rt_nextperiod(message *m_ptr)
+{
+  /* A process scheduled using Earliest Deadline First can give up
+   * remaining calculation time using this kernel call.
+   * A process that invoked this kernel call is on the block list waiting
+   * for a reply from PM. We will have to remove it from the block list
+   * and put it on the wait queue waiting for the next period.
+   */
+  struct proc * rp;
+  struct proc **xpp;
+  int proc_nr;
+
+  /* if rt_sched is not SCHED_EDF this kernel call
+   * is not allowed!
+   */
+  if (rt_sched != SCHED_EDF) {
+      return (EPERM);
+  }    
+  
+  /* check if endpoint is valid and convert endpoint to
+   *  process number stored in proc_nr
+   */
+  if (! isokendpt(m_ptr->RT_ENDPT, &proc_nr)) {
+      return (EINVAL);
+  }        
+  
+  /* get pointer to process from proc_nr */
+  rp = proc_addr(proc_nr);
+
+  /* check if process is real-time */
+  if (! is_rtp(rp) ) {
+      return (EPERM);
+  }    
+  
+  if (rp->p_rts_flags == 0) {
+      /* p_rts_flags cannot be 0 because
+       * the process is waiting for a reply from
+       * PM
+       */
+      return (EPERM);
+  }    
+  
+  /* remove process from the block list.
+   * We first have to find the process in the list.
+   */
+  xpp = &edf_block_head;
+  while (*xpp != NIL_PROC && *xpp != rp) {
+      xpp = &(*xpp)->p_rt_link;
+  }
+
+  /* *xpp == NIL_PROC if the list was empty or process not found.
+   * This may not happen normally.
+   */
+  if (*xpp != NIL_PROC) {
+      /* Remove the process from the list.
+       * We set the pointer that points to the process we remove
+       * to the process that the process we remove is linked to.
+       */
+      *xpp = (*xpp)->p_rt_link;
+  }  
+
+  /* Add process to the wait queue.
+   * This quueue is sorted on next period start.
+   * We will have to find the right place in the queue first.
+   */
+  xpp = &edf_wait_head;
+  while (*xpp != NIL_PROC && (*xpp)->p_rt_nextperiod <= rp->p_rt_nextperiod) {
+      xpp = &(*xpp)->p_rt_link;
+  }
+
+  /* Add process to the queue */
+  rp->p_rt_link = *xpp;
+  *xpp = rp;  
+  
+  /* Make sure that no other code will schedule this process
+   * until the new period starts by setting the NEXTPERIOD bit.
+   * If p_rts_flags is not 0, a process is not runnable.
+   */
+  rp->p_rts_flags |= NEXTPERIOD;
+ 
+  #if 0
+  kprintf("%d %s gave up %d/%d ticks\n", rp->p_endpoint, rp->p_name, rp->p_rt_ticksleft, rp->p_rt_calctime);
+  #endif
+  
+  return (OK);    
+}
+
diff -Naur /usr/src_original/kernel/system/do_rt_set.c /usr/src/kernel/system/do_rt_set.c
--- /usr/src_original/kernel/system/do_rt_set.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_rt_set.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,198 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_RT_SET
+ *
+ * The parameters for this kernel call are:
+ *    m7_i1     RT_ENDPT        endpoint of process that wants to be RT
+ *    m7_i2     RT_SCHED        Scheduler type
+ *    m7_i3     RM_PRIO         rate-monotonic static priority (used by RM only)
+ *    m7_i3     EDF_PERIOD      period of process (used by EDF only)
+ *    m7_i4     EDF_CALCTIME    calculation time per period (used by EDF only)
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/rt.h>
+
+FORWARD _PROTOTYPE( int do_rt_set_rm, (message *m_ptr, struct proc *rp) );
+FORWARD _PROTOTYPE( int do_rt_set_edf, (message *m_ptr, struct proc *rp) );
+
+/*===========================================================================*
+ *                  do_rt_set                                                *
+ *===========================================================================*/
+PUBLIC int do_rt_set(message *m_ptr)
+{
+  /* Transform a normal user process into a real-time process */
+    
+  struct proc *rp; /* pointer to process that wants to be real-time */
+  int proc_nr; /* process number of process that wants to be real-time */
+  
+  /* if scheduler is undefined we cannot
+   * make processes real-time
+   */    
+  if (rt_sched == SCHED_UNDEFINED) {
+      return (EPERM);
+  }
+
+  /* if rt_sched is not equal to the
+   * scheduler defined in the message
+   * we cannot make this process real-time
+   */
+  if (rt_sched != m_ptr->RT_SCHED) {
+      return (EINVAL);
+  }  
+  
+  /* check if endpoint is valid and convert endpoint
+   * to process number stored in proc_nr
+   */
+  if (! isokendpt(m_ptr->RT_ENDPT, &proc_nr)) {
+      return (EINVAL);
+  }
+
+  /* get pointer to process from process number */
+  rp = proc_addr(proc_nr);
+  
+  /* a process that is already real-time may
+   * not call this function.
+   */
+  if (is_rtp(rp)) {
+      return (EPERM);
+  }    
+  
+  /* Dispatch to the right function.
+   * Each scheduler type has its own function.
+   */
+  switch (rt_sched) {
+      case SCHED_RM:
+          return do_rt_set_rm(m_ptr, rp);
+      case SCHED_EDF:
+          return do_rt_set_edf(m_ptr, rp);
+      default:
+          return (EINVAL);
+  }        
+    
+  /* should not be reached */  
+  return (EPERM);    
+}
+
+
+/*===========================================================================*
+ *                  do_rt_set_rm                                             *
+ *===========================================================================*/
+PRIVATE int do_rt_set_rm(message *m_ptr, struct proc *rp)
+{
+  struct proc *xp;    
+    
+  /* if rm_prio_policy equals PRIO_UNIQUE the priority of a
+   * process scheduled with RM should be unique. We will have to
+   * loop through the process table to check if there is no other process
+   * with this priority.
+   */
+  if (rm_prio_policy == PRIO_UNIQUE) {
+      for (xp = BEG_PROC_ADDR; xp < END_PROC_ADDR; ++xp) {
+          if (xp->p_rts_flags != SLOT_FREE && 
+              is_rtp(xp) && xp->p_rt_priority == m_ptr->RM_PRIO) {
+              return (EINVAL);
+          }    
+      }
+  }    
+ 
+  if ( rp->p_rts_flags == 0) {
+      /* Should not happen normally.
+       * A process is runnable if p_rts_flags is zero.
+       * The process requesting to be real-time should be
+       * blocked waiting for a reply from PM 
+       * and thus p_rts_flags should not be zero.
+       * Still we remove the process from the scheduling queue.
+       */
+       lock_dequeue(rp);
+  }
+
+  /* Now we can change the process structure.
+   * First make sure this process will be recognized
+   * as a real-time process.
+   */
+   rp->p_rt = 1;
+      
+  /* Set the current and maximum priority to the
+   * real-time queue.
+   */
+  rp->p_max_priority = rp->p_priority = RT_Q;
+
+  /* set the static priority */
+  rp->p_rt_priority = m_ptr->RM_PRIO;
+
+  if ( rp->p_rts_flags == 0) {
+      /* Should not happen normally.
+       * See above. Add process to the scheduling queue.
+       */
+      lock_enqueue(rp);
+  }
+
+  return (OK);
+}    
+
+/*===========================================================================*
+ *                  do_rt_set_edf                                            *
+ *===========================================================================*/
+PRIVATE int do_rt_set_edf(message *m_ptr, struct proc * rp)
+{
+  /* check if period and calculation time
+   * parameters are valid
+   */
+  if (m_ptr->EDF_PERIOD <= 0 || m_ptr->EDF_CALCTIME <= 0) {
+      return (EINVAL);
+  }
+
+  /* check if calctime is not larger than period */
+  if (m_ptr->EDF_CALCTIME > m_ptr->EDF_PERIOD) {
+      return (EINVAL);
+  }    
+    
+  if ( rp->p_rts_flags == 0) {
+      /* Should not happen normally.
+       * A process is runnable if p_rts_flags is zero.
+       * The process requesting to be real-time should be
+       * blocked waiting for a reply from PM 
+       * and thus p_rts_flags should not be zero.
+       * In the case of EDF this is fatal.
+       */
+       kprintf("systask: do_rt_set (edf): process should not be runnable\n");
+       return (EGENERIC);
+  }
+  
+  /* Now we can change the process structure.
+   * First make sure this process will be recognized
+   * as a real-time process.
+   */
+   rp->p_rt = 1;
+
+   /* set the period and calculation time */
+   rp->p_rt_period = m_ptr->EDF_PERIOD;
+   rp->p_rt_calctime = m_ptr->EDF_CALCTIME;
+
+   /* The first period starts immediately,
+    * so set the number of ticks left in this period
+    * to the requested calculation time.
+    */
+   rp->p_rt_ticksleft = rp->p_rt_calctime;
+
+   /* ticks left till next period equals the specified period */
+   rp->p_rt_nextperiod = rp->p_rt_period;
+
+   /* use the EDF scheduling queue */
+   rp->p_priority = rp->p_max_priority = RT_Q;
+
+   /* The process should be blocked waiting for a reply
+    * from PM. So we add the process to the (front of) block list. 
+    */
+   rp->p_rt_link = edf_block_head;
+   edf_block_head = rp;
+
+   /* we did not modify edf_rp or the edf run queue so we don't have
+    * to call edf_sched()
+    */
+
+   return (OK);
+}   
+
diff -Naur /usr/src_original/kernel/system/do_rt_set_sched.c /usr/src/kernel/system/do_rt_set_sched.c
--- /usr/src_original/kernel/system/do_rt_set_sched.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_rt_set_sched.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,68 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_RT_SET_SCHED
+ *
+ * The parameters for this kernel call are:
+ *    m7_i2:    RT_SCHED    Scheduler type
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/rt.h>
+
+
+/*===========================================================================*
+ *                  do_rt_set_sched                       				     *
+ *===========================================================================*/
+PUBLIC int do_rt_set_sched(message *m_ptr)
+{
+  /* Set the real-time scheduler.
+   * Currently supported schedulers are
+   * Rate-Monotonic (SCHED_RM) and
+   * Earliest Deadline First (SCHED_EDF).
+   */
+
+  /* Check if allowed to change the RT scheduler. 
+   * It is only allowed to change the scheduler if
+   * rt_sched is SCHED_UNDEFINED or rt_sched is set
+   * to a scheduler but there are no real-time processes
+   * running.
+   */
+  if (rt_sched != SCHED_UNDEFINED) {
+      register struct proc * xp;  
+    
+      /* search the process table for RT processes */
+      for (xp = BEG_PROC_ADDR; xp < END_PROC_ADDR; ++xp) {
+          if (is_rtp(xp)) {
+              return (EPERM); /* found RT process */
+          }
+      }
+  } 
+
+  /* We are allowed to set the scheduler.
+   * Check if the scheduler type is valid
+   * and set rt_sched to the new scheduler type
+   */
+  switch (m_ptr->RT_SCHED) {
+      case SCHED_UNDEFINED:
+          rt_sched = m_ptr->RT_SCHED;
+          break;
+      case SCHED_RM:
+          if (m_ptr->RM_PRIO_POLICY != PRIO_UNIQUE &&
+              m_ptr->RM_PRIO_POLICY != PRIO_NOT_UNIQUE) {
+              return (EINVAL); /* invalid policy parameter */
+          }
+          
+          rt_sched = m_ptr->RT_SCHED;
+          rm_prio_policy = m_ptr->RM_PRIO_POLICY;
+      case SCHED_EDF:
+          rt_sched = m_ptr->RT_SCHED;
+          break;
+      default:
+          return (EINVAL); /* invalid scheduler */
+          break;
+  }        
+      
+  return (OK);    
+}
+
diff -Naur /usr/src_original/kernel/system/do_rt_set_sched_bridge.c /usr/src/kernel/system/do_rt_set_sched_bridge.c
--- /usr/src_original/kernel/system/do_rt_set_sched_bridge.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_rt_set_sched_bridge.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,29 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_RT_SCHED_BRIDGE
+ *
+ * The parameters for this kernel call are:
+ *    m1_i1:    RT_SCHED_BRIDGE     Scheduler bridge state
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/rt.h>
+
+
+/*===========================================================================*
+ *                  do_rt_set_sched                                          *
+ *===========================================================================*/
+PUBLIC int do_rt_set_sched_bridge(message *m_ptr)
+{
+  /* Set the scheduling bridge state.
+   * If set to 0 high priority processes that are lowered in priority
+   * are not allowed to get a lower priority than RT processes.
+   * If set to 1 they can. Before Minix shutdowns it will set it to 1 because
+   * otherwise the system cannot shutdown properly.
+   */
+  rt_sched_bridge = m_ptr->RT_SCHED_BRIDGE;
+
+  return (OK);    
+}
+
diff -Naur /usr/src_original/kernel/system/do_rt_show_data.c /usr/src/kernel/system/do_rt_show_data.c
--- /usr/src_original/kernel/system/do_rt_show_data.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/kernel/system/do_rt_show_data.c	2009-10-04 23:53:14.000000000 +0000
@@ -0,0 +1,28 @@
+/* The kernel call implemented in this file:
+ *   m_type:    SYS_RT_SHOW_DATA
+ *
+ * The parameters for this kernel call are:
+ *    none
+ */
+
+#include "../system.h"
+#include <minix/type.h>
+#include <sys/resource.h>
+#include <minix/rt.h>
+
+
+/*===========================================================================*
+ *                  do_rt_show_data                                          *
+ *===========================================================================*/
+PUBLIC int do_rt_show_data(message *m_ptr)
+{
+  /* dumpe scheduling info if a real-time scheduler is set */
+  if (rt_sched != SCHED_UNDEFINED) {
+      show_rt_data();
+  } else {
+      kprintf("No Real-time scheduler set!\n");
+  }
+  
+  return (OK);    
+}
+
diff -Naur /usr/src_original/kernel/system.c /usr/src/kernel/system.c
--- /usr/src_original/kernel/system.c	2006-03-15 12:01:58.000000000 +0000
+++ /usr/src/kernel/system.c	2009-10-04 23:53:14.000000000 +0000
@@ -22,6 +22,7 @@
  *   clear_endpoint:	remove a process' ability to send and receive messages
  *
  * Changes:
+ *   Jun 14, 2009   added kernel calls for RT to initialize (Bianco Zandbergen)
  *   Aug 04, 2005   check if system call is allowed  (Jorrit N. Herder)
  *   Jul 20, 2005   send signal to services with message  (Jorrit N. Herder) 
  *   Jan 15, 2005   new, generalized virtual copy function  (Jorrit N. Herder)
@@ -179,6 +180,15 @@
   map(SYS_ABORT, do_abort);		/* abort MINIX */
   map(SYS_GETINFO, do_getinfo); 	/* request system information */ 
   map(SYS_IOPENABLE, do_iopenable); 	/* Enable I/O */
+
+  /* Real-time */
+  map(SYS_RT_SET_SCHED, do_rt_set_sched);   /* set real-time scheduler */
+  map(SYS_RT_SET, do_rt_set);               /* make process real-time */
+  map(SYS_RT_SHOW_DATA, do_rt_show_data);   /* showing scheduler debug info */
+  map(SYS_RT_NEXTPERIOD, do_rt_nextperiod); /* wait till next period for EDF processes */
+  map(SYS_RT_SCHED_BRIDGE, do_rt_set_sched_bridge); /* set the value of rt_sched_bridge */
+  map(SYS_KLOG_SET, do_klog_set); /* set the kernel log state */
+  map(SYS_KLOG_COPY, do_klog_copy); /* copy kernel log to user application */
 }
 
 /*===========================================================================*
diff -Naur /usr/src_original/kernel/system.h /usr/src/kernel/system.h
--- /usr/src_original/kernel/system.h	2006-03-03 10:00:02.000000000 +0000
+++ /usr/src/kernel/system.h	2009-10-04 23:53:14.000000000 +0000
@@ -175,5 +175,42 @@
 
 _PROTOTYPE( int do_iopenable, (message *m_ptr) );	
 
+/* prototypes for real-time and kernel logging */
+
+_PROTOTYPE( int do_rt_set_sched, (message *m_ptr) );
+#if ! USE_RT_SET_SCHED
+#define do_rt_set_sched do_unused
+#endif
+
+_PROTOTYPE( int do_rt_set, (message *m_ptr) );
+#if ! USE_RT_SET
+#define do_rt_set do_unused
+#endif
+
+_PROTOTYPE( int do_rt_show_data, (message *m_ptr) );
+#if ! USE_RT_SHOW_DATA
+#define do_rt_show_data do_unused
+#endif
+
+_PROTOTYPE( int do_rt_nextperiod, (message *m_ptr) );
+#if ! USE_RT_NEXTPERIOD
+#define do_rt_nextperiod do_unused
+#endif
+
+_PROTOTYPE( int do_rt_set_sched_bridge, (message *m_ptr) );
+#if ! USE_RT_SET_SCHED_BRIGE
+#define do_rt_set_sched_bridge do_unused
+#endif
+
+_PROTOTYPE( int do_klog_set, (message *m_ptr) );
+#if ! USE_KLOG_SET
+#define do_klog_set do_unused
+#endif
+
+_PROTOTYPE( int do_klog_copy, (message *m_ptr) );
+#if ! USE_KLOG_COPY
+#define do_klog_copy do_unused
+#endif
+
 #endif	/* SYSTEM_H */
 
diff -Naur /usr/src_original/kernel/table.c /usr/src/kernel/table.c
--- /usr/src_original/kernel/table.c	2006-03-10 16:10:04.000000000 +0000
+++ /usr/src/kernel/table.c	2009-10-04 23:53:14.000000000 +0000
@@ -68,7 +68,7 @@
 #define s(n)		(1 << s_nr_to_id(n))
 #define SRV_M	(~0)
 #define SYS_M	(~0)
-#define USR_M (s(PM_PROC_NR) | s(FS_PROC_NR) | s(RS_PROC_NR) | s(SYSTEM))
+#define USR_M (s(PM_PROC_NR) | s(FS_PROC_NR) | s(RS_PROC_NR) | s(SYSTEM)) | s(SS_PROC_NR)
 #define DRV_M (USR_M | s(SYSTEM) | s(CLOCK) | s(DS_PROC_NR) | s(LOG_PROC_NR) | s(TTY_PROC_NR))
 
 /* Define kernel calls that processes are allowed to make. This is not looking
@@ -85,6 +85,7 @@
 #define TTY_C (DRV_C | c(SYS_ABORT) | c(SYS_VM_MAP) | c(SYS_IOPENABLE))
 #define MEM_C	(DRV_C | c(SYS_PHYSCOPY) | c(SYS_PHYSVCOPY) | c(SYS_VM_MAP) | \
 	c(SYS_IOPENABLE))
+#define SS_C    c(SYS_GETINFO) /* semaphore server only needs SYS_GETINFO */
 
 /* The system image table lists all programs that are part of the boot image. 
  * The order of the entries here MUST agree with the order of the programs
@@ -109,6 +110,7 @@
  { TTY_PROC_NR,   0, SRV_F,  4,      1, 0,     SRV_T, SYS_M, TTY_C, "tty"   },
  { MEM_PROC_NR,   0, SRV_F,  4,      2, 0,     SRV_T, SYS_M, MEM_C, "mem"   },
  { LOG_PROC_NR,   0, SRV_F,  4,      2, 0,     SRV_T, SYS_M, DRV_C, "log"   },
+ { SS_PROC_NR,    0, SRV_F,  4,      3, 0,     SRV_T, SYS_M, SS_C,  "ss"    },
  { INIT_PROC_NR,  0, USR_F,  8, USER_Q, 0,     USR_T, USR_M,     0, "init"  },
 };
 
diff -Naur /usr/src_original/lib/Makefile /usr/src/lib/Makefile
--- /usr/src_original/lib/Makefile	2006-01-17 10:36:41.000000000 +0000
+++ /usr/src/lib/Makefile	2009-10-04 23:53:14.000000000 +0000
@@ -57,6 +57,12 @@
 	cd ack && $(MAKE) $@
 	mkdir -p obj-ack//./gnu
 	cd gnu && $(MAKE) $@
+	mkdir -p obj-ack//./rtminix3
+	cd rtminix3 && $(MAKE) $@
+	mkdir -p obj-ack//./klog
+	cd klog && $(MAKE) $@
+	mkdir -p obj-ack//./sem
+	cd sem && $(MAKE) $@
 
 all-gnu: makefiles
 	mkdir -p obj-gnu/./ansi
@@ -99,6 +105,12 @@
 	cd ack && $(MAKE) $@
 	mkdir -p obj-gnu/./gnu
 	cd gnu && $(MAKE) $@
+	mkdir -p obj-gnu/./rtminix3
+	cd rtminix3 && $(MAKE) $@
+	mkdir -p obj-gnu/./klog
+	cd klog && $(MAKE) $@
+	mkdir -p obj-gnu/./sem
+	cd sem && $(MAKE) $@
 
 clean depend depend-ack depend-gnu:: makefiles
 	cd ansi && $(MAKE) $@
@@ -121,6 +133,9 @@
 	cd zlib-1.2.3 && $(MAKE) $@
 	cd ack && $(MAKE) $@
 	cd gnu && $(MAKE) $@
+	cd rtminix3 && $(MAKE) $@
+	cd klog && $(MAKE) $@
+	cd sem && $(MAKE) $@
 
 makefiles: ansi/Makefile
 makefiles: curses/Makefile
@@ -142,6 +157,9 @@
 makefiles: zlib-1.2.3/Makefile
 makefiles: ack/Makefile
 makefiles: gnu/Makefile
+makefiles: rtminix3/Makefile
+makefiles: klog/Makefile
+makefiles: sem/Makefile
 
 ansi/Makefile: ansi/Makefile.in
 	cd ansi && sh ../generate.sh ./ansi ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
@@ -183,6 +201,12 @@
 	cd ack && sh ../generate.sh ./ack ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
 gnu/Makefile: gnu/Makefile.in
 	cd gnu && sh ../generate.sh ./gnu ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
+rtminix3/Makefile: rtminix3/Makefile.in
+	cd rtminix3 && sh ../generate.sh ./rtminix3 ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
+klog/Makefile: klog/Makefile.in
+	cd klog && sh ../generate.sh ./klog ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
+sem/Makefile: sem/Makefile.in
+	cd sem && sh ../generate.sh ./sem ../obj-ack/ ../obj-gnu && $(MAKE) makefiles
 
 clean::
 	rm -f obj-ack//./*
diff -Naur /usr/src_original/lib/Makefile.in /usr/src/lib/Makefile.in
--- /usr/src_original/lib/Makefile.in	2006-01-16 15:44:42.000000000 +0000
+++ /usr/src/lib/Makefile.in	2009-10-04 23:53:14.000000000 +0000
@@ -22,7 +22,10 @@
 	timers \
 	i386 \
 	zlib-1.2.3 \
-	ack
-	gnu"
+	ack \
+	gnu \
+	rtminix3 \
+	klog \
+	sem"
 	
 TYPE=both
diff -Naur /usr/src_original/lib/klog/Makedepend-ack /usr/src/lib/klog/Makedepend-ack
--- /usr/src_original/lib/klog/Makedepend-ack	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/Makedepend-ack	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,5 @@
+depend-ack:
+	rm .depend-ack
+	touch .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' klog_set.c | sed -e 's:^\(.\):../obj-ack//./klog/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' klog_copy.c | sed -e 's:^\(.\):../obj-ack//./klog/\1:' >> .depend-ack
diff -Naur /usr/src_original/lib/klog/Makedepend-gnu /usr/src/lib/klog/Makedepend-gnu
--- /usr/src_original/lib/klog/Makedepend-gnu	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/Makedepend-gnu	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,5 @@
+depend-gnu:
+	rm .depend-gnu
+	touch .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' klog_set.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./klog/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' klog_copy.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./klog/\1:' >> .depend-gnu
diff -Naur /usr/src_original/lib/klog/Makefile /usr/src/lib/klog/Makefile
--- /usr/src_original/lib/klog/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/Makefile	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,59 @@
+#Generated from ./klog/Makefile.in
+all: all-ack
+
+all-ack:
+all-gnu:
+
+makefiles: Makefile
+Makedepend-ack Makedepend-gnu: 
+	sh ../generate.sh ./klog ../obj-ack/ ../obj-gnu
+
+Makefile: Makefile.in Makedepend-ack Makedepend-gnu
+	sh ../generate.sh ./klog ../obj-ack/ ../obj-gnu
+	@echo
+	@echo *Attention*
+	@echo Makefile is regenerated... rerun command to see changes
+	@echo *Attention*
+	@echo
+
+depend: depend-ack
+all-ack: ../obj-ack//libklog.a
+
+../obj-ack//libklog.a: ../obj-ack//libklog.a(klog_set.o)
+../obj-ack//libklog.a: ../obj-ack//libklog.a(klog_copy.o)
+
+../obj-ack//libklog.a:
+	ar cr ../obj-ack//libklog.a ../obj-ack//./klog/*.o
+	rm ../obj-ack//./klog/*.o
+
+../obj-ack//libklog.a(klog_set.o): klog_set.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./klog/klog_set.o klog_set.c
+../obj-ack//libklog.a(klog_copy.o): klog_copy.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./klog/klog_copy.o klog_copy.c
+
+all-gnu: ../obj-gnu/libklog.a
+
+../obj-gnu/libklog.a: ../obj-gnu/./klog/klog_set.o
+../obj-gnu/libklog.a: ../obj-gnu/./klog/klog_copy.o
+
+../obj-gnu/libklog.a:
+	gar cr ../obj-gnu/libklog.a $?
+
+../obj-gnu/./klog/klog_set.o: klog_set.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./klog/klog_set.o klog_set.c
+
+../obj-gnu/./klog/klog_copy.o: klog_copy.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./klog/klog_copy.o klog_copy.c
+
+
+
+
+clean::
+	rm -f ../obj-ack//./klog/*
+	rm -f ../obj-gnu/./klog/*
+
+include Makedepend-ack
+include .depend-ack
+
+include Makedepend-gnu
+include .depend-gnu
diff -Naur /usr/src_original/lib/klog/Makefile.in /usr/src/lib/klog/Makefile.in
--- /usr/src_original/lib/klog/Makefile.in	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/Makefile.in	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,6 @@
+#Makefile for lib/klog (libklog)
+CFLAGS="-O -D_MINIX -D_POSIX_SOURCE"
+LIBRARIES=libklog
+libklog_FILES="klog_set.c \
+			   klog_copy.c"
+TYPE=both
diff -Naur /usr/src_original/lib/klog/klog_copy.c /usr/src/lib/klog/klog_copy.c
--- /usr/src_original/lib/klog/klog_copy.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/klog_copy.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,28 @@
+/* The library function implemented in this file:
+ *   klog_copy 
+ *
+ * Function description:
+ *   This function copies the kernel log from the kernel
+ *   to the user program.
+ * 
+ * The parameters for this library function are:
+ *   data: a pointer to an array of struct klog_entry with the size of KLOG_SIZE
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/klog.h>
+
+int klog_copy(void *data)
+{
+  message m; /* message we use for the system call */
+    
+  m.KLOG_PTR = data; /* set the pointer to the kernel log in the user program */
+    
+  /* do the system call and return the result */
+  return (_syscall(MM, KLOG_COPY, &m));
+}    
+
diff -Naur /usr/src_original/lib/klog/klog_set.c /usr/src/lib/klog/klog_set.c
--- /usr/src_original/lib/klog/klog_set.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/klog/klog_set.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,33 @@
+/* The library function implemented in this file:
+ *   klog_set
+ *
+ * Function description:
+ *   This function sets the kernel logger state to 1.
+ *   This means that the kernel will start with logging
+ *   untill the buffer is full.
+ * 
+ * The parameters for this library function are:
+ *   type       The type of event to log.
+ *              KLOG_CONTEXTSWITCH to log the next running
+ *              process on every context switch.
+ *              KLOG_CLOCKINT to log the current running process
+ *              on every clock interrupt.
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/klog.h>
+
+int klog_set(int type)
+{
+  message m; /* message we use for the system call */
+  m.KLOG_STATE = 1; /* set the state to 1 */
+  m.KLOG_TYPE = type; /* what to log? */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, KLOG_SET, &m));
+}    
+
diff -Naur /usr/src_original/lib/rtminix3/Makedepend-ack /usr/src/lib/rtminix3/Makedepend-ack
--- /usr/src_original/lib/rtminix3/Makedepend-ack	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/Makedepend-ack	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,9 @@
+depend-ack:
+	rm .depend-ack
+	touch .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_edf.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_rm.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_edf.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_rm.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_nextperiod.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_bridge.c | sed -e 's:^\(.\):../obj-ack//./rtminix3/\1:' >> .depend-ack
diff -Naur /usr/src_original/lib/rtminix3/Makedepend-gnu /usr/src/lib/rtminix3/Makedepend-gnu
--- /usr/src_original/lib/rtminix3/Makedepend-gnu	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/Makedepend-gnu	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,9 @@
+depend-gnu:
+	rm .depend-gnu
+	touch .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_edf.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_rm.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_edf.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_rm.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_nextperiod.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' rt_set_sched_bridge.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./rtminix3/\1:' >> .depend-gnu
diff -Naur /usr/src_original/lib/rtminix3/Makefile /usr/src/lib/rtminix3/Makefile
--- /usr/src_original/lib/rtminix3/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/Makefile	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,87 @@
+#Generated from ./rtminix3/Makefile.in
+all: all-ack
+
+all-ack:
+all-gnu:
+
+makefiles: Makefile
+Makedepend-ack Makedepend-gnu: 
+	sh ../generate.sh ./rtminix3 ../obj-ack/ ../obj-gnu
+
+Makefile: Makefile.in Makedepend-ack Makedepend-gnu
+	sh ../generate.sh ./rtminix3 ../obj-ack/ ../obj-gnu
+	@echo
+	@echo *Attention*
+	@echo Makefile is regenerated... rerun command to see changes
+	@echo *Attention*
+	@echo
+
+depend: depend-ack
+all-ack: ../obj-ack//librt.a
+
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_set_sched_edf.o)
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_set_sched_rm.o)
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_set_edf.o)
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_set_rm.o)
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_nextperiod.o)
+../obj-ack//librt.a: ../obj-ack//librt.a(rt_set_sched_bridge.o)
+
+../obj-ack//librt.a:
+	ar cr ../obj-ack//librt.a ../obj-ack//./rtminix3/*.o
+	rm ../obj-ack//./rtminix3/*.o
+
+../obj-ack//librt.a(rt_set_sched_edf.o): rt_set_sched_edf.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_set_sched_edf.o rt_set_sched_edf.c
+../obj-ack//librt.a(rt_set_sched_rm.o): rt_set_sched_rm.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_set_sched_rm.o rt_set_sched_rm.c
+../obj-ack//librt.a(rt_set_edf.o): rt_set_edf.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_set_edf.o rt_set_edf.c
+../obj-ack//librt.a(rt_set_rm.o): rt_set_rm.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_set_rm.o rt_set_rm.c
+../obj-ack//librt.a(rt_nextperiod.o): rt_nextperiod.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_nextperiod.o rt_nextperiod.c
+../obj-ack//librt.a(rt_set_sched_bridge.o): rt_set_sched_bridge.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./rtminix3/rt_set_sched_bridge.o rt_set_sched_bridge.c
+
+all-gnu: ../obj-gnu/librt.a
+
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_set_sched_edf.o
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_set_sched_rm.o
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_set_edf.o
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_set_rm.o
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_nextperiod.o
+../obj-gnu/librt.a: ../obj-gnu/./rtminix3/rt_set_sched_bridge.o
+
+../obj-gnu/librt.a:
+	gar cr ../obj-gnu/librt.a $?
+
+../obj-gnu/./rtminix3/rt_set_sched_edf.o: rt_set_sched_edf.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_set_sched_edf.o rt_set_sched_edf.c
+
+../obj-gnu/./rtminix3/rt_set_sched_rm.o: rt_set_sched_rm.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_set_sched_rm.o rt_set_sched_rm.c
+
+../obj-gnu/./rtminix3/rt_set_edf.o: rt_set_edf.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_set_edf.o rt_set_edf.c
+
+../obj-gnu/./rtminix3/rt_set_rm.o: rt_set_rm.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_set_rm.o rt_set_rm.c
+
+../obj-gnu/./rtminix3/rt_nextperiod.o: rt_nextperiod.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_nextperiod.o rt_nextperiod.c
+
+../obj-gnu/./rtminix3/rt_set_sched_bridge.o: rt_set_sched_bridge.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./rtminix3/rt_set_sched_bridge.o rt_set_sched_bridge.c
+
+
+
+
+clean::
+	rm -f ../obj-ack//./rtminix3/*
+	rm -f ../obj-gnu/./rtminix3/*
+
+include Makedepend-ack
+include .depend-ack
+
+include Makedepend-gnu
+include .depend-gnu
diff -Naur /usr/src_original/lib/rtminix3/Makefile.in /usr/src/lib/rtminix3/Makefile.in
--- /usr/src_original/lib/rtminix3/Makefile.in	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/Makefile.in	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,10 @@
+#Makefile for lib/rtminix3 (librt)
+CFLAGS="-O -D_MINIX -D_POSIX_SOURCE"
+LIBRARIES=librt
+librt_FILES="rt_set_sched_edf.c \
+			 rt_set_sched_rm.c \
+			 rt_set_edf.c \
+			 rt_set_rm.c \
+			 rt_nextperiod.c \
+			 rt_set_sched_bridge.c" 
+TYPE=both
diff -Naur /usr/src_original/lib/rtminix3/rt_nextperiod.c /usr/src/lib/rtminix3/rt_nextperiod.c
--- /usr/src_original/lib/rtminix3/rt_nextperiod.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_nextperiod.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,28 @@
+/* The library function implemented in this file:
+ *   rt_nextperiod
+ *
+ * Function description:
+ *   This function gives processes using Earliest
+ *   Deadline First scheduling a way to give up
+ *   remaining calculation time. (This function may
+ *   only be used by processes using EDF scheduling!)
+ * 
+ * The parameters for this library function are:
+ *   none
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_nextperiod(void)
+{
+  message m; /* message we use for the system call */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_NEXTPERIOD, &m));
+}
+
diff -Naur /usr/src_original/lib/rtminix3/rt_set_edf.c /usr/src/lib/rtminix3/rt_set_edf.c
--- /usr/src_original/lib/rtminix3/rt_set_edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_set_edf.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,34 @@
+/* The library function implemented in this file:
+ *   rt_set_edf
+ *
+ * Function description:
+ *   This function transforms a normal user process into a
+ *   real-time process scheduled using Earliest Deadline First.
+ *   The operation will only succeed if the RT scheduler is already
+ *   set to EDF using the rt_set_sched_edf() library call.
+ * 
+ * The parameters for this library function are:
+ *   int period        The period of the process in ticks
+ *   int calctime      The reserved calculation time within
+ *                     each period in ticks
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_set_edf(int period, int calctime)
+{
+  message m; /* message we use for system call */
+
+  m.RT_SCHED = SCHED_EDF; /* set scheduler type */
+  m.EDF_PERIOD = period; /* set period in ticks */
+  m.EDF_CALCTIME = calctime; /* set calculation time within each period in ticks */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_SET, &m));
+}    
+
diff -Naur /usr/src_original/lib/rtminix3/rt_set_rm.c /usr/src/lib/rtminix3/rt_set_rm.c
--- /usr/src_original/lib/rtminix3/rt_set_rm.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_set_rm.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,36 @@
+/* The library function implemented in this file:
+ *   rt_set_rm
+ *
+ * Function description:
+ *   This function transforms a normal user process into a
+ *   real-time process scheduled using Rate-Monotonic.
+ *   The operation will only succeed if the RT scheduler is already
+ *   set to RM using the rt_set_sched_rm() library call.
+ * 
+ * The parameters for this library function are:
+ *   int period        The fixed priority of the RM process
+ *                     compared to other RM processes.
+ *                     This can be any positive or negative number.
+ *                     If the priority policy is PRIO_UNIQUE,
+ *                     this priority may not be in use by an other
+ *                     RM process.
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_set_rm(int prio)
+{
+  message m; /* message we use for the system call */
+
+  m.RT_SCHED = SCHED_RM; /* set the scheduler type */
+  m.RM_PRIO = prio; /* set the Rate-Monotonic priority */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_SET, &m));
+}    
+
diff -Naur /usr/src_original/lib/rtminix3/rt_set_sched_bridge.c /usr/src/lib/rtminix3/rt_set_sched_bridge.c
--- /usr/src_original/lib/rtminix3/rt_set_sched_bridge.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_set_sched_bridge.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,35 @@
+/* The library function implemented in this file:
+ *   rt_set_sched_bridge
+ *
+ * Function description:
+ *   Set the rt_sched_bridge value in the kernel.
+ *   Depending on this value a system process may or may not
+ *   have a lower priority than real-time processes. A system process
+ *   can be lowered in priority due to using its full quantum.
+ *   This function is in general only used when shutting down.
+ *   At shutdown system processes must be able to get a lower priority than
+ *   RT processes otherwise the system won't shutdown properly and crashes.
+ * 
+ * The parameters for this library function are:
+ *   int state              The state of the scheduling bridge.
+ *                          if 0 system process cannot have a lower priority
+ *                          than RT processes. if 1 a system process can.
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_set_sched_bridge(int state)
+{
+  message m; /* message we use for the system call */
+    
+  m.RT_SCHED_BRIDGE = state; /* set the state */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_SET_SCHED_BRIDGE, &m));
+}    
+
diff -Naur /usr/src_original/lib/rtminix3/rt_set_sched_edf.c /usr/src/lib/rtminix3/rt_set_sched_edf.c
--- /usr/src_original/lib/rtminix3/rt_set_sched_edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_set_sched_edf.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,26 @@
+/* The library function implemented in this file:
+ *   rt_set_sched_edf
+ *
+ * Function description:
+ *   This function sets the real-time scheduler to Earliest Deadline First.
+ * 
+ * The parameters for this library function are:
+ *   none
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_set_sched_edf(void)
+{
+  message m; /* message we use for the system call */
+    
+  m.RT_SCHED = SCHED_EDF; /* Set the scheduler parameter to EDF */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_SET_SCHED, &m));
+}    
diff -Naur /usr/src_original/lib/rtminix3/rt_set_sched_rm.c /usr/src/lib/rtminix3/rt_set_sched_rm.c
--- /usr/src_original/lib/rtminix3/rt_set_sched_rm.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/rtminix3/rt_set_sched_rm.c	2009-10-04 23:53:19.000000000 +0000
@@ -0,0 +1,30 @@
+/* The library function implemented in this file:
+ *   rt_set_sched_rm
+ *
+ * Function description:
+ *   This function sets the real-time scheduler to Rate-Monotonic.
+ * 
+ * The parameters for this library function are:
+ *   int prio_policy        the priority of a RM process can be
+ *                          enforced to be unique (PRIO_UNIQUE) or
+ *                          not (PRIO_NOT_UNIQUE)
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is saved in errno.
+ */
+#include <lib.h>
+#include <minix/rt.h>
+
+int rt_set_sched_rm(int prio_policy)
+{
+  message m; /* message we use for the system call */
+  
+  m.RT_SCHED = SCHED_RM; /* set the scheduler parameter to RM */
+  m.RM_PRIO_POLICY = prio_policy; /* set the priority policy parameter */
+
+  /* do the system call and return the result */
+  return (_syscall(MM, RT_SET_SCHED, &m));
+}   
+
diff -Naur /usr/src_original/lib/sem/Makedepend-ack /usr/src/lib/sem/Makedepend-ack
--- /usr/src_original/lib/sem/Makedepend-ack	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/Makedepend-ack	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,11 @@
+depend-ack:
+	rm .depend-ack
+	touch .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_m_create.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_b_create.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_c_create.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_take.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_give.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_delete.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_value.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sem_flush.c | sed -e 's:^\(.\):../obj-ack//./sem/\1:' >> .depend-ack
diff -Naur /usr/src_original/lib/sem/Makedepend-gnu /usr/src/lib/sem/Makedepend-gnu
--- /usr/src_original/lib/sem/Makedepend-gnu	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/Makedepend-gnu	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,11 @@
+depend-gnu:
+	rm .depend-gnu
+	touch .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_m_create.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_b_create.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_c_create.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_take.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_give.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_delete.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_value.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sem_flush.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./sem/\1:' >> .depend-gnu
diff -Naur /usr/src_original/lib/sem/Makefile /usr/src/lib/sem/Makefile
--- /usr/src_original/lib/sem/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/Makefile	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,101 @@
+#Generated from ./sem/Makefile.in
+all: all-ack
+
+all-ack:
+all-gnu:
+
+makefiles: Makefile
+Makedepend-ack Makedepend-gnu: 
+	sh ../generate.sh ./sem ../obj-ack/ ../obj-gnu
+
+Makefile: Makefile.in Makedepend-ack Makedepend-gnu
+	sh ../generate.sh ./sem ../obj-ack/ ../obj-gnu
+	@echo
+	@echo *Attention*
+	@echo Makefile is regenerated... rerun command to see changes
+	@echo *Attention*
+	@echo
+
+depend: depend-ack
+all-ack: ../obj-ack//libsem.a
+
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_m_create.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_b_create.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_c_create.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_take.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_give.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_delete.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_value.o)
+../obj-ack//libsem.a: ../obj-ack//libsem.a(sem_flush.o)
+
+../obj-ack//libsem.a:
+	ar cr ../obj-ack//libsem.a ../obj-ack//./sem/*.o
+	rm ../obj-ack//./sem/*.o
+
+../obj-ack//libsem.a(sem_m_create.o): sem_m_create.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_m_create.o sem_m_create.c
+../obj-ack//libsem.a(sem_b_create.o): sem_b_create.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_b_create.o sem_b_create.c
+../obj-ack//libsem.a(sem_c_create.o): sem_c_create.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_c_create.o sem_c_create.c
+../obj-ack//libsem.a(sem_take.o): sem_take.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_take.o sem_take.c
+../obj-ack//libsem.a(sem_give.o): sem_give.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_give.o sem_give.c
+../obj-ack//libsem.a(sem_delete.o): sem_delete.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_delete.o sem_delete.c
+../obj-ack//libsem.a(sem_value.o): sem_value.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_value.o sem_value.c
+../obj-ack//libsem.a(sem_flush.o): sem_flush.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./sem/sem_flush.o sem_flush.c
+
+all-gnu: ../obj-gnu/libsem.a
+
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_m_create.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_b_create.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_c_create.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_take.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_give.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_delete.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_value.o
+../obj-gnu/libsem.a: ../obj-gnu/./sem/sem_flush.o
+
+../obj-gnu/libsem.a:
+	gar cr ../obj-gnu/libsem.a $?
+
+../obj-gnu/./sem/sem_m_create.o: sem_m_create.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_m_create.o sem_m_create.c
+
+../obj-gnu/./sem/sem_b_create.o: sem_b_create.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_b_create.o sem_b_create.c
+
+../obj-gnu/./sem/sem_c_create.o: sem_c_create.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_c_create.o sem_c_create.c
+
+../obj-gnu/./sem/sem_take.o: sem_take.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_take.o sem_take.c
+
+../obj-gnu/./sem/sem_give.o: sem_give.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_give.o sem_give.c
+
+../obj-gnu/./sem/sem_delete.o: sem_delete.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_delete.o sem_delete.c
+
+../obj-gnu/./sem/sem_value.o: sem_value.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_value.o sem_value.c
+
+../obj-gnu/./sem/sem_flush.o: sem_flush.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./sem/sem_flush.o sem_flush.c
+
+
+
+
+clean::
+	rm -f ../obj-ack//./sem/*
+	rm -f ../obj-gnu/./sem/*
+
+include Makedepend-ack
+include .depend-ack
+
+include Makedepend-gnu
+include .depend-gnu
diff -Naur /usr/src_original/lib/sem/Makefile.in /usr/src/lib/sem/Makefile.in
--- /usr/src_original/lib/sem/Makefile.in	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/Makefile.in	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,12 @@
+#Makefile for lib/sem (libsem)
+CFLAGS="-O -D_MINIX -D_POSIX_SOURCE"
+LIBRARIES=libsem
+libsem_FILES="sem_m_create.c \
+			  sem_b_create.c \
+			  sem_c_create.c \
+			  sem_take.c \
+			  sem_give.c \
+			  sem_delete.c \
+			  sem_value.c \
+			  sem_flush.c"  
+TYPE=both
diff -Naur /usr/src_original/lib/sem/sem_b_create.c /usr/src/lib/sem/sem_b_create.c
--- /usr/src_original/lib/sem/sem_b_create.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_b_create.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,37 @@
+/* The library function implemented in this file:
+ *   sem_b_create
+ *
+ * Function description:
+ *   This function creates a new binary semaphore.
+ * 
+ * The parameters for this library function are:
+ *   handler:       pointer to handler we want to create
+ *   value:         initial value (can be 0 or 1)
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_b_create(sem_t *handler, int value)
+{
+  message m; /* message we use for the system call */
+  int result; /* we will have to save the result of the system call */
+    
+  m.SEM_F_TYPE = SEM_BINARY; /* we want to create a binary sem */
+  m.SEM_F_VALUE = value; /* the initial value */
+  
+  /* do the system call and save the result */
+  result = _syscall(SS, SEM_CREATE, &m); 
+
+  /* Set the semaphore handler in the user program.
+   * The handler is only valid of the result was OK.
+   */
+  *handler = m.SEM_F_HANDLER;
+    
+  return (result);
+}
+
diff -Naur /usr/src_original/lib/sem/sem_c_create.c /usr/src/lib/sem/sem_c_create.c
--- /usr/src_original/lib/sem/sem_c_create.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_c_create.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,39 @@
+/* The library function implemented in this file:
+ *   sem_c_create
+ *
+ * Function description:
+ *   This function creates a new counting semaphore.
+ * 
+ * The parameters for this library function are:
+ *   handler:       pointer to handler we want to create
+ *   value:         initial value (can't be lager than size)
+ *   size:          size of the counting semaphore
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_c_create(sem_t *handler, int value, int size)
+{
+  message m; /* message we use for the system call */
+  int result; /* we will have to save the result of the system call */
+    
+  m.SEM_F_TYPE = SEM_COUNTING; /* we want to create a counting sem */
+  m.SEM_F_VALUE = value; /* set the value in the message */
+  m.SEM_F_SIZE = size; /* set the size in the message */
+
+  /* do the system call and save the result */
+  result = _syscall(SS, SEM_CREATE, &m);
+
+  /* Set the semaphore handler in the user program.
+   * The handler is only valid if the result was OK.
+   */
+  *handler = m.SEM_F_HANDLER;
+    
+  return (result);
+}   
+
diff -Naur /usr/src_original/lib/sem/sem_delete.c /usr/src/lib/sem/sem_delete.c
--- /usr/src_original/lib/sem/sem_delete.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_delete.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,28 @@
+/* The library function implemented in this file:
+ *   sem_delete
+ *
+ * Function description:
+ *   This function deletes a semaphore.
+ * 
+ * The parameters for this library function are:
+ *   handler:       the semaphore handler
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_delete(sem_t handler)
+{
+  message m; /* message we use for the system call */
+    
+  m.SEM_F_HANDLER = handler; /* Set the semaphore handler */
+  
+  /* do the system call and return the result */
+  return (_syscall(SS, SEM_DELETE, &m));
+    
+}    
+
diff -Naur /usr/src_original/lib/sem/sem_flush.c /usr/src/lib/sem/sem_flush.c
--- /usr/src_original/lib/sem/sem_flush.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_flush.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,29 @@
+/* The library function implemented in this file:
+ *   sem_flush
+ *
+ * Function description:
+ *   This function unblocks all processes that are
+ *   blocked on a binary semaphore. It can be used
+ *   to synchronize processes.
+ * 
+ * The parameters for this library function are:
+ *   handler:       the semaphore handler
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_flush(sem_t handler)
+{
+  message m; /* message we use for the system call */
+    
+  m.SEM_F_HANDLER = handler; /* Set the semaphore handler */
+  
+  /* do the system call and return the result */
+  return (_syscall(SS, SEM_FLUSH, &m));    
+}    
+
diff -Naur /usr/src_original/lib/sem/sem_give.c /usr/src/lib/sem/sem_give.c
--- /usr/src_original/lib/sem/sem_give.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_give.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,28 @@
+/* The library function implemented in this file:
+ *   sem_give
+ *
+ * Function description:
+ *   This function gives a semaphore free
+ * 
+ * The parameters for this library function are:
+ *   handler:       the semaphore handler
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_give(sem_t handler)
+{
+  message m; /* message used for the system call */
+    
+  m.SEM_F_HANDLER = handler; /* Set the semaphore handler */
+  
+  /* do the system call and return the result */
+  return (_syscall(SS, SEM_GIVE, &m));
+    
+}    
+
diff -Naur /usr/src_original/lib/sem/sem_m_create.c /usr/src/lib/sem/sem_m_create.c
--- /usr/src_original/lib/sem/sem_m_create.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_m_create.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,35 @@
+/* The library function implemented in this file:
+ *   sem_m_create
+ *
+ * Function description:
+ *   This function creates a new mutex semaphore.
+ * 
+ * The parameters for this library function are:
+ *   handler:       pointer to handler we want to create
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code 
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_m_create(sem_t *handler)
+{
+    message m; /* message we use for the system call */
+    int result; /* we will have to save the result of the system call */
+    
+    m.SEM_F_TYPE = SEM_MUTEX; /* we want to create a mutex */
+
+    /* do the system call and save the result */
+    result = _syscall(SS, SEM_CREATE, &m);
+
+    /* Set the semaphore handler in the user program.
+     * The handler is only valid if the result was OK.
+     */
+    *handler = m.SEM_F_HANDLER;
+    
+    return (result);
+}    
+
diff -Naur /usr/src_original/lib/sem/sem_take.c /usr/src/lib/sem/sem_take.c
--- /usr/src_original/lib/sem/sem_take.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_take.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,37 @@
+/* The library function implemented in this file:
+ *   sem_take
+ *
+ * Function description:
+ *   Take a semaphore.
+ * 
+ * The parameters for this library function are:
+ *   handler:       the semaphore handler
+ *   block:         if block is WAIT_FOREVER and the sem
+ *                  is not available the process will block
+ *                  until it is available. If block is NO_WAIT
+ *                  the process will not be blocked. Instead if 
+ *                  a semaphore is not available SEM_IN_USE will
+ *                  be returned.
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK an error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_take(sem_t handler, int block)
+{
+  message m; /* message we use for the system call */
+    
+  m.SEM_F_HANDLER = handler; /* set the semaphore handler */
+  m.SEM_F_BLOCK = block; /* set the block type */
+  
+  /* Do the system call and return the result.
+   * If the semaphore is not available and block is WAIT_FOREVER
+   * it will return when it is unblocked.
+   */
+  return (_syscall(SS, SEM_TAKE, &m));    
+}    
+
diff -Naur /usr/src_original/lib/sem/sem_value.c /usr/src/lib/sem/sem_value.c
--- /usr/src_original/lib/sem/sem_value.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/sem/sem_value.c	2009-10-04 23:53:20.000000000 +0000
@@ -0,0 +1,34 @@
+/* The library function implemented in this file:
+ *   sem_value
+ *
+ * Function description:
+ *   Returns the value of a semaphore
+ * 
+ * The parameters for this library function are:
+ *   handler:       the semaphore handler
+ *   value:         pointer to store the returned value
+ *
+ * Return value:
+ *   Returns OK (0) if the operation succeeded.
+ *   If the return value is not OK the error code
+ *   is returned. Check <minix/sem.h> for error codes.
+ */
+#include <lib.h>
+#include <minix/sem.h>
+
+int sem_value(sem_t handler, int *value)
+{
+  message m; /* message we use for the system call */
+  int result; /* we have to save the result of the system call */
+  
+  m.SEM_F_HANDLER = handler; /* set the semaphore handler */
+
+  /* do the system call and save the result */
+  result = _syscall(SS, SEM_VALUE, &m);
+
+  /* Set the value in the user program */
+  *value = m.SEM_F_VALUE;  
+
+  return result;
+}
+
diff -Naur /usr/src_original/lib/syslib/.depend-ack /usr/src/lib/syslib/.depend-ack
--- /usr/src_original/lib/syslib/.depend-ack	2006-05-03 23:38:44.000000000 +0000
+++ /usr/src/lib/syslib/.depend-ack	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,1135 @@
+
+../obj-ack//./syslib/assert.o:	/usr/include/ansi.h
+../obj-ack//./syslib/assert.o:	/usr/include/assert.h
+../obj-ack//./syslib/assert.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/assert.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/assert.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/assert.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/assert.o:	/usr/include/stdio.h
+../obj-ack//./syslib/assert.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/assert.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/assert.o:	assert.c
+
+../obj-ack//./syslib/panic.o:	/usr/include/ansi.h
+../obj-ack//./syslib/panic.o:	/usr/include/errno.h
+../obj-ack//./syslib/panic.o:	/usr/include/lib.h
+../obj-ack//./syslib/panic.o:	/usr/include/limits.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/panic.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/panic.o:	/usr/include/signal.h
+../obj-ack//./syslib/panic.o:	/usr/include/stdlib.h
+../obj-ack//./syslib/panic.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/panic.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/panic.o:	panic.c
+../obj-ack//./syslib/panic.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_r16.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_r16.o:	pci.h
+../obj-ack//./syslib/pci_attr_r16.o:	pci_attr_r16.c
+../obj-ack//./syslib/pci_attr_r16.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_r32.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_r32.o:	pci.h
+../obj-ack//./syslib/pci_attr_r32.o:	pci_attr_r32.c
+../obj-ack//./syslib/pci_attr_r32.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_r8.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_r8.o:	pci.h
+../obj-ack//./syslib/pci_attr_r8.o:	pci_attr_r8.c
+../obj-ack//./syslib/pci_attr_r8.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_w16.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_w16.o:	pci.h
+../obj-ack//./syslib/pci_attr_w16.o:	pci_attr_w16.c
+../obj-ack//./syslib/pci_attr_w16.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_w32.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_w32.o:	pci.h
+../obj-ack//./syslib/pci_attr_w32.o:	pci_attr_w32.c
+../obj-ack//./syslib/pci_attr_w32.o:	syslib.h
+
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_attr_w8.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_attr_w8.o:	pci.h
+../obj-ack//./syslib/pci_attr_w8.o:	pci_attr_w8.c
+../obj-ack//./syslib/pci_attr_w8.o:	syslib.h
+
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_dev_name.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_dev_name.o:	pci.h
+../obj-ack//./syslib/pci_dev_name.o:	pci_dev_name.c
+../obj-ack//./syslib/pci_dev_name.o:	syslib.h
+
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_find_dev.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_find_dev.o:	pci.h
+../obj-ack//./syslib/pci_find_dev.o:	pci_find_dev.c
+../obj-ack//./syslib/pci_find_dev.o:	syslib.h
+
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_first_dev.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_first_dev.o:	pci.h
+../obj-ack//./syslib/pci_first_dev.o:	pci_first_dev.c
+../obj-ack//./syslib/pci_first_dev.o:	syslib.h
+
+../obj-ack//./syslib/pci_ids.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_ids.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_ids.o:	pci.h
+../obj-ack//./syslib/pci_ids.o:	pci_ids.c
+../obj-ack//./syslib/pci_ids.o:	syslib.h
+
+../obj-ack//./syslib/pci_init.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_init.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_init.o:	pci_init.c
+../obj-ack//./syslib/pci_init.o:	syslib.h
+
+../obj-ack//./syslib/pci_init1.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/string.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_init1.o:	/usr/include/unistd.h
+../obj-ack//./syslib/pci_init1.o:	pci.h
+../obj-ack//./syslib/pci_init1.o:	pci_init1.c
+../obj-ack//./syslib/pci_init1.o:	syslib.h
+
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_next_dev.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_next_dev.o:	pci.h
+../obj-ack//./syslib/pci_next_dev.o:	pci_next_dev.c
+../obj-ack//./syslib/pci_next_dev.o:	syslib.h
+
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_rescan_bus.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_rescan_bus.o:	pci.h
+../obj-ack//./syslib/pci_rescan_bus.o:	pci_rescan_bus.c
+../obj-ack//./syslib/pci_rescan_bus.o:	syslib.h
+
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_reserve.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_reserve.o:	pci.h
+../obj-ack//./syslib/pci_reserve.o:	pci_reserve.c
+../obj-ack//./syslib/pci_reserve.o:	syslib.h
+
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/ansi.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/errno.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/lib.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/limits.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/sysutil.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/pci_slot_name.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/pci_slot_name.o:	pci.h
+../obj-ack//./syslib/pci_slot_name.o:	pci_slot_name.c
+../obj-ack//./syslib/pci_slot_name.o:	syslib.h
+
+../obj-ack//./syslib/sys_abort.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/stdarg.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_abort.o:	/usr/include/unistd.h
+../obj-ack//./syslib/sys_abort.o:	sys_abort.c
+../obj-ack//./syslib/sys_abort.o:	syslib.h
+
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_endsig.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_endsig.o:	sys_endsig.c
+../obj-ack//./syslib/sys_endsig.o:	syslib.h
+
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_eniop.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_eniop.o:	sys_eniop.c
+../obj-ack//./syslib/sys_eniop.o:	syslib.h
+
+../obj-ack//./syslib/sys_exec.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_exec.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_exec.o:	sys_exec.c
+../obj-ack//./syslib/sys_exec.o:	syslib.h
+
+../obj-ack//./syslib/sys_exit.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_exit.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_exit.o:	sys_exit.c
+../obj-ack//./syslib/sys_exit.o:	syslib.h
+
+../obj-ack//./syslib/sys_fork.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_fork.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_fork.o:	sys_fork.c
+../obj-ack//./syslib/sys_fork.o:	syslib.h
+
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_getinfo.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_getinfo.o:	sys_getinfo.c
+../obj-ack//./syslib/sys_getinfo.o:	syslib.h
+
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_getsig.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_getsig.o:	sys_getsig.c
+../obj-ack//./syslib/sys_getsig.o:	syslib.h
+
+../obj-ack//./syslib/sys_in.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_in.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_in.o:	sys_in.c
+../obj-ack//./syslib/sys_in.o:	syslib.h
+
+../obj-ack//./syslib/sys_int86.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_int86.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_int86.o:	sys_int86.c
+../obj-ack//./syslib/sys_int86.o:	syslib.h
+
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_irqctl.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_irqctl.o:	sys_irqctl.c
+../obj-ack//./syslib/sys_irqctl.o:	syslib.h
+
+../obj-ack//./syslib/sys_kill.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_kill.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_kill.o:	sys_kill.c
+../obj-ack//./syslib/sys_kill.o:	syslib.h
+
+../obj-ack//./syslib/sys_memset.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_memset.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_memset.o:	sys_memset.c
+../obj-ack//./syslib/sys_memset.o:	syslib.h
+
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_newmap.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_newmap.o:	sys_newmap.c
+../obj-ack//./syslib/sys_newmap.o:	syslib.h
+
+../obj-ack//./syslib/sys_nice.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_nice.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_nice.o:	sys_nice.c
+../obj-ack//./syslib/sys_nice.o:	syslib.h
+
+../obj-ack//./syslib/sys_out.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_out.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_out.o:	sys_out.c
+../obj-ack//./syslib/sys_out.o:	syslib.h
+
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_physcopy.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_physcopy.o:	sys_physcopy.c
+../obj-ack//./syslib/sys_physcopy.o:	syslib.h
+
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_sdevio.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_sdevio.o:	sys_sdevio.c
+../obj-ack//./syslib/sys_sdevio.o:	syslib.h
+
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_segctl.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_segctl.o:	sys_segctl.c
+../obj-ack//./syslib/sys_segctl.o:	syslib.h
+
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_setalarm.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_setalarm.o:	sys_setalarm.c
+../obj-ack//./syslib/sys_setalarm.o:	syslib.h
+
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_sigreturn.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_sigreturn.o:	sys_sigreturn.c
+../obj-ack//./syslib/sys_sigreturn.o:	syslib.h
+
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_sigsend.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_sigsend.o:	sys_sigsend.c
+../obj-ack//./syslib/sys_sigsend.o:	syslib.h
+
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_privctl.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_privctl.o:	sys_privctl.c
+../obj-ack//./syslib/sys_privctl.o:	syslib.h
+
+../obj-ack//./syslib/sys_times.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_times.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_times.o:	sys_times.c
+../obj-ack//./syslib/sys_times.o:	syslib.h
+
+../obj-ack//./syslib/sys_trace.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_trace.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_trace.o:	sys_trace.c
+../obj-ack//./syslib/sys_trace.o:	syslib.h
+
+../obj-ack//./syslib/sys_umap.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_umap.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_umap.o:	sys_umap.c
+../obj-ack//./syslib/sys_umap.o:	syslib.h
+
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vinb.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vinb.o:	sys_vinb.c
+../obj-ack//./syslib/sys_vinb.o:	syslib.h
+
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vinl.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vinl.o:	sys_vinl.c
+../obj-ack//./syslib/sys_vinl.o:	syslib.h
+
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vinw.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vinw.o:	sys_vinw.c
+../obj-ack//./syslib/sys_vinw.o:	syslib.h
+
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vircopy.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vircopy.o:	sys_vircopy.c
+../obj-ack//./syslib/sys_vircopy.o:	syslib.h
+
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vm_map.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vm_map.o:	sys_vm_map.c
+../obj-ack//./syslib/sys_vm_map.o:	syslib.h
+
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_vm_setbuf.o:	sys_vm_setbuf.c
+../obj-ack//./syslib/sys_vm_setbuf.o:	syslib.h
+
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_voutb.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_voutb.o:	sys_voutb.c
+../obj-ack//./syslib/sys_voutb.o:	syslib.h
+
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_voutl.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_voutl.o:	sys_voutl.c
+../obj-ack//./syslib/sys_voutl.o:	syslib.h
+
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_voutw.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_voutw.o:	sys_voutw.c
+../obj-ack//./syslib/sys_voutw.o:	syslib.h
+
+../obj-ack//./syslib/taskcall.o:	/usr/include/ansi.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/errno.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/lib.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/limits.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/taskcall.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/taskcall.o:	taskcall.c
+
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/rt.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_rt_set_sched.o:	sys_rt_set_sched.c
+../obj-ack//./syslib/sys_rt_set_sched.o:	syslib.h
+
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/rt.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_rt_set.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_rt_set.o:	sys_rt_set.c
+../obj-ack//./syslib/sys_rt_set.o:	syslib.h
+
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/rt.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_rt_nextperiod.o:	sys_rt_nextperiod.c
+../obj-ack//./syslib/sys_rt_nextperiod.o:	syslib.h
+
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/rt.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	sys_rt_sched_bridge.c
+../obj-ack//./syslib/sys_rt_sched_bridge.o:	syslib.h
+
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/rt.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_rt_show_data.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_rt_show_data.o:	sys_rt_show_data.c
+../obj-ack//./syslib/sys_rt_show_data.o:	syslib.h
+
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/klog.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_klog_set.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_klog_set.o:	sys_klog_set.c
+../obj-ack//./syslib/sys_klog_set.o:	syslib.h
+
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/ansi.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/errno.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/lib.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/limits.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/callnr.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/com.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/config.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/const.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/devio.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/ipc.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/klog.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/sys_config.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/syslib.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/minix/type.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/sys/dir.h
+../obj-ack//./syslib/sys_klog_copy.o:	/usr/include/sys/types.h
+../obj-ack//./syslib/sys_klog_copy.o:	sys_klog_copy.c
+../obj-ack//./syslib/sys_klog_copy.o:	syslib.h
diff -Naur /usr/src_original/lib/syslib/Makedepend-ack /usr/src/lib/syslib/Makedepend-ack
--- /usr/src_original/lib/syslib/Makedepend-ack	2006-05-03 23:38:44.000000000 +0000
+++ /usr/src/lib/syslib/Makedepend-ack	2009-10-04 23:53:18.000000000 +0000
@@ -55,3 +55,10 @@
 	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_voutl.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
 	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_voutw.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
 	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' taskcall.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_set_sched.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_set.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_nextperiod.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_sched_bridge.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_show_data.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_klog_set.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
+	mkdep 'cc -O -D_MINIX -D_POSIX_SOURCE -E' sys_klog_copy.c | sed -e 's:^\(.\):../obj-ack//./syslib/\1:' >> .depend-ack
diff -Naur /usr/src_original/lib/syslib/Makedepend-gnu /usr/src/lib/syslib/Makedepend-gnu
--- /usr/src_original/lib/syslib/Makedepend-gnu	2006-05-03 23:38:44.000000000 +0000
+++ /usr/src/lib/syslib/Makedepend-gnu	2009-10-04 23:53:18.000000000 +0000
@@ -55,3 +55,10 @@
 	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_voutl.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
 	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_voutw.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
 	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' taskcall.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_set_sched.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_set.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_nextperiod.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_sched_bridge.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_rt_show_data.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_klog_set.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
+	mkdep 'gcc -O -D_MINIX -D_POSIX_SOURCE -E' sys_klog_copy.c | sed -e '/<built-in>/d' -e '/<command line>/d' -e 's:^\(.\):../obj-gnu/./syslib/\1:' >> .depend-gnu
diff -Naur /usr/src_original/lib/syslib/Makefile /usr/src/lib/syslib/Makefile
--- /usr/src_original/lib/syslib/Makefile	2006-05-03 23:38:44.000000000 +0000
+++ /usr/src/lib/syslib/Makefile	2009-10-04 23:53:18.000000000 +0000
@@ -73,6 +73,13 @@
 ../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_voutl.o)
 ../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_voutw.o)
 ../obj-ack//libsys.a: ../obj-ack//libsys.a(taskcall.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_rt_set_sched.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_rt_set.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_rt_nextperiod.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_rt_sched_bridge.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_rt_show_data.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_klog_set.o)
+../obj-ack//libsys.a: ../obj-ack//libsys.a(sys_klog_copy.o)
 
 ../obj-ack//libsys.a:
 	ar cr ../obj-ack//libsys.a ../obj-ack//./syslib/*.o
@@ -186,6 +193,20 @@
 	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_voutw.o sys_voutw.c
 ../obj-ack//libsys.a(taskcall.o): taskcall.c
 	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/taskcall.o taskcall.c
+../obj-ack//libsys.a(sys_rt_set_sched.o): sys_rt_set_sched.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_rt_set_sched.o sys_rt_set_sched.c
+../obj-ack//libsys.a(sys_rt_set.o): sys_rt_set.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_rt_set.o sys_rt_set.c
+../obj-ack//libsys.a(sys_rt_nextperiod.o): sys_rt_nextperiod.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_rt_nextperiod.o sys_rt_nextperiod.c
+../obj-ack//libsys.a(sys_rt_sched_bridge.o): sys_rt_sched_bridge.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_rt_sched_bridge.o sys_rt_sched_bridge.c
+../obj-ack//libsys.a(sys_rt_show_data.o): sys_rt_show_data.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_rt_show_data.o sys_rt_show_data.c
+../obj-ack//libsys.a(sys_klog_set.o): sys_klog_set.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_klog_set.o sys_klog_set.c
+../obj-ack//libsys.a(sys_klog_copy.o): sys_klog_copy.c
+	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./syslib/sys_klog_copy.o sys_klog_copy.c
 
 all-gnu: ../obj-gnu/libsys.a
 
@@ -243,6 +264,13 @@
 ../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_voutl.o
 ../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_voutw.o
 ../obj-gnu/libsys.a: ../obj-gnu/./syslib/taskcall.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_rt_set_sched.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_rt_set.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_rt_nextperiod.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_rt_sched_bridge.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_rt_show_data.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_klog_set.o
+../obj-gnu/libsys.a: ../obj-gnu/./syslib/sys_klog_copy.o
 
 ../obj-gnu/libsys.a:
 	gar cr ../obj-gnu/libsys.a $?
@@ -409,6 +437,27 @@
 ../obj-gnu/./syslib/taskcall.o: taskcall.c
 	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/taskcall.o taskcall.c
 
+../obj-gnu/./syslib/sys_rt_set_sched.o: sys_rt_set_sched.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_rt_set_sched.o sys_rt_set_sched.c
+
+../obj-gnu/./syslib/sys_rt_set.o: sys_rt_set.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_rt_set.o sys_rt_set.c
+
+../obj-gnu/./syslib/sys_rt_nextperiod.o: sys_rt_nextperiod.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_rt_nextperiod.o sys_rt_nextperiod.c
+
+../obj-gnu/./syslib/sys_rt_sched_bridge.o: sys_rt_sched_bridge.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_rt_sched_bridge.o sys_rt_sched_bridge.c
+
+../obj-gnu/./syslib/sys_rt_show_data.o: sys_rt_show_data.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_rt_show_data.o sys_rt_show_data.c
+
+../obj-gnu/./syslib/sys_klog_set.o: sys_klog_set.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_klog_set.o sys_klog_set.c
+
+../obj-gnu/./syslib/sys_klog_copy.o: sys_klog_copy.c
+	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./syslib/sys_klog_copy.o sys_klog_copy.c
+
 
 
 
diff -Naur /usr/src_original/lib/syslib/Makefile.in /usr/src/lib/syslib/Makefile.in
--- /usr/src_original/lib/syslib/Makefile.in	2006-03-15 12:06:18.000000000 +0000
+++ /usr/src/lib/syslib/Makefile.in	2009-10-04 23:53:18.000000000 +0000
@@ -58,6 +58,13 @@
 	sys_voutb.c \
 	sys_voutl.c \
 	sys_voutw.c \
-	taskcall.c"
+	taskcall.c \
+	sys_rt_set_sched.c \
+	sys_rt_set.c \
+	sys_rt_nextperiod.c \
+	sys_rt_sched_bridge.c \
+	sys_rt_show_data.c \
+	sys_klog_set.c \
+	sys_klog_copy.c"
 
 TYPE=both
diff -Naur /usr/src_original/lib/syslib/sys_klog_copy.c /usr/src/lib/syslib/sys_klog_copy.c
--- /usr/src_original/lib/syslib/sys_klog_copy.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_klog_copy.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,31 @@
+/* The system library function implemented in this file:
+ *   sys_klog_copy
+ *
+ * Function description:
+ *   This function does the kernel call to
+ *   copy the kernel log from the kernel
+ *   to a user program.
+ * 
+ * The parameters for this library function are:
+ *   endpoint:      endpoint of user program
+ *   data_ptr:      (virtual) pointer to kernel log in user program
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/klog.h>
+
+int sys_klog_copy(int endpoint, void *data_ptr)
+{
+  message m; /* message we use for the kernel call */
+  
+  m.KLOG_ENDPT = endpoint; /* endpoint of user program */
+  m.KLOG_PTR = data_ptr; /* pointer to kernel log in user program */
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_KLOG_COPY, &m));
+} 
+
diff -Naur /usr/src_original/lib/syslib/sys_klog_set.c /usr/src/lib/syslib/sys_klog_set.c
--- /usr/src_original/lib/syslib/sys_klog_set.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_klog_set.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,31 @@
+/* The system library function implemented in this file:
+ *   sys_klog_set
+ *
+ * Function description:
+ *   This function does the kernel call to set the
+ *   kernel logger state. If state is set to 1
+ *   the kernel will log until the buffer is full.
+ * 
+ * The parameters for this library function are:
+ *   state:     kernel logger state
+ *   type:      what to log?
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/klog.h>
+
+int sys_klog_set(int state, int type)
+{
+  message m; /* message we use for the kernel call */
+  
+  m.KLOG_STATE = state; /* set the kernel logger state */
+  m.KLOG_TYPE = type; /* what to log? */
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_KLOG_SET, &m));
+} 
+
diff -Naur /usr/src_original/lib/syslib/sys_rt_nextperiod.c /usr/src/lib/syslib/sys_rt_nextperiod.c
--- /usr/src_original/lib/syslib/sys_rt_nextperiod.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_rt_nextperiod.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,31 @@
+/* The system library function implemented in this file:
+ *   sys_rt_nextperiod
+ *
+ * Function description:
+ *   This function does the kernel call for processes
+ *   scheduled by Earliest Deadline First that wants to
+ *   give up remaining calculation time in a period.
+ *   The process will wait till the next period start
+ *   after this call.
+ * 
+ * The parameters for this library function are:
+ *   endpoint:      endpoint of process that wants to give up calculation time
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/rt.h>
+
+int sys_rt_nextperiod(int endpoint)
+{
+  message m; /* message we use for the kernel call */
+  
+  m.RT_ENDPT = endpoint; /* set the endpoint */
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_RT_NEXTPERIOD, &m));
+}    
+
diff -Naur /usr/src_original/lib/syslib/sys_rt_sched_bridge.c /usr/src/lib/syslib/sys_rt_sched_bridge.c
--- /usr/src_original/lib/syslib/sys_rt_sched_bridge.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_rt_sched_bridge.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,30 @@
+/* The system library function implemented in this file:
+ *   sys_rt_sched_bridge
+ *
+ * Function description:
+ *   This function does the kernel call to set the scheduler
+ *   bridge state. Depending on this state system processes
+ *   are allowed or not allowed to get a lower priority than
+ *   RT processes.
+ * 
+ * The parameters for this library function are:
+ *   state:     scheduling bridge state
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/rt.h>
+
+int sys_rt_sched_bridge(int state)
+{
+  message m; /* message we use for the kernel call */
+  
+  m.RT_SCHED_BRIDGE = state; /* set the bridge state */
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_RT_SCHED_BRIDGE, &m));
+}    
+
diff -Naur /usr/src_original/lib/syslib/sys_rt_set.c /usr/src/lib/syslib/sys_rt_set.c
--- /usr/src_original/lib/syslib/sys_rt_set.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_rt_set.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,50 @@
+/* The system library function implemented in this file:
+ *   sys_rt_set
+ *
+ * Function description:
+ *   This function will do the kernel call to transform a normal
+ *   user process into a real-time process.
+ * 
+ * The parameters for this library function are:
+ *   endpoint:      endpoint of process that wants to be real-time
+ *   sched:         scheduler type
+ *   param1:        if RM: RM prio if EDF: period
+ *   param2:        if EDF: calculation time
+ *   
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/rt.h>
+
+#define PARAM_RM_PRIO         param1
+#define PARAM_EDF_PERIOD      param1
+#define PARAM_EDF_CALCTIME    param2
+
+int sys_rt_set(int endpoint, int sched, int param1, int param2)
+{
+  message m; /* message we use for the kernel call */
+  
+  m.RT_ENDPT = endpoint; /* set the endpoint of the process that wants to be RT */
+  m.RT_SCHED = sched; /* set the scheduler */
+  
+  if (sched == SCHED_RM) {
+      
+      /* Rate-Monotonic specific parameters */
+      m.RM_PRIO = PARAM_RM_PRIO; /* set priority policy */
+  } else if (sched == SCHED_EDF) {
+      
+      /* Earliest Deadline First specific parameters */
+      m.EDF_PERIOD = PARAM_EDF_PERIOD; /* set the period in ticks */
+      m.EDF_CALCTIME = PARAM_EDF_CALCTIME; /* set the calculation time per period in ticks */
+  } else {
+      /* unknown scheduler type */
+      return (EINVAL);
+  }    
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_RT_SET, &m));
+}    
+
diff -Naur /usr/src_original/lib/syslib/sys_rt_set_sched.c /usr/src/lib/syslib/sys_rt_set_sched.c
--- /usr/src_original/lib/syslib/sys_rt_set_sched.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_rt_set_sched.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,33 @@
+/* The system library function implemented in this file:
+ *   sys_rt_set_sched
+ *
+ * Function description:
+ *   This function sets the real-time scheduler.
+ * 
+ * The parameters for this library function are:
+ *   type:      scheduler type
+ *   policy:    Rate-Monotonic priority policy (used by RM only)
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/rt.h>
+
+int sys_rt_set_sched(int type, int policy)
+{
+  message m; /* message we use for the kernel call */
+
+  m.RT_SCHED = type; /* set the scheduler type */
+    
+  /* rate-monotonic specific parameter */
+  if (type == SCHED_RM) {
+      m.RM_PRIO_POLICY = policy; /* set the prio policy */
+  }    
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_RT_SET_SCHED, &m));
+}    
+
diff -Naur /usr/src_original/lib/syslib/sys_rt_show_data.c /usr/src/lib/syslib/sys_rt_show_data.c
--- /usr/src_original/lib/syslib/sys_rt_show_data.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/lib/syslib/sys_rt_show_data.c	2009-10-04 23:53:18.000000000 +0000
@@ -0,0 +1,26 @@
+/* The system library function implemented in this file:
+ *   sys_rt_show_data
+ *
+ * Function description:
+ *   This function does a kernel call to dump 
+ *   real-time scheduler info.
+ * 
+ * The parameters for this library function are:
+ *   none
+ *
+ * Return value:
+ *   Returns 0 if the operation succeeded.
+ *   If the return value is not 0 the error code
+ *   is returned.
+ */
+#include "syslib.h"
+#include <minix/rt.h>
+
+int sys_rt_show_data(void)
+{
+  message m; /* message we use for the kernel call */
+  
+  /* do the kernel call and return the result */
+  return (_taskcall(SYSTASK, SYS_RT_SHOW_DATA, &m));
+}    
+
diff -Naur /usr/src_original/servers/Makefile /usr/src/servers/Makefile
--- /usr/src_original/servers/Makefile	2005-10-20 20:32:40.000000000 +0000
+++ /usr/src/servers/Makefile	2009-10-04 23:53:21.000000000 +0000
@@ -20,6 +20,7 @@
 	cd ./rs && $(MAKE) $@
 	cd ./ds && $(MAKE) $@
 	cd ./is && $(MAKE) $@
+	cd ./ss && $(MAKE) $@
 	cd ./init && $(MAKE) $@
 	cd ./inet && $(MAKE) $@
 
@@ -27,7 +28,8 @@
 	cd ./pm && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build
 	cd ./fs && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build
 	cd ./rs && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build
-	cd ./ds && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build
+	cd ./ds && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build	
+	cd ./ss && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build	
 	cd ./init && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) build
 
 
diff -Naur /usr/src_original/servers/is/dmp.c /usr/src/servers/is/dmp.c
--- /usr/src_original/servers/is/dmp.c	2006-03-10 16:10:05.000000000 +0000
+++ /usr/src/servers/is/dmp.c	2009-10-04 23:53:21.000000000 +0000
@@ -12,7 +12,7 @@
 /* Define hooks for the debugging dumps. This table maps function keys
  * onto a specific dump and provides a description for it.
  */
-#define NHOOKS 18
+#define NHOOKS 19
 
 struct hook_entry {
 	int key;
@@ -37,6 +37,7 @@
 	{ SF6,	rproc_dmp, "Reincarnation server process table" },
 	{ SF7,  holes_dmp, "Memory free list" },
 	{ SF8,  data_store_dmp, "Data store contents" },
+    { SF9,  rt_sched_dmp, "RT Scheduler dump" },
 };
 
 /*===========================================================================*
diff -Naur /usr/src_original/servers/is/dmp_kernel.c /usr/src/servers/is/dmp_kernel.c
--- /usr/src_original/servers/is/dmp_kernel.c	2006-05-03 21:13:45.000000000 +0000
+++ /usr/src/servers/is/dmp_kernel.c	2009-10-04 23:53:21.000000000 +0000
@@ -557,3 +557,14 @@
   return cproc_addr(proc_nr)->p_name;
 }
 
+/*===========================================================================*
+ *              rt_sched_dmp                                                 *
+ *===========================================================================*/
+PUBLIC void rt_sched_dmp(void)
+{
+  /* Binded to Shift+F9. Dumps Real-time scheduler info.
+   * Invokes system library function to do the kernel call.
+   * This kernel call will dump the info on the screen.
+   */
+  sys_rt_show_data();
+}    
diff -Naur /usr/src_original/servers/is/main.c /usr/src/servers/is/main.c
--- /usr/src_original/servers/is/main.c	2006-03-10 16:10:05.000000000 +0000
+++ /usr/src/servers/is/main.c	2009-10-04 23:53:21.000000000 +0000
@@ -97,10 +97,10 @@
   if (sigaction(SIGTERM, &sigact, NULL) < 0) 
       report("IS","warning, sigaction() failed", errno);
 
-  /* Set key mappings. IS takes all of F1-F12 and Shift+F1-F6. */
+  /* Set key mappings. IS takes all of F1-F12 and Shift+F1-F9. */
   fkeys = sfkeys = 0;
   for (i=1; i<=12; i++) bit_set(fkeys, i);
-  for (i=1; i<= 8; i++) bit_set(sfkeys, i);
+  for (i=1; i<= 9; i++) bit_set(sfkeys, i);
   if ((s=fkey_map(&fkeys, &sfkeys)) != OK)
       report("IS", "warning, fkey_map failed:", s);
 }
diff -Naur /usr/src_original/servers/is/proto.h /usr/src/servers/is/proto.h
--- /usr/src_original/servers/is/proto.h	2006-03-10 16:10:05.000000000 +0000
+++ /usr/src/servers/is/proto.h	2009-10-04 23:53:21.000000000 +0000
@@ -19,6 +19,7 @@
 _PROTOTYPE( void monparams_dmp, (void)					);
 _PROTOTYPE( void kenv_dmp, (void)					);
 _PROTOTYPE( void timing_dmp, (void)					);
+_PROTOTYPE( void rt_sched_dmp, (void)               );
 
 /* dmp_pm.c */
 _PROTOTYPE( void mproc_dmp, (void)					);
diff -Naur /usr/src_original/servers/pm/.depend /usr/src/servers/pm/.depend
--- /usr/src_original/servers/pm/.depend	2006-05-03 23:38:29.000000000 +0000
+++ /usr/src/servers/pm/.depend	2009-10-04 23:53:21.000000000 +0000
@@ -239,6 +239,50 @@
 misc.o:	proto.h
 misc.o:	type.h
 
+rt.o:	../../kernel/config.h
+rt.o:	../../kernel/const.h
+rt.o:	../../kernel/priv.h
+rt.o:	../../kernel/proc.h
+rt.o:	../../kernel/protect.h
+rt.o:	../../kernel/type.h
+rt.o:	/usr/include/ansi.h
+rt.o:	/usr/include/errno.h
+rt.o:	/usr/include/fcntl.h
+rt.o:	/usr/include/ibm/bios.h
+rt.o:	/usr/include/ibm/cpu.h
+rt.o:	/usr/include/ibm/interrupt.h
+rt.o:	/usr/include/ibm/ports.h
+rt.o:	/usr/include/lib.h
+rt.o:	/usr/include/limits.h
+rt.o:	/usr/include/minix/callnr.h
+rt.o:	/usr/include/minix/com.h
+rt.o:	/usr/include/minix/config.h
+rt.o:	/usr/include/minix/const.h
+rt.o:	/usr/include/minix/devio.h
+rt.o:	/usr/include/minix/dmap.h
+rt.o:	/usr/include/minix/ioctl.h
+rt.o:	/usr/include/minix/ipc.h
+rt.o:	/usr/include/minix/sys_config.h
+rt.o:	/usr/include/minix/syslib.h
+rt.o:	/usr/include/minix/sysutil.h
+rt.o:	/usr/include/minix/type.h
+rt.o:	/usr/include/signal.h
+rt.o:	/usr/include/string.h
+rt.o:	/usr/include/sys/dir.h
+rt.o:	/usr/include/sys/resource.h
+rt.o:	/usr/include/sys/svrctl.h
+rt.o:	/usr/include/sys/types.h
+rt.o:	/usr/include/timers.h
+rt.o:	/usr/include/unistd.h
+rt.o:	const.h
+rt.o:	glo.h
+rt.o:	mproc.h
+rt.o:	param.h
+rt.o:	pm.h
+rt.o:	proto.h
+rt.o:	rt.c
+rt.o:	type.h
+
 signal.o:	/usr/include/ansi.h
 signal.o:	/usr/include/errno.h
 signal.o:	/usr/include/fcntl.h
diff -Naur /usr/src_original/servers/pm/Makefile /usr/src/servers/pm/Makefile
--- /usr/src_original/servers/pm/Makefile	2005-07-19 13:21:50.000000000 +0000
+++ /usr/src/servers/pm/Makefile	2009-10-04 23:53:21.000000000 +0000
@@ -14,7 +14,7 @@
 LDFLAGS = -i
 
 OBJ = 	main.o forkexit.o break.o exec.o time.o timers.o \
-	signal.o alloc.o utility.o table.o trace.o getset.o misc.o
+	signal.o alloc.o utility.o table.o trace.o getset.o misc.o rt.o klog.o
 
 # build local binary
 all build:	$(SERVER)
diff -Naur /usr/src_original/servers/pm/forkexit.c /usr/src/servers/pm/forkexit.c
--- /usr/src_original/servers/pm/forkexit.c	2006-03-10 17:35:55.000000000 +0000
+++ /usr/src/servers/pm/forkexit.c	2009-10-04 23:53:21.000000000 +0000
@@ -21,6 +21,8 @@
 #include <signal.h>
 #include "mproc.h"
 #include "param.h"
+#include <lib.h>
+#include <minix/sem.h>
 
 #define LAST_FEW            2	/* last few slots reserved for superuser */
 
@@ -148,7 +150,8 @@
   pid_t pidarg, procgrp;
   struct mproc *p_mp;
   clock_t t[5];
-
+  message m; /* used for call to semaphore server */
+  
   proc_nr = (int) (rmp - mproc);	/* get process slot number */
   proc_nr_e = rmp->mp_endpoint;
 
@@ -180,6 +183,11 @@
   if((r=sys_exit(proc_nr_e)) != OK)	/* destroy the process */
   	panic(__FILE__,"pm_exit: sys_exit failed", r);
 
+  /* inform semaphore server that a process has exited */
+  m.SEM_F_ENDPT = proc_nr_e;
+  m.m_type = SEM_PROCEXIT;
+  send(SS,&m);
+  
   /* Pending reply messages for the dead process cannot be delivered. */
   rmp->mp_flags &= ~REPLY;
   
diff -Naur /usr/src_original/servers/pm/klog.c /usr/src/servers/pm/klog.c
--- /usr/src_original/servers/pm/klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/pm/klog.c	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,35 @@
+/* System calls for kernel logging.	Author: Bianco Zandbergen
+ *								    19 May 2009
+ * The entry points into this file are:
+ *   do_klog_set: set the kernel log state
+ *   do_klog_copy: copy the kernel log to a user process
+ */
+
+#include "pm.h"
+#include <minix/klog.h>
+
+/*===========================================================================*
+ *				do_klog_set 				                                 *
+ *===========================================================================*/
+PUBLIC int do_klog_set(void)
+{
+  /* Set the kernel log state.
+   * Invoke the system library function to do the kernel call.
+   */
+  return(sys_klog_set(m_in.KLOG_STATE, m_in.KLOG_TYPE));
+}	
+
+/*===========================================================================*
+ *				do_klog_copy   				                                 *
+ *===========================================================================*/
+PUBLIC int do_klog_copy(void)
+{
+  /* Copy the kernel log from the kernel to the user process.
+   * Invoke the system library function to do the kernel call.
+   * m_in.m_source is the endpoint of the user process.
+   * m_in.KLOG_PTR is the pointer to the kernel log data structure
+   * of the user process.
+   */
+  return(sys_klog_copy(m_in.m_source, m_in.KLOG_PTR));
+}
+
diff -Naur /usr/src_original/servers/pm/proto.h /usr/src/servers/pm/proto.h
--- /usr/src_original/servers/pm/proto.h	2006-03-10 16:10:05.000000000 +0000
+++ /usr/src/servers/pm/proto.h	2009-10-04 23:53:21.000000000 +0000
@@ -117,3 +117,13 @@
 _PROTOTYPE( int proc_from_pid, (pid_t p));
 _PROTOTYPE( int pm_isokendpt, (int ep, int *proc));
 
+/* rt.c */
+_PROTOTYPE( int do_rt_set_sched, (void) );
+_PROTOTYPE( int do_rt_set, (void) );
+_PROTOTYPE( int do_rt_nextperiod, (void) );
+_PROTOTYPE( int do_rt_set_sched_bridge, (void) );
+
+/* klog.c */
+_PROTOTYPE( int do_klog_set, (void) );
+_PROTOTYPE( int do_klog_copy, (void) );
+
diff -Naur /usr/src_original/servers/pm/rt.c /usr/src/servers/pm/rt.c
--- /usr/src_original/servers/pm/rt.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/pm/rt.c	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,110 @@
+/* System calls for real-time.	Author: Bianco Zandbergen
+ *								19 May 2009
+ * The entry points into this file are:
+ *   do_rt_set_sched: set the real-time scheduler type
+ *   do_rt_set: transform a normal process to real-time process
+ *   do_rt_nextperiod: give up remaining calculation time for EDF processes
+ *   do_rt_set_sched_bridge: set RT scheduling bridge state
+ */
+
+#include "pm.h"
+#include <minix/rt.h>
+
+/*===========================================================================*
+ *				do_rt_set_sched				                                 *
+ *===========================================================================*/
+PUBLIC int do_rt_set_sched(void)
+{
+  /* Set the Real-time scheduler to use.
+   * This setting is system wide and all real-time processes should use the same
+   * RT scheduler.
+   */
+  if (m_in.RT_SCHED == SCHED_EDF) {
+      /* Received a request to set the RT scheduler to Earliest Deadline First.
+       * Invoke the system library function to do the kernel call and
+       * return the result.
+       * The second parameter is only used by RM, so we set it to 0.
+       */
+      return (sys_rt_set_sched(SCHED_EDF, 0));
+  } else if (m_in.RT_SCHED == SCHED_RM) {
+      /* Received a request to set the RT scheduler to Rate-Monotonic.
+       * Invoke the system library function that will do the kernel call and
+       * return the result.
+       * The second parameter defines wether a RM priority should be unique or not.
+       */
+      return (sys_rt_set_sched(SCHED_RM, m_in.RM_PRIO_POLICY)); 
+  } else {
+      /* unknown scheduler type */
+      return (EINVAL);
+  }    
+}	
+
+/*===========================================================================*
+ *				do_rt_set   				                                 *
+ *===========================================================================*/
+PUBLIC int do_rt_set(void)
+{
+  /* Transform a non real-time process to real-time.
+   * The scheduler type should equal to the current RT scheduler set by
+   * do_rt_set_sched(), checks for this are done in the kernel.
+   */
+  switch (m_in.RT_SCHED) {
+      case SCHED_RM:
+          /* Process wants to be real-time and use Rate-Monotonic scheduling.
+           * Invoke the system library function to do the kernel call and return 
+           * the result. m_in.m_source is the endpoint of the process that called
+           * the system call. Rate-Monotonic processes will have a RM priority besides
+           * the Minix scheduling priority. All RM processes share the same Minix priority.
+           * The priority among RM processes is defined by the RM priority.
+           * Last parameter is not used so we set it to 0.
+           */
+          return (sys_rt_set(m_in.m_source, SCHED_RM, m_in.RM_PRIO, 0));
+      case SCHED_EDF:
+          /* Process wants to be real-time and use Earliest Deadline First scheduling.
+           * Invoke the system library function to do the kernel call and return the
+           * result. An EDF process is a periodic process, so we specify the period in
+           * system ticks. Within each period the process reserves calculation time that
+           * is also specified in ticks. If an EDF process does not get the calculation time
+           * it reserved before a new period starts it has missed a deadline.
+           */     
+          return (sys_rt_set(m_in.m_source, SCHED_EDF, m_in.EDF_PERIOD, m_in.EDF_CALCTIME));    
+      default:
+          /* unknown scheduler type */
+          return (EINVAL);
+  }         
+}    
+
+/*===========================================================================*
+ *				do_rt_nextperiod			                                 *
+ *===========================================================================*/
+PUBLIC int do_rt_nextperiod(void)
+{
+  /* Give up remaining calculation time and wait till next period start. 
+   * This system call may only be used by processes that are scheduled 
+   * using Earliest Deadline First.
+   * Invoke the system library function to do the kernel call and return the result.
+   * m_in.m_source is the endpoint of the requestion process.
+   */  
+  return (sys_rt_nextperiod(m_in.m_source));
+}    
+
+/*===========================================================================*
+ *				do_rt_set_sched_bridge		                                 *
+ *===========================================================================*/
+PUBLIC int do_rt_set_sched_bridge(void)
+{
+  /* Set the real-time scheduling bridge state.
+   * m_in.RT_SCHED_BRIDGE is the state that the requesting process wants it
+   * to set to. Invokes the system library function to do the kernel call
+   * and return the result. Process priorities can be defined in three parts:
+   * highest priority are system processes, second highest priority is for real-time
+   * processes and lowest priorities are for normal user processes. If state is set to 0
+   * system processes are not allowed to get a lower priority than real-time processes.
+   * If the state is set to 1 they can. A system process can get a lower priority if it uses the
+   * full quantum. System starts up with state set to 0. Before shutdown the state will be set by shutdown 
+   * to 1 otherwise the system will not proper shutdown. 
+   * This is the only reason for the existance of this functionality.
+   */
+  return (sys_rt_sched_bridge(m_in.RT_SCHED_BRIDGE));
+}   
+
diff -Naur /usr/src_original/servers/pm/table.c /usr/src/servers/pm/table.c
--- /usr/src_original/servers/pm/table.c	2006-03-10 16:10:05.000000000 +0000
+++ /usr/src/servers/pm/table.c	2009-10-04 23:53:21.000000000 +0000
@@ -59,27 +59,26 @@
 	no_sys,		/* 42 = pipe	*/
 	do_times,	/* 43 = times	*/
 	no_sys,		/* 44 = (prof)	*/
-	no_sys,		/* 45 = unused	*/
+	do_rt_set_sched,/* 45 = rt_set_sched */
 	do_getset,	/* 46 = setgid	*/
 	do_getset,	/* 47 = getgid	*/
 	no_sys,		/* 48 = (signal)*/
-	no_sys,		/* 49 = unused	*/
-	no_sys,		/* 50 = unused	*/
+	do_klog_set,/* 49 = klog_set */
+	do_klog_copy,/* 50 = klog_copy */
 	no_sys,		/* 51 = (acct)	*/
 	no_sys,		/* 52 = (phys)	*/
 	no_sys,		/* 53 = (lock)	*/
 	no_sys,		/* 54 = ioctl	*/
 	no_sys,		/* 55 = fcntl	*/
 	no_sys,		/* 56 = (mpx)	*/
-	no_sys,		/* 57 = unused	*/
-	no_sys,		/* 58 = unused	*/
+	do_rt_set,	/* 57 = rt_set  */
+	do_rt_nextperiod, /* 58 = rt_nextperiod */
 	do_exec,	/* 59 = execve	*/
 	no_sys,		/* 60 = umask	*/
 	no_sys,		/* 61 = chroot	*/
 	do_getset,	/* 62 = setsid	*/
 	do_getset,	/* 63 = getpgrp	*/
-
-	no_sys,		/* 64 = unused */
+	do_rt_set_sched_bridge, /* 64 = rt_set_sched_bridge */
 	no_sys,		/* 65 = UNPAUSE	*/
 	no_sys, 	/* 66 = unused  */
 	no_sys,		/* 67 = REVIVE	*/
diff -Naur /usr/src_original/servers/ss/.depend /usr/src/servers/ss/.depend
--- /usr/src_original/servers/ss/.depend	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/ss/.depend	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,38 @@
+
+ss.o:	../../kernel/config.h
+ss.o:	../../kernel/const.h
+ss.o:	../../kernel/priv.h
+ss.o:	../../kernel/proc.h
+ss.o:	../../kernel/protect.h
+ss.o:	../../kernel/type.h
+ss.o:	/usr/include/ansi.h
+ss.o:	/usr/include/errno.h
+ss.o:	/usr/include/fcntl.h
+ss.o:	/usr/include/ibm/bios.h
+ss.o:	/usr/include/ibm/cpu.h
+ss.o:	/usr/include/ibm/interrupt.h
+ss.o:	/usr/include/ibm/ports.h
+ss.o:	/usr/include/lib.h
+ss.o:	/usr/include/limits.h
+ss.o:	/usr/include/minix/callnr.h
+ss.o:	/usr/include/minix/com.h
+ss.o:	/usr/include/minix/config.h
+ss.o:	/usr/include/minix/const.h
+ss.o:	/usr/include/minix/devio.h
+ss.o:	/usr/include/minix/endpoint.h
+ss.o:	/usr/include/minix/ipc.h
+ss.o:	/usr/include/minix/klog.h
+ss.o:	/usr/include/minix/sem.h
+ss.o:	/usr/include/minix/sys_config.h
+ss.o:	/usr/include/minix/syslib.h
+ss.o:	/usr/include/minix/sysutil.h
+ss.o:	/usr/include/minix/type.h
+ss.o:	/usr/include/stdio.h
+ss.o:	/usr/include/stdlib.h
+ss.o:	/usr/include/sys/dir.h
+ss.o:	/usr/include/sys/types.h
+ss.o:	/usr/include/timers.h
+ss.o:	/usr/include/unistd.h
+ss.o:	proto.h
+ss.o:	ss.c
+ss.o:	ss.h
diff -Naur /usr/src_original/servers/ss/Makefile /usr/src/servers/ss/Makefile
--- /usr/src_original/servers/ss/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/ss/Makefile	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,38 @@
+# Makefile for the init program (INIT)
+SERVER = ss
+
+# directories
+u = /usr
+i = $u/include
+s = $i/sys
+h = $i/minix
+k = $u/src/kernel
+
+# programs, flags, etc.
+CC =	exec cc
+CFLAGS = -I$i -O -D_MINIX -D_POSIX_SOURCE
+LDFLAGS = -i
+
+OBJ = 	ss.o
+
+# build local binary
+all build:	$(SERVER)
+$(SERVER):	$(OBJ)
+	$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $(OBJ) -lsysutil -lsys
+	install -S 192w $@
+
+# install with other servers
+install:	/usr/sbin/$(SERVER)
+/usr/sbin/$(SERVER):	$(SERVER)
+	install -o root -cs $? $@
+
+# clean up local files
+clean:
+	rm -f $(SERVER) *.o *.bak 
+
+depend: 
+	/usr/bin/mkdep "$(CC) -E $(CPPFLAGS)" *.c > .depend
+
+# Include generated dependencies.
+include .depend
+
diff -Naur /usr/src_original/servers/ss/proto.h /usr/src/servers/ss/proto.h
--- /usr/src_original/servers/ss/proto.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/ss/proto.h	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,12 @@
+/* Function prototypes for semaphore server */
+
+/* ss.c */
+_PROTOTYPE(void init, (void) );
+_PROTOTYPE(int sem_create, (int type, int value, int size));
+_PROTOTYPE(int sem_take, (int sem_handler, int block));
+_PROTOTYPE(int sem_give, (int sem_handler));
+_PROTOTYPE(int sem_flush, (int sem_handler));
+_PROTOTYPE(int sem_delete, (int sem_handler));
+_PROTOTYPE(int procexit, (int endpoint));
+_PROTOTYPE(int sem_value,(int sem_handler));
+
diff -Naur /usr/src_original/servers/ss/ss.c /usr/src/servers/ss/ss.c
--- /usr/src_original/servers/ss/ss.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/ss/ss.c	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,579 @@
+/* This file contains the implementation of the Semaphore Server.
+ * It contains the following functions:
+ *   main: The main program
+ *   init: initialize the server
+ *   sem_create: create a new semaphore
+ *   sem_take: take a semaphore
+ *   sem_give: give a semaphore free
+ *   sem_delete: delete a semaphore
+ *   sem_flush: unblock all blocked processes
+ *   sem_value: get value of semaphore
+ *   procexit: used by pm to tell the server that a process has exited
+ *
+ * Changes:
+ *   June 14, 2009  initial release (Bianco Zandbergen)
+ */
+#include <stdio.h>
+#include <lib.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <timers.h>
+#include <minix/syslib.h>
+#include "../../kernel/proc.h"
+#include "ss.h"
+
+/* user processes use virtual sem handlers
+ * SS internal uses real sem handlers. We do this because
+ * real sem handlers are the same as the array indices in semtable.
+ * These start at 0 and an uninitialized sem handler also has the value of
+ * 0. To prevend the use of uninitialized sem handlers we use virtual sem handlers
+ * outside the SS.
+ * VIR_SEM_HANDLER converts a real handler to a virtual handler.
+ * REAL_SEM_HANDLER converts a virtual handler to a real handler.
+ */
+#define VIR_SEM_HANDLER(real) (real+1)
+#define REAL_SEM_HANDLER(vir) (vir-1)
+
+/* checks is a sem handler is valid, real sem handler is used as arg */
+#define VALID_SEM(X) ((X < NR_SEMS) && (semtable[X].used == 1))
+
+message m;
+
+int main(void) {
+
+  int caller;
+
+  /* reset values */
+  init();
+    
+  while(1) {
+      receive(ANY, &m); /* get work */
+      caller = m.m_source;
+        
+      /* Invoke the right function depending on the message type.
+       * Depending on the function and return value it will send a reply
+       * back to the caller process.
+       */        
+      switch(m.m_type) {
+          case SEM_CREATE:
+              m.m_type = sem_create(m.SEM_F_TYPE, m.SEM_F_VALUE,  m.SEM_F_SIZE);
+              if(send(caller, &m) != OK) printf("ss: Sending back failed!\n");
+              break;
+          case SEM_TAKE:
+              m.m_type = sem_take(REAL_SEM_HANDLER(m.SEM_F_HANDLER), m.SEM_F_BLOCK);
+              if (m.m_type == OK || m.m_type == SEM_INVALID_HANDLER || m.m_type == SEM_INVALID_BLOCK ||
+                      (m.SEM_F_BLOCK == NO_WAIT && m.m_type == SEM_IN_USE)) {
+                  /* We only send back if the sem was available or the sem handler was invalid
+                   * or the block arg was invalid or the sem was not 
+                   * available AND the process does not want to wait.
+                   */
+                  if(send(caller, &m) != OK) printf("ss: Sending back failed!\n");
+              }    
+              break;
+          case SEM_GIVE:
+              m.m_type = sem_give(REAL_SEM_HANDLER(m.SEM_F_HANDLER));
+              if(send(caller, &m) != OK) printf("ss: Sending back failed! \n");
+              break;
+          case SEM_FLUSH:
+              m.m_type = sem_flush(REAL_SEM_HANDLER(m.SEM_F_HANDLER));
+              if(send(caller, &m) != OK) printf("ss: Sending back failed! \n");
+              break;
+          case SEM_DELETE:
+              m.m_type = sem_delete(REAL_SEM_HANDLER(m.SEM_F_HANDLER));
+              if(send(caller, &m) != OK) printf("ss: Sending back failed! \n");
+              break;
+          case SEM_PROCEXIT:
+              #ifdef SEM_DEBUG
+              printf("ss: process exited! endpt: %d\n",m.SEM_F_ENDPT);
+              #endif
+              procexit(m.SEM_F_ENDPT);
+              /* we don't have to send back! */
+              break;
+          case SEM_VALUE:
+              m.m_type = sem_value(REAL_SEM_HANDLER(m.SEM_F_HANDLER));
+              if(send(caller, &m) != OK) printf("ss: Sending back failed! \n");
+              break;
+          default:
+              m.m_type = (EINVAL);
+              if (send(caller, &m) != OK) printf("ss: Sending back failed! \n");    
+      }
+  }
+}
+
+/****************************************
+ *      init                            *
+ ****************************************/      
+void init(void) {
+
+  int i;
+  used = 0;
+
+  for(i=0; i<NR_SEMS; i++) {
+      semtable[i].used = 0;
+      semtable[i].listp = NULL;
+  }
+}
+
+/****************************************
+ *      sem_create                      *
+ ****************************************/      
+int sem_create(int type, int value, int size)
+{
+  /* Create a new semaphore */
+    
+  int i;
+
+  #ifdef SEM_DEBUG
+  printf("sem_create type: %d, value: %d, size: %d\n",type,value,size);
+  #endif
+    
+  /* check if type is valid 
+   * semtypes: 1=mutex,2=binary,3=counting
+   */
+  if (type > 3 || type < 1) return SEM_INVALID_TYPE;
+
+  /* All semaphores in use! */
+  if (used >= NR_SEMS) return SEM_NO_AVAILABLE;
+    
+  /* type specific checks */
+  if (type == SEM_BINARY) {
+      
+      /* value must be 0 or 1 */
+      if (value != 0 && value != 1) {
+          return SEM_INVALID_VALUE;
+      } 
+  } else if (type == SEM_COUNTING) {
+      
+      /* value cannot be larger than size, value cannot be negative */
+      if (value > size || value < 0) {
+          return SEM_INVALID_VALUE;
+      } else if (size < 1) {
+          /* size must be larger than 1 */
+          return SEM_INVALID_SIZE;
+      } 
+  } 
+    
+  i = 0;
+
+  /* find unused sem */
+  while(semtable[i].used != 0 && i < NR_SEMS) i++;
+  if (i == NR_SEMS) return SEM_NO_AVAILABLE;
+        
+  semtable[i].used = 1;
+  semtable[i].sem_type = type;
+  semtable[i].listp = NULL; /* no blocked processes in queue */
+  semtable[i].owner = m.m_source; /* endpoint nr of the caller process */
+  used++;
+
+  /* setting value and size */
+  switch (type) {
+      case SEM_MUTEX:
+          semtable[i].value = 1;
+          break;
+      case SEM_BINARY:
+          semtable[i].value = value;
+          break;
+      case SEM_COUNTING:
+          semtable[i].value = value;
+          semtable[i].size = size;
+          break;
+  }
+
+  #if 0 
+  printf("ss: found unused sem: real %d vir: %d\n", i, VIR_SEM_HANDLER(i));
+  #endif
+  
+  /* we return a virtual sem handler to the caller process */
+  m.SEM_F_HANDLER = VIR_SEM_HANDLER(i);
+  
+  return OK;
+}
+
+/****************************************
+ *      sem_take                        *
+ ****************************************/      
+int sem_take(int sem_handler, int block)
+{
+  /* Take a semaphore */
+    
+  struct sem_proc * sproc;
+  struct sem_proc ** xpp;
+  struct proc caller_proc;
+  int result;
+    
+  /* check if sem handler is valid */
+  if (!VALID_SEM(sem_handler)) return SEM_INVALID_HANDLER;
+  
+  /* get process structure from caller */
+  if (result = sys_getproc(&caller_proc, m.m_source) != OK) {
+      printf("ss: sys_getproc failed result: %d\n", result);
+  }    
+    
+  switch (semtable[sem_handler].sem_type) {
+      case SEM_MUTEX:
+      case SEM_BINARY:
+          if (semtable[sem_handler].value == 1) {
+              /* sem is available */
+              semtable[sem_handler].value = 0;
+              semtable[sem_handler].user = m.m_source;
+              return OK;
+          } else {
+              /* sem is not available */
+              
+              if (block == NO_WAIT) {
+                  /* caller doesn't want to wait */
+                  return SEM_IN_USE;
+                    
+              } else if (block == WAIT_FOREVER) {
+                        
+                  /* caller does want to wait.
+                   * Add caller to the list of waiting processes on the sem.
+                   */
+                  
+                  /* create new sem_proc struct */
+                  sproc = malloc(sizeof(struct sem_proc));
+                  
+                  /* set the priority of the sem_proc struct to the 
+                   * minix scheduling priority.
+                   */
+                  sproc->prio = caller_proc.p_priority;
+                    
+                  /* set the caller endpoint */
+                  sproc->endpoint = m.m_source;
+                  
+                  /* find the right place in the list.
+                   * The list is ordened on minix scheduling priority.
+                   */
+                  xpp = &semtable[sem_handler].listp;
+                  while (*xpp != NULL && (*xpp)->prio <= sproc->prio) {
+                      xpp = &(*xpp)->next;
+                  }
+                
+                  /* add new sem_proc to the list */
+                  sproc->next = *xpp;
+                  *xpp = sproc;
+              } else {
+                  /* invalid block argument specified */
+                  return SEM_INVALID_BLOCK;
+              }                
+          }
+          break;
+      case SEM_COUNTING:
+          if(semtable[sem_handler].value > 0) {
+              /* sem is available */
+              semtable[sem_handler].value--;
+              return OK;
+          } else if (semtable[sem_handler].value == 0) {
+              /* sem is not available */    
+              
+              if (block == NO_WAIT) {
+                  /* caller does not want to wait */
+                  return SEM_IN_USE;
+                
+              } else if (block = WAIT_FOREVER) {                                        
+                    
+                  /* caller does want to wait.
+                   * Add caller to the list of waiting processes on the sem.
+                   */    
+                  
+                  /* create new sem proc_struct */
+                  sproc = malloc(sizeof(struct sem_proc));
+                  
+                  /* set the priority of the sem_proc struct to the
+                   * minix scheduling priority.
+                   */
+                  sproc->prio = caller_proc.p_priority;
+                
+                  /* set the caller endpoint */    
+                  sproc->endpoint = m.m_source;
+                  
+                  /* find the right place in the list.
+                   * The list is ordened on minix scheduling priority */
+                  xpp = &semtable[sem_handler].listp;
+                  while (*xpp != NULL && (*xpp)->prio <= sproc->prio) {
+                      xpp = &(*xpp)->next;
+                  }    
+                
+                  /* add new sem_proc to the list */
+                  sproc->next = *xpp;
+                  *xpp = sproc;
+              } else {
+                  /* invalid block argument specified */
+                  return SEM_INVALID_BLOCK;
+              }                  
+          }
+          break;
+  }
+
+  /* will be reached if sem is not available and caller should block */
+  return -1;
+}
+
+/****************************************
+ *      sem_give                        *
+ ****************************************/      
+int sem_give(int sem_handler)
+{
+  /* Give a semaphore free */
+    
+  struct sem_proc * sproc;
+  message m_out;
+  int s;
+    
+  /* check if handler is valid */
+  if (! VALID_SEM(sem_handler)) return SEM_INVALID_HANDLER;   
+    
+  switch(semtable[sem_handler].sem_type) {
+      case SEM_MUTEX:
+            
+          /* a semaphore must be taken in order to give is free.
+           * We do this check again at the SEM_BINARY case.
+           * It is done here because this check must be done BEFORE
+           * the test below. (A sem that is not taken does has have a valid user)
+           */
+          if (semtable[sem_handler].value > 0) {
+              return SEM_ALREADY_FREE;
+          }    
+            
+          /* mutex has one extra condition compared to binary:
+           * a give may only be done if the same process
+           * took the semaphore.
+           */
+          if (semtable[sem_handler].user != m.m_source) {
+              return SEM_INVALID_MUTEX_GIVE;
+          }
+          /* do not break! */
+      case SEM_BINARY:
+          /* a semaphore must be taken in order to give is free */
+          if (semtable[sem_handler].value > 0) {
+              return SEM_ALREADY_FREE;
+          }    
+          
+          /* give sem free */
+          semtable[sem_handler].value = 1;
+
+          /* check for processes in the wait queue blocked
+           * on this semaphore. We will have to unblock the next process
+           * in the queue. We do this in a while loop because we might need to
+           * try multiple times. send() may fail because a process in the queue
+           * is not excistant. It may be killed for example. if send() does not
+           * fail the code is only executed once.
+           */
+          while (semtable[sem_handler].listp != NULL) {
+                
+              /* we save the head of the block queue to sproc before removing it */
+              sproc = semtable[sem_handler].listp;
+                
+              /* remove the head of the queue (sproc) */
+              semtable[sem_handler].listp = sproc->next;
+                
+              /* try to unblock the process */
+              if(s=send(sproc->endpoint, &m) != OK) {
+                    
+                  /* This process is not valid.
+                   * Might be killed.
+                   * Release memory.
+                   */
+                  free(sproc);
+                  printf("ss: Sending unblock failed!\n");
+              } else {
+                    
+                  /* sem is taken again */
+                  semtable[sem_handler].value = 0;
+                    
+                  /* save endpoint of process that took the sem */
+                  semtable[sem_handler].user = sproc->endpoint;   
+                    
+                  /* release memory */
+                  free(sproc);
+
+                  /* unblock successful so stop looping */
+                  break;
+              }   
+          }
+          return OK;
+          break;
+      case SEM_COUNTING:
+
+          /* if value equals size the sem is 'full' and we can't give it free */
+          if (semtable[sem_handler].value == semtable[sem_handler].size) {
+              return SEM_ALREADY_FREE;
+          }    
+
+          /* give sem free */
+          semtable[sem_handler].value++;
+            
+          /* check for processes in the wait queue blocked
+           * on this semaphore. We will have to unblock the next process
+           * in the queue. We do this in a while loop because we might need to
+           * try multiple times. send() may fail because a process in the queue
+           * is not excistant. It may be killed for example. if send() does not
+           * fail the code is only executed once.
+           */
+          while (semtable[sem_handler].listp != NULL) {
+                
+              /* we save the head of the block queue to sproc before removing it */
+              sproc = semtable[sem_handler].listp;
+
+              /* remove the head of the block queue */
+              semtable[sem_handler].listp = sproc->next;
+                
+              /* try to unblock the process */
+              if(s=send(sproc->endpoint, &m) != OK) {
+                    
+                  /* This process is not valid.
+                   * Might be killed.
+                   * Release memory.
+                   */
+                  free(sproc);
+                  printf("ss: Sending unblock failed!\n");
+              } else {
+                    
+                  /* decrease sem (taking it) */                     
+                  semtable[sem_handler].value--;
+                
+                  /* save endpoint of process that took sem */    
+                  semtable[sem_handler].user = sproc->endpoint;
+                    
+                  /* release memory */
+                  free(sproc);
+
+                  /* unblock successful so stop looping */
+                  break;
+              }   
+          }
+          return OK;
+          break;
+      default:
+          /* invalid semaphore type */
+          return SEM_INVALID_TYPE;            
+  }
+    
+  /* never reached */
+  return -1;
+}
+
+/****************************************
+ *      sem_flush                       *
+ ****************************************/      
+int sem_flush(int handler)
+{
+  /* unblocks all processes blocked
+   * on a binary semaphore.
+   * Can be used to synchronize processes.
+   */
+  struct sem_proc * sproc;
+  message m_out;
+  m_out.m_type = OK;
+   
+  /* check if sem handler is valid */
+  if (! VALID_SEM(handler)) return SEM_INVALID_HANDLER;
+
+  /* we only allow flush on binary semaphores */
+  if (semtable[handler].sem_type != SEM_BINARY) return SEM_INVALID_TYPE;
+
+  /* unblock all processes on the block queue */
+  while (semtable[handler].listp != NULL) {
+      sproc = semtable[handler].listp; /* get next process from the queue */
+        
+      /* send a message to the process to unblock it */
+      if (send(sproc->endpoint, &m_out) != OK) {
+          printf("ss: Sending unblock failed!\n");
+      }
+        
+      semtable[handler].listp = sproc->next; /* remove head from the queue */
+      free(sproc); /* release memory */ 
+  }
+
+  return OK;
+}
+
+/****************************************
+ *      sem_delete                      *
+ ****************************************/      
+int sem_delete(int handler)
+{
+  /* Delete a semaphore. */
+
+  /* check if sem handler is valid */
+  if (! VALID_SEM(handler)) return SEM_INVALID_HANDLER;
+  
+  switch (semtable[handler].sem_type) {
+
+      case SEM_MUTEX:
+      case SEM_BINARY:
+          /* A bin/mutex semaphore can only be deleted if it is not taken */
+          if (semtable[handler].value == 1) {
+              semtable[handler].used = 0; /* release slot */
+              used--;
+          } else {
+              return SEM_IN_USE;
+          }
+          break;
+      case SEM_COUNTING:
+          /* A counting semaphore can only be deleted if it is 'full' */
+          if (semtable[handler].value == semtable[handler].size) {
+              semtable[handler].used = 0; /* release slot */
+              used--;
+          } else {
+              return SEM_IN_USE;
+          }
+          break;
+  }
+
+  return OK;
+}
+                
+/****************************************
+ *      sem_procexit                    *
+ ****************************************/      
+int procexit(int endpoint)
+{
+  /* Used by the process manager to inform that a process has exited.
+   * Deletes all semaphores with the exited process as owner.
+   */
+  int no_sems;
+  int current_sem;
+
+  current_sem = 0;
+  no_sems = 0; /* expirimental */
+
+  /* loop through the semaphore table */
+  while (/*no_sems < used &&*/ current_sem < NR_SEMS) {
+      /* check if semaphore is in use */
+      if (semtable[current_sem].used == 1) {
+          no_sems++; /* expirimental, not used */
+          
+          /* check if the exited process is the owner.
+           * If so release the semaphore slot.
+           */
+          if (semtable[current_sem].owner == endpoint) {
+              semtable[current_sem].used = 0;
+              used--;
+              printf("ss: deleted sem %d owned by %d\n",current_sem, endpoint);
+                
+          }
+      }
+      current_sem++;
+  }
+    
+  return OK;
+}
+
+/****************************************
+ *     sem_value                        *
+ ****************************************/      
+int sem_value(sem_t handler)
+{
+  /* Returns the value of a semaphore to a user process.
+   * May be used for debugging purposes.
+   */
+
+  /* check if handler is valid */  
+  if (! VALID_SEM(handler)) return SEM_INVALID_HANDLER;
+
+  /* save the value to the message the main loop sends back */
+  m.SEM_F_VALUE = semtable[handler].value;
+  
+  return OK;
+}   
diff -Naur /usr/src_original/servers/ss/ss.h /usr/src/servers/ss/ss.h
--- /usr/src_original/servers/ss/ss.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/servers/ss/ss.h	2009-10-04 23:53:21.000000000 +0000
@@ -0,0 +1,59 @@
+/* This is the master header for SS.  It includes some other files
+ * and defines the principal constants.
+ */
+#define _POSIX_SOURCE      1	/* tell headers to include POSIX stuff */
+#define _MINIX             1	/* tell headers to include MINIX stuff */
+#define _SYSTEM            1	/* tell headers that this is the system */
+
+/* The following are so basic, all the *.c files get them automatically. */
+#include <minix/config.h>	/* MUST be first */
+#include <ansi.h>		/* MUST be second */
+#include <sys/types.h>
+#include <minix/const.h>
+#include <minix/type.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <minix/syslib.h>
+#include <minix/sysutil.h>
+
+#include <limits.h>
+#include <errno.h>
+
+#include <minix/sem.h>
+#include "proto.h"
+
+#ifndef OK
+#define OK 0
+#endif
+
+/* number of semaphore supported */
+#define NR_SEMS 128
+
+/* semaphore structure */
+struct sem {
+	int sem_type;
+	int value;
+	int size;
+	int used;
+	int owner;
+	int user;
+	struct sem_proc * listp;
+	
+};
+
+/* used to save processes that are blocked
+ * on a semaphore
+ */
+struct sem_proc {
+	int endpoint;
+	int prio;
+	struct sem_proc * next;
+};
+
+/* semaphore table */
+struct sem semtable[NR_SEMS];
+
+/* keep track of sems in use, expirimental */
+int used;
+	
diff -Naur /usr/src_original/test/rtminix3/edf/scenario1/build.sh /usr/src/test/rtminix3/edf/scenario1/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario1/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario1/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
diff -Naur /usr/src_original/test/rtminix3/edf/scenario1/edf_klog.c /usr/src/test/rtminix3/edf/scenario1/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario1/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario1/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CLOCKINT);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario1/killall.sh /usr/src/test/rtminix3/edf/scenario1/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario1/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario1/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario1/run.sh /usr/src/test/rtminix3/edf/scenario1/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario1/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario1/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+rt_set_sched_edf
+./edf1 100 50&
diff -Naur /usr/src_original/test/rtminix3/edf/scenario2/build.sh /usr/src/test/rtminix3/edf/scenario2/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario2/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario2/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
+cc -o edf2 edf.c -lrt
+cp edf2 edf3
+cp edf2 edf4
diff -Naur /usr/src_original/test/rtminix3/edf/scenario2/edf.c /usr/src/test/rtminix3/edf/scenario2/edf.c
--- /usr/src_original/test/rtminix3/edf/scenario2/edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario2/edf.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario2/edf_klog.c /usr/src/test/rtminix3/edf/scenario2/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario2/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario2/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CLOCKINT);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario2/killall.sh /usr/src/test/rtminix3/edf/scenario2/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario2/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario2/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario2/run.sh /usr/src/test/rtminix3/edf/scenario2/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario2/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario2/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+rt_set_sched_edf
+
+./edf1 50 10&
+./edf2 100 20&
+./edf3 50 5&
+./edf4 100 10&
diff -Naur /usr/src_original/test/rtminix3/edf/scenario3/build.sh /usr/src/test/rtminix3/edf/scenario3/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario3/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario3/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
+cc -o edf2 edf.c -lrt
+cp edf2 edf3
+cp edf2 edf4
diff -Naur /usr/src_original/test/rtminix3/edf/scenario3/edf.c /usr/src/test/rtminix3/edf/scenario3/edf.c
--- /usr/src_original/test/rtminix3/edf/scenario3/edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario3/edf.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario3/edf_klog.c /usr/src/test/rtminix3/edf/scenario3/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario3/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario3/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CLOCKINT);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario3/killall.sh /usr/src/test/rtminix3/edf/scenario3/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario3/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario3/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario3/run.sh /usr/src/test/rtminix3/edf/scenario3/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario3/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario3/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+rt_set_sched_edf
+
+./edf1 25  6&
+./edf2 50  12&
+./edf3 100 25&
+./edf4 200 50&
diff -Naur /usr/src_original/test/rtminix3/edf/scenario4/build.sh /usr/src/test/rtminix3/edf/scenario4/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario4/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario4/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
+cc -o edf2 edf.c -lrt
diff -Naur /usr/src_original/test/rtminix3/edf/scenario4/edf.c /usr/src/test/rtminix3/edf/scenario4/edf.c
--- /usr/src_original/test/rtminix3/edf/scenario4/edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario4/edf.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    int i, j, cycles;
+    
+    if (argc != 4) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime> <cycles>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+    cycles = atoi(argv[3]);
+    
+    rt_set_edf(period, calctime);    
+    
+    while(1) {
+        for (i=0;i<cycles;i++) {
+            for (j=0;j<1000000;j++);
+        }
+        rt_nextperiod();
+    }
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario4/edf_klog.c /usr/src/test/rtminix3/edf/scenario4/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario4/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario4/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CLOCKINT);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario4/killall.sh /usr/src/test/rtminix3/edf/scenario4/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario4/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario4/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario4/run.sh /usr/src/test/rtminix3/edf/scenario4/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario4/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario4/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rt_set_sched_edf
+
+./edf1 100 25&
+./edf2 100 25 200&
diff -Naur /usr/src_original/test/rtminix3/edf/scenario5/build.sh /usr/src/test/rtminix3/edf/scenario5/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario5/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario5/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
+cc -o edf2 edf.c -lrt
diff -Naur /usr/src_original/test/rtminix3/edf/scenario5/edf.c /usr/src/test/rtminix3/edf/scenario5/edf.c
--- /usr/src_original/test/rtminix3/edf/scenario5/edf.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario5/edf.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario5/edf_klog.c /usr/src/test/rtminix3/edf/scenario5/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario5/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario5/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CLOCKINT);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario5/killall.sh /usr/src/test/rtminix3/edf/scenario5/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario5/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario5/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario5/run.sh /usr/src/test/rtminix3/edf/scenario5/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario5/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario5/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rt_set_sched_edf
+
+./edf1 100 50&
+./edf2 100 60&
diff -Naur /usr/src_original/test/rtminix3/edf/scenario6/build.sh /usr/src/test/rtminix3/edf/scenario6/build.sh
--- /usr/src_original/test/rtminix3/edf/scenario6/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario6/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cc -o edf1 edf_klog.c -lrt -lklog
diff -Naur /usr/src_original/test/rtminix3/edf/scenario6/edf_klog.c /usr/src/test/rtminix3/edf/scenario6/edf_klog.c
--- /usr/src_original/test/rtminix3/edf/scenario6/edf_klog.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario6/edf_klog.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int period;
+    int calctime;
+    
+    if (argc != 3) {
+        printf("Wrong number of arguments!\n");
+        printf("Usage: ./edf <period> <calctime>\n");
+        return -1;
+    }
+        
+    period = atoi(argv[1]);
+    calctime = atoi(argv[2]);
+   
+    klog_set(KLOG_CONTEXTSWITCH);
+    rt_set_edf(period, calctime);    
+    
+    while(1);
+    
+    return 0;
+}
diff -Naur /usr/src_original/test/rtminix3/edf/scenario6/killall.sh /usr/src/test/rtminix3/edf/scenario6/killall.sh
--- /usr/src_original/test/rtminix3/edf/scenario6/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario6/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep edf | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'edf'"
diff -Naur /usr/src_original/test/rtminix3/edf/scenario6/run.sh /usr/src/test/rtminix3/edf/scenario6/run.sh
--- /usr/src_original/test/rtminix3/edf/scenario6/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/edf/scenario6/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+rt_set_sched_edf
+
+./edf1 10 5&
diff -Naur /usr/src_original/test/rtminix3/rm/scenario1/build.sh /usr/src/test/rtminix3/rm/scenario1/build.sh
--- /usr/src_original/test/rtminix3/rm/scenario1/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario1/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+cc -o rm1 rm.c -lrt
+cp rm1 rm2
+cp rm1 rm3
+cp rm1 rm4
+cp rm1 rm5
+cp rm1 rm6
+cp rm1 rm7
+cp rm1 rm8
diff -Naur /usr/src_original/test/rtminix3/rm/scenario1/killall.sh /usr/src/test/rtminix3/rm/scenario1/killall.sh
--- /usr/src_original/test/rtminix3/rm/scenario1/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario1/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep rm | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'rm'"
diff -Naur /usr/src_original/test/rtminix3/rm/scenario1/rm.c /usr/src/test/rtminix3/rm/scenario1/rm.c
--- /usr/src_original/test/rtminix3/rm/scenario1/rm.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario1/rm.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int cycles;
+    int priority;
+    unsigned int i;
+    unsigned int j;
+    
+
+    if (argc != 3) {
+        printf("Wrong number of parameters\n");
+        printf("parameters: <priority> <cycles>\n");
+        return -1;
+    }
+
+    priority = atoi(argv[1]);
+    cycles = atoi(argv[2]);
+    
+    
+    if (rt_set_rm(priority) != 0) {
+        printf("rt_set_rm() failed!\n");
+        return -1;
+    }
+
+    while (1) {
+        for (i=0; i<cycles;i++) {
+            for (j=0;j<1000000;j++);
+        }
+
+        sleep(1);    
+            
+    }
+
+    return 0;
+}
+        
diff -Naur /usr/src_original/test/rtminix3/rm/scenario1/run.sh /usr/src/test/rtminix3/rm/scenario1/run.sh
--- /usr/src_original/test/rtminix3/rm/scenario1/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario1/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+CYCLES=1024
+
+rt_set_sched_rm_pu
+
+./rm3 3 $CYCLES&
+./rm7 7 $CYCLES&
+./rm1 1 $CYCLES&
+./rm4 4 $CYCLES&
+./rm8 8 $CYCLES&
+./rm2 2 $CYCLES&
+./rm6 6 $CYCLES&
+./rm5 5 $CYCLES&
diff -Naur /usr/src_original/test/rtminix3/rm/scenario2/build.sh /usr/src/test/rtminix3/rm/scenario2/build.sh
--- /usr/src_original/test/rtminix3/rm/scenario2/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario2/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cc -o rm1 rm_klogstart.c -lrt -lklog 
+cc -o rm2 rm.c -lrt
+cp rm2 rm3
+
diff -Naur /usr/src_original/test/rtminix3/rm/scenario2/killall.sh /usr/src/test/rtminix3/rm/scenario2/killall.sh
--- /usr/src_original/test/rtminix3/rm/scenario2/killall.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario2/killall.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+kill -9 `ps ax | grep rm | awk '{ print $1 }'`
+echo "Killed all processes with name containing 'rm'"
diff -Naur /usr/src_original/test/rtminix3/rm/scenario2/rm.c /usr/src/test/rtminix3/rm/scenario2/rm.c
--- /usr/src_original/test/rtminix3/rm/scenario2/rm.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario2/rm.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <minix/rt.h>
+
+int main(int argc, char *argv[])
+{
+    int cycles;
+    int priority;
+    unsigned int i;
+    unsigned int j;
+    
+
+    if (argc != 3) {
+        printf("Wrong number of parameters\n");
+        printf("parameters: <priority> <cycles>\n");
+        return -1;
+    }
+
+    priority = atoi(argv[1]);
+    cycles = atoi(argv[2]);
+    
+    
+    if (rt_set_rm(priority) != 0) {
+        printf("rt_set_rm() failed!\n");
+        return -1;
+    }
+
+    while (1) {
+        for (i=0; i<cycles;i++) {
+            for (j=0;j<1000000;j++);
+        }
+
+        sleep(1);    
+            
+    }
+
+    return 0;
+}
+        
+
+
diff -Naur /usr/src_original/test/rtminix3/rm/scenario2/rm_klogstart.c /usr/src/test/rtminix3/rm/scenario2/rm_klogstart.c
--- /usr/src_original/test/rtminix3/rm/scenario2/rm_klogstart.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario2/rm_klogstart.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <minix/rt.h>
+#include <minix/klog.h>
+
+int main(int argc, char *argv[])
+{
+    int cycles;
+    int priority;
+    unsigned int i;
+    unsigned int j;
+    
+
+    if (argc != 3) {
+        printf("Wrong number of parameters\n");
+        printf("parameters: <priority> <cycles>\n");
+        return -1;
+    }
+
+    priority = atoi(argv[1]);
+    cycles = atoi(argv[2]);
+
+    klog_set(KLOG_CLOCKINT);    
+    
+    if (rt_set_rm(priority) != 0) {
+        printf("rt_set_rm() failed!\n");
+        return -1;
+    }
+
+    while (1) {
+        for (i=0; i<cycles;i++) {
+            for (j=0;j<1000000;j++);
+        }
+
+        sleep(1);    
+            
+    }
+
+    return 0;
+}
+        
+
+
diff -Naur /usr/src_original/test/rtminix3/rm/scenario2/run.sh /usr/src/test/rtminix3/rm/scenario2/run.sh
--- /usr/src_original/test/rtminix3/rm/scenario2/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/rm/scenario2/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+CYCLES=200
+
+rt_set_sched_rm_pu
+
+./rm1 1 $CYCLES&
+./rm2 2 $CYCLES&
+./rm3 3 $CYCLES&
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/Makefile /usr/src/test/rtminix3/semaphores/batch/Makefile
--- /usr/src_original/test/rtminix3/semaphores/batch/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/Makefile	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,34 @@
+# Build all tests
+
+CC=exec cc
+TESTS=test1 \
+	  test2 \
+	  test3 \
+	  test4 \
+	  test5 \
+	  test6 \
+	  test7 \
+	  test8 \
+	  test9 \
+	  test10 \
+	  test11 \
+	  test12 \
+	  test13 \
+	  test14 \
+	  test15 \
+	  test16 \
+	  test17 \
+	  test18 \
+	  test19
+
+all: $(TESTS)
+
+clean:
+	find . -name "*[0-9]" -exec rm {} \;
+	find . -name "*[0-9][0-9]" -exec rm {} \;
+
+$(TESTS):
+	$(CC) -o $@ $@.c -lsem
+
+
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/README /usr/src/test/rtminix3/semaphores/batch/README
--- /usr/src_original/test/rtminix3/semaphores/batch/README	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/README	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,22 @@
+This file describes the tests that are done to test the semaphore server.
+
+test1: Testing the creation of a mutex semaphore under normal conditions.
+test2: Testing the creation of binary semaphore under normal conditions.
+test3: Testing the creation of counting semaphores under normal conditions.
+test4: Testing the creation of a semaphore with invalid type.
+test5: Testing the creation of a binary semaphore with invalid value parameters.
+test6: Testing the creation of a counting semaphore with invalid value parameter.
+test7: Testing the creation of a counting semaphore with invalid size parameter.
+test8: Testing sem_take() with invalid semaphore handler.
+test9: Testing sem_take() with mutex under normal conditions with NO_WAIT.
+test10: Testing sem_take() with binary semaphore under normal conditions with NO_WAIT.
+test11: Testing non-blocking sem_take() with counting sem under normal conditions.
+test12: Testing sem_give() with mutex under normal conditions.
+test13: Testing sem_give() with binary sem under normal conditions.
+test14: Testing sem_give() with counting sem under normal conditions.
+test15: Testing sem_give() with invalid semaphore handler.
+test16: Testing sem_give() with mutex while sem is not taken.
+test17: Testing sem_give() with binary sem while sem is not taken.
+test18: Testing sem_give() with counting sem while sem is not taken.
+test19: Testing sem_give() of taken mutex with wrong user.
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/run.sh /usr/src/test/rtminix3/semaphores/batch/run.sh
--- /usr/src_original/test/rtminix3/semaphores/batch/run.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/run.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+no_tests=19
+current_test=1
+passed=0
+failed=0
+badones=
+exitcode= 
+
+echo Starting automated test for Synchronisation Server
+
+while [ $current_test -le $no_tests ]
+do
+#echo $current_test
+
+./test$current_test
+exitcode=$?
+
+if [ $exitcode -eq 0 ]; then
+	echo passed test $current_test
+	passed=`expr $passed + 1` 
+else
+	echo failed test $current_test
+	
+	if [ $exitcode -eq 3 ]; then
+		echo Fatal failure... exiting test
+		exit
+	fi
+	failed=`expr $failed + 1`
+	badones=`echo $badones " " $current_test`
+fi
+
+current_test=`expr $current_test + 1`
+done
+
+if [ $passed -eq $no_tests ]; then
+	echo All $no_tests tests passed without error.
+else
+	echo Testing completed. Number of tests: $no_tests Passed: $passed Failed: $failed.
+	echo Failed tests: $badones.
+fi	
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test.h /usr/src/test/rtminix3/semaphores/batch/test.h
--- /usr/src_original/test/rtminix3/semaphores/batch/test.h	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test.h	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <lib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <minix/sem.h>
+
+#define OK              0
+#define FAILED          2
+#define FATAL_FAILURE   3
+
+#define DEBUGMSG(testnr, str) printf("Test %d %s:%u : %s\n", testnr, __FILE__, __LINE__, str)
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test1.c /usr/src/test/rtminix3/semaphores/batch/test1.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test1.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test1.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,28 @@
+/* Test 1
+ *
+ * Testing the creation of a mutex semaphore under normal conditions
+ */
+
+#include "test.h"
+
+#define TESTNR 1
+
+main(void)
+{
+    sem_t m1;
+    
+    /* try to create semaphore */
+    if (sem_m_create(&m1) != OK) {
+        /* creation failed */
+        return FAILED;
+    } else {
+        /* creation succesful */
+
+        /* delete sem */
+        if(sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "Deleting sem m1 failed");
+            return FATAL_FAILURE;
+        }   
+        return OK;
+    }
+}   
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test10.c /usr/src/test/rtminix3/semaphores/batch/test10.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test10.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test10.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,108 @@
+/* Test 9
+ *
+ * Testing sem_take with binary semaphore under normal conditions with NO_WAIT
+ */  
+
+#include "test.h"
+
+#define TESTNR 10
+
+main(void)
+{
+    sem_t b1;
+    sem_t b2;   
+        
+    /* create binary sem with value 1 */
+    if (sem_b_create(&b1, 1) != OK) {
+        DEBUGMSG(TESTNR, "sem_b_create(&b1, 1) != OK");
+        return FAILED;
+    }   
+    
+    /* create binary sem with value 0 */
+    if (sem_b_create(&b2, 0) != OK) {
+        DEBUGMSG(TESTNR, "sem_b_create(&b2, 0) != OK");
+        
+        /* clean up sem b1 */
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }
+        return FAILED;
+    }   
+    
+    /* do a non-blocking sem_take on sem b1. Should return OK */
+    if (sem_take(b1, NO_WAIT) != OK) {
+        DEBUGMSG(TESTNR, "sem_take(b1, NO_WAIT) != OK");
+        
+        /* clean up, delete sem b1 */
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }
+        
+        /* make sure sem b2 has value 1 */
+        if (sem_give(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(b2) != OK");
+        }
+
+        /* delete sem b2 */ 
+        if (sem_delete(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b2) != OK");
+            return FATAL_FAILURE;   
+        }
+        
+        return FAILED;
+    }
+
+    /* do another non-blocking sem_take on sem b1. Should return SEM_IN_USE */
+    if (sem_take(b1, NO_WAIT) != SEM_IN_USE) {
+        DEBUGMSG(TESTNR, "sem_take(b1, NO_WAIT) != SEM_IN_USE");
+        
+        /* clean up */
+        /* first make sure that m1 and m2  has value 1 */
+        if (sem_give(b1) != OK || sem_give(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(b1) != OK || sem_give(b2) != OK");
+        }   
+        
+        /* delete sem b1 and b2 */ 
+        if (sem_delete(b1) != OK || sem_delete(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK || sem_delete(b2) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* do an non-blocking sem_take on sem b2. Should return SEM_IN_USE */
+    if (sem_take(b2, NO_WAIT) != SEM_IN_USE) {
+        DEBUGMSG(TESTNR, "sem_take(b2, NO_WAIT) != SEM_IN_USE");
+        
+        /* clean up */
+        /* first make sure that m1 and m2  has value 1 */
+        if (sem_give(b1) != OK || sem_give(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(b1) != OK || sem_give(b2) != OK");
+        }   
+        
+        /* delete sem b1 and b2 */ 
+        if (sem_delete(b1) != OK || sem_delete(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK || sem_delete(b2) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+    
+    /* clean up */
+    /* first make sure that sem m1 and m2 has value 1 */
+    if (sem_give(b1) != OK || sem_give(b2) != OK) {
+        printf("Test TESTNR: sem_give(b1) or sem_give(b2) failed\n");
+    }
+
+    if(sem_delete(b1) != OK || sem_delete(b2) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(b1) != OK || sem_delete(b2) != OK");
+        return FATAL_FAILURE;
+    }   
+
+    return OK;
+}
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test11.c /usr/src/test/rtminix3/semaphores/batch/test11.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test11.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test11.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,70 @@
+/* Test 11
+ *
+ * Testing non-blocking sem_take with counting sem under normal conditions
+ */  
+
+#include "test.h"
+
+#define TESTNR 11
+
+main(void)
+{
+    sem_t c1;
+    int i;
+    
+    /* creating counting sem with value 3 and size 3 */
+    if (sem_c_create(&c1, 3, 3) != OK) {
+        DEBUGMSG(TESTNR, "sem_c_create(&c, 3, 3) != OK");
+        return FAILED;
+    }   
+
+    /* Doing three takes. All should return OK */ 
+    for (i=0; i<3; i++) {
+        if (sem_take(c1, NO_WAIT) != OK) {
+            DEBUGMSG(TESTNR, "sem_take(c1, NO_WAIT) != OK");
+            
+            /* clean up */
+            if (sem_delete(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+                return FATAL_FAILURE;
+            }   
+            return FAILED;
+        }   
+    }   
+
+    /* doing another take. should return SEM_IN_USE */
+    if (sem_take(c1, NO_WAIT) != SEM_IN_USE) {
+        DEBUGMSG(TESTNR, "sem_take(c1, NO_WAIT) != SEM_IN_USE");
+        
+        /* clean up. first make sure that value == size */ 
+        for (i=0; i<3; i++) {
+            if (sem_give(c1) != OK) {
+                   DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+            }                  
+        }   
+
+        /* delete sem c1 */
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }
+
+        return FAILED;  
+    }
+
+    /* clean up. first make sure that value == size */  
+    for (i=0; i<3; i++) {
+        if (sem_give(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+        }   
+    }
+    
+    /* delete sem c1 */
+    if (sem_delete(c1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+        return FATAL_FAILURE;   
+    }   
+    
+    /* test passed */
+    return OK;
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test12.c /usr/src/test/rtminix3/semaphores/batch/test12.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test12.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test12.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,46 @@
+/* Test 12
+ *
+ * Testing sem_give with mutex under normal conditions 
+ */  
+
+#include "test.h"
+
+#define TESTNR 12
+
+main(void)
+{
+    sem_t m1;
+    
+    /* create mutex */
+    if (sem_m_create(&m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_m_create(&m1) != OK");
+        return FAILED;
+    }   
+
+    /* take sem */
+    if (sem_take(m1, NO_WAIT) != OK) {
+        DEBUGMSG(TESTNR, "sem_take(m1, NO_WAIT) != OK");
+    }   
+
+    /* give sem */
+    if (sem_give(m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_give(m1) != OK");
+
+        /* clean up */
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* clean up */
+    if (sem_delete(m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+        return FATAL_FAILURE;
+    }
+    
+    /* test passed */
+    return OK;  
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test13.c /usr/src/test/rtminix3/semaphores/batch/test13.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test13.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test13.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+/* Test 13
+ *
+ * Testing sem_give with binary sem under normal conditions 
+ */  
+
+#include "test.h"
+
+#define TESTNR 13
+
+main(void)
+{
+    sem_t b1;
+    
+    /* create binary sem */
+    if (sem_b_create(&b1, 0) != OK) {
+        DEBUGMSG(TESTNR, "sem_b_create(&b1, 0) != OK");
+        return FAILED;
+    }   
+
+    /* give sem */
+    if (sem_give(b1) != OK) {
+        DEBUGMSG(TESTNR, "sem_give(b1) != OK");
+
+        /* clean up */
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* clean up */
+    if (sem_delete(b1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+        return FATAL_FAILURE;
+    }   
+    
+    /* test passed */
+    return OK;  
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test14.c /usr/src/test/rtminix3/semaphores/batch/test14.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test14.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test14.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+/* Test 14
+ *
+ * Testing sem_give with counting sem under normal conditions 
+ */  
+
+#include "test.h"
+
+#define TESTNR 14
+
+main(void)
+{
+    sem_t c1;
+    
+    /* create counting sem */
+    if (sem_c_create(&c1, 4, 5) != OK) {
+        DEBUGMSG(TESTNR, "sem_c_create(&c1, 4, 5) != OK");
+        return FAILED;
+    }   
+
+    /* give sem */
+    if (sem_give(c1) != OK) {
+        DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+
+        /* clean up */
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* clean up */
+    if (sem_delete(c1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+        return FATAL_FAILURE;
+    }   
+    
+    /* test passed */
+    return OK;  
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test15.c /usr/src/test/rtminix3/semaphores/batch/test15.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test15.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test15.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,19 @@
+/* Test 15
+ *
+ * Testing sem_give with invalid semaphore handler
+ */  
+
+#include "test.h"
+
+#define TESTNR 15
+
+main(void)
+{
+    sem_t b1; /* uninitialized sem handler should be invalid */
+    
+    if (sem_give(b1) != SEM_INVALID_HANDLER) {
+        return FAILED;
+    } else {
+        return OK;
+    }   
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test16.c /usr/src/test/rtminix3/semaphores/batch/test16.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test16.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test16.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+/* Test 16
+ *
+ * Testing sem_give with mutex while sem is not taken  
+ */  
+
+#include "test.h"
+
+#define TESTNR 16
+
+int main(void)
+{
+    sem_t m1; 
+    int result; 
+    /* create mutex */
+    if (sem_m_create(&m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_m_create(&m1) != OK");
+        return FAILED;
+    }   
+    
+    /* do a sem_give while sem is not taken */
+    if (result=sem_give(m1) != SEM_ALREADY_FREE) {
+        DEBUGMSG(TESTNR, "sem_give(m1) != SEM_ALREADY_FREE");
+        printf("Result: %d\n", result);
+
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    } 
+    
+    /* clean up */
+    if (sem_delete(m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+        return FATAL_FAILURE;
+    }   
+    
+    /* test passed */
+    return OK;
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test17.c /usr/src/test/rtminix3/semaphores/batch/test17.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test17.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test17.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+/* Test 17
+ *
+ * Testing sem_give with binary sem while sem is not taken  
+ */  
+
+#include "test.h"
+
+#define TESTNR 17
+
+int main(void)
+{
+    sem_t b1; 
+    
+    /* create mutex */
+    if (sem_b_create(&b1, 1) != OK) {
+        DEBUGMSG(TESTNR, "sem_b_create(&b1, 1) != OK");
+        return FAILED;
+    }   
+
+    /* do a sem_give while sem is not taken */
+    if (sem_give(b1) != SEM_ALREADY_FREE) {
+        DEBUGMSG(TESTNR, "sem_give(b1) != SEM_ALREADY_FREE");
+        
+        /* clean up */
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    } 
+    
+    /* clean up */
+    if (sem_delete(b1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+        return FATAL_FAILURE;
+    }   
+    
+    /* test passed */
+    return OK;
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test18.c /usr/src/test/rtminix3/semaphores/batch/test18.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test18.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test18.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,41 @@
+/* Test 18
+ *
+ * Testing sem_give with counting sem while sem is not taken  
+ */  
+
+#include "test.h"
+
+#define TESTNR 18
+
+int main(void)
+{
+    sem_t c1; 
+    
+    /* create mutex */
+    if (sem_c_create(&c1, 5, 5) != OK) {
+        DEBUGMSG(TESTNR, "sem_c_create(&c1, 5, 5) != OK");
+        return FAILED;
+    }   
+
+    /* do a sem_give while sem is not taken */
+    if (sem_give(c1) != SEM_ALREADY_FREE) {
+        DEBUGMSG(TESTNR, "sem_give(c1) != SEM_ALREADY_FREE");
+        
+        /* clean up */
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    } 
+    
+    /* clean up */
+    if (sem_delete(c1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+        return FATAL_FAILURE;
+    }   
+    
+    /* test passed */
+    return OK;
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test19.c /usr/src/test/rtminix3/semaphores/batch/test19.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test19.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test19.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,78 @@
+/* Test 19
+ *
+ * Testing sem_give of taken mutex with wrong user
+ */  
+
+#include "test.h"
+
+#define TESTNR 19
+
+int main(void)
+{
+    sem_t m1; 
+    int pid;
+        int result;
+    int status; 
+    /* create mutex */  
+    if (sem_m_create(&m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_m_create(&m1) != OK");
+        return FAILED;
+    }
+
+    /* take mutex */
+    if (sem_take(m1, NO_WAIT) != OK) {
+        DEBUGMSG(TESTNR, "sem_take(m1, NO_WAIT) != OK");
+
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }
+
+        return FAILED;  
+    }   
+
+    if (pid = fork() != 0) {
+        /* parent */
+        
+        /* wait till child exits and get exit code */
+        result = waitpid(-1, &status, 0);
+                
+        if (WEXITSTATUS(status) != SEM_INVALID_MUTEX_GIVE) {
+            DEBUGMSG(TESTNR, "WEXITSTATUS(status) != SEM_INVALID_MUTEX_GIVE");
+            
+            /* clean up */  
+            if (sem_give(m1) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(m1) != OK");
+            }   
+
+            if (sem_delete(m1) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+                return FATAL_FAILURE;
+            }   
+
+            return FAILED;
+
+        }   
+        
+        /* clean up */
+        if (sem_give(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(m1) != OK");
+        }   
+        
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        /* test passed */
+        return OK;
+    } else {
+        /* child */
+        sleep(1);
+        result = sem_give(m1);
+            
+        return result;
+    }
+
+    return OK;  
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test2.c /usr/src/test/rtminix3/semaphores/batch/test2.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test2.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test2.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,49 @@
+/* Test 2
+ *
+ * Testing the creation of binary semaphore under normal conditions
+ */
+
+#include "test.h"
+
+#define TESTNR 2
+
+main(void)
+{
+    sem_t b1;
+    sem_t b2;
+    
+    /* try to create binary semaphore with a start value of 0 and 1 */
+    if (sem_b_create(&b1, 0) != OK) {
+        /* Test failed */
+        DEBUGMSG(TESTNR, "sem_b_create(&b1, 0) != OK");
+        return FAILED;
+    } else if (sem_b_create(&b2, 1) != OK) {
+        /* Test failed */
+        DEBUGMSG(TESTNR, "sem_b_create(&b2, 1) != OK");
+        
+        /* delete sem bin1 that has been created succesful */
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }   
+        return FAILED;
+    } else {
+        /* Test passed */
+        
+        /* Deleting the two sems */
+        /* first make sure b1 has value 1 */
+        if (sem_give(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(b1) != OK");
+        }           
+        if (sem_delete(b1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+            return FATAL_FAILURE;
+        }   
+        if (sem_delete(b2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(b2) != OK");
+            return FATAL_FAILURE;
+        }   
+
+        return OK;  
+     }      
+}   
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test3.c /usr/src/test/rtminix3/semaphores/batch/test3.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test3.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test3.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,103 @@
+/* Test 3
+ *
+ * Testing the creation of counting semaphores under normal conditions
+ */
+
+#include "test.h"
+
+#define TESTNR 3
+
+main(void)
+{
+    sem_t c1;
+    sem_t c2;
+    sem_t c3;
+    int i;
+    
+    /* try to create counting semaphore with value 0 and size 6 */
+    if (sem_c_create(&c1, 0, 6) != OK) {
+        /* Test failed */
+        DEBUGMSG(TESTNR, "sem_c_create(&c1, 0, 6) != OK");
+        return FAILED;
+    }
+        /* try to create counting semaphore with value 3 and size 6 */
+    else if (sem_c_create(&c2, 3, 6) != OK) {
+        /* Test failed */
+        DEBUGMSG(TESTNR, "sem_c_create(&c2, 3, 6) != OK");
+        
+        /* delete sem c1 that has been created succesful */
+        /* First make sure that the value equals the size of the semaphore */
+                for (i=0;i<6;i++) {
+                        if (sem_give(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+            }   
+                }
+        
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    } 
+    /* try to create counting semaphore with value 6 and size 6 */
+    else if (sem_c_create(&c3, 6, 6) != OK) {
+        /* Test failed */
+        DEBUGMSG(TESTNR, "sem_c_create(&c3, 6, 6) != OK)");
+        
+        /* Deleting the two sems that are created succesful */
+        /* First make sure that the value equals the size of the semaphores */
+                for (i=0;i<6;i++) {
+                        if (sem_give(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+            }   
+                }                       
+        
+                for (i=0;i<3;i++) {
+                        if (sem_give(c2) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(c2) != OK");
+            }   
+                }
+
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }
+        
+        if (sem_delete(c2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c2) != OK");
+            return FATAL_FAILURE;
+        }
+        return FAILED;
+    } else {
+        /* Test passed */
+        
+        /* Deleting the three sems */
+        /* First make sure that the value equals the size of the semaphores */
+        for (i=0;i<6;i++) {
+            if (sem_give(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(c1) != OK");
+            }   
+        }       
+        for (i=0;i<3;i++) {
+            if (sem_give(c2) != OK) {
+                DEBUGMSG(TESTNR, "sem_give(c2) != OK");
+            }   
+        }
+        
+        if (sem_delete(c1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+            return FATAL_FAILURE;
+        }   
+        if (sem_delete(c2) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c2) != OK");
+            return FATAL_FAILURE;
+        }   
+        if (sem_delete(c3) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(c3) != OK");
+            return FATAL_FAILURE;
+        }   
+
+        return OK;  
+     }      
+}   
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test4.c /usr/src/test/rtminix3/semaphores/batch/test4.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test4.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test4.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,60 @@
+/* Test 4
+ *
+ * Testing the creation of a semaphore with invalid type  
+ * */
+
+#include "test.h"
+
+#define TESTNR 4
+
+main(void)
+{
+    sem_t sem;
+    message m;
+    int result;
+    
+    /* trying to create sem with type 4 */
+    m.SEM_F_TYPE = 4;
+    result = _syscall(SS, SEM_CREATE, &m);
+
+    if (result != SEM_INVALID_TYPE) {
+        if (result == OK) {
+            if (sem_delete(m.SEM_F_HANDLER) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(m.SEM_F_HANDLER) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    }   
+
+    /* trying to create sem with type 0 */
+    m.SEM_F_TYPE = 0;
+    result = _syscall(SS, SEM_CREATE, &m);
+    
+    if (result != SEM_INVALID_TYPE) {
+        if (result == OK) {
+            if (sem_delete(m.SEM_F_HANDLER) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(m.SEM_F_HANDLER) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    }   
+
+    /* trying to create sem with type -1 */
+    m.SEM_F_TYPE = -1;
+    result = _syscall(SS, SEM_CREATE, &m);
+    
+    if (result != SEM_INVALID_TYPE) {
+        if (result == OK) {
+            if (sem_delete(m.SEM_F_HANDLER) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(m.SEM_F_HANDLER) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    }   
+    
+    return OK;
+}   
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test5.c /usr/src/test/rtminix3/semaphores/batch/test5.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test5.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test5.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,40 @@
+/* Test 5
+ *
+ * Testing the creation of a binary semaphore with invalid value parameters 
+ */
+
+#include "test.h"
+
+#define TESTNR 5
+
+main(void)
+{
+    sem_t b1;
+    sem_t b2;
+    int result;
+    
+    /* try to create binary semaphore with value 2 */
+    if (result = sem_b_create(&b1, 2) != SEM_INVALID_VALUE) {
+        if (result == OK) {
+            if (sem_delete(b1) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(b1) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    } 
+    
+    /* try to create binary semaphore with value -1 */
+    if (result = sem_b_create(&b2, -1) != SEM_INVALID_VALUE) {
+        if (result == OK) {
+            if (sem_delete(b2) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(b2) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    } 
+    
+    return OK;
+}   
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test6.c /usr/src/test/rtminix3/semaphores/batch/test6.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test6.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test6.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,39 @@
+/* Test 6
+ *
+ * Testing the creation of a counting semaphore with invalid value parameter 
+ */
+
+#include "test.h"
+
+#define TESTNR 6
+
+main(void)
+{
+    sem_t c1;
+    sem_t c2;
+    int result;
+    
+    /* try to create counting semaphore with value 7, size 6 */
+    if (result = sem_c_create(&c1, 7, 6) != SEM_INVALID_VALUE) {
+        if (result == OK) {
+            if (sem_delete(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    } 
+    
+    /* try to create counting semaphore with value -1, size 6 */
+    if (result = sem_c_create(&c2, -1, 6) != SEM_INVALID_VALUE) {
+        if (result == OK) {
+            if (sem_delete(c2) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(c2) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    } 
+    
+    return OK;
+}   
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test7.c /usr/src/test/rtminix3/semaphores/batch/test7.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test7.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test7.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,27 @@
+/* Test 7
+ *
+ * Testing the creation of a counting semaphore with invalid size parameter 
+ */
+
+#include "test.h"
+
+#define TESTNR 7
+
+main(void)
+{
+    sem_t c1;
+    int result;
+    
+    /* try to create counting semaphore with value 0, size 0 */
+    if (result = sem_c_create(&c1, 0, 0) != SEM_INVALID_SIZE) {
+        if (result == OK) {
+            if (sem_delete(c1) != OK) {
+                DEBUGMSG(TESTNR, "sem_delete(c1) != OK");
+                return FATAL_FAILURE;
+            }   
+        }   
+        return FAILED;
+    } 
+    
+    return OK;
+}   
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test8.c /usr/src/test/rtminix3/semaphores/batch/test8.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test8.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test8.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,19 @@
+/* Test 8
+ *
+ * Testing sem_take with invalid semaphore handler
+ */  
+
+#include "test.h"
+
+#define TESTNR 8
+
+main(void)
+{
+    sem_t m1; /* uninitialized sem handler should be invalid */
+                 
+    if (sem_take(m1, NO_WAIT) != SEM_INVALID_HANDLER) {
+        return FAILED;
+    } else {
+        return OK;
+    }   
+}
diff -Naur /usr/src_original/test/rtminix3/semaphores/batch/test9.c /usr/src/test/rtminix3/semaphores/batch/test9.c
--- /usr/src_original/test/rtminix3/semaphores/batch/test9.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/batch/test9.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,66 @@
+/* Test 9
+ *
+ * Testing sem_take with mutex under normal conditions with NO_WAIT
+ */  
+
+#include "test.h"
+
+#define TESTNR 9
+
+main(void)
+{
+    sem_t m1;
+    
+    /* create sem */
+    if (sem_m_create(&m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_m_create(&m1) != OK");
+        return FAILED;
+    }   
+    
+    /* do a non-blocking sem_take. Should return OK */
+    if (sem_take(m1, NO_WAIT) != OK) {
+        DEBUGMSG(TESTNR, "sem_take(m1, NO_WAIT) != OK");
+        
+        /* clean up */
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* do another non-blocking sem_take. Should return SEM_IN_USE */
+    if (sem_take(m1, NO_WAIT) != SEM_IN_USE) {
+        DEBUGMSG(TESTNR, "sem_take(m1, NO_WAIT) != SEM_IN_USE");
+        
+        /* clean up */
+        /* first make sure that m1 has value 1 */
+        if (sem_give(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_give(m1) != OK");
+        }   
+        
+        if (sem_delete(m1) != OK) {
+            DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+            return FATAL_FAILURE;
+        }   
+        
+        return FAILED;
+    }
+
+    /* clean up */
+    /* first make sure that m1 has value 1 */
+    if (sem_give(m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_give(m1) != OK");
+    }
+    
+    if(sem_delete(m1) != OK) {
+        DEBUGMSG(TESTNR, "sem_delete(m1) != OK");
+        return FATAL_FAILURE;
+    }   
+
+    return OK;
+}
+
+
+
diff -Naur /usr/src_original/test/rtminix3/semaphores/dining_philosophers/build.sh /usr/src/test/rtminix3/semaphores/dining_philosophers/build.sh
--- /usr/src_original/test/rtminix3/semaphores/dining_philosophers/build.sh	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/dining_philosophers/build.sh	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cc -o dp dp.c -lsem
diff -Naur /usr/src_original/test/rtminix3/semaphores/dining_philosophers/dp.c /usr/src/test/rtminix3/semaphores/dining_philosophers/dp.c
--- /usr/src_original/test/rtminix3/semaphores/dining_philosophers/dp.c	1970-01-01 00:00:00.000000000 +0000
+++ /usr/src/test/rtminix3/semaphores/dining_philosophers/dp.c	2009-10-04 23:53:22.000000000 +0000
@@ -0,0 +1,117 @@
+/* Dining Philosophers implementation for
+ * the semaphore server.
+ *
+ * It uses a counting semaphore that makes sure
+ * that only N-1 philosophers may be in the room.
+ * Furthermore a philosopher will try to take the left
+ * fork first and after it got the left fork it will
+ * try to get the right fork.
+ *
+ *  Changes:
+ *    15 jun 2009   initial release (Bianco Zandbergen) 
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <lib.h>
+#include <minix/sem.h>
+
+#define N 6 
+#define LEFT_FORK(X) (X+N-1)%N
+#define RIGHT_FORK(X) (X)
+
+sem_t waiter; /* the counting semaphore */
+sem_t forks[N]; 
+
+void philosopher(int i);
+void display_forkstate(int nr);
+
+int main(void) 
+{
+    int i, result;
+    /* create mutex */
+    if (sem_c_create(&waiter, (N-1), (N-1)) != OK) printf("Creating mutex failed!\n");
+    
+    /* create fork semaphores */
+    for (i=0;i<N;i++) {
+        if (sem_m_create(&forks[i]) != 0) printf("Creating mutex failed\n");
+    }
+
+    /* create the philosophers.
+     * The philosophers will execute the philosopher() function
+     */
+    for (i=0;i<N;i++) {
+        result = fork();
+
+        if (result == 0) {
+            philosopher(i);
+        }
+    }
+    
+    while(TRUE) { sleep(1); }
+
+    return -1;
+}
+
+
+void philosopher(int i)
+{
+
+    int got_forks;
+    int result;
+    int j;
+
+    while (TRUE) {
+        /* thinking */
+        printf("P%d thinking...\n",i);
+        fflush(stdout);
+    
+        sleep(/*(i%3)+*/1);
+
+        /* hungry */
+        printf("P%d hungry...\n",i);
+        fflush(stdout);
+        
+        /* get in and get forks */
+        sem_take(waiter, WAIT_FOREVER);
+
+        printf("P%d sits down...\n", i);
+        
+        sem_take(forks[LEFT_FORK(i)], WAIT_FOREVER);
+        sem_take(forks[RIGHT_FORK(i)], WAIT_FOREVER);
+        
+        /* eating */
+        printf("P%d eating...\n",i);
+        fflush(stdout); 
+
+        /* display_forkstate(i); */
+        sleep(/*(i%3)+*/1); 
+
+        /* return forks */
+        if (sem_give(forks[LEFT_FORK(i)]) != OK) printf("Cannot give sem free");
+        if (sem_give(forks[RIGHT_FORK(i)]) != OK) printf("Cannot give sem free");
+        
+        /* leave room */
+        if (sem_give(waiter) != OK) printf("Cannot give sem free");
+                
+        
+        printf("P%d returned forks\n",i);
+            fflush(stdout); 
+        /* display_forkstate(i); */ 
+     }
+}   
+
+void display_forkstate(int nr) {
+    int forkstate[N];
+    int i, result, value;
+
+    for (i=0;i<N;i++) {
+        result = sem_value(forks[i], &value);
+        if (result != 0) printf("sem_value failed!\n");
+        forkstate[i] = value;
+    }
+    
+    printf("P%d forkstate:  [ %d ] [ %d ] [ %d ] [ %d ] [ %d ] [ %d ] \n",nr,forkstate[0], 
+            forkstate[1], forkstate[2], forkstate[3], forkstate[4], forkstate[5]);
+    fflush(stdout);
+}   
+
diff -Naur /usr/src_original/tools/Makefile /usr/src/tools/Makefile
--- /usr/src_original/tools/Makefile	2006-04-09 23:16:13.000000000 +0000
+++ /usr/src/tools/Makefile	2009-10-04 23:53:22.000000000 +0000
@@ -14,6 +14,7 @@
 	../drivers/tty/tty \
 	../drivers/memory/memory \
 	../drivers/log/log \
+	../servers/ss/ss \
 	../servers/init/init
 
 usage:	
diff -Naur /usr/src_original/tools/revision /usr/src/tools/revision
--- /usr/src_original/tools/revision	2006-05-03 23:40:05.000000000 +0000
+++ /usr/src/tools/revision	2009-10-04 23:53:22.000000000 +0000
@@ -1 +1 @@
-0
+90

