<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/python

import Tkinter as tk
import tkFont
import time
import math
import sys
import gc

# Globals
run = True
window = tk.Tk()
NOSIG = -999999

font6 = tkFont.Font(size=6)
font7 = tkFont.Font(size=7)
font8 = tkFont.Font(size=8)
font9 = tkFont.Font(size=9)
font12 = tkFont.Font(size=12)
font12B = tkFont.Font(size=12, weight="bold")

# Top Frame - GPS / Attitude / Pressure data
pressure = 1013
tFrame = tk.Frame(master = window)
bFrame = tk.Frame(master = window)
aiCanvas = tk.Canvas(master=tFrame)
thrtCanvas = tk.Canvas(master=bFrame)
gpsCanvas = tk.Canvas(master=bFrame)
magCompassCanvas = tk.Canvas(master=tFrame)
magCompassBits = { }
gpsCompassCanvas = tk.Canvas(master=tFrame)
gpsCompassBits = { }
prsAltCanvas = tk.Canvas(master=tFrame)
prsAltBits = { }
gpsAltCanvas = tk.Canvas(master=tFrame)
gpsAltBits = { }
speedCanvas = tk.Canvas(master=tFrame)
speedBits = { }
balCanvas = tk.Canvas(master=tFrame)
balBits = { }
turnCanvas = tk.Canvas(master=tFrame)
gCanvas = tk.Canvas(master=tFrame)
gMax = 1.0
gMin = 1.0
pDecrButton = tk.Button(master=tFrame)
pIncrButton = tk.Button(master=tFrame)

###########################################################################################

# Redraw AI 
def ai(aiCanvas, aob, pitch):
	pitchScaling = 1.3
	aiCanvas.delete("all")
	aiCanvas.configure(bg="#000000")

	# Blank
	aiCanvas.create_rectangle(20, 20, 186, 186, fill="#000000")

	# Draw white arc, overlay blue circle, then brown arc
	aiCanvas.create_arc(28, 28, 178, 178, start=0, extent=180, style=tk.CHORD, fill="#FFFFFF")
	aiCanvas.create_oval(30, 30, 176, 176, fill="#0000FF")
	aiCanvas.create_arc(30, 30, 176, 176, start=180 + aob + (pitchScaling * pitch), extent=180 - (pitchScaling * 2 * pitch), style=tk.CHORD, fill="#663300")

	# Pitch up/down lines
	if pitch &gt;= -30:
        	pitchLine = 5
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(93, vertOrigin, 113, vertOrigin, width=2, fill="#FFFFFF")
	if pitch &gt;= -25:
        	pitchLine = 10
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(83, vertOrigin, 123, vertOrigin, width=2, fill="#FFFFFF")
		aiCanvas.create_text(73, vertOrigin, fill="#FFFFFF", font=font6, text="10")
		aiCanvas.create_text(133, vertOrigin, fill="#FFFFFF", font=font6, text="10")
	if pitch &gt;= -20:
        	pitchLine = 15
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(93, vertOrigin, 113, vertOrigin, width=2, fill="#FFFFFF")
	if pitch &gt;= -15:
        	pitchLine = 20
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(73, vertOrigin, 133, vertOrigin, width=2, fill="#FFFFFF")
		aiCanvas.create_text(63, vertOrigin, fill="#FFFFFF", font=font6, text="20")
		aiCanvas.create_text(143, vertOrigin, fill="#FFFFFF", font=font6, text="20")
	if pitch &lt;= 30:
        	pitchLine = -5
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(93, vertOrigin, 113, vertOrigin, width=2, fill="#FFFFFF")
	if pitch &lt;= 25:
        	pitchLine = -10
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(83, vertOrigin, 123, vertOrigin, width=2, fill="#FFFFFF")
		aiCanvas.create_text(73, vertOrigin, fill="#FFFFFF", font=font6, text="10")
		aiCanvas.create_text(133, vertOrigin, fill="#FFFFFF", font=font6, text="10")
	if pitch &lt;= 20:
        	pitchLine = -15
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(93, vertOrigin, 113, vertOrigin, width=2, fill="#FFFFFF")
	if pitch &lt;= 15:
        	pitchLine = -20
        	vertOrigin = 103 - (pitchLine * 1.2 * pitchScaling) + (pitchScaling * 1.25 * pitch)
        	aiCanvas.create_line(73, vertOrigin, 133, vertOrigin, width=2, fill="#FFFFFF")
		aiCanvas.create_text(63, vertOrigin, fill="#FFFFFF", font=font6, text="20")
		aiCanvas.create_text(143, vertOrigin, fill="#FFFFFF", font=font6, text="20")

	# Aitcraft wings
	aiCanvas.create_line(50, 103, 90, 103, 90, 111, width=3, fill="#FF9900")
	aiCanvas.create_line(101, 103, 105, 103, width=5, fill="#FF9900")
	aiCanvas.create_line(116, 111, 116, 103, 156, 103, width=3, fill="#FF9900")

	# Add roll marks
	radius = 75
	markLen = 10
	startX = 103
	startY = 103 - radius
	aiCanvas.create_polygon(startX, startY, startX + 5, startY - 15, startX - 5, startY - 15, startX, startY, fill="#FFFFFF")
	roll = math.radians(45)
	startX = 103 + (math.sin(roll) * (radius + 5))
	startY = 103 - (math.cos(roll) * (radius + 5))
	aiCanvas.create_line(startX - 2, startY - 2, startX + 2, startY + 2, width=5, fill="#FFFFFF")
	roll = math.radians(-45)
	startX = 103 + (math.sin(roll) * (radius + 5))
	aiCanvas.create_line(startX - 2, startY - 2, startX + 2, startY + 2, width=5, fill="#FFFFFF")
        for roll in -20, -10, 10, 20:
		rollRad = math.radians(roll)
		startX = 103 + (math.sin(rollRad) * (radius + 3))
		startY = 103 - (math.cos(rollRad) * (radius + 3))
		aiCanvas.create_line(startX - 1, startY - 1, startX + 1, startY + 1, width=3, fill="#FFFFFF")
        for roll in -90, -60, -30, 30, 60, 90:
		rollRad = math.radians(roll)
		startX = 103 + (math.sin(rollRad) * radius)
		startY = 103 - (math.cos(rollRad) * radius)
		endX = 103 + (math.sin(rollRad) * (radius + markLen))
		endY = 103 - (math.cos(rollRad) * (radius + markLen))
		aiCanvas.create_line(startX, startY, endX, endY, width=2, fill="#FFFFFF")
	
	# Add yellow triangle
	rollRad = math.radians(aob)
	startX = 103 - (math.sin(rollRad) * radius)
	startY = 103 - (math.cos(rollRad) * radius)
	triAngle = math.radians(aob + 30)
 	x1 = startX + (math.sin(triAngle) * 15)
 	y1 = startY + (math.cos(triAngle) * 15)
	triAngle = math.radians(aob - 30)
 	x2 = startX + (math.sin(triAngle) * 15)
 	y2 = startY + (math.cos(triAngle) * 15)
	
	aiCanvas.create_polygon(startX, startY, x1, y1, x2, y2, startX, startY, fill="#FFFF00")

	aiCanvas.update()
# End def ai()

###########################################################################################

# Draw Compass tape 
def drawCompass(canvas, bits, hdg):
	bgCol = "#000000"
	if hdg == NOSIG:
		bgCol = "#FF0000"
		hdg = 0

	if "tape" in bits.keys():
		tape = bits["tape"]
		tape.delete("all")	
		tape.destroy()
	if "val" in bits.keys():
		val = bits["val"]
		val.delete("all")	
		val.destroy()
	canvas.delete("all")

	tape = tk.Canvas(master=canvas, width=210, height=15, bg=bgCol, borderwidth=0, highlightthickness=0)
	bits["tape"] = tape
	tape.place(x=1, y=1)
	val = tk.Canvas(master=canvas, width=40, height=30, bg=bgCol, borderwidth=0, highlightthickness=0)
	bits["val"] = val
	val.place(x=86, y=1)

	val.create_text(20, 15, fill="#FFFFFF", font=font12B, text="%03d" % hdg)

	tapeText = ""
	hdgDec = hdg / 10
	for h in range(hdgDec - 9, hdgDec + 10):
		ho = h * 10
		if ho &lt; 0:
			ho = ho + 360
		elif ho &gt; 350:
			ho = ho - 360
		tapeText += "- %03d -" % ho 
	rem = hdg % 10
	tape.create_text(105 - (rem * 3.5), 8, fill="#FFFFFF", font=font8, text=tapeText)

	canvas.update()
	
# End def drawCompass()

###########################################################################################

# Draw Alt tape 
def drawAlt(canvas, bits, ht):
	bgCol = "#000000"
	if ht == NOSIG:
		bgCol = "#FF0000"
		ht = 0

	if "tape" in bits.keys():
		tape = bits["tape"]
		tape.delete("all")	
		tape.destroy()
	if "val" in bits.keys():
		val = bits["val"]
		val.delete("all")	
		val.destroy()
	canvas.delete("all")

	tape = tk.Canvas(master=canvas, width=30, height=210, bg=bgCol, borderwidth=0, highlightthickness=0)
        bits["tape"] = tape
	tape.place(x=31, y=1)
	val = tk.Canvas(master=canvas, width=60, height=30, bg=bgCol, borderwidth=0, highlightthickness=0)
        bits["val"] = val
	val.place(x=1, y=91)

	val.create_text(30, 15, fill="#FFFFFF", font=font12B, text=ht)
	
	low = ((ht - 3000) / 1000) * 1000
	hi = ((ht + 3000) / 1000) * 1000

	for h in range(low, hi, 500):
		tape.create_text(15, 105 - (h - ht) / 20, fill="#FFFFFF", font=font6, text=h)

	canvas.update()


# End of def drawAlt()

###########################################################################################

# Draw Speed tape 
def drawSpeed(canvas, bits, spd):
	bgCol = "#000000"
	if spd == NOSIG:
		bgCol = "#FF0000"
		spd = 0

	if "tape" in bits.keys():
		tape = bits["tape"]
		tape.delete("all")	
		tape.destroy()
	if "val" in bits.keys():
		val = bits["val"]
		val.delete("all")	
		val.destroy()
	canvas.delete("all")

	tape = tk.Canvas(master=canvas, width=30, height=210, bg=bgCol, borderwidth=0, highlightthickness=0)
        bits["tape"] = tape
	tape.place(x=1, y=1)
	val = tk.Canvas(master=canvas, width=60, height=30, bg=bgCol, borderwidth=0, highlightthickness=0)
        bits["val"] = val
	val.place(x=1, y=91)

	val.create_text(30, 15, fill="#FFFFFF", font=font12B, text=spd)
	
	low = ((spd - 100) / 10) * 10
	hi = ((spd + 100) / 10) * 10

	for s in range(low, hi, 20):
		if s &gt;= 0:
			tape.create_text(15, 105 - (s - spd) * 1.25, fill="#FFFFFF", font=font7, text=s)

	canvas.update()


# End of def drawAlt()

###########################################################################################

# Slip ball
def slipBall(canvas, bits, angle):
	if "slot" in bits.keys():
		slot = bits["slot"]
		slot.delete("all")	
		slot.destroy()
	canvas.delete("all")

	slot = tk.Canvas(master=canvas, width=146, height=20, bg="#FFFFFF", borderwidth=3, highlightthickness=3, relief=tk.SUNKEN)
        bits["slot"] = slot
	slot.place(x=0, y=1)
        slot.create_line(68, 0, 68, 26, width=3, fill="#000000")
        slot.create_line(88, 0, 88, 26, width=3, fill="#000000")

	if angle &gt; 10: 
		angle = 10
	elif angle &lt; -10:
		angle = -10
        x = 70 + (angle * 6.4)
	ball = slot.create_oval(x, 6, x + 16, 25, fill="#000000")

	canvas.update()

# End of def slipBall()

###########################################################################################

# Turn indicator
def turnCoord(canvas, rate):
	canvas.delete("all")

	canvas.create_line(40, 15, 50, 15, width=10, fill="#FFFFFF")
	canvas.create_line(22, 19, 26, 19, width=4, fill="#FFFFFF")
	canvas.create_line(64, 19, 68, 19, width=4, fill="#FFFFFF")
	canvas.create_text(10, 20, fill="#FFFFFF", font=font9, text="L")
	canvas.create_text(80, 20, fill="#FFFFFF", font=font9, text="R")

	if rate &gt; 7:
		rate = 7
	elif rate &lt; -7:
		rate = -7
	rate *= 7
	x = 55 * math.sin(math.radians(rate))
	y = 55 * math.cos(math.radians(rate))
	canvas.create_line(45, 75, 45 - x, 75 - y, width = 4, fill="#FFFFFF")
	canvas.create_line(45, 75, 45 - (x / 5), 75 - (y / 5), width = 6, fill="#000000")
	canvas.create_text(45, 75, fill="#FFFFFF", font=font9, text="2 MIN TURN")

	canvas.update()

# End of def turnCoord()

###########################################################################################

# G Meter
def drawGLine(canvas, force, colour):
	forceRadius = 25
	angle = math.radians((force - 1) * 45)
	x = 45 - (math.cos(angle) * forceRadius)
	y = 45 - (math.sin(angle) * forceRadius)

	canvas.create_line(45, 45, x, y, width=2, fill=colour)


def gMeter(canvas, force):
	global gMax, gMin
	canvas.delete("all")

	canvas.create_oval(5, 5, 85, 85, fill="#FFFFFF")
	canvas.create_oval(7, 7, 83, 83, fill="#000000")

	textRadius = 33
	angle = math.radians(0)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="1")
	angle = math.radians(45)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="2")
	angle = math.radians(90)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="3")
	angle = math.radians(135)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="4")
	angle = math.radians(-45)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="0")
	angle = math.radians(-90)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="-1")
	angle = math.radians(-135)
	x = 45 - (math.cos(angle) * textRadius)
	y = 45 - (math.sin(angle) * textRadius)
	canvas.create_text(x, y, fill="#FFFFFF", font=font6, text="-2")

	if force &gt; 4:
		force = 4
	if force &lt; -2:
		force = -2
	if force &gt; gMax:
		gMax = force
	if force &lt; gMin:
		gMin = force
		
	drawGLine(canvas, gMax, "#FF0000")
	drawGLine(canvas, gMin, "#FF0000")
	drawGLine(canvas, force, "#FFFFFF")

	canvas.update()

# End of def gMeter()

###########################################################################################

# Window close button
def closeButton():
	global run
	run = False
	print "Exit requested"
	#global window
	#window.destroy()
	#sys.exit()
	#raise SystemExit

# End closeButton()

###########################################################################################

# Redraw pressure window
def drawPressWin():
	global pressure
	global pressText
	pressText.configure(text=pressure)
	pressText.update()

# End def drawPressWin()

###########################################################################################

# Pressure up / down buttons
def pressUpButton():
	global pressure
	pressure += 1
	drawPressWin()

def pressDownButton():
	global pressure
	pressure -= 1
	drawPressWin()

# End closeButton()

###########################################################################################

# print gc.isenabled()

window.title("Andy's EFIS")
window.resizable(False, False)
window.protocol("WM_DELETE_WINDOW", closeButton)
window.geometry("480x800+0+0")
window.overrideredirect(1)
window.configure(bg="#DDDDDD")

tFrame.configure(width=470, height=400, relief=tk.GROOVE, borderwidth=5, bg="#DDDDDD")
bFrame.configure(width=470, height=400, relief=tk.GROOVE, borderwidth=5, bg="#DDDDDD")

tFrame.place(x=5, y=0)
bFrame.place(x=5, y=400)

aiCanvas.configure(width=200, height=200, relief=tk.RIDGE, borderwidth=5)
aiCanvas.configure(bg="#000000")
aiCanvas.place(x=103, y=80)

magLabel = tk.Label(master=tFrame, text="MAG", fg="#000000", font=font12B)
magLabel.place(x=60, y=5)
magCompassCanvas.configure(width=210, height=30)
magCompassCanvas.configure(bg="#DDDDDD")
magCompassCanvas.place(x=103, y=8)
drawCompass(magCompassCanvas, magCompassBits, NOSIG);

gpsLabel = tk.Label(master=tFrame, text="GPS", fg="#000000", font=font12B)
gpsLabel.place(x=60, y=45)
gpsCompassCanvas.configure(width=210, height=30)
gpsCompassCanvas.configure(bg="#DDDDDD")
gpsCompassCanvas.place(x=103, y=48)
drawCompass(gpsCompassCanvas, gpsCompassBits, NOSIG);

prsLabel = tk.Label(master=tFrame, text="BARO", fg="#000000", font=font12B)
prsLabel.place(x=325, y=55)
prsAltCanvas.configure(width=60, height=210)
prsAltCanvas.configure(bg="#DDDDDD")
prsAltCanvas.place(x=315, y=80)
drawAlt(prsAltCanvas, prsAltBits, NOSIG)

gpsLabel = tk.Label(master=tFrame, text="GPS", fg="#000000", font=font12B)
gpsLabel.place(x=405, y=55)
gpsAltCanvas.configure(width=60, height=210)
gpsAltCanvas.configure(bg="#DDDDDD")
gpsAltCanvas.place(x=385, y=80)
drawAlt(gpsAltCanvas, gpsAltBits, NOSIG)

speedCanvas.configure(width=60, height=210)
speedCanvas.configure(bg="#DDDDDD")
speedCanvas.place(x=38, y=80)
drawSpeed(speedCanvas, speedBits, NOSIG)

balCanvas.configure(width=150, height=30)
balCanvas.configure(bg="#DDDDDD")
balCanvas.place(x=133, y=295)
slipBall(balCanvas, balBits, 0)

turnCanvas.configure(width=90, height=90)
turnCanvas.configure(bg="#000000")
turnCanvas.place(x=38, y=295)
turnCoord(turnCanvas, 3)

gCanvas.configure(width=90, height=90)
gCanvas.configure(bg="#000000")
gCanvas.place(x=290, y=295)
gMeter(gCanvas, 1)

pressText = tk.Message(master=tFrame, width=40, padx=2, pady=3, font=font9, text=pressure, bg="#FFFFFF")
pressText.place(x=337, y=30)
pDecrButton.configure(width=1, height=1, padx=2, pady=2, font=font8, text="-", command=pressDownButton)
pDecrButton.place(x=320, y=30)
pIncrButton.configure(width=1, height=1, padx=2, pady=2, font=font8, text="+", command=pressUpButton)
pIncrButton.place(x=375, y=30)

thrtCanvas.configure(width=300, height=300, relief=tk.RIDGE, borderwidth=5)
thrtCanvas.place(x=5, y=5)

gpsCanvas.configure(width=120, height=300, relief=tk.RIDGE, borderwidth=5)
gpsCanvas.place(x=320, y=5)
gpsNumGpsLabel = tk.Label(master=gpsCanvas, text="# GPS", fg="#000000", font=font9)
gpsNumGpsLabel.place(x=10, y=15)
gpsNumGps = tk.Label(master=gpsCanvas, width=7, text="0", fg="#000000", bg="#FF0000", font=font9)
gpsNumGps.place(x=60, y=15)
gpsLatLabel = tk.Label(master=gpsCanvas, text="LATITUDE", fg="#000000", font=font9)
gpsLatLabel.place(x=35, y=40)
gpsLat = tk.Label(master=gpsCanvas, width=13, text="00 00.00N", fg="#000000", bg="#FF0000", font=font9)
gpsLat.place(x=12, y=57)
gpsLongLabel = tk.Label(master=gpsCanvas, text="LONGITUDE", fg="#000000", font=font9)
gpsLongLabel.place(x=30, y=80)
gpsLong = tk.Label(master=gpsCanvas, width=13, text="000 00.00E", fg="#000000", bg="#FF0000", font=font9)
gpsLong.place(x=12, y=97)
gpsLatErrLabel = tk.Label(master=gpsCanvas, text="Lat Err", fg="#000000", font=font9)
gpsLatErrLabel.place(x=10, y=130)
gpsLatErr = tk.Label(master=gpsCanvas, width=7, text="0", fg="#000000", bg="#FF0000", font=font9)
gpsLatErr.place(x=60, y=130)
gpsLongErrLabel = tk.Label(master=gpsCanvas, text="Lng Err", fg="#000000", font=font9)
gpsLongErrLabel.place(x=10, y=150)
gpsLongErr = tk.Label(master=gpsCanvas, width=7, text="0", fg="#000000", bg="#FF0000", font=font9)
gpsLongErr.place(x=60, y=150)
gpsVertErrLabel = tk.Label(master=gpsCanvas, text="Vrt Err", fg="#000000", font=font9)
gpsVertErrLabel.place(x=10, y=170)
gpsVertErr = tk.Label(master=gpsCanvas, width=7, text="0", fg="#000000", bg="#FF0000", font=font9)
gpsVertErr.place(x=60, y=170)
gpsTimeLabel = tk.Label(master=gpsCanvas, text="TIME", fg="#000000", font=font9)
gpsTimeLabel.place(x=45, y=195)
gpsTime = tk.Label(master=gpsCanvas, width=13, text="00:00:00", fg="#000000", bg="#FF0000", font=font9)
gpsTime.place(x=12, y=212)
gpsCanvas.update()



window.update()

time.sleep(1)

window.update()

time.sleep(1)

# Play with ai
while 1 == 1:
	window.update()
	# print gc.get_count()
	#gc.collect()
	#print gc.get_count()

	drawCompass(magCompassCanvas, magCompassBits, 211);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 350);
	drawAlt(prsAltCanvas, prsAltBits, 0)
	drawAlt(gpsAltCanvas, gpsAltBits, 0)
	gMeter(gCanvas, 1)
	ai(aiCanvas, 0, 0)
	turnCoord(turnCanvas, -8)
	slipBall(balCanvas, balBits, -12)
	drawSpeed(speedCanvas, speedBits, 0)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 212);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 351);
	drawAlt(prsAltCanvas, prsAltBits, 100)
	drawAlt(gpsAltCanvas, gpsAltBits, 100)
	gMeter(gCanvas, 1.2)
	ai(aiCanvas, 0, 10)
	turnCoord(turnCanvas, -7)
	slipBall(balCanvas, balBits, -11)
	drawSpeed(speedCanvas, speedBits, 50)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 213);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 352);
	drawAlt(prsAltCanvas, prsAltBits, 150)
	drawAlt(gpsAltCanvas, gpsAltBits, 150)
	gMeter(gCanvas, 1.4)
	ai(aiCanvas, 0, 20)
	turnCoord(turnCanvas, -6)
	slipBall(balCanvas, balBits, -10)
	drawSpeed(speedCanvas, speedBits, 70)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 214);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 353);
	drawAlt(prsAltCanvas, prsAltBits, 200)
	drawAlt(gpsAltCanvas, gpsAltBits, 200)
	gMeter(gCanvas, 1.6)
	ai(aiCanvas, 0, 30)
	turnCoord(turnCanvas, -5)
	slipBall(balCanvas, balBits, -9)
	drawSpeed(speedCanvas, speedBits, 101)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 215);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 354);
	drawAlt(prsAltCanvas, prsAltBits, 500)
	drawAlt(gpsAltCanvas, gpsAltBits, 500)
	gMeter(gCanvas, 1.8)
	ai(aiCanvas, 0, 20)
	turnCoord(turnCanvas, -4)
	slipBall(balCanvas, balBits, -8)
	drawSpeed(speedCanvas, speedBits, 102)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 216);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 355);
	drawAlt(prsAltCanvas, prsAltBits, 750)
	drawAlt(gpsAltCanvas, gpsAltBits, 750)
	gMeter(gCanvas, 2)
	ai(aiCanvas, 0, 10)
	turnCoord(turnCanvas, -3)
	slipBall(balCanvas, balBits, -7)
	drawSpeed(speedCanvas, speedBits, 103)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 217);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 356);
	drawAlt(prsAltCanvas, prsAltBits, 1000)
	drawAlt(gpsAltCanvas, gpsAltBits, 1000)
	gMeter(gCanvas, 3)
	ai(aiCanvas, 0, 0)
	turnCoord(turnCanvas, -2)
	slipBall(balCanvas, balBits, -6)
	drawSpeed(speedCanvas, speedBits, 104)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 218);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 357);
	drawAlt(prsAltCanvas, prsAltBits, 1500)
	drawAlt(gpsAltCanvas, gpsAltBits, 1500)
	gMeter(gCanvas, 4)
	ai(aiCanvas, 0, -10)
	turnCoord(turnCanvas, -1)
	slipBall(balCanvas, balBits, -5)
	drawSpeed(speedCanvas, speedBits, 105)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 219);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 358);
	drawAlt(prsAltCanvas, prsAltBits, 2000)
	drawAlt(gpsAltCanvas, gpsAltBits, 2000)
	gMeter(gCanvas, 3)
	ai(aiCanvas, 0, -20)
	turnCoord(turnCanvas, 0)
	slipBall(balCanvas, balBits, -4)
	drawSpeed(speedCanvas, speedBits, 106)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 220);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 359);
	drawAlt(prsAltCanvas, prsAltBits, 5000)
	drawAlt(gpsAltCanvas, gpsAltBits, 5000)
	gMeter(gCanvas, 2)
	ai(aiCanvas, 0, -10)
	turnCoord(turnCanvas, 1)
	slipBall(balCanvas, balBits, -3)
	drawSpeed(speedCanvas, speedBits, 107)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 221);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 0);
	drawAlt(prsAltCanvas, prsAltBits, 10000)
	drawAlt(gpsAltCanvas, gpsAltBits, 10000)
	gMeter(gCanvas, 1)
	ai(aiCanvas, 0, 0)
	turnCoord(turnCanvas, 2)
	slipBall(balCanvas, balBits, -2)
	drawSpeed(speedCanvas, speedBits, 108)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 222);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 1);
	drawAlt(prsAltCanvas, prsAltBits, 11000)
	drawAlt(gpsAltCanvas, gpsAltBits, 11000)
	gMeter(gCanvas, 0)
	ai(aiCanvas, 30, -10)
	turnCoord(turnCanvas, 3)
	slipBall(balCanvas, balBits, -1)
	drawSpeed(speedCanvas, speedBits, 109)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 223);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 2);
	drawAlt(prsAltCanvas, prsAltBits, 5000)
	drawAlt(gpsAltCanvas, gpsAltBits, 5000)
	gMeter(gCanvas, -1)
	ai(aiCanvas, 30, -20)
	turnCoord(turnCanvas, 4)
	slipBall(balCanvas, balBits, 0)
	drawSpeed(speedCanvas, speedBits, 110)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 224);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 3);
	drawAlt(prsAltCanvas, prsAltBits, 4000)
	drawAlt(gpsAltCanvas, gpsAltBits, 4000)
	gMeter(gCanvas, -2)
	ai(aiCanvas, 30, -30)
	turnCoord(turnCanvas, 5)
	slipBall(balCanvas, balBits, 1)
	drawSpeed(speedCanvas, speedBits, 109)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 225);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 4);
	drawAlt(prsAltCanvas, prsAltBits, 3000)
	drawAlt(gpsAltCanvas, gpsAltBits, 3000)
	gMeter(gCanvas, -2)
	ai(aiCanvas, 30, -10)
	turnCoord(turnCanvas, 6)
	slipBall(balCanvas, balBits, 2)
	drawSpeed(speedCanvas, speedBits, 108)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 226);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 5);
	drawAlt(prsAltCanvas, prsAltBits, 2000)
	drawAlt(gpsAltCanvas, gpsAltBits, 2000)
	gMeter(gCanvas, -3)
	ai(aiCanvas, 30, 0)
	turnCoord(turnCanvas, 7)
	slipBall(balCanvas, balBits, 3)
	drawSpeed(speedCanvas, speedBits, 107)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 227);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 6);
	drawAlt(prsAltCanvas, prsAltBits, 1000)
	drawAlt(gpsAltCanvas, gpsAltBits, 1000)
	gMeter(gCanvas, -2)
	ai(aiCanvas, 30, 10)
	turnCoord(turnCanvas, 8)
	slipBall(balCanvas, balBits, 4)
	drawSpeed(speedCanvas, speedBits, 106)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 228);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 7);
	drawAlt(prsAltCanvas, prsAltBits, 900)
	drawAlt(gpsAltCanvas, gpsAltBits, 900)
	gMeter(gCanvas, -1)
	ai(aiCanvas, 30, 20)
	turnCoord(turnCanvas, 7)
	slipBall(balCanvas, balBits, 5)
	drawSpeed(speedCanvas, speedBits, 105)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 229);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 8);
	drawAlt(prsAltCanvas, prsAltBits, 750)
	drawAlt(gpsAltCanvas, gpsAltBits, 750)
	gMeter(gCanvas, 0)
	ai(aiCanvas, 30, 10)
	turnCoord(turnCanvas, 6)
	slipBall(balCanvas, balBits, 6)
	drawSpeed(speedCanvas, speedBits, 104)
	time.sleep(1)
	drawCompass(magCompassCanvas, magCompassBits, 230);
	drawCompass(gpsCompassCanvas, gpsCompassBits, 9);
	drawAlt(prsAltCanvas, prsAltBits, 600)
	drawAlt(gpsAltCanvas, gpsAltBits, 600)
	gMeter(gCanvas, 1)
	ai(aiCanvas, 30, 0)
	turnCoord(turnCanvas, 5)
	slipBall(balCanvas, balBits, 7)
	drawSpeed(speedCanvas, speedBits, 103)
	time.sleep(1)


window.update()

time.sleep(30)
</pre></body></html>