<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
# http://nerdvittles.com/?p=703
# [[Nerd Vittles]]
<<attach inline>>
text/plain
.txt .text .js .vbs .asp .cgi .pl sh
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
[[AttachFilePlugin]] reads binary data from locally-stored files (e.g., images, PDFs, mp3's, etc.) and converts it to base64-encoded text that is stored in tiddlers tagged with<<tag attachment>>. [[AttachFilePluginFormatters]] allows you to use those tiddlers in place of the external path/file references that are normally part of the image and external links wiki syntax.

[[FileDropPlugin]] and [[FileDropPluginConfig]] allow you to quickly create attachment tiddlers simply by dragging files directly from your system's desktop folder display and dropping it onto an open TiddlyWiki document.  Text files are automatically created as simple tiddlers, while binary files are automatically encoded and attached.
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};

// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";

// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
	config.tasks.attachTask = {
		text: "attach",
		tooltip: "Attach a binary file as a tiddler",
		content: "<<attach inline>>"
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}

config.macros.attach = {
// // lingo
//{{{
	label: "attach file",
	tooltip: "Attach a file to this document",
	linkTooltip: "Attachment: ",

	typeList: "AttachFileMIMETypes",

	titlePrompt: " enter tiddler title...",
	MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
	localPrompt: " enter local path/filename...",
	URLPrompt: " enter remote URL...",

	tiddlerErr: "Please enter a tiddler title",
	sourceErr: "Please enter a source path/filename",
	storageErr: "Please select a storage method: embedded, local or remote",
	MIMEErr: "Unrecognized file format.  Please select a MIME type",
	localErr: "Please enter a local path/filename",
	URLErr: "Please enter a remote URL",
	fileErr: "Invalid path/file or file not found",

	tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',

//}}}
// // macro definition
//{{{
	handler:
	function(place,macroName,params) {
		if (params && !params[0])
			{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
		var id=params.shift();
		this.createAttachPanel(place,id+"_attachPanel",params);
		document.getElementById(id+"_attachPanel").style.position="static";
		document.getElementById(id+"_attachPanel").style.display="block";
	},
//}}}
//{{{
	createAttachPanel:
	function(place,panel_id,params) {
		if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
		// remove existing panel (if any)
		var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
		// set styles for this panel
		setStylesheet(this.css,"attachPanel");
		// create new panel
		var title=""; if (params && params[0]) title=params.shift();
		var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
		panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
		var html=this.html.replace(/%id%/g,panel_id);
		html=html.replace(/%title%/g,title);
		html=html.replace(/%disabled%/g,title.length?"disabled":"");
		html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
		html=html.replace(/%types%/g,types);
		panel.innerHTML=html;
		if (config.browser.isGecko) { // FF3 FIXUP
			document.getElementById("attachSource").style.display="none";
			document.getElementById("attachFixPanel").style.display="block";
		}
		return panel;
	},
//}}}
//{{{
	toggleAttachPanel:
	function (e) {
		if (!e) var e = window.event;
		var parent=resolveTarget(e).parentNode;
		var panel = document.getElementById("_attachPanel");
		if (panel==undefined || panel.parentNode!=parent)
			panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
		var isOpen = panel.style.display=="block";
		if(config.options.chkAnimate)
			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
		else
			panel.style.display = isOpen ? "none" : "block" ;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return(false);
	},
//}}}
//{{{
	formatListOptions:
	function(text) {
		if (!text || !text.trim().length) return "";
		// get MIME list content from text
		var parts=text.split("\n----\n");
		var out="";
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var label=lines.shift(); // 1st line=display text
			var value=lines.shift(); // 2nd line=item value
			out +='<option value="%1">%0</option>'.format([label,value]);
		}
		return out;
	},
//}}}
// // interface definition
//{{{
	css:
	".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
		background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
		border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
		padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
	.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
	.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
	.attachPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
	.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
	.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
	.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
	.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
		-moz-border-radius:5px;-webkit-border-radius:5px; }\
	.attachPanel .chk { width:auto;border:0; }\
	.attachPanel .btn { width:auto; }\
	.attachPanel .btn2 { width:49%; }\
	",
//}}}
//{{{
	html:
	'<form>\
		attach from source file\
		<input type="file" id="attachSource" name="source" size="56"\
			onChange="config.macros.attach.onChangeSource(this)">\
		<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
			<input type="text" id="attachFixSource" style="width:90%"\
				title="Enter a path/file to attach"\
				onChange="config.macros.attach.onChangeSource(this);">\
			<input type="button" style="width:7%" value="..."\
				title="Enter a path/file to attach"\
				onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
		</div><!--end FF3 FIXUP-->\
		<div class="box">\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
				onclick="if (!this.form.MIMEType.value.length)\
					this.form.MIMEType.selectedIndex=this.checked?1:0; ">&nbsp;\
		</td><td style="border:0">\
			<select size=1 name="MIMEType" \
				onchange="this.title=this.value; if (this.value==\'editlist\')\
					{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
				<option value=""></option>\
				%types%\
			</select>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			local link <input type=checkbox class=chk name="useLocal"\
				onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="local" size=15 autocomplete=off value=""\
				onchange="this.form.useLocal.checked=this.value.length" \
				onkeyup="this.form.useLocal.checked=this.value.length" \
				onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			remote link <input type=checkbox class=chk name="useURL"\
				onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="URL" size=15 autocomplete=off value=""\
				onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
				onchange="this.form.useURL.checked=this.value.length;"\
				onkeyup="this.form.useURL.checked=this.value.length;">\
		</td></tr></table>\
		</div>\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
			notes&nbsp;\
		</td><td style="border:0" colspan=2>\
			<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
		</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			attach as&nbsp;\
		</td><td style="border:0" colspan=2>\
			<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
				onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
				onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
		</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			add tags&nbsp;\
		</td><td style="border:0">\
			<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
		</td><td style="width:40%;text-align:right;border:0">\
			<input type=button class=btn2 value="attach"\
				onclick="config.macros.attach.onClickAttach(this)"><!--\
			--><input type=button class=btn2 value="close"\
				onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
		</td></tr></table>\
	</form>',
//}}}
// // control processing
//{{{
	onChangeSource:
	function(here) {
		var form=here.form;
		var list=form.MIMEType;
		var theFilename  = here.value;
		var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
		// if theFilename is in current document folder, remove path prefix and use relative reference
		var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
		if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
		else theFilename='file:///'+theFilename; // otherwise, use absolute reference
		theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
		form.useLocal.checked = true;
		form.local.value = theFilename;
		form.useData.checked = !form.useData.disabled;
		list.selectedIndex=1;
		for (var i=0; i<list.options.length; i++) // find matching MIME type
			if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
		if (!form.tiddlertitle.disabled)
			form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
	},
//}}}
//{{{
	onClickAttach:
	function (here) {
		clearMessage();
		// get input values
		var form=here.form;
		var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
		src=src.value!=src.defaultValue?src.value:"";
		var when=(new Date()).formatString(config.macros.timeline.dateFormat);
		var title=form.tiddlertitle.value;
		var local = form.local.value!=form.local.defaultValue?form.local.value:"";
		var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
		var notes = form.notes.value;
		var tags = "attachment excludeMissing "+form.tags.value;
		var useData=form.useData.checked;
		var useLocal=form.useLocal.checked;
		var useURL=form.useURL.checked;
		var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
		// validate checkboxes and get filename
		if (useData) {
			if (src.length) { if (!theLocation) var theLocation=src; }
			else { alert(this.sourceErr); src.focus(); return false; }
		}
		if (useLocal) {
			if (local.length) { if (!theLocation) var theLocation = local; }
			else { alert(this.localErr); form.local.focus(); return false; }
		}
		if (useURL) {
			if (url.length) { if (!theLocation) var theLocation = url; }
			else { alert(this.URLErr); form.URL.focus(); return false; }
		}
		if (!(useData||useLocal||useURL))
			{ form.useData.focus(); alert(this.storageErr); return false; }
		if (!theLocation)
			{ src.focus(); alert(this.sourceErr); return false; }
		if (!title || !title.trim().length || title==this.titlePrompt)
			{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
		// if not already selected, determine MIME type based on filename extension (if any)
		if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
			var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
			var theList=form.MIMEType;
			for (var i=0; i<theList.options.length; i++)
				if (theList.options[i].value.indexOf(theExt)!=-1)
					{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
		}
		// attach the file
		return this.createAttachmentTiddler(src, when, notes, tags, title,
			useData, useLocal, useURL, local, url, mimetype);
	},
	getMIMEType:
	function(src,def) {
		var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
		var list=store.getTiddlerText(this.typeList);
		if (!list || !list.trim().length) return def;
		// get MIME list content from tiddler
		var parts=list.split("\n----\n");
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var mime=lines.shift(); // 1st line=MIME type
			var match=lines.shift(); // 2nd line=matching extensions
			if (match.indexOf(ext)!=-1) return mime;
		}
		return def;
	},
	createAttachmentTiddler:
	function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
		if (useData) { // encode the data
			if (!mimetype.length) {
				alert(this.MIMEErr);
				form.MIMEType.selectedIndex=1; form.MIMEType.focus();
				return false;
			}
			var d = this.readFile(src); if (!d) { return false; }
			displayMessage('encoding '+src);
			var encoded = this.encodeBase64(d);
			displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
		}
		var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
		var theText=this.tiddlerFormat.format([
			usage, notes.length?notes:'//none//', mimetype,
			useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
			useData?('data:'+mimetype+';base64,'+encoded):'' ]);
		store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
		var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
		if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
		displayMessage('attached "'+title+'"');
		return true;
	},
//}}}
// // base64 conversion
//{{{
	encodeBase64:
	function (d) {
		if (!d) return null;
		// encode as base64
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var out="";
		var chr1,chr2,chr3="";
		var enc1,enc2,enc3,enc4="";
		for (var count=0,i=0; i<d.length; ) {
			chr1=d.charCodeAt(i++);
			chr2=d.charCodeAt(i++);
			chr3=d.charCodeAt(i++);
			enc1=chr1 >> 2;
			enc2=((chr1 & 3) << 4) | (chr2 >> 4);
			enc3=((chr2 & 15) << 2) | (chr3 >> 6);
			enc4=chr3 & 63;
			if (isNaN(chr2)) enc3=enc4=64;
			else if (isNaN(chr3)) enc4=64;
			out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
			chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
		}
		return out;
	},
	decodeBase64: function(input) {
		var out="";
		var chr1,chr2,chr3;
		var enc1,enc2,enc3,enc4;
		var i = 0;
		// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
		input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		do {
			enc1=keyStr.indexOf(input.charAt(i++));
			enc2=keyStr.indexOf(input.charAt(i++));
			enc3=keyStr.indexOf(input.charAt(i++));
			enc4=keyStr.indexOf(input.charAt(i++));
			chr1=(enc1 << 2) | (enc2 >> 4);
			chr2=((enc2 & 15) << 4) | (enc3 >> 2);
			chr3=((enc3 & 3) << 6) | enc4;
			out=out+String.fromCharCode(chr1);
			if (enc3!=64) out=out+String.fromCharCode(chr2);
			if (enc4!=64) out=out+String.fromCharCode(chr3);
		} while (i<input.length);
		return out;
	},
//}}}
// // I/O functions
//{{{
	readFile: // read local BINARY file data
	function(filePath) {
		if(!window.Components) { return null; }
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { alert("access denied: "+filePath); return null; }
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
		if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
		var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
		inputStream.init(file, 0x01, 00004, null);
		var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
		bInputStream.setInputStream(inputStream);
		return(bInputStream.readBytes(inputStream.available()));
	},
//}}}
//{{{
	writeFile:
	function(filepath,data) {
		// TBD: decode base64 and write BINARY data to specified local path/filename
		return(false);
	},
//}}}
//{{{
	askForFilename: // for FF3 fixup
	function(target) {
		var msg=config.messages.selectFile;
		if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
		// get local path for current document
		var path=getLocalPath(document.location.href);
		var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
		if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
		var file=""
		var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
		if (target && result.length) // set target field and trigger handling
			{ target.value=result; target.onchange(); }
		return result; 
	}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
	window.mozAskForFilename=function(msg,path,file,mustExist) {
		if(!window.Components) return false;
		try {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			thispath.initWithPath(path);
			picker.displayDirectory=thispath;
			picker.defaultExtension='';
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel)
				var result=picker.file.persistentDescriptor;
		}
		catch(ex) { displayMessage(ex.toString()); }
		return result;
	}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.  Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
	if(window.Components) { // MOZ
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(f); }
		catch(e) { return false; } // invalid directory
		return file.exists();
	}
	else if (config.browser.isIE) { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
	else return true; // other browsers: assume file exists
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var text=store.getTiddlerText(title,'');
	var embedded=store.getTiddlerText(title+'##data','').trim();
	var locallink=store.getTiddlerText(title+'##file','').trim();
	var remotelink=store.getTiddlerText(title+'##url','').trim();

	// backward-compatibility for older attachments (pre 4.0.0)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// if there is a data: URI defined (not supported by IE)
	if (embedded.length && !config.browser.isIE) return embedded;

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) return remotelink;

	// attachment URL doesn't resolve, just return input as is
	return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;

	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		config.formatters[i].handler=function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3]) {
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link)) {
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
					}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
				} else {
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
				}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
/***
|Name|AttachFilePluginInfo|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Documentation for AttachFilePlugin|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Syntax
<<<
''To display the attach file control panel, simply view the [[AttachFile]] shadow tiddler that is automatically created by the plugin, and contains an instance of the inline control panel.''.  Or, you can write:
{{{
<<attach inline>>
}}}
in any tiddler to display the control panel embedded within that tiddler.  Note: you can actually use any unique identifier in place of the "inline" keyword.  Each unique id creates a separate instance of the controls.  If the same ID is used in more than one tiddler, then the control panel is automatically moved to the most recently rendered location.  Or, you can write:
{{{
<<attach>>
}}}
(with no ID parameter) in SidebarOptions.  This adds a command link that opens the controls as a floating panel, positioned directly to the left of the sidebar.
<<<
!!!!!Usage
<<<
Binary file content can be stored in three different locations:
#embedded in the attachment tiddler (encoded as base64)
#on your filesystem (a 'local link' path/filename)
#on a web server (a 'remote link' URL)
The plugin creates an "attachment tiddler" for each file you attach.  Regardless of where you store the binary content, your document can refer to the attachment tiddler rather than using a direct file or URL reference in your embedded image or external links, so that changing document locations will not require updating numerous tiddlers or copying files from one system to another.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
When you attach a file, a tiddler (tagged with<<tag attachment>>) is generated (using the source filename as the tiddler's title).  The tiddler contains //''base64 text-encoded binary data''//, surrounded by {{{/%...%/}}} comment markers (so they are not visible when viewing the tiddler).  The tiddler also includes summary details about the file: when it was attached, by whom, etc. and, if the attachment is an image file (jpg, gif, or png), the image is automatically displayed below the summary information.
>Note: although you can edit an attachment tiddler, ''don't change any of the encoded content below the attachment header'', as it has been prepared for use in the rest of your document, and even changing a single character can make the attachment unusable.  //If needed, you ''can'' edit the header information or even the MIME type declaration in the attachment data, but be very careful not to change any of the base64-encoded binary data.//
Unfortunately, embedding just a few moderately-sized binary files using base64 text-encoding can dramatically increase the size of your document.   To avoid this problem, you can create attachment tiddlers that define external local filesystem (file://) and/or remote web server (http://) 'reference' links, without embedding the binary data directly in the tiddler (i.e., uncheck "embed data" in the 'control panel').

These links provide an alternative source for the binary data: if embedded data is not found (or you are running on Internet Explorer, which does not currently support using embedded data), then the plugin tries the local filesystem reference.  If a local file is not found, then the remote reference (if any) is used.  This "fallback" approach also lets you 'virtualize' the external links in your document, so that you can access very large binary content such as PDFs, MP3's, and even *video* files, by using just a 'remote reference link' without embedding any data or downloading huge files to your hard disk.

Of course, when you //do// download an attached file, the local copy will be used instead of accessing a remote server each time, thereby saving bandwidth and allowing you to 'go mobile' without having to edit any tiddlers to alter the link locations...
<<<
!!!!!Syntax / Examples
<<<
To embed attached files as images or link to them from other tiddlers, use the standard ~TiddlyWiki image syntax ({{{[img[tooltip|filename]]}}}), linked image syntax ({{{[img[tooltip|filename][tiddlername]]}}}) , or "external link" syntax ({{{[[text|URL]]}}}), replacing the filename or URL that is normally entered with the title of an attachment tiddler.

embedded image data:
>{{{[img[Meow|AttachFileSample]]}}}
>[img[Meow|AttachFileSample]]
embedded image data with link to larger remote image:
>{{{[img[click for larger view|AttachFileSample][AttachFileSample2]]}}}
>[img[click for larger view|AttachFileSample][AttachFileSample2]]
'external' link to embedded image data:
>{{{[[click to view attachment|AttachFileSample]]}}}
>[[click to view attachment|AttachFileSample]]
'external' link to remote image:
>{{{[[click to view attachment|AttachFileSample2]]}}}
>[[click to view attachment|AttachFileSample2]]
regular ~TiddlyWiki links to attachment tiddlers:
>{{{[[AttachFileSample]]}}} [[AttachFileSample]]
>{{{[[AttachFileSample2]]}}} [[AttachFileSample2]]
<<<
!!!!!Defining MIME types
<<<
When you select a source file, a ''[[MIME|http://en.wikipedia.org/wiki/MIME]]'' file type is automatically suggested, based on filename extension.  The AttachFileMIMETypes tiddler defines the list of MIME types that will be recognized by the plugin.  Each MIME type definition consists of exactly two lines of text: the official MIME type designator (e.g., "text/plain", "image/gif", etc.), and a space-separated list of file extensions associated with that type.  List entries are separated by "----" (horizontal rules).
<<<
!!!!!Known Limitations
<<<
Internet Explorer does not support the data: URI scheme, and cannot use the //embedded// data to render images or links.  However, you can still use the local/remote link definitions to create file attachments that are stored externally.  In addition, while it is relatively easy to read local //text// files, reading binary files is not directly supported by IE's FileSystemObject (FSO) methods, and other file I/O techniques are subject to security barriers or require additional MS proprietary technologies (like ASP or VB) that make implementation more difficult.  As a result, you cannot //create// new attachment tiddlers using IE.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your document:
* [[AttachFilePlugin]] (tagged with <<tag systemConfig>>)
* [[AttachFilePluginFormatters]] ("runtime distribution library") (tagged with <<tag systemConfig>>)
* [[AttachFileSample]] and [[AttachFileSample2]] //(tagged with <<tag attachment>>)//
* [[AttachFileMIMETypes]] //(defines binary file types)//
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
<<<
!!!!!Revisions
<<<
2009.06.04 4.0.0 changed attachment storage format to use //sections// instead of embedded substring markers.
2008.07.21 3.9.0 Fixup for FireFox 3: use HTML with separate text+button control instead of type='file' control
2008.05.12 3.8.1 automatically add 'attach' task to backstage (moved from BackstageTweaks)
2008.04.09 3.8.0 in onChangeSource(), if source matches current document folder, use relative reference for local link.  Also, disable 'embed' when using IE (which //still// doesn't support data: URI)
2008.04.07 3.7.3 fixed typo in HTML for 'local file link' so that clicking in input field doesn't erase current path/file (if any)
2008.04.07 3.7.2 auto-create AttachFile shadow tiddler for inline interface
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.12.03 3.7.1 in createAttachmentTiddler(), added optional "noshow" flag to suppress display of newly created tiddlers.
2007.10.29 3.7.0 code reduction: removed support for built-in upload to server... on-line hosting of binary attachments is left to the document author, who can upload/host files using 3rd-party web-based services (e.g. www.flickr.com, ) or stand-alone applications (e.g., FTP).
2007.10.28 3.6.0 code reduction: removed duplicate definition of image and prettyLink formatters.  Rendering of attachment tiddlers now //requires// installation of AttachFilePluginFormatters
2007.03.01 3.5.3 use apply() to invoke hijacked function
2007.02.25 3.5.2 in hijack of "prettyLink", fix version check for TW2.2 compatibility (prevent incorrect use of fallback handler)
2007.01.09 3.5.1 onClickAttach() refactored to create separate createAttachmentTiddler() API for use with FileDropPluginHandlers
2006.11.30 3.5.0 in getAttachment(), for local references, add check for file existence and fallback to remote URL if local file not found.  Added fileExists() to encapsulate FF vs. IE local file test function (IE FSO object code is TBD).
2006.11.29 3.4.8 in hijack for PrettyLink, 'simple bracketed link' opens tiddler instead of external link to attachment
2006.11.29 3.4.7 in readFile(), added try..catch around initWithPath() to handle invalid/non-existent paths better.
2006.11.09 3.4.6 REAL FIX for TWv2.1.3: incorporate new TW2.1.3 core "prettyLink" formatter regexp handling logic and check for version < 2.1.3 with fallback to old plugin code.  Also, cleanup table layout in HTML (added "border:0" directly to table elements to override stylesheet)
2006.11.08 3.4.5 TEMPORARY FIX for TWv2.1.3: disable hijack of wikiLink formatter due to changes in core wikiLink regexp definition.  //Links to attachments are broken, but you can still use {{{[img[TiddlerName]]}}} to render attachments as images, as well as {{{background:url('[[TiddlerName]]')}}} in CSS declarations for background images.//
2006.09.10 3.4.4 update formatters for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)
2006.07.24 3.4.3 in prettyLink formatter, added check for isShadowTiddler() to fix problem where shadow links became external links.
2006.07.13 3.4.2 in getAttachment(), fixed stripping of newlines so data: used in CSS will work
2006.05.21 3.4.1 in getAttachment(), fixed substring() to extract data: URI (was losing last character, which broken rendering of SOME images)
2006.05.20 3.4.0 hijack core getRecursiveTiddlerText() to support rendering attachments in stylesheets (e.g. {{{url([[AttachFileSample]])}}})
2006.05.20 3.3.6 add "description" feature to easily include notes in attachment tiddler (you can always edit to add them later... but...)
2006.05.19 3.3.5 add "attach as" feature to change default name for attachment tiddlers.  Also, new optional param to specify tiddler name (disables editing)
2006.05.16 3.3.0 completed XMLHttpRequest handling for GET or POST to configurable server scripts
2006.05.13 3.2.0 added interface for upload feature.  Major rewrite of code for clean object definitions.  Major improvements in UI interaction and validation.
2006.05.09 3.1.1 add wikifer support for using attachments in links from "linked image" syntax: {{{[img[tip|attachment1][attachment2]]}}}
2006.05.09 3.1.0 lots of code changes: new options for attachments that use embedded data and/or links to external files (local or remote)
2006.05.03 3.0.2 added {{{/%...%/}}} comments around attachment data to hide it when viewing attachment tiddler.
2006.02.05 3.0.1 wrapped wikifier hijacks in initAttachmentFormatters() function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.27 3.0.0 Update for TW2.0.  Automatically add 'excludeMissing' tag to attachments
2005.12.16 2.2.0 Dynamically create/remove attachPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.
2005.11.20 2.1.0 added wikifier handler extensions for "image" and "prettyLink" to render tiddler attachments
2005.11.09 2.0.0 begin port from old ELS Design adaptation based on ~TW1.2.33
2005.07.20 1.0.0 Initial release (as adaptation)
<<<
!usage
{{{[img[AttachFileSample]]}}}
[img[AttachFileSample]]
!notes
example of encoded data attachment
!type
image/gif
!file
./images/meow.gif
!url
http://www.TiddlyTools.com/images/meow.gif
!data
data:image/gif;base64,R0lGODlhOABQAPcAAAAACAAAEAAICAgICAgLDBAQCAQQGRAIEBgICBAQEBAQGBAYFBoOEhwUFCEYEBgYGA4cIBkgGyEcHCEhISkYGCkcHCEpHCklIRAgMRkmNSElKSEpNikeKykpKSExQiE5QjEhJTEpITEpKSkpMSkxISk1KTExITExKSktNTEpMTEpOTExMSk5MSkxOSkxQik5PTkrKTkxMTE8KTFCMTExOTExQjE5PTFCPTk3MzlCMTkxQjk5QkI0MzlGPUg9M01JNi88TTlEUkI8REJCSkZDRFBDQkY/UFA/TjNMUkNOS1JKSkpWRj1KWEpKWj9OXEVZZlhMRlVLVVpSUlReUFdSYFVhX1JSa1VfbmBbU11ia2dcV3FjXVpldWVkb2tnb3tnbGZ1ZHV6aWVwe3d5c2N4iXN3gntzgHeBiYd2dYWHeoh/jIKLkJWEfZmUh5CNlJ+VkICPn46XpZiSo5WfoJycnKaemaGcqKWlpZWnraWtqa2qoq2lrZavvKW4xK2lta2ws/8A/7WcjLWllLWlpbWlrb2tnMatnLWtpbWtrb2trbWttb2ttbWtvbW1pca1pbW1ra21va21xrW1tbW1vbW1xrW9tb21rb21tb21vb21xr29rb29tca9sca1vc69rda9ra29wa3GxrW9vbW9xq29zrHGyrPB0rXG1r29vb29xr29zr3Gvb3Gxr3Gzr3G1sa9vcbGtc7GtdbGtcbGvc7GvdbGvd7Gvca9xsa9zsbGxsbGzsbG1s7DyNbGxtbGzs7G1rjQ2MbO0sbO3sbW1s7Owc7OzsbW3sbe3s7O1s7W0tbQx+HUzNDQ29bW1tvb1ufa1sPW6dDW4dbW3trY4sni7dbk797e3tbx9N7n3ufe3t7e597n597i7+fe597s9N73++fn3ufn5+fn7+fv5+fv7+/e5+/r4vfr4ufn9+fv9+fv/+/n7+/v8/Pz7/fv9+/v/+f3++f//+/39+/3/+//9+////f37/f39/f3//f/9/f////37//39//3////9////yH5BAEAAIAALAAAAAA4AFAAQAj+AAEJHEiwoMGDCBMqXIiwiA8tXbxIgXHhgY+FICSIiCFFihIeXRgm9OKlDJMqYs506UIDRIUKD7w8kLCiAw0q0ao8WCFhwgQqDx7E+EJHm0gpUaI0ibKDBo0dXeakazEkxYUOGjRMSQOmQw874eR9IHNPXrFba5Y8CLNDyYULGlZQRVjtzJCmTnew2AGp2j19gAGTC6ctnLvDZfWR07AjCJAd4fTduxctFapbiDKTQ7gjSZcsT6PQqLmCxhA78v4GnuxOHuGzeei8kVLkh5I1b9y80XPp0q1s+lK7E3eQjSIvbqJAEiPGjR0/c9REqyavtTx9rVtn09asmJsvbMb+uLlcrFn3YsqsiRM33M3CDlkUsWMnT978cM206Y/WjH+187cEGOArqKCiCCJ00DEHHXXkIdJBEgQVlEsS1iThAwlg+EAXcNgBySiQQILKJWOM8YYy2Tyo4oqA5HELMtxxVwyLNA5UxAUxxPBWjTjGIIIWNSKUhhddUFFFU0O89BZjQ9DQwYUPVKABCEJg8cYZK5aRxRNM0JDCCimkQMUONXUAwlVOKbGDGHhAMEczgemjTV2jXeCTBqZFoZASVDDRxGildTbHX3zUgJeTZ0Cimj5kBLHDEEM0IU59cd6TDmHm7WFQNHDAwcVoT5m2Qg2tAJPYau6wY01/2ohTjDb+Z91hhiK3FMiILnkcWIw1iLlz0BuPquHEFaDWtEMVclyXWpz1pUNONdKkkkoWyEGSqyKXvYJeNtmEo6pRCEkyaX3ykMPOYOWSw41+2rDTGjndNoMMMsXoUkw05SFzXnlnFaiIikpOIIEUbrzaSit+RPFWByK4ocoordzC74iKKHLGFmm4kQciQSIkgQQIIEAAAQ+Q/IDIIieQAAFROPcHI9heUodh2ujT8c0CzcEdt8Ph7DONGgwxxs+A7BADEUT4SOMEMWyBBRYiEA2ID16oYYYZDsXwQGNOMHGFFUz4ucMFND2qRBdmeDEE0Uq0IccWSuDQwdwXXrBCkxVFKOH+VVB8UceMNHohxhVNipDCEBqkoIGUTu70AA4P3PUEYG6cEQXiM0lwwRBryKNiF1dcwYQQDK+wQxZijGYmnk+tsEIVGrgTZ6VniMHUCHZ3EAWQCWlRxe+X47BCy8UEc08GcmfVwVUxLDHFECPoE01TTWhjTRQimBBDEW64QUYTZczBhBcJCTFEFKODSkMUZcAJWDWMjDJHGW4089df3DiRBRDgwzE7YPLgji5uIQmEzIMaeHgU+nbwqCaEaFEAXI82rqOav8gDLgOzjj5c9YpbXEIR2bjHLQ5yBjdw4QxjGs0OOvA6MQSjGrNLjX2akQ1U0KEMXlACDYh0uS3M4Q3+CeoAHbKBmHuE4yBJ6EEXUveomiBuCKhwA3AqOJmypIMb+ILEH1ChhTXoIUEbqwMiXsELZThjOOEgB8cO4gYqKOEMDNxhFKjQBFmFw4IAZM25uJOKMWyhi35gxFk6WAxnqOcw5wKcQdAgJz84shrVcIMfRpEOSMqjGtGoTnVSJY78dIcRf2ADFPwgsbM0Q2LmaRVmGNKGYmzSPvYxFzsqOZ12dSsbACrlq85Sq1sQ6EBrfBAReHI1baTjUuGIhjZ0UZkC3cI89CqPeQrkBzq4IQ1nWMOCCsijoPhgBUKoQstokJUJQOkBSlADJVqRimKgghEwe4MW0KCxZvisIif+QwCUMnShkD2ABmaQAyQoMYoCXYINdCgGcKRmEAkRQAErI4DKgiIHP/wBEoy4hDvN0wxfMXRFo7CXNYh4j492TBG7VJVJV1oQKDBUCzi6WZQuUAai+UAEPvDRBWikEaTxIGo/EwIP/igFH0hARZoTwRC+8AUtFEFqPlCCFryghZtSRE8H6cIOHnABH0iBWl4wwxGgupIiKUEIPqjAqKhihSY4igYjMGcHUrCDKIS1hFKTAlVFAwIq1W19NMCnhCRQgRBAAQ28SIPP1nCGNBTDaXfZQQoq8LGgYAVSILjQBC6wAyEQAQ11SFGNuvC7P+2ACXO4i+kipNYHdIBMppn+hxteRyYqCEwCOJDCHDyqIixoQQxuleyXojA3rFxgBK57ixcmcNozAOYeeAjCGWZiN7hM4AmjUFEVmpCFJrjuSxEhE1ZAYLq7KQFS0RjU/+5xhjI0YQcauEBesKoQM2QBUp113dzm4CjFZaVM8RWCGwA4u3sAowmq1cAE8GQF+iJECXNkwg6E11kmuCEdGSATCLISlyqAwXkQSI0TuACHdBTjDh0Agwmw0EAyiWElCilCEvDrlKfsoAzC0Ecc9uI6DXDVxxPwwgjuAQc8NSEa3UiDMnghu3v8oXZ3QIYX/KCQIdCxKYGiQhei8dw5tHEIXqjCHGAImHR8QAhAuEL+FsrwP8E0QxdwVogC71JjIXShFdcJDH6sUQxFQJAccHCvE87Qh0WVJRrhCJCBFEKNK0yYgZ3NwgrcAIl0zK414qAPAPPsXQvBSR7TrNiBJKGPNyAkGsbgA1NcxwLXuQEPwrA0s9wRDms8N1XuOOYQJLCF/ESDPwOsVR7glCoSliEOZWCgapNwJDm0AoKSqc49FEGFMtyhVqhIWArWoAgF5WEPLmqDfGTXM4M8oQxXSF2kxpSFHbTADX/wS6XIBatmSKILQzAcpMIkhTSo4Q1pGGM2NqmYg1xhd2sYTQqcdAEqJMENmSywJtnBnVsoopomagMQGVSHQVziFc1AETn+qmNPg1CBCkFwQxC+RKa71bUMsnvuZDRZrmog45138HKu6FCxzGhrVdkQRzhEexAiZRMFe2nSClB3B21AsIrycNav34lDN9wiDwW6TBmdEQ720NoaCTmDGqgghnbvQA7ppt8twnKq+rwLktHIgxbaAIU1+AEVxSgGL3hRSF5tkFt3QEgsdOyGO1zUDWVgxK/1lQ53jbwsnNzOKf2giDdAgQ54zzu/aLgePi9kMqZIRzBGMYpfV6PxlaxGu7BjH3FkwxqrwvYYftDO7jxTl2dBRBsYcongkKtcs4w63AszmGaIA1ZnyTtHzaN5iQVIEXpwj0iw4Abr1OdcFKcPu/T+I/lc8rJftapYbOrAItNhQRHyyLS5CMOffb0qGvqqV949WDE63MEN2qRDbGgUg+WtQARbdnr/cUq6wAg5NwfK1H7TdAl+kAd54AYYswYJ8gpBQllcNTdj4AWMEAxyAAE+JiFKIB6jcAvBUC8jAjNugAUmQgfBVCNBAVsLVwVZwAQPYE5Q8hZ/MAqM0AonqAiDoAXioQdEFyTnVIRBoTIJoAAg0AVyYAeRACIjgghh8AaoMFI+gyEhgwAJoE9QQgBaqAAvWAaBdBmXcQd1ACdl8VE6kk8ZsoVJCFEJMGl2MAdzADOv8AYdpQ+8wFIDUTIj44VBAQgeQlC1ogvNgAouykAHFMiHCkEJqtAK0rQqjKgipWcNvyE7k6gip8QOXTeEmcgQbAAI3VByNBIQAAA7
!usage
{{{[img[AttachFileSample2]]}}}
[img[AttachFileSample2]]
!notes
example of external attachment (no embedded data)
!type
image/jpg
!file
./images/meow2.jpg
!url
http://www.TiddlyTools.com/images/meow2.jpg
!data
# http://en.wikipedia.org/wiki/Bluetooth
# [[iqua-603-sun-bluetooth solar powered headset | http://reviews.cnet.com/headsets/iqua-603-sun-bluetooth/4505-13831_7-32829498.html?tag=rtcol]]
# http://www.bluetooth.com/English/Pages/default.aspx
!usage
{{{[[ChooseScript.sh|ChooseScript.sh]]}}}
[[ChooseScript.sh|ChooseScript.sh]]
!notes
<html>
<pre>
#!/bin/bash
# ChooseScript.sh

varRunScript=`zenity --title "Run A Script" --text "Please choose a script to run" --list --radiolist --column "Run this Script" --column 'Script Name' True "startweb.sh" False "apt-get.diffinstall.sh" False 'InstallWebmin.sh' False "Install Astrisk Script" False "RemasterCDOnlyCDFS.sh" False "RemasterCDOnlyDisk.sh"` 
# exec $varRunScript
</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/tmp/ChooseScript.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBDaG9vc2VTY3JpcHQuc2gKCnZhclJ1blNjcmlwdD1gemVuaXR5IC0tdGl0bGUgIlJ1biBBIFNjcmlwdCIgLS10ZXh0ICJQbGVhc2UgY2hvb3NlIGEgc2NyaXB0IHRvIHJ1biIgLS1saXN0IC0tcmFkaW9saXN0IC0tY29sdW1uICJSdW4gdGhpcyBTY3JpcHQiIC0tY29sdW1uICdTY3JpcHQgTmFtZScgVHJ1ZSAic3RhcnR3ZWIuc2giIEZhbHNlICJhcHQtZ2V0LmRpZmZpbnN0YWxsLnNoIiBGYWxzZSAnSW5zdGFsbFdlYm1pbi5zaCcgRmFsc2UgIkluc3RhbGwgQXN0cmlzayBTY3JpcHQiIEZhbHNlICJSZW1hc3RlckNET25seUNERlMuc2giIEZhbHNlICJSZW1hc3RlckNET25seURpc2suc2giYCAKIyBleGVjICR2YXJSdW5TY3JpcHQK
# http://www.linux.com/archive/feature/114156
# [[Zenity Links]]
[[Santa Cruz Mobile]]
[[LaunchPad]]
[[Step 1]]
[[Step 2]]
[[Step 3]]
[[Step 4]]
[[Step 5]]
[[Live Linux CDs: building and customizing bootables]]
[[Flickr.com Links]]
* |http://www.flickr.com/
* [[Blennder Video Tutorials | http://gryllus.net/Blender/3D.html]] - [[downloads | http://www.moddb.com/groups/blenderheads/downloads]] - [[Blender Tutorial Series | http://www.youtube.com/results?search_query=Blender+Tutorial+Series&aq=f]] - [[Blender 3D: Noob to Pro | http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro]]
* [[Blender Simple Boat Hull modeling tutorial | http://www.youtube.com/watch?v=aWoB5x6VPkc]]
Floor Plan for Blender Project - Boat1 - 70 ft long 15 ft accross
[img[http://farm6.static.flickr.com/5177/5484757455_51860cfbea_b.jpg]] 
Two boats linked together - Use accordian to water.
[img[http://farm6.static.flickr.com/5131/5483979213_e0c2718bf8_b.jpg]] 
[img[http://towerwebsites.com/photos/jerrytretter/DRESSEDWITHSCRATCHEDGE.jpg]] 


<html>
<div id="receiver">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="sociochat" width="342" height="325"
			codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
			<param name="movie" value="http://fonomo.com/sociochat/sociochat.swf" />
			<param name="quality" value="high" />
			<param name="bgcolor" value="#869ca7" />
			<param name="allowScriptAccess" value="sameDomain" />
			<param name="allowFullScreen" value="true" />
            <param name="flashVars" value="vkey='8BFCFFA2'" />
			<embed src="http://fonomo.com/sociochat/sociochat.swf" quality="high" bgcolor="#869ca7"
				width="342" height="325" name="sociochat" align="middle"
				play="true"
				loop="false"
				quality="high"
				allowScriptAccess="sameDomain"
				allowFullScreen="true"
                flashVars="vkey='8BFCFFA2'"
				type="application/x-shockwave-flash"
				pluginspage="http://www.adobe.com/go/getflashplayer">
			</embed>
	</object>
</div>
</html>
# http://www.freepbx.org/freepbx
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for InlineJavascriptPlugin|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
This plugin adds wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be recognized as embedded javascript code.  When a tiddler is rendered, the plugin automatically invokes any embedded scripts, which can be used to construct and return dynamically-generated output that is inserted into the tiddler content.
{{{
<script type="..." src="..." label="..." title="..." key="..." show>
	/* javascript code goes here... */
</script>
}}}
All parameters are //optional//.    When the ''show'' keyword is used, the plugin will also include the script source code in the output that it displays in the tiddler.  This is helpful when creating examples for documentation purposes (such as used in this tiddler!)

__''Deferred execution from an 'onClick' link''__
<script label="click here" title="mouseover tooltip text" key="X" show>
	/* javascript code goes here... */
	alert('you clicked on the link!');
</script>
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only).

__''Loading scripts from external source files''__
<script src="URL" show>
	/* optional javascript code goes here... */
</script>You can also load javascript directly from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}).  This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins.  The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

In addition to loading the javascript from the external file, you can also use this feature to invoke javascript code contained within the {{{<script>...</script>}}} markers.  This code is invoked //after// the external script file has been processed, and can make immediate use of the functions and/or global variables defined by the external script file.
>Note: To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that is rendered as soon as your TiddlyWiki document is opened, such as MainMenu.  For example: put your {{{<script src="..."></script>}}} syntax into a separate 'library' tiddler (e.g., LoadScripts), and then add {{{<<tiddler LoadScripts>>}}} to MainMenu so that the library is loaded before any other tiddlers that rely upon the functions it defines. 
>
>Normally, loading external javascript in this way does not produce any direct output, and should not have any impact on the appearance of your MainMenu.  However, if your LoadScripts tiddler contains notes or other visible content, you can suppress this output by using 'inline CSS' in the MainMenu, like this: {{{@@display:none;<<tiddler LoadScripts>>@@}}}
<<<
!!!!!Creating dynamic tiddler content and accessing the ~TiddlyWiki DOM
<<<
An important difference between TiddlyWiki inline scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document: in a typical web document, you use the {{{document.write()}}} (or {{{document.writeln()}}}) function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.

However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and instead will //completely replace the entire ~TiddlyWiki document in your browser window (which is clearly not a good thing!)//.  In order to allow scripts to use {{{document.write()}}}, the plugin automatically converts and buffers all HTML output so it can be safely inserted into your tiddler content, immediately following the script.

''Note that {{{document.write()}}} can only be used to output "pure HTML" syntax.  To produce //wiki-formatted// output, your script should instead return a text value containing the desired wiki-syntax content'', which will then be automatically rendered immediately following the script.  If returning a text value is not sufficient for your needs, the plugin also provides an automatically-defined variable, 'place', that gives the script code ''direct access to the //containing DOM element//'' into which the tiddler output is being rendered.  You can use this variable to ''perform direct DOM manipulations'' that can, for example:
* generate wiki-formatted output using {{{wikify("...content...",place)}}}
* vary the script's actions based upon the DOM element in which it is embedded
* access 'tiddler-relative' DOM information using {{{story.findContainingTiddler(place)}}}
Note:
''When using an 'onclick' script, the 'place' element actually refers to the onclick //link text// itself, instead of the containing DOM element.''  This permits you to directly reference or modify the link text to reflect any 'stateful' conditions that might set by the script.  To refer to the containing DOM element from within an 'onclick' script, you can use "place.parentNode" instead.
<<<
!!!!!Instant "bookmarklets"
<<<
You can also use an 'onclick' link to define a "bookmarklet": a small piece of javascript that can be ''invoked directly from the browser without having to be defined within the current document.''  This allows you to create 'stand-alone' commands that can be applied to virtually ANY TiddlyWiki document... even remotely-hosted documents that have been written by others!!  To create a bookmarklet, simply define an 'onclick' script and then grab the resulting link text and drag-and-drop it onto your browser's toolbar (or right-click and use the 'bookmark this link' command to add it to the browser's menu).

Notes:
*When writing scripts intended for use as bookmarklets, due to the ~URI-encoding required by the browser, ''you cannot not use ANY double-quotes (") within the bookmarklet script code.''
*All comments embedded in the bookmarklet script must ''use the fully-delimited {{{/* ... */}}} comment syntax,'' rather than the shorter {{{//}}} comment syntax.
*Most importantly, because bookmarklets are invoked directly from the browser interface and are not embedded within the TiddlyWiki document, there is NO containing 'place' DOM element surrounding the script.  As a result, ''you cannot use a bookmarklet to generate dynamic output in your document,''  and using {{{document.write()}}} or returning wiki-syntax text or making reference to the 'place' DOM element will halt the script and report a "Reference Error" when that bookmarklet is invoked.  
Please see [[InstantBookmarklets]] for many examples of 'onclick' scripts that can also be used as bookmarklets.
<<<
!!!!!Special reserved function name
<<<
The plugin 'wraps' all inline javascript code inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler.  To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.
<<<
!!!!!$(...) 'shorthand' function
<<<
As described by Dustin Diaz [[here|http://www.dustindiaz.com/top-ten-javascript/]], the plugin defines a 'shorthand' function that allows you to write:
{{{
$(id)
}}}
in place of the normal standard javascript syntax:
{{{
document.getElementById(id)
}}}
This function is provided merely as a convenience for javascript coders that may be familiar with this abbreviation, in order to allow them to save a few bytes when writing their own inline script code.
<<<
!!!!!Examples
<<<
simple dynamic output:
><script show>
	document.write("The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
	if (!window.story) window.story=window;
	var title=story.findContainingTiddler(place).getAttribute("tiddler");
	var size=store.getTiddlerText(title).length;
	return title+" is using "+size+" bytes";
</script>
dynamic output from an 'onclick' script, using {{{document.write()}}} and/or {{{return "..."}}}
><script label="click here" show>
	document.write("<br>The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
creating an 'onclick' button/link that accesses the link text AND the containing tiddler:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
	if (!window.story) window.story=window;
	var txt=place.firstChild.data;
	var tid=story.findContainingTiddler(place).getAttribute('tiddler');
	alert('Hello World!\nlinktext='+txt+'\ntiddler='+tid);
</script>
dynamically setting onclick link text based on stateful information:
>{{block{
{{{
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.previousSibling.innerHTML=on?"disable":"enable";
</script>
}}}
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.innerHTML=on?"enable":"disable";
</script>
}}}
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function inlineJavascriptDemo() { alert('Hello from demo.js!!') } }}}
>>{{{displayMessage('InlineJavascriptPlugin: demo.js has been loaded');}}}
>note: When using this example on your local system, you will need to download the external script file from the above URL and install it into the same directory as your document.
>
><script src="demo.js" show>
	return "inlineJavascriptDemo() function has been defined"
</script>
><script label="click to invoke inlineJavascriptDemo()" key="D" show>
	inlineJavascriptDemo();
</script>
<<<
!!!!!Revisions
<<<
2010.12.15 1.9.6 allow (but ignore) type="..." syntax
2009.04.11 1.9.5 pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 1.9.4 in $(), handle leading '#' on ID for compatibility with JQuery syntax
2008.06.11 1.9.3 added $(...) function as 'shorthand' for document.getElementById()
2008.03.03 1.9.2 corrected fallback declaration of wikifyPlainText() (fixes Safari "parse error")
2008.02.23 1.9.1 in onclick function, use string instead of array for 'bufferedHTML' (fixes IE errors)
2008.02.21 1.9.0 output from 'onclick' scripts (return value or document.write() calls) are now buffered and rendered into into a span following the script.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
2008.02.14 1.8.1 added backward-compatibility for use of wikifyPlainText() in TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 1.8.0 added support for key="X" syntax to specify custom access key definitions
2007.12.15 1.7.0 autogenerate URI encoded HREF on links for onclick scripts.  Drag links to browser toolbar to create bookmarklets.  IMPORTANT NOTE: place is NOT defined when scripts are used as bookmarklets.  In addition, double-quotes will cause syntax errors.  Thanks to PaulReiber for debugging and brainstorming.
2007.11.26 1.6.2 when converting "document.write()" function calls in inline code, allow whitespace between "write" and "(" so that "document.write ( foobar )" is properly converted.
2007.11.16 1.6.1 when rendering "onclick scripts", pass label text through wikifyPlainText() to parse any embedded wiki-syntax to enable use of HTML entities or even TW macros to generate dynamic label text.
2007.02.19 1.6.0 added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
2006.10.16 1.5.2 add newline before closing '}' in 'function out_' wrapper.  Fixes error caused when last line of script is a comment.
2006.06.01 1.5.1 when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
2006.04.19 1.5.0 added 'show' parameter to force display of javascript source code in tiddler output
2006.01.05 1.4.0 added support 'onclick' scripts.  When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked.  'place' value is set to match the clicked button/link element.
2005.12.13 1.3.1 when catching eval error in IE, e.description contains the error text, instead of e.toString().  Fixed error reporting so IE shows the correct response text.  Based on a suggestion by UdoBorkowski
2005.11.09 1.3.0 for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content.  Based on a suggestion by BradleyMeck
2005.11.08 1.2.0 handle loading of javascript from an external URL via src="..." syntax
2005.11.08 1.1.0 pass 'place' param into scripts to provide direct DOM access 
2005.11.08 1.0.0 initial release
<<<
!usage
{{{[[Install_Webmin.sh|Install_Webmin.sh]]}}}
[[Install_Webmin.sh|Install_Webmin.sh]]
!notes
<html>
<pre>
#!/bin/bash
# Install_Webmin.sh
cd /usr/src
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.530.tar.gz
tar -xvvzf webmin-1.530.tar.gz
webmin-1.530/setup.sh /opt/webmin
rm -R webmin-1.530
</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/tmp/Install_Webmin.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBJbnN0YWxsX1dlYm1pbi5zaApjZCAvdXNyL3NyYwp3Z2V0IGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvd2ViYWRtaW4vd2VibWluLTEuNTMwLnRhci5negp0YXIgLXh2dnpmIHdlYm1pbi0xLjUzMC50YXIuZ3oKd2VibWluLTEuNTMwL3NldHVwLnNoIC9vcHQvd2VibWluCnJtIC1SIHdlYm1pbi0xLjUzMAo=
* http://wiki.glassparrot.dreamhosters.com/wiki/Knoppix#Knopper.net
* from http://www.knoppix.net/forum/
<html>
<center>
<iframe name="knoppixforum"
src=" http://www.knoppix.net/forum/"
frameborder="0"
scrolling="auto" height="400" width="460">
</iframe>
</center>
</html>
/***
|''Name:''|LaunchApplicationPlugin|
|''Author:''|Lyall Pearce|
|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/LaunchApplication.html|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Version:''|1.4.0|
|''~CoreVersion:''|2.3.0|
|''Requires:''| |
|''Overrides:''| |
|''Description:''|Launch an application from within TiddlyWiki using a button|
!!!!!Usage
<<<
{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationButton "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationLink "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
* buttonLabel is anything you like
* tooltip is anything you like
* application is a path to the executable (which is Operating System dependant)
* arguments is any command line arguments the application requires.
* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path
* Forward slashes works fine for Windows

{{{<<LaunchApplication...>>}}} functions the same as {{{<<LaunchApplicationButton...>>}}}

eg.

{{{
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
}}}
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>

{{{
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
}}}
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
					     
{{{
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>
}}}
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>

{{{
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
}}}
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>


!!!!!Revision History
* 1.1.0 - leveraged some tweaks from from Bradly Meck's version (http://bradleymeck.tiddlyspot.com/#LaunchApplicationPlugin) and the example text.
* 1.2.0 - Make launching work in Linux too and use displayMessage() to give diagnostics/status info.
* 1.3.0 - execute programs relative to TiddlyWiki html file plus fix to args for firefox.
* 1.3.1 - parameters to the macro are properly parsed, allowing dynamic paramters using {{{ {{javascript}} }}} notation.
* 1.4.0 - updated core version and fixed empty tooltip and added launch link capability

<<<
***/
//{{{
version.extensions.LaunchApplication = {major: 1, minor: 4, revision: 0, date: new Date(2007,12,29)};
config.macros.LaunchApplication = {};
config.macros.LaunchApplicationButton = {};
config.macros.LaunchApplicationLink = {};

function LaunchApplication(appToLaunch,appParams) {
    if(! appToLaunch)
	return;
    var tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("\\")+1);
    if(!tiddlyBaseDir || tiddlyBaseDir == "") {
	tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("/")+1);
    }
    // if Returns with a leading slash, we don't want that.
    if(tiddlyBaseDir.substring(0,1) == "/") {
	tiddlyBaseDir = tiddlyBaseDir.substring(1);
    }
    if(appToLaunch.indexOf("file:///") == 0) // windows would have C:\ as the resulting file
    {
	tiddlyBaseDir = "";
	appToLaunch = appToLaunch.substring(8);
    }

    if (config.browser.isIE) {
	// want where the tiddly is actually located, excluding tiddly html file

	var theShell = new ActiveXObject("WScript.Shell");
	if(theShell) {
            // the app name may have a directory component, need that too
	    // as we want to start with current working dir as the location
	    // of the app.
	    var appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("\\"));
	    if(! appDir || appDir == "") {
		appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("/"));
	    }
	    appParams = appParams.length > 0 ? " \""+appParams.join("\" \"")+"\"" : "";
	    try {
		theShell.CurrentDirectory = decodeURI(tiddlyBaseDir + appDir);
		var commandString = ('"' +decodeURI(tiddlyBaseDir+appToLaunch) + '" ' + appParams);
		pluginInfo.log.push(commandString);
	        theShell.run(commandString);
	    } catch (e) {
		displayMessage("LaunchApplication cannot locate/execute file '"+tiddlyBaseDir+appToLaunch+"'");
		return;
	    }
	} else {
	    displayMessage("LaunchApplication failed to create ActiveX component WScript.Shell");
	}
    } else { // Not IE
	// want where the tiddly is actually located, excluding tiddly html file
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        var launchString;
	try { // try linux/unix format
            launchString = decodeURI(tiddlyBaseDir+appToLaunch);
	    file.initWithPath(launchString);
	} catch (e) {
	    try { // leading slash on tiddlyBaseDir
                launchString = decodeURI("/"+tiddlyBaseDir+appToLaunch);
		file.initWithPath(launchString);
	    } catch (e) {
		try { // try windows format
		    launchString = decodeURI(appToLaunch).replace(/\//g,"\\");
		    file.initWithPath(launchString);
		} catch (e) {
		    try { // try windows format
			launchString = decodeURI(tiddlyBaseDir+appToLaunch).replace(/\//g,"\\");
			file.initWithPath(launchString);
		    } catch (e) {
			displayMessage("LaunchApplication cannot locate file '"+launchString+"' : "+e);
			return;
		    } // try windows mode
		} // try windows mode
	    }; // try with leading slash in tiddlyBaseDir
	}; // try linux/unix mode
	try {
	    if (file.isFile() && file.isExecutable()) {
		displayMessage("LaunchApplication executing '"+launchString+"' "+appParams.join(" "));
		var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
		process.init(file);
		process.run(false, appParams, appParams.length);
	    }
	    else
	    {
		displayMessage("LaunchApplication launching '"+launchString+"' "+appParams.join(" "));
		file.launch(); // No args available with this option
	    }
	} catch (e) {
	    displayMessage("LaunchApplication cannot execute/launch file '"+launchString+"'");
	}
    }
};

config.macros.LaunchApplication.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        var theButton = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication);
        theButton.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theButton.setAttribute("appParameters", params.join(" "));
        return;
    }
}
config.macros.LaunchApplicationButton.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    config.macros.LaunchApplication.handler (place,macroName,params,wikifier,paramString,tiddler);
}

config.macros.LaunchApplicationLink.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
    // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
    if (params[0] && (params[1] || params[1] == "") && params[2]) {
        //var theLink = createExternalLink(place, getParam(params,"buttonText",params[0]));
        var theLink = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication,"link");
        theLink.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
        params.splice(0,3);
        theLink.setAttribute("appParameters", params.join(" "));
        return;
    }
}

function onClickLaunchApplication(e) {
	var theAppToLaunch = this.getAttribute("appToLaunch");
	var theAppParams = this.getAttribute("appParameters").readMacroParams();
	LaunchApplication(theAppToLaunch,theAppParams);
}

//}}}
* This wiki can be emailed
# <<LaunchApplicationButton "Gparted Partitioning Tool" "Gparted Partitioning Tool" "file:///usr/bin/gksu /usr/sbin/gparted>> from Knoppix 6.4.3 CD
#  <<LaunchApplicationButton "Iceweasel root" "Iceweasel root" "file:///usr/bin/gksu /usr/bin/iceweasel /var/www/tw/knoppixpbx.html>> from Knoppix 6.4.3 CD
#* Run Iceweasel as root so other programs will be launced as root
# <<LaunchApplicationButton "Leafpad" "Linux Leafpad" "file:///usr/bin/leafpad>> from Knoppix 6.4.3 CD
# <<LaunchApplicationButton "Libreoffice" "Linux Libreoffice" "file:///usr/bin/libreoffice>> from Knoppix 6.4.3 CD
# <<LaunchApplicationButton "Lxterminal user" "Linux Lxterminal user" "file:///usr/bin/lxterminal>> from Knoppix 6.4.3 CD
#* "sudo mc" to become root user in midnight commander
# <<LaunchApplicationButton "Main Menu" "Linux Main Menu" "file:///usr/bin/alacarte>> from Knoppix 6.4.3 CD
#* Launch programs in Lxterminal by getting  command line in the  properties menu
# <<LaunchApplicationButton " Pcmanfm User" " Pcmanfm User" "file:///usr/bin/pcmanfm >> from Knoppix 6.4.3 CD
#* use Applications Menu to launce applications
#  <<LaunchApplicationButton "Pcmanfmll root" "Pcmanfml root" "file:///usr/bin/gksu /usr/bin/pcmanfm /usr/src>> from Knoppix 6.4.3 CD
# [[RegExp Tester]]
# <<LaunchApplicationButton "Synaptic Installer" "Synaptic Installer" "file:///usr/bin/gksu /usr/sbin/synaptic>> from Knoppix 6.4.3 CD
# <<LaunchApplicationButton "Xournal User" " Xournal User" "file:///usr/bin/xournal >> from Knoppix 6.4.3 CD
* [[Live Linux CDs: building and customizing bootables | http://books.google.com/books?id=2S3eUgb39C8C&printsec=frontcover&dq=Live+Linux+CDs:+building+and+customizing+bootables&source=bl&ots=muTwzzq9IN&sig=Nve9IWJ5XJ0Aoz8Fto9nKnVC3xE&hl=en&ei=ydE5TaKuIozsrQfL1eG5CA&sa=X&oi=book_result&ct=result&resnum=2&ved=0CB0Q6AEwAQ#v=onepage&q&f=false]] - [[Live Distro | http://www.livedistro.org/]]
<html>
<center>
<iframe frameborder="0" scrolling="no" style="border:0px" src="http://books.google.com/books?id=2S3eUgb39C8C&lpg=PP1&ots=muTwzzq9IN&dq=Live%20Linux%20CDs%3A%20building%20and%20customizing%20bootables&pg=PP1&output=embed" width=500 height=500></iframe>
</center>
</html>
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[[Step 1]]
[[Step 2]]
[[Step 3]]
[[Step 4]]
[[Step 5]]
[[WelcomeToTiddlyspot]]
[[GettingStarted]]
[[Man Pages | http://linux.die.net/man/]]
[[Bitlet.org |http://www.bitlet.org]]
[[apt-get.diffinstall.sh]]
[[Nerd Vittles]]
[[Zenity Links]]
[[AttachFile]]
[[LaunchPad]]
[[RemasterKnoppix]]
[[FreePBX]]
[[OpenFire]]
[[Dyndns.org |http://www.dyndns.org]]
[[Sipbroker]]
[[Voxalot.com|http://www.voxalot.com]]
[[Fonosip.com |http://www.fonosip.com/]]
[[ENUM|http://faq.sipbroker.com/tiki-index.php?page=ENUM]]
[[IpKall|http://www.ipkall.com/]]
[[Google Voice|http://www.google.com/googlevoice/about.html]]
[[Google Docs |http://docs.google.com/demo/edit?id=scADLrurhJcEROID5v1St6dRR&dt=spreadsheet#spreadsheet]]
[[GlassParrot Wiki|http://wiki.glassparrot.dreamhosters.com/wiki/Knoppix]]
[[RegExp Tester]]
[[Flickr.com Links]]
[[YouTube Links]]
[[Bluetooth Links]]
see [[diff.sh]]
# [[Google Search Nerd Vittles|http://www.google.com/search?q=nerd+vittles&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:unofficial&client=iceweasel-a]]
# [[5 Steps to Paradise: It's Incredible PBX for Asterisk 1.8 |http://nerdvittles.com/?p=705]]
# [[2010 Bargain of the Year: Nortel 1535 Color SIP Videophone]]
# http://www.igniterealtime.org/projects/openfire/
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
/***
|Name|PreviewPluginInfo|
|Source|http://www.TiddlyTools.com/#PreviewPlugin|
|Documentation|http://www.TiddlyTools.com/#PreviewPluginInfo|
|Version|1.8.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|documentation for PreviewPlugin|
Provides key-by-key ''LIVE PREVIEW'' of //formatted// tiddler content as you type input into a textarea (multi-line) edit field.
!!!!!Usage
<<<
Syntax: (in tiddler content)
{{{
<<preview hide fieldname height>>
}}}
//OR// (in [[EditTemplate]])
{{{
<span macro='preview hide fieldname height'></span>
}}}
where:
* 'hide' (optional)<br>is a keyword that causes the preview display to be initially hidden when created.  This is typically used in an [[EditTemplate]] definition, in conjunction with the 'previewTiddler' toolbar syntax (see below).
* fieldname (optional)<br>specifies the name of the tiddler field that is being previewed.  It corresponds to the fieldname specified in the {{{<span class='editor' macro='edit fieldname height'></span>}}} syntax used to define the textarea edit field, and is used to locate and access the source content that is to be previewed.  When omitted, the previewer will automatically associate itself with the last textarea control that precedes it in the rendered tiddler editor display.
* height (optional)<br>defines the total height of the previewer display (including the status line and controls), using CSS "em" (line height) measurements.  The default height value is "15em" (i.e., approximately 15 lines of standard-sized text)

In addition to the preview macro itself, you can place the following in your [[EditTemplate]] to add a tiddler toolbar command that enables you to toggle the preview display once it has been created:
{{{
<span class='toolbar' macro='toolbar previewTiddler'></span>
}}}
when clicked, this command will show/hide ALL preview controls that are displayed in the current tiddler.  Note that, when desired, you can also embed this toolbar command directly into a tiddler by entering the "{{{<<toolbar previewTiddler>>}}}" syntax in the tiddler source.
<<<
!!!!!Examples
<<<
in [[EditTemplate]]:
{{{
<div class='editor' macro='edit foobar 5'></div>
<div class='editor' macro='preview hide foobar 10'></div>
}}}
OR, embedded in tiddler content:
{{{
<<edit foobar 5>><<preview foobar 10>>
}}}
{{smallform{
<<edit foobar 5>><<preview foobar 10>>}}}
By default, the preview display is automatically rendered each time a key is typed into the tiddler content edit field.  As soon as changes are entered, they will be instantly visible within the preview display.  Unfortunately, the partial tiddler source definitions that occur //during// editing may somtimes cause rendering problems, and some exceptionally complex tiddlers make take an unusually long amount of time to completely render their content.   In such cases, key-by-key display updates are undesirable or impractical.

You can select the ''freeze'' checkbox to suspend automatic key-by-key preview display updates.  The preview display will not be re-rendered again until you press the ''refresh'' button or clear the 'freeze' checkbox.  The preview display will also automatically freeze whenever the //rendering time// exceeds a pre-determined time limit (see configuration section), specified in milliseconds.  Note: the ''actual elapsed time'' used to process and render any given content is reported in the preview "status bar" whenever that content is previewed.

In addition to a 'wikified' preview, the previewer display can show a ''DOM viewer'' and/or an ''HTML viewer'' that are also updated with each keystroke.  These text-based displays can be helpful while attempting to correct or enhance the formatting of tiddler content, especially when complex combinations of wiki-syntax produce unexpected or undesired results.
<<<
* from this link [[JavaScript RegExp Tester Source Code |http://www.regular-expressions.info/javascriptexample.html]]
** http://www.regular-expressions.info/index.html
** [[Using Regexp with Scripts |http://www.regular-expressions.info/examplesprogrammer.html]]
# <<LaunchApplicationButton "Lxterminal user" "Linux Lxterminal user" "file:///usr/bin/lxterminal>> from Knoppix 6.4.3 CD
#* "sudo mc" to become root user in midnight commander
# [[LaunchPad]]
<html>
<SCRIPT LANGUAGE="JavaScript"><!--
function demoMatchClick() {
  var re = new RegExp(document.demoMatch.regex.value);
  if (document.demoMatch.subject.value.match(re)) {
    alert("Successful match");
  } else {
    alert("No match");
  }
}

function demoShowMatchClick() {
  var re = new RegExp(document.demoMatch.regex.value);
  var m = re.exec(document.demoMatch.subject.value);
  if (m == null) {
    alert("No match");
  } else {
    var s = "Match at position " + m.index + ":\n";
    for (i = 0; i < m.length; i++) {
      s = s + m[i] + "\n";
    }
    alert(s);
  }
}

function demoReplaceClick() {
  var re = new RegExp(document.demoMatch.regex.value, "g");
  document.demoMatch.result.value = 
    document.demoMatch.subject.value.replace(re, 
      document.demoMatch.replacement.value);
}
// -->
</SCRIPT>

<FORM ID="demoMatch" NAME="demoMatch" METHOD=POST ACTION="javascript:void(0)">
<P>Regexp: <INPUT TYPE=TEXT NAME="regex" VALUE="\bt[a-z]+\b" SIZE=50></P>
<P>Subject string: <INPUT TYPE=TEXT NAME="subject" 
   VALUE="This is a test of the JavaScript RegExp object" SIZE=50></P>
<P><INPUT TYPE=SUBMIT VALUE="Test Match" ONCLICK="demoMatchClick()">
<INPUT TYPE=SUBMIT VALUE="Show Match" ONCLICK="demoShowMatchClick()"></P>

<P>Replacement text: <INPUT TYPE=TEXT NAME="replacement" VALUE="replaced" SIZE=50></P>
<P>Result: <INPUT TYPE=TEXT NAME="result" 
   VALUE="click the button to see the result" SIZE=50></P>
<P><INPUT TYPE=SUBMIT VALUE="Replace" ONCLICK="demoReplaceClick()"></P>
</FORM>
</html>
!usage
{{{[[Remaster.sh|Remaster.sh]]}}}
[[Remaster.sh|Remaster.sh]]
!notes
<html>
<pre>
#!/bin/bash
# Remaster.sh

SWAP_DIR='/home'
COUNTSIZE=5500
SOURCE_DIR='/media/sda6/remaster'
MASTER_DIR='/home/remaster'
KNOPPIX_IMG=$MASTER_DIR'/KNOPPIX'

function fChoose {
echo ' ##########################################################'
echo '### This program remasters the Knoppix 6.4.3 CD          ###'
echo '### The default remastering directory is /mnt-system/knx ###'
echo '### You may choose another storage medium in a local     ###'
echo '###   or networked directory                             ###'
echo ' ##########################################################'
}
function menu1 {
OPTIONS="start compress_default mksquashfs_default decompress_default stripKnoppix mountSwap makeCDFS testmsg1 menuChoice";
select opt in $OPTIONS; do
     if [ "$opt" = "start" ]; then
	menuChoice
	exit
elif [ "$opt" = "compress_default" ]; then
	compress_default
	exit
elif [ "$opt" = "decompress_default" ]; then
	decompress_default
	exit
elif [ "$opt" = "mksquashfs_default" ]; then 
	mksquashfs_default 
	exit
elif [ "$opt" = "stripKnoppix" ]; then 
	stripKnoppix 
	exit
elif [ "$opt" = "mountSwap" ]; then
	mountSwap
	exit
elif [ "$opt" = "makeCDFS" ]; then
	makeCDFS
	exit
elif [ "$opt" = "testmsg1" ]; then
	testmsg1 
	exit
elif [ "$opt" = "menuChoice" ]; then
	menuChoice
	exit   	   	
else
	clear
echo bad option
     fi
done
}

function testmsg1 {
echo 'This is testmsg1'
}



function menuChoice {
	fChoose
OPTIONS="Use_default_directory Choose_a_directory_for_remastering";
select opt in $OPTIONS; do
     if [ "$opt" = "Use_default_directory" ]; then
	echo 'You chose to Use_default_directory'
	cpdefault
	exit
elif [ "$opt" = "Choose_a_directory_for_remastering" ]; then
	echo 'You chose to Choose_a_directory_for_remastering'
	exit   	   	
else
	clear
echo bad option
     fi
done
}



function compress_default {
	cd $SOURCE_DIR
	cd ../
	SOURCEROOT_DIR=$(pwd)
	echo $SOURCEROOT_DIR
	mkdir UNIONFS
	cd $SOURCEROOT_DIR/UNIONFS
	UNIONFS_DIR=$(pwd)
	echo $UNIONFS_DIR
	cd $SOURCEROOT_DIR
	tar -cvvzf UNIONFS.tar.gz /UNIONFS/      
}
function decompress_default {
	cd $SOURCE_DIR
	cd ../
	SOURCEROOT_DIR=$(pwd)
	echo $SOURCEROOT_DIR
	#mkdir UNIONFS
	#mkdir KNOPPIX
	#echo 'made UNIONFS'
	tar -xvvzf ./UNIONFS.tar.gz
	cd $SOURCEROOT_DIR/'UNIONFS/'
	mv -f ./* ../KNOPPIX
	mv -f ./.* ../KNOPPIX
}

function mksquashfs_default {
	cd $SOURCE_DIR
	mksquashfs $SOURCE_DIR $MASTER_DIR'/KNOPPIX.sq' -b 262144 -noappend
}

function stripKnoppix {
	cd $SOURCE_DIR
	cd ../
	SOURCEROOT_DIR=$(pwd)
	echo $SOURCEROOT_DIR
	#mkdir UNIONFS
	#mkdir KNOPPIX
	#echo 'made UNIONFS'
	cd $SOURCE_DIR
	rm -f etc/skel/.bash_history
	rm -f root/.bash_history
	rm -f etc/resolv.conf
	rm etc/X11/xorg.conf
	chmod 555 tmp
}

function mountSwap {
	cd $SWAP_DIR
	dd if=/dev/zero of=swapfile bs=1M count=$COUNTSIZE
	mkswap swapfile
	swapon swapfile
	cat /proc/swaps
}

function makeCDFS {
	KNOPPIX_IMG=$MASTER_DIR'/KNOPPIX'
	echo $KNOPPIX_IMG
	mkisofs -R -U -V "KNOPPIX.net filesystem" -publisher "KNOPPIX www.knoppix.net" -hide-rr-moved -cache-inodes -no-bak -pad $SOURCE_DIR | nice -5 /usr/bin/create_compressed_fs - 262144 > $KNOPPIX_IMG
}

case "$1" in
'start')
	menuChoice
	RETVAL=$?
	;;
'menu')
	menu1
	RETVAL=$?
	;;
'menuChoice')
	menuChoice
	;;
'compress_default')
	compress_default
	#RETVAL=$?
	;;
'decompress_default')
	decompress_default
	RETVAL=$?
	;;
'mksquashfs_default')
	mksquashfs_default
	RETVAL=$?
	;;
'stripKnoppix')
	stripKnoppix
	RETVAL=$?
	;;
'mountSwap')
	mountSwap
	RETVAL=$?
	;;
'makeCDFS')
	makeCDFS
	RETVAL=$?
	;;
'testmsg')
echo 'This is a test message'
	;;

 *)
	echo "Usage: $0 {start | menu | menuChoice | compress_default | decompress_default | mksquashfs_default | stripKnoppix | makeCDFS | mountSwap |testmsg}"
	RETVAL=1
	;;
 esac
 exit $RETVAL
</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/Scripts/Remaster.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBSZW1hc3Rlci5zaAoKU1dBUF9ESVI9Jy9ob21lJwpDT1VOVFNJWkU9NTUwMApTT1VSQ0VfRElSPScvbWVkaWEvc2RhNi9yZW1hc3RlcicKTUFTVEVSX0RJUj0nL2hvbWUvcmVtYXN0ZXInCktOT1BQSVhfSU1HPSRNQVNURVJfRElSJy9LTk9QUElYJwoKZnVuY3Rpb24gZkNob29zZSB7CmVjaG8gJyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwplY2hvICcjIyMgVGhpcyBwcm9ncmFtIHJlbWFzdGVycyB0aGUgS25vcHBpeCA2LjQuMyBDRCAgICAgICAgICAjIyMnCmVjaG8gJyMjIyBUaGUgZGVmYXVsdCByZW1hc3RlcmluZyBkaXJlY3RvcnkgaXMgL21udC1zeXN0ZW0va254ICMjIycKZWNobyAnIyMjIFlvdSBtYXkgY2hvb3NlIGFub3RoZXIgc3RvcmFnZSBtZWRpdW0gaW4gYSBsb2NhbCAgICAgIyMjJwplY2hvICcjIyMgICBvciBuZXR3b3JrZWQgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMnCmVjaG8gJyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwp9CmZ1bmN0aW9uIG1lbnUxIHsKT1BUSU9OUz0ic3RhcnQgY29tcHJlc3NfZGVmYXVsdCBta3NxdWFzaGZzX2RlZmF1bHQgZGVjb21wcmVzc19kZWZhdWx0IHN0cmlwS25vcHBpeCBtb3VudFN3YXAgbWFrZUNERlMgdGVzdG1zZzEgbWVudUNob2ljZSI7CnNlbGVjdCBvcHQgaW4gJE9QVElPTlM7IGRvCiAgICAgaWYgWyAiJG9wdCIgPSAic3RhcnQiIF07IHRoZW4KCW1lbnVDaG9pY2UKCWV4aXQKZWxpZiBbICIkb3B0IiA9ICJjb21wcmVzc19kZWZhdWx0IiBdOyB0aGVuCgljb21wcmVzc19kZWZhdWx0CglleGl0CmVsaWYgWyAiJG9wdCIgPSAiZGVjb21wcmVzc19kZWZhdWx0IiBdOyB0aGVuCglkZWNvbXByZXNzX2RlZmF1bHQKCWV4aXQKZWxpZiBbICIkb3B0IiA9ICJta3NxdWFzaGZzX2RlZmF1bHQiIF07IHRoZW4gCglta3NxdWFzaGZzX2RlZmF1bHQgCglleGl0CmVsaWYgWyAiJG9wdCIgPSAic3RyaXBLbm9wcGl4IiBdOyB0aGVuIAoJc3RyaXBLbm9wcGl4IAoJZXhpdAplbGlmIFsgIiRvcHQiID0gIm1vdW50U3dhcCIgXTsgdGhlbgoJbW91bnRTd2FwCglleGl0CmVsaWYgWyAiJG9wdCIgPSAibWFrZUNERlMiIF07IHRoZW4KCW1ha2VDREZTCglleGl0CmVsaWYgWyAiJG9wdCIgPSAidGVzdG1zZzEiIF07IHRoZW4KCXRlc3Rtc2cxIAoJZXhpdAplbGlmIFsgIiRvcHQiID0gIm1lbnVDaG9pY2UiIF07IHRoZW4KCW1lbnVDaG9pY2UKCWV4aXQgICAJICAgCQplbHNlCgljbGVhcgplY2hvIGJhZCBvcHRpb24KICAgICBmaQpkb25lCn0KCmZ1bmN0aW9uIHRlc3Rtc2cxIHsKZWNobyAnVGhpcyBpcyB0ZXN0bXNnMScKfQoKCgpmdW5jdGlvbiBtZW51Q2hvaWNlIHsKCWZDaG9vc2UKT1BUSU9OUz0iVXNlX2RlZmF1bHRfZGlyZWN0b3J5IENob29zZV9hX2RpcmVjdG9yeV9mb3JfcmVtYXN0ZXJpbmciOwpzZWxlY3Qgb3B0IGluICRPUFRJT05TOyBkbwogICAgIGlmIFsgIiRvcHQiID0gIlVzZV9kZWZhdWx0X2RpcmVjdG9yeSIgXTsgdGhlbgoJZWNobyAnWW91IGNob3NlIHRvIFVzZV9kZWZhdWx0X2RpcmVjdG9yeScKCWNwZGVmYXVsdAoJZXhpdAplbGlmIFsgIiRvcHQiID0gIkNob29zZV9hX2RpcmVjdG9yeV9mb3JfcmVtYXN0ZXJpbmciIF07IHRoZW4KCWVjaG8gJ1lvdSBjaG9zZSB0byBDaG9vc2VfYV9kaXJlY3RvcnlfZm9yX3JlbWFzdGVyaW5nJwoJZXhpdCAgIAkgICAJCmVsc2UKCWNsZWFyCmVjaG8gYmFkIG9wdGlvbgogICAgIGZpCmRvbmUKfQoKCgpmdW5jdGlvbiBjb21wcmVzc19kZWZhdWx0IHsKCWNkICRTT1VSQ0VfRElSCgljZCAuLi8KCVNPVVJDRVJPT1RfRElSPSQocHdkKQoJZWNobyAkU09VUkNFUk9PVF9ESVIKCW1rZGlyIFVOSU9ORlMKCWNkICRTT1VSQ0VST09UX0RJUi9VTklPTkZTCglVTklPTkZTX0RJUj0kKHB3ZCkKCWVjaG8gJFVOSU9ORlNfRElSCgljZCAkU09VUkNFUk9PVF9ESVIKCXRhciAtY3Z2emYgVU5JT05GUy50YXIuZ3ogL1VOSU9ORlMvICAgICAgCn0KZnVuY3Rpb24gZGVjb21wcmVzc19kZWZhdWx0IHsKCWNkICRTT1VSQ0VfRElSCgljZCAuLi8KCVNPVVJDRVJPT1RfRElSPSQocHdkKQoJZWNobyAkU09VUkNFUk9PVF9ESVIKCSNta2RpciBVTklPTkZTCgkjbWtkaXIgS05PUFBJWAoJI2VjaG8gJ21hZGUgVU5JT05GUycKCXRhciAteHZ2emYgLi9VTklPTkZTLnRhci5negoJY2QgJFNPVVJDRVJPT1RfRElSLydVTklPTkZTLycKCW12IC1mIC4vKiAuLi9LTk9QUElYCgltdiAtZiAuLy4qIC4uL0tOT1BQSVgKfQoKZnVuY3Rpb24gbWtzcXVhc2hmc19kZWZhdWx0IHsKCWNkICRTT1VSQ0VfRElSCglta3NxdWFzaGZzICRTT1VSQ0VfRElSICRNQVNURVJfRElSJy9LTk9QUElYLnNxJyAtYiAyNjIxNDQgLW5vYXBwZW5kCn0KCmZ1bmN0aW9uIHN0cmlwS25vcHBpeCB7CgljZCAkU09VUkNFX0RJUgoJY2QgLi4vCglTT1VSQ0VST09UX0RJUj0kKHB3ZCkKCWVjaG8gJFNPVVJDRVJPT1RfRElSCgkjbWtkaXIgVU5JT05GUwoJI21rZGlyIEtOT1BQSVgKCSNlY2hvICdtYWRlIFVOSU9ORlMnCgljZCAkU09VUkNFX0RJUgoJcm0gLWYgZXRjL3NrZWwvLmJhc2hfaGlzdG9yeQoJcm0gLWYgcm9vdC8uYmFzaF9oaXN0b3J5CglybSAtZiBldGMvcmVzb2x2LmNvbmYKCXJtIGV0Yy9YMTEveG9yZy5jb25mCgljaG1vZCA1NTUgdG1wCn0KCmZ1bmN0aW9uIG1vdW50U3dhcCB7CgljZCAkU1dBUF9ESVIKCWRkIGlmPS9kZXYvemVybyBvZj1zd2FwZmlsZSBicz0xTSBjb3VudD0kQ09VTlRTSVpFCglta3N3YXAgc3dhcGZpbGUKCXN3YXBvbiBzd2FwZmlsZQoJY2F0IC9wcm9jL3N3YXBzCn0KCmZ1bmN0aW9uIG1ha2VDREZTIHsKCUtOT1BQSVhfSU1HPSRNQVNURVJfRElSJy9LTk9QUElYJwoJZWNobyAkS05PUFBJWF9JTUcKCW1raXNvZnMgLVIgLVUgLVYgIktOT1BQSVgubmV0IGZpbGVzeXN0ZW0iIC1wdWJsaXNoZXIgIktOT1BQSVggd3d3Lmtub3BwaXgubmV0IiAtaGlkZS1yci1tb3ZlZCAtY2FjaGUtaW5vZGVzIC1uby1iYWsgLXBhZCAkU09VUkNFX0RJUiB8IG5pY2UgLTUgL3Vzci9iaW4vY3JlYXRlX2NvbXByZXNzZWRfZnMgLSAyNjIxNDQgPiAkS05PUFBJWF9JTUcKfQoKY2FzZSAiJDEiIGluCidzdGFydCcpCgltZW51Q2hvaWNlCglSRVRWQUw9JD8KCTs7CidtZW51JykKCW1lbnUxCglSRVRWQUw9JD8KCTs7CidtZW51Q2hvaWNlJykKCW1lbnVDaG9pY2UKCTs7Cidjb21wcmVzc19kZWZhdWx0JykKCWNvbXByZXNzX2RlZmF1bHQKCSNSRVRWQUw9JD8KCTs7CidkZWNvbXByZXNzX2RlZmF1bHQnKQoJZGVjb21wcmVzc19kZWZhdWx0CglSRVRWQUw9JD8KCTs7Cidta3NxdWFzaGZzX2RlZmF1bHQnKQoJbWtzcXVhc2hmc19kZWZhdWx0CglSRVRWQUw9JD8KCTs7CidzdHJpcEtub3BwaXgnKQoJc3RyaXBLbm9wcGl4CglSRVRWQUw9JD8KCTs7Cidtb3VudFN3YXAnKQoJbW91bnRTd2FwCglSRVRWQUw9JD8KCTs7CidtYWtlQ0RGUycpCgltYWtlQ0RGUwoJUkVUVkFMPSQ/Cgk7OwondGVzdG1zZycpCmVjaG8gJ1RoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UnCgk7OwoKICopCgllY2hvICJVc2FnZTogJDAge3N0YXJ0IHwgbWVudSB8IG1lbnVDaG9pY2UgfCBjb21wcmVzc19kZWZhdWx0IHwgZGVjb21wcmVzc19kZWZhdWx0IHwgbWtzcXVhc2hmc19kZWZhdWx0IHwgc3RyaXBLbm9wcGl4IHwgbWFrZUNERlMgfCBtb3VudFN3YXAgfHRlc3Rtc2d9IgoJUkVUVkFMPTEKCTs7CiBlc2FjCiBleGl0ICRSRVRWQUwKCg==
!usage
{{{[[RemasterCDOnlyCDFS.sh|RemasterCDOnlyCDFS.sh]]}}}
[[RemasterCDOnlyCDFS.sh|RemasterCDOnlyCDFS.sh]]
!notes
<html>
<pre>
#!/bin/bash
# RemasterCDOnlyCDFS.sh

SWAP_DIR='/mnt-system/knx/'
COUNTSIZE=5500
SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
MASTER_DIR='/mnt-system/knx/master/KNOPPIX'
KNOPPIX_IMG=$MASTER_DIR'/KNOPPIX'

#############OK#################
#!/bin/bash
 
if zenity --question --text="You must CLOSE ALL OTHER PROGRAMS and run this as root. Because of the size of the DVD this only works on the CD (cd file system -iso- may not exceed 4.5Gig). 
 Continue";
then
    echo 'continue'
else
    exit
fi
#############OK#################
#SWAP_DIR
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="First, you must select
which directory to make a swapfile to.  The Default size is $COUNTSIZE Mb"
SWAP_DIR=`zenity --file-selection --directory`
# echo $SWAP_DIR
mkdir -p $SWAP_DIR
#############OK#################
#SOURCE_DIR
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="Next, you must select
a SOURCE_DIR to copy your UNIONFS files to.  The Default directory is $SOURCE_DIR"
SOURCE_DIR=`zenity --file-selection --directory`
# echo $SOURCE_DIR
mkdir -p $SOURCE_DIR
#############OK#################
#MASTER_DIR
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="Next, you must select
a MASTER_DIR to master your CDFS files in.  The Default directory is $MASTER_DIR"
MASTER_DIR=`zenity --file-selection --directory`
# echo $MASTER_DIR
cd ..$MASTER_DIR
mkdir -p $MASTER_DIR
#############OK#################
echo $SOURCE_DIR
echo $MASTER_DIR
echo $SWAP_DIR
if zenity --question --text="Your Directories are swap = $SWAP_DIR, $COUNTSIZE, SOURCE= $SOURCE_DIR, MASTER = $MASTER_DIR. Continue?";
then
    echo 'continue'
else
    exit
fi
#############OK#################
###root@Microknoppix:/media/sda7/knx# echo $SOURCE_DIR
###/media/sda7/knx/source/KNOPPIX
###root@Microknoppix:/media/sda7/knx# echo $MASTER_DIR
###/media/sda7/knx/master/KNOPPIX
###root@Microknoppix:/media/sda7/knx# echo $SWAP_DIR
###/media/sda7/knx
#############OK#################
#############OK#################
cd $SWAP_DIR ###/media/sda7/knx
dd if=/dev/zero of=swapfile bs=1M count=$COUNTSIZE
mkswap swapfile
swapon swapfile
#############OK#################
apt-get update
apt-get clean
apt-get autoclean
#############OK#################
### Copy the  to $MASTER_DIR ###/media/sda7/knx/master/KNOPPIX
### MASTER_DIR=/media/sda7/knx/master/KNOPPIX
###echo $MASTER_DIR
cd $MASTER_DIR
cp -R /mnt-system/FILESYSTEM ../
cp -R /mnt-system/boot ../
cp -R /mnt-system/extra ../
cp -R /mnt-system/pmagic ../
cp /mnt-system/startweb ../
#############OK#################
### Copy the /UNIONFS to $SOURCE_DIR ###/media/sda7/knx/source/KNOPPIX
cd /UNIONFS
mount --bind /UNIONFS $SOURCE_DIR 
###tar -cvvzf $SOURCE_DIR/UNIONFS.tar.gz ./
cd $SOURCE_DIR 
###tar -xvvzf ./UNIONFS.tar.gz
###rm ./UNIONFS.tar.gz
rm -f etc/skel/.bash_history
rm -f root/.bash_history
rm -f etc/resolv.conf
rm etc/X11/xorg.conf
chmod 555 tmp
#############OK#################
### mkisofs -R -U -V "KNOPPIX.net filesystem" -publisher "KNOPPIX www.knoppix.net" \
#-hide-rr-moved -cache-inodes -pad /mnt/knx/source/KNOPPIX \
# | nice -5 /usr/bin/create_compressed_fs - 262144 > /mnt/knx/master/KNOPPIX/KNOPPIX
cd $MASTER_DIR
KNOPPIX_IMG=$MASTER_DIR'/KNOPPIX'
mkisofs -R -U -V "KNOPPIX.net filesystem" -publisher "KNOPPIX www.knoppix.net" -hide-rr-moved -cache-inodes -no-bak -pad $SOURCE_DIR | nice -5 /usr/bin/create_compressed_fs - 262144 > $KNOPPIX_IMG
#############OK#################

</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/tmp/RemasterCDOnlyCDFS.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBSZW1hc3RlckNET25seUNERlMuc2gKClNXQVBfRElSPScvbW50LXN5c3RlbS9rbngvJwpDT1VOVFNJWkU9NTUwMApTT1VSQ0VfRElSPScvbW50LXN5c3RlbS9rbngvc291cmNlL0tOT1BQSVgnCk1BU1RFUl9ESVI9Jy9tbnQtc3lzdGVtL2tueC9tYXN0ZXIvS05PUFBJWCcKS05PUFBJWF9JTUc9JE1BU1RFUl9ESVInL0tOT1BQSVgnCgojIyMjIyMjIyMjIyMjT0sjIyMjIyMjIyMjIyMjIyMjIwojIS9iaW4vYmFzaAogCmlmIHplbml0eSAtLXF1ZXN0aW9uIC0tdGV4dD0iWW91IG11c3QgQ0xPU0UgQUxMIE9USEVSIFBST0dSQU1TIGFuZCBydW4gdGhpcyBhcyByb290LiBCZWNhdXNlIG9mIHRoZSBzaXplIG9mIHRoZSBEVkQgdGhpcyBvbmx5IHdvcmtzIG9uIHRoZSBDRCAoY2QgZmlsZSBzeXN0ZW0gLWlzby0gbWF5IG5vdCBleGNlZWQgNC41R2lnKS4gCiBDb250aW51ZSI7CnRoZW4KICAgIGVjaG8gJ2NvbnRpbnVlJwplbHNlCiAgICBleGl0CmZpCiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCiNTV0FQX0RJUgp6ZW5pdHkgLS1pbmZvIC0tdGl0bGU9IlJlbWFzdGVyIEtub3BwaXggNi40LjMgQ0QiIC0tdGV4dD0iRmlyc3QsIHlvdSBtdXN0IHNlbGVjdAp3aGljaCBkaXJlY3RvcnkgdG8gbWFrZSBhIHN3YXBmaWxlIHRvLiAgVGhlIERlZmF1bHQgc2l6ZSBpcyAkQ09VTlRTSVpFIE1iIgpTV0FQX0RJUj1gemVuaXR5IC0tZmlsZS1zZWxlY3Rpb24gLS1kaXJlY3RvcnlgCiMgZWNobyAkU1dBUF9ESVIKbWtkaXIgLXAgJFNXQVBfRElSCiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCiNTT1VSQ0VfRElSCnplbml0eSAtLWluZm8gLS10aXRsZT0iUmVtYXN0ZXIgS25vcHBpeCA2LjQuMyBDRCIgLS10ZXh0PSJOZXh0LCB5b3UgbXVzdCBzZWxlY3QKYSBTT1VSQ0VfRElSIHRvIGNvcHkgeW91ciBVTklPTkZTIGZpbGVzIHRvLiAgVGhlIERlZmF1bHQgZGlyZWN0b3J5IGlzICRTT1VSQ0VfRElSIgpTT1VSQ0VfRElSPWB6ZW5pdHkgLS1maWxlLXNlbGVjdGlvbiAtLWRpcmVjdG9yeWAKIyBlY2hvICRTT1VSQ0VfRElSCm1rZGlyIC1wICRTT1VSQ0VfRElSCiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCiNNQVNURVJfRElSCnplbml0eSAtLWluZm8gLS10aXRsZT0iUmVtYXN0ZXIgS25vcHBpeCA2LjQuMyBDRCIgLS10ZXh0PSJOZXh0LCB5b3UgbXVzdCBzZWxlY3QKYSBNQVNURVJfRElSIHRvIG1hc3RlciB5b3VyIENERlMgZmlsZXMgaW4uICBUaGUgRGVmYXVsdCBkaXJlY3RvcnkgaXMgJE1BU1RFUl9ESVIiCk1BU1RFUl9ESVI9YHplbml0eSAtLWZpbGUtc2VsZWN0aW9uIC0tZGlyZWN0b3J5YAojIGVjaG8gJE1BU1RFUl9ESVIKY2QgLi4kTUFTVEVSX0RJUgpta2RpciAtcCAkTUFTVEVSX0RJUgojIyMjIyMjIyMjIyMjT0sjIyMjIyMjIyMjIyMjIyMjIwplY2hvICRTT1VSQ0VfRElSCmVjaG8gJE1BU1RFUl9ESVIKZWNobyAkU1dBUF9ESVIKaWYgemVuaXR5IC0tcXVlc3Rpb24gLS10ZXh0PSJZb3VyIERpcmVjdG9yaWVzIGFyZSBzd2FwID0gJFNXQVBfRElSLCAkQ09VTlRTSVpFLCBTT1VSQ0U9ICRTT1VSQ0VfRElSLCBNQVNURVIgPSAkTUFTVEVSX0RJUi4gQ29udGludWU/IjsKdGhlbgogICAgZWNobyAnY29udGludWUnCmVsc2UKICAgIGV4aXQKZmkKIyMjIyMjIyMjIyMjI09LIyMjIyMjIyMjIyMjIyMjIyMKIyMjcm9vdEBNaWNyb2tub3BwaXg6L21lZGlhL3NkYTcva254IyBlY2hvICRTT1VSQ0VfRElSCiMjIy9tZWRpYS9zZGE3L2tueC9zb3VyY2UvS05PUFBJWAojIyNyb290QE1pY3Jva25vcHBpeDovbWVkaWEvc2RhNy9rbngjIGVjaG8gJE1BU1RFUl9ESVIKIyMjL21lZGlhL3NkYTcva254L21hc3Rlci9LTk9QUElYCiMjI3Jvb3RATWljcm9rbm9wcGl4Oi9tZWRpYS9zZGE3L2tueCMgZWNobyAkU1dBUF9ESVIKIyMjL21lZGlhL3NkYTcva254CiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCmNkICRTV0FQX0RJUiAjIyMvbWVkaWEvc2RhNy9rbngKZGQgaWY9L2Rldi96ZXJvIG9mPXN3YXBmaWxlIGJzPTFNIGNvdW50PSRDT1VOVFNJWkUKbWtzd2FwIHN3YXBmaWxlCnN3YXBvbiBzd2FwZmlsZQojIyMjIyMjIyMjIyMjT0sjIyMjIyMjIyMjIyMjIyMjIwphcHQtZ2V0IHVwZGF0ZQphcHQtZ2V0IGNsZWFuCmFwdC1nZXQgYXV0b2NsZWFuCiMjIyMjIyMjIyMjIyNPSyMjIyMjIyMjIyMjIyMjIyMjCiMjIyBDb3B5IHRoZSAgdG8gJE1BU1RFUl9ESVIgIyMjL21lZGlhL3NkYTcva254L21hc3Rlci9LTk9QUElYCiMjIyBNQVNURVJfRElSPS9tZWRpYS9zZGE3L2tueC9tYXN0ZXIvS05PUFBJWAojIyNlY2hvICRNQVNURVJfRElSCmNkICRNQVNURVJfRElSCmNwIC1SIC9tbnQtc3lzdGVtL0ZJTEVTWVNURU0gLi4vCmNwIC1SIC9tbnQtc3lzdGVtL2Jvb3QgLi4vCmNwIC1SIC9tbnQtc3lzdGVtL2V4dHJhIC4uLwpjcCAtUiAvbW50LXN5c3RlbS9wbWFnaWMgLi4vCmNwIC9tbnQtc3lzdGVtL3N0YXJ0d2ViIC4uLwojIyMjIyMjIyMjIyMjT0sjIyMjIyMjIyMjIyMjIyMjIwojIyMgQ29weSB0aGUgL1VOSU9ORlMgdG8gJFNPVVJDRV9ESVIgIyMjL21lZGlhL3NkYTcva254L3NvdXJjZS9LTk9QUElYCmNkIC9VTklPTkZTCm1vdW50IC0tYmluZCAvVU5JT05GUyAkU09VUkNFX0RJUiAKIyMjdGFyIC1jdnZ6ZiAkU09VUkNFX0RJUi9VTklPTkZTLnRhci5neiAuLwpjZCAkU09VUkNFX0RJUiAKIyMjdGFyIC14dnZ6ZiAuL1VOSU9ORlMudGFyLmd6CiMjI3JtIC4vVU5JT05GUy50YXIuZ3oKcm0gLWYgZXRjL3NrZWwvLmJhc2hfaGlzdG9yeQpybSAtZiByb290Ly5iYXNoX2hpc3RvcnkKcm0gLWYgZXRjL3Jlc29sdi5jb25mCnJtIGV0Yy9YMTEveG9yZy5jb25mCmNobW9kIDU1NSB0bXAKIyMjIyMjIyMjIyMjI09LIyMjIyMjIyMjIyMjIyMjIyMKIyMjIG1raXNvZnMgLVIgLVUgLVYgIktOT1BQSVgubmV0IGZpbGVzeXN0ZW0iIC1wdWJsaXNoZXIgIktOT1BQSVggd3d3Lmtub3BwaXgubmV0IiBcCiMtaGlkZS1yci1tb3ZlZCAtY2FjaGUtaW5vZGVzIC1wYWQgL21udC9rbngvc291cmNlL0tOT1BQSVggXAojIHwgbmljZSAtNSAvdXNyL2Jpbi9jcmVhdGVfY29tcHJlc3NlZF9mcyAtIDI2MjE0NCA+IC9tbnQva254L21hc3Rlci9LTk9QUElYL0tOT1BQSVgKY2QgJE1BU1RFUl9ESVIKS05PUFBJWF9JTUc9JE1BU1RFUl9ESVInL0tOT1BQSVgnCm1raXNvZnMgLVIgLVUgLVYgIktOT1BQSVgubmV0IGZpbGVzeXN0ZW0iIC1wdWJsaXNoZXIgIktOT1BQSVggd3d3Lmtub3BwaXgubmV0IiAtaGlkZS1yci1tb3ZlZCAtY2FjaGUtaW5vZGVzIC1uby1iYWsgLXBhZCAkU09VUkNFX0RJUiB8IG5pY2UgLTUgL3Vzci9iaW4vY3JlYXRlX2NvbXByZXNzZWRfZnMgLSAyNjIxNDQgPiAkS05PUFBJWF9JTUcKIyMjIyMjIyMjIyMjI09LIyMjIyMjIyMjIyMjIyMjIyMKCg==
<html>
<pre>
#!/bin/bash
SWAP_DIR='/mnt-system/knx'
REMASTER_DIR=/mnt-system/knx
SOURCE_DIR='$REMASTER_DIR/source/KNOPPIX'
MASTER_DIR='REMASTER_DIR/master/KNOPPIX'

#############OK#################
#!/bin/bash
 
if zenity --question --text="You must CLOSE ALL OTHER PROGRAMS and run this as root. Because of the size of the DVD this only works on the CD (cd file system -iso- may not exceed 4.5Gig). 
 Continue";
then
    echo 'continue'
else
    exit
fi
#############OK#################
#SWAP_DIR
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="First, you must select
which directory to make a swapfile to.  The Default size is 5500 Mb"
SWAP_DIR=`zenity --file-selection --directory`
# echo $SWAP_DIR
mkdir -p $SWAP_DIR
#############OK#################
#REMASTER_DIR
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="Next, Choose a FOLDER to start Remastering to.  The Default directory is $REMASTER_DIR"
REMASTER_DIR=`zenity --file-selection --directory`
# echo $REMASTER_DIR
mkdir -p $SOURCE_DIR
#############OK#################
echo $REMASTER_DIR
echo $SWAP_DIR
#############OK#################
#############OK#################
cd $SWAP_DIR ###/media/sda7/knx
dd if=/dev/zero of=swapfile bs=1M count=5500
mkswap swapfile
swapon swapfile
#################################
###$MASTER_DIR###/media/sda7/knx/master/KNOPPIX
cd $MASTER_DIR
cd ../
find -type f -not -name md5sums -not -name boot.cat -not -name isolinux.bin -exec md5sum '{}' \; > KNOPPIX/md5sums
# mkisofs -pad -l -r -J -v -V "KNOPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o /mnt-system/knx/knoppix.iso /mnt-system/knx/master
mkisofs -pad -l -r -J -v -V "KNOPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o $REMASTER_DIR/knoppix.iso $REMASTER_DIR/master


          


          #Now your iso is there:
          #/media/sda7/knx/knoppix.iso

          #And ready to burn, hf

          #www.ArkoN.ch

</pre>
</html>
# http://www.wp-schulz.de/knoppix/summary.html
# http://www.wp-schulz.de/download/kn-knoppix_0.1-5_all.deb
*** see [[Squashfs-ed knoppix | http://www.knoppix.net/forum/threads/28484-Squashfs-ed-knoppix?p=121058&viewfull=1#post121058]]
*** see [[RemasterKnoppix]] before trying below....


I have decided to make two scripts to remaster the CD.
# [[RemasterCDOnlyCDFS.sh]]
#* This script makes the compressed CD filesystem and must be copied, made executable, and executed before you can run the next script. You can copy the resulting KNOPPIX file over a Poor Mans Hardisk Install
#* see [[Step 2]].
<html>
<pre>
If you wish to remaster the CD, please don't forget to specify
	-no-emul-boot -boot-load-size 4 -boot-info-table \
	-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat
as option to mkisofs. Otherwise your CD or DVD won't be bootable. The
directory KNOPPIX, containig the compressed filesystem file "KNOPPIX",
must be located in the top level directory of the CD
</pre>
</html>
[[genisoimage |http://man.cx/genisoimage%281%29l]] also [[The 2/4 GiB file size limit |http://en.wikipedia.org/wiki/ISO_9660#The_2.2F4_GiB_file_size_limit]]
<html>
<center>
<iframe name="lknoppixpbx"
src="http://man.cx/genisoimage%281%29l"
frameborder="0"
scrolling="auto" height="400" width="460">
</iframe>
</center>
</html>
# [[RemasterCDOnlyDisk.sh]] 
#* This script makes the actual knoppix.iso file and must be copied, made executable, and executed.  The resulting file can be burned to  a dvd
. 
/***
|Name|RunTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#RunTiddlerPlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|command to invoke tiddler content as if tagged with systemConfig (i.e., a plugin)|
!!!!!Usage/Example
<<<
Toolbar command:
>{{{<<toolbar runTiddler>>}}} (in tiddler content)
>{{{<span class='toolbar' macro='toolbar runTiddler'></span>}}} (in ViewTemplate definition)
><<toolbar runTiddler>>
>when clicked, invokes the current tiddler as javascript code
Macro function:
>{{{<<runTiddler TiddlerName>>}}} or {{{<<runTiddler TiddlerName label tip>>}}}
>if only a TiddlerName is provided, the specified tiddler is automatically invoked as javascript code as soon as the macro is rendered.  If //optional// ''label'' and ''tip'' parameters are present, a command link is created that, when clicked, invokes the specified tiddler as javascript code.
<<<
!!!!!Revisions
<<<
2008.09.01 [1.2.1] fixed return value from command handler to prevent IE from attempt to leave the page
2008.08.26 [1.2.0] added optional label and tooltip params to macro (creates 'onclick' button to invoke specified tiddler)
2008.08.26 [1.1.0] added {{{<<runTiddler TiddlerName>>}}} macro to invoke specified tiddler
2007.09.27 [1.0.0] toolbar command based on run button functionality from TidIDEPlugin
<<<
!!!!!Code
***/
//{{{
version.extensions.RunTiddlerPlugin= {major: 1, minor: 2, revision: 1, date: new Date(2008,9,1)};
//}}}
//{{{
config.commands.runTiddler = {
	text: 'run',
	tooltip: 'evaluate tiddler content as systemConfig (plugin) javascript code',
	warning: "Warning!!  Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
	completed: "%0: Processing completed",
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		return this.invoke(here.getAttribute("tiddler"),true,false);
	},
	invoke: function(tid,ask,quiet) {
		if (ask && !confirm(this.warning.format([tid]))) return false;
		var text=store.getTiddlerText(tid); if (!text) return false;
		try { window.eval(text); if (!quiet) displayMessage(config.commands.runTiddler.completed.format([tid])); }
		catch(ex) { displayMessage(config.messages.pluginError.format([exceptionText(ex)])); }
		return false;
	}
};
//}}}
//{{{
config.macros.runTiddler = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tid=params[0];
		var label=params[1];
		var tip=params[2]||config.commands.runTiddler.tooltip;
		if (!label) config.commands.runTiddler.invoke(tid,false,true);
		else createTiddlyButton(place,label,tip,function(){
			return config.commands.runTiddler.invoke(this.getAttribute("tid"),true,false);
		},"button").setAttribute("tid",tid);
	}
}
//}}}
<html>
<pre>
#!/bin/bash
# Remaster.sh

SWAP_DIR='/mnt-system/knx/'
COUNTSIZE=5500
SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
MaASTER_DIR='/mnt-system/knx/master/KNOPPIX'
KNOPPIX_IMG=$MASTER_DIR'/KNOPPIX'

function menu1 {
OPTIONS="cpdefault mvdefault testmsg1";
select opt in $OPTIONS; do
     if [ "$opt" = "cpdefault" ]; then
	cpdefault
	exit
     elif [ "$opt" = "mvdefault" ]; then
      mvdefault
     exit 
     elif [ "$opt" = "testmsg1" ]; then
     testmsg1 
     exit 	
     else
      clear
      echo bad option
     fi
done
}
function testmsg1 {
echo 'This is testmsg1'
}

function cpdefault {
	SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
	cd $SOURCE_DIR
	cd ../
	SOURCEROOT_DIR=$(pwd)
	echo $SOURCEROOT_DIR
	mkdir UNIONFS
	cd $SOURCEROOT_DIR/UNIONFS
	UNIONFS_DIR=$(pwd)
	echo $UNIONFS_DIR
	cd $SOURCEROOT_DIR
	tar -cvvzf UNIONFS.tar.gz /UNIONFS/      
}
function mvdefault {
	SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
	cd $SOURCE_DIR
	cd ../
	SOURCEROOT_DIR=$(pwd)
	echo $SOURCEROOT_DIR
	#mkdir UNIONFS
	#echo 'made UNIONFS'
	tar -xvvzf ./UNIONFS.tar.gz
	mv UNIONFS/UNIONFS $SOURCE_DIR
}

#!/bin/sh
# Start/stop Webmin

#case "$1" in
#'start')
#	/etc/webmin/start >/dev/null 2>&1 </dev/null
#	RETVAL=$?
#	;;
#'stop')
#	/etc/webmin/stop
#	RETVAL=$?
#	;;
#'status')
#	pidfile=`grep "^pidfile=" /etc/webmin/miniserv.conf | sed -e 's/pidfile=//g'`
#	if [ -s $pidfile ]; then
#		pid=`cat $pidfile`
#		kill -0 $pid >/dev/null 2>&1
#		if [ "$?" = "0" ]; then
#			echo "webmin (pid $pid) is running"
#			RETVAL=0
#		else
#			echo "webmin is stopped"
#			RETVAL=1
#		fi
#	else
#		echo "webmin is stopped"
#		RETVAL=1
#	fi
#	;;
#'restart')
#	/etc/webmin/stop ; /etc/webmin/start
#	RETVAL=$?
#	;;
# *)
#	echo "Usage: $0 { start | stop }"
#	RETVAL=1
#	;;
# esac
# exit $RETVAL
################################################
# Start/stop Webmin



case "$1" in
'menu')
menu1
	RETVAL=$?
	;;
'cpdefault')
	cpdefault
	RETVAL=$?
	;;
'mvdefault')
	mvdefault
	RETVAL=$?
	;;
'testmsg')
echo 'This is a test message'
	;;

 *)
	echo "Usage: $0 {menu | cpdefault | mvdefault | testmsg}"
	RETVAL=1
	;;
 esac
 exit $RETVAL

################################################
#SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
#cd $SOURCE_DIR
#cd ../
#SOURCEROOT_DIR=$(pwd)
#echo $SOURCEROOT_DIR
#mkdir UNIONFS
#cd $SOURCEROOT_DIR/UNIONFS
#UNIONFS_DIR=$(pwd)
#echo $UNIONFS_DIR
#tar -cvvzf $UNIONFS_DIR'UNIONFS.tar.gz' /UNIONFS/
#tar -cvvzf $UNIONFS_DIR'UNIONFS.tar.gz' ./
#mv $UNIONFS_DIR'/UNIONFS' $SOURCE_DIR
###################################

#cd $SOURCE_DIR
#rm -f etc/skel/.bash_history
#rm -f root/.bash_history
#rm -f etc/resolv.conf
#rm etc/X11/xorg.conf
#chmod 555 tmp
#
#mkisofs -R -U -V "KNOPPIX.net filesystem" -publisher "KNOPPIX www.knoppix.net" -hide-rr-moved -cache-inodes -no-bak -pad $SOURCE_DIR | #nice -5 /usr/bin/create_compressed_fs - 262144 > $KNOPPIX_IMG


</pre>
</html>
[[Zenity Choose Directory]]
<html>
<pre>
SOURCE_DIR='/mnt-system/knx/source/KNOPPIX'
zenity --info --title="Remaster Knoppix 6.4.3 CD" --text="Next, you must select
which directory to copy your UNIONFS files to.  The Default directory is /mnt-system/knx/source/KNOPPIX"

SOURCE_DIR=`zenity --file-selection --directory`
echo $SOURCE_DIR
</pre>
</html>
* http://glassparrot.tiddlyspot.com/
* http://glassparrot.wordpress.com/
* https://www.google.com/voice/b/0/m
<html>
<object type="application/x-shockwave-flash" data="https://clients4.google.com/voice/embed/webCallButton" width="230" height="85"><param name="movie" value="https://clients4.google.com/voice/embed/webCallButton" /><param name="wmode" value="transparent" /><param name="FlashVars" value="id=fba2a470ee5b6d75d176d0373cc65ff103f5061f&style=0" /></object>
</html>
[[Buy | http://www.dealextreme.com/p/m001-7-touch-screen-tft-lcd-google-android-1-6-tablet-pc-w-wifi-via-mw8505-300mhz-39169]] - Eken M001 Google Android Tablet [[Bluetooth Mod | http://www.slatedroid.com/index.php?/topic/16373-working-bluetooth/]] 
* [[FonoMo]] - http://fonomo.com/
# [[Sipbroker | http://sipbroker.com/sipbroker/action/login]]
# [[Sipbroker Wiki|http://faq.sipbroker.com/tiki-index.php]]
* instalingl FreePBX, OpenFire Jabber server and more to persistant directory
** with Remastering Knoppix 6.4.3 to [[Squashfs | http://www.knoppix.net/forum/threads/28484-Squashfs-ed-knoppix?p=121058&viewfull=1#post121058]] Script. Goto  [[WebMesengers | http://www.researchhaven.com/Chat.htm]] -  [[Sipura-ATA-Tutorial |http://forum.voxalot.com/voxalot-general/1091-voxalot-sipura-ata-tutorial-comprehensive-walkthrough.html ]] -  Main [[HOME | http://glassparrot.tiddlyspot.com/]] Page
** OR [[How to use the Obihai OBi100 or OBi110 VoIP device as a gateway between Asterisk/FreePBX and Google Voice  | http://michigantelephone.wordpress.com/2011/02/12/how-to-use-the-obihai-obi100-or-obi110-voip-device-as-a-gateway-between-asteriskfreepbx-and-google-voice-andor-the-obitalk-network-%E2%80%94-part-2-using-the-phone-port-as-an-asterisk-extension/]]
** http://itw.bidix.info/ - http://www.acme.com/ - http://itw.bidix.info/ - [[Vnc mobile java in Title/Summary | http://windows.podnova.com/trends/vnc_mobile_java.html]]
 KnoppixPBX
*  [[GlassParrot  | http://glassparrot.tiddlyspot.com/]]
Because of licensing these scripts must be run to build a custom FreePBX system.  Trading a finished DVD with bittorrent would not be legal, so you have to run these scripts and build the DVD yourself.
* This page is on http://knoppixpbx.tiddlyspot.com/index.html
* Run all scripts as root (use option5 of [[LaunchPad]]
# Go to download in the right panel and download this TiddlyWiki so you can exicute install scripts
#* then load the local version directly from your disk drive (ie:"file:///var/www/tw/knoppixpbx.html")
<html>
Most recent Cut and Paste scripts are posted
<br>
 here = View <a href="http://glassparrot.tiddlyspot.com/">http://glassparrot.tiddlyspot.com/</a>
<br>
These scripts are for Development and may be unstable.
<br> 
<script src="http://www.gmodules.com/ig/ifr?url=http://hosting.gmodules.com/ig/gadgets/file/106675743525584496485/main.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script>
<br>
<center>
<iframe name="lknoppixpbx"
src="http://glassparrot.tiddlyspot.com/ "
frameborder="0"
scrolling="auto" height="400" width="460">
</iframe>
</center>
</html>
See [[Knoppix.net Forum |KnoppixPBX]]
* Install [[Knoppix 6.4.3 CD |http://knopper.net/knoppix/]] - Do NOT get the DVD.  It is too big to remaster 
# You can get the toorent at http://torrent.unix-ag.uni-kl.de/torrents/KNOPPIX_V6.4.3CD-2010-12-20-EN.torrent
# Use http://bitlet.org to download
# Install Direction
#* http://www.knoppix.net/wiki/Poor_Mans_Install
#* http://www.knoppix.net/wiki/Install_Over_Net_HowTo

*When you first boot up the CD from your hard disk it will ask you if you want a persistent file. 
**Type 2000 for 2Gig and choose OK
* Now you are ready to use ths tiddlywiki to do the rest of the install on your stock version of Knoppix
* Install Webmin to your Installed Stock Knoppix 6.4.3 CD
# Download http://prdownloads.sourceforge.net/webadmin/webmin-1.530.tar.gz
#* I prefer the gz file.over the deb file
from a root terminal in your download directory do these commands
#* apt-get update
#* apt-get install libnet-ssleay-perl checkinstall phpmyadmin
#* tar -xvvzf webmin-1.530.tar.gz 
#* cd  webmin-1.530
#* ./setup.sh /opt/webmin
* When finished signon to https://localhost:10000 
** and go to https://localhost:10000/mysql/ to Change Administration Password
***remember your root password - you will need it later
NOW WE CAN START USING SOME BIGGER SCRIPTS TO DO OUR INSTALL
Examples of how to work with scripts. See [[Zenity Links]]
# <<LaunchApplicationButton "edit test.sh with Leafpad" "Linux Leafpad" "file:///usr/bin/leafpad /usr/src/test.sh>> from Knoppix 6.4.3 CD
#* Save in /usr/src to be exicuted later
# <<LaunchApplicationButton "Lxterminal user" "Linux Lxterminal user" "file:///usr/bin/lxterminal>> from Knoppix 6.4.3 CD
#* "sudo mc" to become root user in midnight commander
#* see "man chmod" to change permissions on a file

<html>
Cut and Paste Script follows (list dialog) Run in lxterminal
<pre>
zenity --title "This is a list" --text "Please choose a fruit" --list --radiolist --column "Buy this" --column "Fruit" False Mango False Pineapple False Grapes True Strawberries
</pre>
<br>
To save the selection to a text file, simply redirect the output to a file using > filename at the end of the command.
<br>
<br>
Here is another Cut and Paste Script to Choose and Edit a file
<pre>
zenity --question --text "Would you like to edit a file?"
if [ $? = 0 ];
then
 SELECTED_FILE=`zenity --file-selection`
 zenity --text-info --width=560 --editable --filename=$SELECTED_FILE > $SELECTED_FILE.edited
 echo "Saved $SELECTED_FILE as $SELECTED_FILE.edited"
 zenity --text-info --filename=$SELECTED_FILE.edited
fi
</pre>
</html>
Now that you know how to Cut and Paste Scripts
it is time to Cut them out of the wiki, Save them and run the install
* [[LaunchPad]]
# [[apt-get.diffinstall.sh]]
# [[asterisk.sh]]
# [[Remastering Knoppix 6.4.3 CD Script]]
# [[startweb.sh]]
#* This script goes on your desktop
#*  (/home/knoppix/Destop/startweb.sh)
#*. It starts services you have installed.
#* Edit it, save it to Knoppix and execute every time
#* you boot up and need network services.
#* If you install the Gnome Desktop, services can be configured to start automatically with Webmin instead of with this script. ([[LaunchPad]] option 10).


# <<LaunchApplicationButton "edit Asterisk.sh with Leafpad" "Linux Leafpad" "file:///usr/bin/leafpad /usr/src/Asterisk.sh>> from Knoppix 6.4.3 CD
#* Save in /usr/src to be exicuted later
# <<LaunchApplicationButton "edit RemasterCD.sh with Leafpad" "Linux Leafpad" "file:///usr/bin/leafpad /usr/src/RemasterCD.sh>> from Knoppix 6.4.3 CD
#* Save in /usr/src to be exicuted later
# <<LaunchApplicationButton "Lxterminal user" "Linux Lxterminal user" "file:///usr/bin/lxterminal>> from Knoppix 6.4.3 CD
#* "sudo mc" to become root user in midnight commander
#* see "man chmod" to change permissions on a file
#* After saving the scripts run them as root


* [[How to use Google Voice for free outgoing calls on an Asterisk/FreePBX system | http://michigantelephone.wordpress.com/2010/12/21/how-to-use-google-voice-for-free-calls-on-an-asterisk-1-8freepbx-2-8-system-the-easy-way/ ]]
* [[FreeSwitch Bluebox | http://www.2600hz.org/documentation/ ]]
<<tiddlerTweaker>>
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'knoppixpbx';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n")

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 02/05/2011 19:04:04 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . | ok |
| 02/05/2011 21:47:19 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
| 03/05/2011 12:54:40 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
| 05/05/2011 13:49:50 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . | failed |
| 05/05/2011 13:50:23 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
| 05/05/2011 14:29:35 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
| 12/05/2011 17:20:35 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . | ok |
| 13/05/2011 01:20:11 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . | ok |
| 13/05/2011 01:21:13 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
| 16/05/2011 09:05:24 | GaryRust | [[/|http://knoppixpbx.tiddlyspot.com/]] | [[store.cgi|http://knoppixpbx.tiddlyspot.com/store.cgi]] | . | [[index.html | http://knoppixpbx.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

# http://www.youtube.com/videos?feature=mh
<html>
<pre>
zenity --info --title="File Recovery Program" --text="Next, you must select
which directory to recover your files to"

export target_dir=`zenity --file-selection --directory`
</pre>
</html>
# http://en.wikipedia.org/wiki/Zenity
# [[Create GUI dialogs for GNOME and KDE]] with zenity
# http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-1/
# http://www.linuxjournal.com/content/make-your-scripts-user-friendly-zenity
# http://y0nd13.blogspot.com/2007/04/what-heck.html
!usage
{{{[[apt-get.diffinstall.sh|apt-get.diffinstall.sh]]}}}
[[apt-get.diffinstall.sh|apt-get.diffinstall.sh]]
!notes
see [[diffinstall.txt]]
<html>
<pre>
#!/bin/bash
# apt-get.diffinstall.sh

#apt-get update
for i in `cat diffinstall.txt`
	do 
	apt-get -y install "$i" 
	done
</pre>
</html>

!type
text/plain
!file
file:////home/knoppix/tmp/apt-get.diffinstall.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBhcHQtZ2V0LmRpZmZpbnN0YWxsLnNoCgojYXB0LWdldCB1cGRhdGUKZm9yIGkgaW4gYGNhdCBkaWZmaW5zdGFsbC50eHRgCglkbyAKCWFwdC1nZXQgLXkgaW5zdGFsbCAiJGkiIAoJZG9uZQo=
!usage
{{{[[asterisk.sh|asterisk.sh]]}}}
[[asterisk.sh|asterisk.sh]]
!notes
<html>
<pre>
!/bin/bash
#asterisk.sh
#This script must be run in /usr/src as root


# Install Webmin
cd /usr/src
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.530.tar.gz
tar -xvvzf webmin-1.530.tar.gz
webmin-1.530/setup.sh /opt/webmin
rm -R webmin-1.530


# Get Asterisk*
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
tar -xvvzf asterisk-1.8-current.tar.gz


# Install Pre-Requisites:

apt-get update
apt-get -f install build-essential autoconf automake libtool flex bison libssl-dev libnewt-dev libncurses5-dev 
apt-get -f install linux-headers-`uname -r` 
apt-get -f install sox curl subversion subversion-tools
apt-get -f install mysql-client mysql-server libmysqlclient-dev
apt-get -f install php5 php5-cli php5-curl php5-gd php5-json php5-mcrypt php5-mhash php5-mysql 
apt-get -f install php5-suhosin php5-xmlrpc php5-xsl php-pear
apt-get -f install apache2 apache2-mpm-prefork
apt-get -f install phpmyadmin libxml2-dev php-pear
apt-get -f install 


# Setup Accounts:

adduser --system --home /var/lib/asterisk --group asterisk
mkdir /var/run/asterisk
chown -R asterisk:asterisk /var/run/asterisk


# Setup MySQL:
mysqladmin -u root password 'password'
mysqladmin -p create asterisk create asteriskcdrdb
echo "GRANT ALL PRIVILEGES ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'amp109';" | mysql -u root -p
echo "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asterisk@localhost IDENTIFIED BY 'amp109';" | mysql -u root -p


# Configure Apache Files:
#(/etc/apache2/apache2.conf):
#User asterisk
#Group asterisk

echo "Configure Apache Files User and Group, save file and exit editor"
echo "User asterisk"
echo "Group asterisk"
leafpad /etc/apache2/apache2.conf


# Compile Asterisk Sources:
cd asterisk*/
./configure && make install && make samples && cd -
cd /usr/src


#(/etc/asterisk/asterisk.conf):
#astrundir => /var/run/asterisk

echo "Configure asterisk.conf, save file and exit editor"
echo "astrundir => /var/run/asterisk"
leafpad /etc/asterisk/asterisk.conf


#(/etc/php5/apache2/php.ini):
#post_max_size = 20M
#upload_max_filesize = 20M

echo "Configure php.ini, save file and exit editor"
echo "post_max_size = 20M"
echo "upload_max_filesize = 20M"
leafpad /etc/php5/apache2/php.ini


# Install PEAR for PHP:
pear install db


# Get FreePBX
 wget http://mirror.freepbx.org/freepbx-2.8.0.tar.gz
 tar -xvvzf freepbx-2.8.0.tar.gz


# Setup Asterisk:
#
cp /usr/src/freepbx-2.8.0/start_asterisk /etc/init.d
chmod +x /etc/init.d/start_asterisk
/etc/init.d/start_asterisk start
leafpad /etc/inittab # 
chown -R asterisk:asterisk /var/spool/asterisk/
chown -R asterisk:asterisk /var/log/asterisk/
chmod -R -v 777 /var/lib/asterisk/sounds/*


#Setup FreePBX:
#svn co https://amportal.svn.sourceforge.net/svnroot/amportal/freepbx/branches/2.3/ /usr/src/freepbx
mysql -p asterisk < /usr/src/freepbx-2.8.0/SQL/newinstall.sql
mysql -p asteriskcdrdb < /usr/src/freepbx-2.8.0/SQL/cdr_mysql_table.sql
cd /usr/src/freepbx-2.8.0 && ./install_amp --username=root --password=password && cd -


#Install Openfire Jabber Server
apt-get -f install sun-java6-jre
wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_3.6.4_all.deb
dpkg -i downloadServlet?filename=openfire%2Fopenfire_3.6.4_all.deb

#Install Mediawiki
wget http://download.wikimedia.org/mediawiki/1.16/mediawiki-1.16.0.tar.gz
tar -xvvzf mediawiki-1.16.0.tar.gz
mv mediawiki-1.16.0 /var/www/wiki
chmod 777 /var/www/wiki/config

#Cleanup
# Asterisk.sh
rm freepbx-2.8.0.tar.gz
rm -R asterisk*
rm freepbx_ubuntu_howto.pdf
rm asterisk*.tar.gz
# linux-headers-2.6.36.1
# config.log
# linux-source-2.6.36.1.tar.bz2
rm -R freepbx-2.8.0
rm webmin-1.530.tar.gz
rm downloadServlet?filename=openfire%2Fopenfire_3.6.4_all.deb
rm mediawiki-1.16.0.tar.gz



</pre>
</html>
!type
text/plain
!file
file:////opt/Scripts/Asterisk/asterisk.sh
!url

!data
data:text/plain;base64,IS9iaW4vYmFzaAojYXN0ZXJpc2suc2gKI1RoaXMgc2NyaXB0IG11c3QgYmUgcnVuIGluIC91c3Ivc3JjIGFzIHJvb3QKCgojIEluc3RhbGwgV2VibWluCmNkIC91c3Ivc3JjCndnZXQgaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC93ZWJhZG1pbi93ZWJtaW4tMS41MzAudGFyLmd6CnRhciAteHZ2emYgd2VibWluLTEuNTMwLnRhci5negp3ZWJtaW4tMS41MzAvc2V0dXAuc2ggL29wdC93ZWJtaW4Kcm0gLVIgd2VibWluLTEuNTMwCgoKIyBHZXQgQXN0ZXJpc2sqCndnZXQgaHR0cDovL2Rvd25sb2Fkcy5hc3Rlcmlzay5vcmcvcHViL3RlbGVwaG9ueS9hc3Rlcmlzay9hc3Rlcmlzay0xLjgtY3VycmVudC50YXIuZ3oKdGFyIC14dnZ6ZiBhc3Rlcmlzay0xLjgtY3VycmVudC50YXIuZ3oKCgojIEluc3RhbGwgUHJlLVJlcXVpc2l0ZXM6CgphcHQtZ2V0IHVwZGF0ZQphcHQtZ2V0IC1mIGluc3RhbGwgYnVpbGQtZXNzZW50aWFsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZmxleCBiaXNvbiBsaWJzc2wtZGV2IGxpYm5ld3QtZGV2IGxpYm5jdXJzZXM1LWRldiAKYXB0LWdldCAtZiBpbnN0YWxsIGxpbnV4LWhlYWRlcnMtYHVuYW1lIC1yYCAKYXB0LWdldCAtZiBpbnN0YWxsIHNveCBjdXJsIHN1YnZlcnNpb24gc3VidmVyc2lvbi10b29scwphcHQtZ2V0IC1mIGluc3RhbGwgbXlzcWwtY2xpZW50IG15c3FsLXNlcnZlciBsaWJteXNxbGNsaWVudC1kZXYKYXB0LWdldCAtZiBpbnN0YWxsIHBocDUgcGhwNS1jbGkgcGhwNS1jdXJsIHBocDUtZ2QgcGhwNS1qc29uIHBocDUtbWNyeXB0IHBocDUtbWhhc2ggcGhwNS1teXNxbCAKYXB0LWdldCAtZiBpbnN0YWxsIHBocDUtc3Vob3NpbiBwaHA1LXhtbHJwYyBwaHA1LXhzbCBwaHAtcGVhcgphcHQtZ2V0IC1mIGluc3RhbGwgYXBhY2hlMiBhcGFjaGUyLW1wbS1wcmVmb3JrCmFwdC1nZXQgLWYgaW5zdGFsbCBwaHBteWFkbWluIGxpYnhtbDItZGV2IHBocC1wZWFyCmFwdC1nZXQgLWYgaW5zdGFsbCAKCgojIFNldHVwIEFjY291bnRzOgoKYWRkdXNlciAtLXN5c3RlbSAtLWhvbWUgL3Zhci9saWIvYXN0ZXJpc2sgLS1ncm91cCBhc3Rlcmlzawpta2RpciAvdmFyL3J1bi9hc3RlcmlzawpjaG93biAtUiBhc3Rlcmlzazphc3RlcmlzayAvdmFyL3J1bi9hc3RlcmlzawoKCiMgU2V0dXAgTXlTUUw6Cm15c3FsYWRtaW4gLXUgcm9vdCBwYXNzd29yZCAncGFzc3dvcmQnCm15c3FsYWRtaW4gLXAgY3JlYXRlIGFzdGVyaXNrIGNyZWF0ZSBhc3Rlcmlza2NkcmRiCmVjaG8gIkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIGFzdGVyaXNrLiogVE8gYXN0ZXJpc2tAbG9jYWxob3N0IElERU5USUZJRUQgQlkgJ2FtcDEwOSc7IiB8IG15c3FsIC11IHJvb3QgLXAKZWNobyAiR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gYXN0ZXJpc2tjZHJkYi4qIFRPIGFzdGVyaXNrQGxvY2FsaG9zdCBJREVOVElGSUVEIEJZICdhbXAxMDknOyIgfCBteXNxbCAtdSByb290IC1wCgoKIyBDb25maWd1cmUgQXBhY2hlIEZpbGVzOgojKC9ldGMvYXBhY2hlMi9hcGFjaGUyLmNvbmYpOgojVXNlciBhc3RlcmlzawojR3JvdXAgYXN0ZXJpc2sKCmVjaG8gIkNvbmZpZ3VyZSBBcGFjaGUgRmlsZXMgVXNlciBhbmQgR3JvdXAsIHNhdmUgZmlsZSBhbmQgZXhpdCBlZGl0b3IiCmVjaG8gIlVzZXIgYXN0ZXJpc2siCmVjaG8gIkdyb3VwIGFzdGVyaXNrIgpsZWFmcGFkIC9ldGMvYXBhY2hlMi9hcGFjaGUyLmNvbmYKCgojIENvbXBpbGUgQXN0ZXJpc2sgU291cmNlczoKY2QgYXN0ZXJpc2sqLwouL2NvbmZpZ3VyZSAmJiBtYWtlIGluc3RhbGwgJiYgbWFrZSBzYW1wbGVzICYmIGNkIC0KY2QgL3Vzci9zcmMKCgojKC9ldGMvYXN0ZXJpc2svYXN0ZXJpc2suY29uZik6CiNhc3RydW5kaXIgPT4gL3Zhci9ydW4vYXN0ZXJpc2sKCmVjaG8gIkNvbmZpZ3VyZSBhc3Rlcmlzay5jb25mLCBzYXZlIGZpbGUgYW5kIGV4aXQgZWRpdG9yIgplY2hvICJhc3RydW5kaXIgPT4gL3Zhci9ydW4vYXN0ZXJpc2siCmxlYWZwYWQgL2V0Yy9hc3Rlcmlzay9hc3Rlcmlzay5jb25mCgoKIygvZXRjL3BocDUvYXBhY2hlMi9waHAuaW5pKToKI3Bvc3RfbWF4X3NpemUgPSAyME0KI3VwbG9hZF9tYXhfZmlsZXNpemUgPSAyME0KCmVjaG8gIkNvbmZpZ3VyZSBwaHAuaW5pLCBzYXZlIGZpbGUgYW5kIGV4aXQgZWRpdG9yIgplY2hvICJwb3N0X21heF9zaXplID0gMjBNIgplY2hvICJ1cGxvYWRfbWF4X2ZpbGVzaXplID0gMjBNIgpsZWFmcGFkIC9ldGMvcGhwNS9hcGFjaGUyL3BocC5pbmkKCgojIEluc3RhbGwgUEVBUiBmb3IgUEhQOgpwZWFyIGluc3RhbGwgZGIKCgojIEdldCBGcmVlUEJYCiB3Z2V0IGh0dHA6Ly9taXJyb3IuZnJlZXBieC5vcmcvZnJlZXBieC0yLjguMC50YXIuZ3oKIHRhciAteHZ2emYgZnJlZXBieC0yLjguMC50YXIuZ3oKCgojIFNldHVwIEFzdGVyaXNrOgojCmNwIC91c3Ivc3JjL2ZyZWVwYngtMi44LjAvc3RhcnRfYXN0ZXJpc2sgL2V0Yy9pbml0LmQKY2htb2QgK3ggL2V0Yy9pbml0LmQvc3RhcnRfYXN0ZXJpc2sKL2V0Yy9pbml0LmQvc3RhcnRfYXN0ZXJpc2sgc3RhcnQKbGVhZnBhZCAvZXRjL2luaXR0YWIgIyAKY2hvd24gLVIgYXN0ZXJpc2s6YXN0ZXJpc2sgL3Zhci9zcG9vbC9hc3Rlcmlzay8KY2hvd24gLVIgYXN0ZXJpc2s6YXN0ZXJpc2sgL3Zhci9sb2cvYXN0ZXJpc2svCmNobW9kIC1SIC12IDc3NyAvdmFyL2xpYi9hc3Rlcmlzay9zb3VuZHMvKgoKCiNTZXR1cCBGcmVlUEJYOgojc3ZuIGNvIGh0dHBzOi8vYW1wb3J0YWwuc3ZuLnNvdXJjZWZvcmdlLm5ldC9zdm5yb290L2FtcG9ydGFsL2ZyZWVwYngvYnJhbmNoZXMvMi4zLyAvdXNyL3NyYy9mcmVlcGJ4Cm15c3FsIC1wIGFzdGVyaXNrIDwgL3Vzci9zcmMvZnJlZXBieC0yLjguMC9TUUwvbmV3aW5zdGFsbC5zcWwKbXlzcWwgLXAgYXN0ZXJpc2tjZHJkYiA8IC91c3Ivc3JjL2ZyZWVwYngtMi44LjAvU1FML2Nkcl9teXNxbF90YWJsZS5zcWwKY2QgL3Vzci9zcmMvZnJlZXBieC0yLjguMCAmJiAuL2luc3RhbGxfYW1wIC0tdXNlcm5hbWU9cm9vdCAtLXBhc3N3b3JkPXBhc3N3b3JkICYmIGNkIC0KCgojSW5zdGFsbCBPcGVuZmlyZSBKYWJiZXIgU2VydmVyCmFwdC1nZXQgLWYgaW5zdGFsbCBzdW4tamF2YTYtanJlCndnZXQgaHR0cDovL3d3dy5pZ25pdGVyZWFsdGltZS5vcmcvZG93bmxvYWRTZXJ2bGV0P2ZpbGVuYW1lPW9wZW5maXJlL29wZW5maXJlXzMuNi40X2FsbC5kZWIKZHBrZyAtaSBkb3dubG9hZFNlcnZsZXQ/ZmlsZW5hbWU9b3BlbmZpcmUlMkZvcGVuZmlyZV8zLjYuNF9hbGwuZGViCgojSW5zdGFsbCBNZWRpYXdpa2kKd2dldCBodHRwOi8vZG93bmxvYWQud2lraW1lZGlhLm9yZy9tZWRpYXdpa2kvMS4xNi9tZWRpYXdpa2ktMS4xNi4wLnRhci5negp0YXIgLXh2dnpmIG1lZGlhd2lraS0xLjE2LjAudGFyLmd6Cm12IG1lZGlhd2lraS0xLjE2LjAgL3Zhci93d3cvd2lraQpjaG1vZCA3NzcgL3Zhci93d3cvd2lraS9jb25maWcKCiNDbGVhbnVwCiMgQXN0ZXJpc2suc2gKcm0gZnJlZXBieC0yLjguMC50YXIuZ3oKcm0gLVIgYXN0ZXJpc2sqCnJtIGZyZWVwYnhfdWJ1bnR1X2hvd3RvLnBkZgpybSBhc3RlcmlzayoudGFyLmd6CiMgbGludXgtaGVhZGVycy0yLjYuMzYuMQojIGNvbmZpZy5sb2cKIyBsaW51eC1zb3VyY2UtMi42LjM2LjEudGFyLmJ6MgpybSAtUiBmcmVlcGJ4LTIuOC4wCnJtIHdlYm1pbi0xLjUzMC50YXIuZ3oKcm0gZG93bmxvYWRTZXJ2bGV0P2ZpbGVuYW1lPW9wZW5maXJlJTJGb3BlbmZpcmVfMy42LjRfYWxsLmRlYgpybSBtZWRpYXdpa2ktMS4xNi4wLnRhci5negoKCg==
!usage
{{{[[diff.sh|diff.sh]]}}}
[[diff.sh|diff.sh]]
!notes
==MakingDiffinstallScripts==
# Get Lists 
#* Do the command on the booted stock Knoppix 6.4.3 with and without persistance file 
#* (knoppix-data-img)
<html>
<pre>
#!/bin/bash
# Get Lists

 dpkg --get-selections > dpkg_--get-selections_KPXCDFinished.txt
 dpkg --get-selections > dpkg_--get-selections_KPXCDstock.txt
 </pre>
</html>
# Subtract Knoppix 6.2.3 from Fully Intalled System
<html>
<pre>
#!/bin/bash
# diff.sh

# diff test1 test2|awk '$1=="<"&&$2!=""{print $2}' > test3 #(the lines in test 1 and not in test2)
diff dpkg_--get-selections_KPXCDFinished.txt dpkg_--get-selections_KPXCDstock.txt|awk '$1=="<"&&$2!=""{print $2}' > diffinstall.txt
</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/tmp/diff.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKIyBkaWZmLnNoCgojIGRpZmYgdGVzdDEgdGVzdDJ8YXdrICckMT09IjwiJiYkMiE9IiJ7cHJpbnQgJDJ9JyA+IHRlc3QzICModGhlIGxpbmVzIGluIHRlc3QgMSBhbmQgbm90IGluIHRlc3QyKQpkaWZmIGRwa2dfLS1nZXQtc2VsZWN0aW9uc19LUFhDREZpbmlzaGVkLnR4dCBkcGtnXy0tZ2V0LXNlbGVjdGlvbnNfS1BYQ0RzdG9jay50eHR8YXdrICckMT09IjwiJiYkMiE9IiJ7cHJpbnQgJDJ9JyA+IGRpZmZpbnN0YWxsLnR4dAo=
!usage
{{{[[diffinstall.txt|diffinstall.txt]]}}}
[[diffinstall.txt|diffinstall.txt]]
!notes
see [[apt-get.diffinstall.sh]]
<html>
<pre>
abiword
abiword-common
abiword-plugin-grammar
abiword-plugin-mathview
adobe-flashplugin
akonadi-server
alacarte
aldo
anacron
antlr3
apache2
apache2-mpm-prefork
apache2-utils
apache2.2-bin
apache2.2-common
app-install-data
apt-show-versions
apt-xapian-index
apt-zip
aptdaemon
aptitude-doc-en
aptitude-gtk
aptlinex
ardour
arista
aspell
aspell-en
astronomical-almanac
audacity
audacity-data
autoconf
automake
automoc
autopoint
autotools-dev
baobab
bash-builtins
bicyclerepair
binfmt-support
bison
blcr-dkms
blcr-util
blender
blends-common
blop
blt
bogofilter
bogofilter-bdb
bogofilter-common
boinc-app-milkyway
boinc-client
browser-plugin-gnash
build-essential
bwidget
capplets-data
celestia
celestia-common
celestia-common-nonfree
celestia-gnome
celestia-kde
checkinstall
cheese
cheese-common
clamav
clamav-base
clamav-freshclam
cli-common
cmt
cpufrequtils
cups-pk-helper
curl
dasher
dasher-data
dbconfig-common
dctrl-tools
debarchiver
debhelper
debian-goodies
default-jdk
deskbar-applet
desktop-base
desktop-file-utils
desktop-profiles
devhelp
devhelp-common
dia
dia-common
dia-gnome
dia-libs
dia2code
dkms
dmz-cursor-theme
doc-base
docbook-xml
docbook-xsl
docbook-xsl-doc-html
dolphin
dpkg-dev
dreampie
dselect
dx
dx-doc
dxsamples
ed
education-astronomy
education-menus
education-tasks
ekiga
empathy
empathy-common
eog
epiphany-browser
epiphany-browser-data
epiphany-extensions
eric
eric-api-files
evince
evince-common
evolution
evolution-common
evolution-data-server
evolution-data-server-common
evolution-exchange
evolution-plugins
evolution-webcal
exiv2
fftw2
fgfs-base
file-roller
firebird2.5-common
firebird2.5-common-doc
flex
flightgear
freedesktop-sound-theme
freeglut3
ftplib3
g++
g++-4.4
gambas2
gambas2-dev
gambas2-doc
gambas2-gb-chart
gambas2-gb-compress
gambas2-gb-compress-bzlib2
gambas2-gb-compress-zlib
gambas2-gb-crypt
gambas2-gb-db
gambas2-gb-db-firebird
gambas2-gb-db-form
gambas2-gb-db-mysql
gambas2-gb-db-odbc
gambas2-gb-db-postgresql
gambas2-gb-db-sqlite2
gambas2-gb-db-sqlite3
gambas2-gb-desktop
gambas2-gb-form
gambas2-gb-form-dialog
gambas2-gb-form-mdi
gambas2-gb-gtk
gambas2-gb-gtk-ext
gambas2-gb-gtk-svg
gambas2-gb-gui
gambas2-gb-image
gambas2-gb-info
gambas2-gb-net
gambas2-gb-net-curl
gambas2-gb-net-smtp
gambas2-gb-opengl
gambas2-gb-pcre
gambas2-gb-pdf
gambas2-gb-qt
gambas2-gb-qt-ext
gambas2-gb-qt-kde
gambas2-gb-qt-kde-html
gambas2-gb-qt-opengl
gambas2-gb-report
gambas2-gb-sdl
gambas2-gb-sdl-sound
gambas2-gb-settings
gambas2-gb-v4l
gambas2-gb-vb
gambas2-gb-web
gambas2-gb-xml
gambas2-gb-xml-rpc
gambas2-gb-xml-xslt
gambas2-ide
gambas2-runtime
gambas2-script
gcalctool
gcj-4.4-base
gcj-4.4-jre-lib
gcx
gdb
gdbserver
gdebi
gdebi-core
gdm3
gedit
gedit-common
gedit-plugins
geoclue
geoclue-hostip
geoclue-localnet
geoclue-manual
geoclue-yahoo
geoip-bin
gettext
gftp
gftp-common
gftp-gtk
gftp-text
gir1.0-clutter-1.0
gir1.0-freedesktop
gir1.0-glib-2.0
gir1.0-gstreamer-0.10
gir1.0-gtk-2.0
gir1.0-json-glib-1.0
git
glade
glade-gnome
global
gmsh
gnash
gnash-common
gnome
gnome-about
gnome-accessibility
gnome-accessibility-themes
gnome-applets
gnome-applets-data
gnome-backgrounds
gnome-cards-data
gnome-codec-install
gnome-commander
gnome-common
gnome-control-center
gnome-core
gnome-desktop-data
gnome-desktop-environment
gnome-dictionary
gnome-disk-utility
gnome-doc-utils
gnome-games
gnome-games-data
gnome-games-extra-data
gnome-js-common
gnome-mag
gnome-media
gnome-media-common
gnome-menus
gnome-netstatus-applet
gnome-nettool
gnome-office
gnome-panel
gnome-panel-data
gnome-power-manager
gnome-screensaver
gnome-screenshot
gnome-search-tool
gnome-session
gnome-session-bin
gnome-session-canberra
gnome-session-common
gnome-settings-daemon
gnome-system-log
gnome-system-monitor
gnome-system-tools
gnome-terminal
gnome-terminal-data
gnome-themes
gnome-themes-extras
gnome-themes-more
gnome-user-guide
gnome-user-share
gnome-utils-common
gnuchess
gnuchess-book
gnumeric
gnumeric-common
gnuplot
gnuplot-nox
gnuplot-x11
gok
gpredict
groff
gstreamer0.10-alsa
gstreamer0.10-ffmpeg
gstreamer0.10-fluendo-mp3
gstreamer0.10-tools
gtk2-engines-pixbuf
gtk2-engines-smooth
gtkdialog
gucharmap
guile-1.8
guile-1.8-libs
hamster-applet
htdig
hydrogen
idle
idle-python2.6
inkscape
intltool
intltool-debian
ipython
jack-keyboard
jack-mixer
jack-rack
jack-tools
jackd
jackd2
jackd2-firewire
javascript-common
jython
k3b
k3b-data
k3b-extrathemes
kaboom
kaffeine
kaffeine-mozilla
kalarm
karbon
kchart
kdebase-bin
kdebase-data
kdebase-runtime
kdebase-runtime-data
kdelibs-bin
kdelibs-data
kdelibs4c2a
kdelibs5-data
kdelibs5-dev
kdelibs5-plugins
kdepim-runtime
kdepimlibs-kio-plugins
kdevelop
kdevelop-data
kdevelop-dev
kdevelop-doc
kdevplatform-dev
kdevplatform1-libs
kdiff3
kdiff3-doc
kdoctools
kfind
kghostview
khelpcenter
khelpcenter4
kiki
kodos
koffice-data
koffice-libs
kompare
kompozer
kompozer-data
kompozer-dev
konqueror
konqueror-nsplugins
kpdf
ksnapshot
kstars
kstars-data
ktorrent
ktorrent-data
lashd
lcov
libabiword-2.8
libaiksaurus-1.2-0c2a
libaiksaurus-1.2-data
libaiksaurusgtk-1.2-0c2a
libakonadi-contact4
libakonadi-kabc4
libakonadi-kcal4
libakonadi-kde4
libakonadi-kmime4
libakonadiprivate1
libalgorithm-diff-perl
libalgorithm-diff-xs-perl
libalgorithm-merge-perl
libalut0
libamd2.2.0
libann0
libantlr-java
libantlr-java-gcj
libapache2-mod-dnssd
libapache2-mod-php5
libapr1
libaprutil1
libaprutil1-dbd-sqlite3
libaprutil1-ldap
libapt-pkg-perl
libarpack2
libart-2.0-dev
libart2.0-cil
libarts1c2a
libartsc0
libasm3-java
libatk1.0-dev
libatk1.0-doc
libatlas3gf-base
libattica0
libaubio2
libaudiofile-dev
libavahi-client-dev
libavahi-common-dev
libavahi-glib-dev
libavahi-gobject0
libavahi-qt3-1
libavahi-ui0
libbonobo2-dev
libbonoboui2-dev
libboost-date-time1.42.0
libboost-program-options1.42.0
libboost-python1.42.0
libboost-thread1.42.0
libcairo2-dev
libcamd2.2.0
libcamel1.2-14
libccgnu2-1.7-0
libccolamd2.7.1
libccrtp1-1.7-0
libcddb2
libcfitsio3
libcgns2
libchamplain-0.4-0
libchamplain-gtk-0.4-0
libcheese-gtk18
libcholmod1.7.1
libclamav6
libcln6
libclucene0ldbl
libclutter-1.0-0
libclutter-gtk-0.10-0
libcoin60
libcolorblind0
libconfig-inifiles-perl
libconstantine-java
libcpufreq0
libcr0
libcryptui0
libcxsparse2.2.3
libdbd-mysql-perl
libdbi-perl
libdbus-1-dev
libdevhelp-1-1
libdjvulibre-text
libdjvulibre21
libdpkg-perl
libdvbpsi6
libdx4
libebackend1.2-0
libebml0
libebook1.2-9
libecal1.2-7
libedata-book1.2-2
libedata-cal1.2-7
libedataserver1.2-13
libedataserverui1.2-8
libegroupwise1.2-13
libepc-1.0-2
libepc-common
libepc-ui-1.0-2
liberror-perl
libesd0-dev
libevince2
libevolution
libexiv2-9
libexpat1-dev
libfbclient2
libffado2
libffi-dev
libflac++6
libfltk1.1
libfluidsynth1
libfont-afm-perl
libfontconfig1-dev
libfreerdp-plugins-standard
libfreerdp0
libfreetype6-dev
libfreezethaw-perl
libftgl2
libgail-dev
libgalago3
libgcj-bc
libgcj-common
libgcj10
libgconf2-dev
libgconf2.0-cil
libgconfmm-2.6-1c2
libgcrypt11-dev
libgd2-xpm
libgdal1-1.6.0
libgdata-common
libgdata-google1.2-1
libgdata1.2-1
libgdata7
libgdict-1.0-6
libgdome2-0
libgdome2-cpp-smart0c2a
libgdu-gtk0
libgee2
libgeoclue0
libgeos-3.2.0
libgeos-c1
libgexiv2-0
libginac1.5
libgirepository1.0-0
libglade2-dev
libglade2.0-cil
libglademm-2.4-1c2a
libgladeui-1-9
libglib2.0-cil
libglib2.0-dev
libglib2.0-doc
libglpk0
libgmime2.4-cil
libgnome-keyring-dev
libgnome-mag2
libgnome-media0
libgnome-menu2
libgnome-vfs2.0-cil
libgnome2-dev
libgnome2.24-cil
libgnomecanvas2-dev
libgnomecanvasmm-2.6-1c2a
libgnomekbd-common
libgnomekbd4
libgnomepanel2.24-cil
libgnomeui-dev
libgnomevfs2-dev
libgnutls-dev
libgoffice-0.8-8
libgoffice-0.8-8-common
libgoocanvas-common
libgoocanvas3
libgpg-error-dev
libgpod-common
libgpod4
libgraphicsmagick++3
libgraphicsmagick3
libgsl0ldbl
libgtk2.0-cil
libgtk2.0-dev
libgtk2.0-doc
libgtkglext1
libgtkhtml-editor-common
libgtkhtml-editor0
libgtkhtml3.14-19
libgtkimageview0
libgtkmathview0c2a
libgtksourceview2.0-0
libgtksourceview2.0-common
libgucharmap7
libgweather-common
libgweather1
libhdf4-0-alt
libhdf5-serial-1.6.6-0
libhdf5-serial-1.8.4
libhtml-format-perl
libhtml-parser-perl
libhtml-tagset-perl
libhtml-template-perl
libhtml-tree-perl
libibverbs1
libical0
libice-dev
libidl-dev
libinline-octave-perl
libinline-perl
libiodbc2
libipc-shareable-perl
libiso9660-7
libjack-jackd2-0
libjack0
libjaxp1.3-java-gcj
libjna-java
libjna-posix-java
libjs-jquery
libjs-mochikit
libjs-mootools
libjs-prototype
libjs-scriptaculous
libjson-glib-1.0-0
libk3b6
libk3b6-extracodecs
libkabc4
libkcal4
libkcddb4
libkde3support4
libkdecore5
libkdepim4
libkdesu5
libkdeui5
libkdewebkit5
libkdnssd4
libkfile4
libkholidays4
libkhtml5
libkimap4
libkimproxy4
libkio5
libkjsapi4
libkjsembed4
libkldap4
libkmediaplayer4
libkmime4
libknewstuff2-4
libknewstuff3-4
libknotifyconfig4
libkntlm4
libkonq5
libkonq5-templates
libkonqsidebarplugin4a
libkparts4
libkpathsea4
libkpathsea5
libkpimidentities4
libkpimtextedit4
libkpimutils4
libkpty4
libkresources4
libkrosscore4
libkrossui4
libktexteditor4
libktorrent-l10n
libktorrent2
libkunitconversion4
libkutils4
libkworkspace4
liblash2
liblink-grammar4
liblo7
liblog-dispatch-perl
liblog-log4perl-perl
liblog4c3
libloudmouth1-0
liblrdf0
libltdl-dev
liblua50
liblualib50
libmagick++3
libmail-sendmail-perl
libmailtools-perl
libmailtransport4
libmatroska0
libmcrypt4
libmicroblog4
libmikmod2
libmldbm-perl
libmono-addins-gui0.2-cil
libmono-addins0.2-cil
libmono-cairo2.0-cil
libmono-corlib2.0-cil
libmono-i18n-west2.0-cil
libmono-posix2.0-cil
libmono-security2.0-cil
libmono-sharpzip2.84-cil
libmono-system2.0-cil
libmpich1.0gf
libmtp8
libmysqlclient-dev
libmysqlclient16
libndesk-dbus-glib1.0-cil
libndesk-dbus1.0-cil
libnepomuk4
libnepomukquery4a
libnet-daemon-perl
libnet-dbus-perl
libnet-ssleay-perl
libnet1
libnetcdf6
libnewt-dev
libnss-mdns
libnuma1
libogdi3.2
libonig2
liboobs-1-4
libopal3.6.8
libopencascade-foundation-6.3.0
libopencascade-modeling-6.3.0
libopenmpi1.3
libopenscenegraph65
libopenthreads13
liborbit2-dev
liborsa0c2a
libots0
libpango1.0-dev
libpango1.0-doc
libparams-validate-perl
libparse-dia-sql-perl
libparse-recdescent-perl
libphonon-dev
libphonon4
libpixman-1-dev
libplasma3
libplib1
libplot2c2
libplrpc-perl
libpng12-dev
libpolkit-gtk-1-0
libpolkit-qt-1-0
libpoppler3
libpopt-dev
libportmidi0
libpq5
libprocesscore4a
libprocessui4a
libproj0
libpsiconv6
libpstoedit0c2a
libpt2.6.7
libpthread-stubs0
libpthread-stubs0-dev
libpulse-mainloop-glib0
libqca2
libqdbm14
libqhull5
libqrupdate1
libqscintilla2-5
libqt3-mt
libqt4-assistant
libqt4-dbus
libqt4-designer
libqt4-dev
libqt4-help
libqt4-multimedia
libqt4-network
libqt4-opengl
libqt4-qt3support
libqt4-script
libqt4-scripttools
libqt4-sql
libqt4-sql-mysql
libqt4-sql-sqlite
libqt4-svg
libqt4-test
libqt4-webkit
libqt4-xml
libqt4-xmlpatterns
libqtcore4
libqtgui4
librarian0
libreadline-java
libruby1.8
libsamplerate0
libsdl-image1.2
libsdl-mixer1.2
libseed0
libselinux1-dev
libsepol1-dev
libserf-0-0
libslab0a
libslang2-dev
libsm-dev
libsmpeg0
libsolid4
libsolidcontrol4
libsolidcontrolifaces4
libsoprano-dev
libsoprano4
libsox-fmt-alsa
libsox-fmt-base
libsox1b
libspectre1
libsqlite0
libssh-4
libssl-dev
libstdc++6-4.4-dev
libstreamanalyzer0
libstreams0
libstringtemplate-java
libsublime-dev
libsublime1
libsuitesparse-3.1.0
libsvn-perl
libsvn1
libsyndication4
libsys-hostname-long-perl
libt1-5
libtar
libtasn1-3-dev
libtelepathy-farsight0
libtelepathy-glib0
libtext-aligner-perl
libtext-table-perl
libthreadweaver4
libtidy-0.99-0
libtie-ixhash-perl
libtimedate-perl
libtommath0
libtool
libtorque2
libui-dialog-perl
libumfpack5.4.0
libunistring0
libupnp3
liburi-perl
libutempter0
libuuid-perl
libvamp-hostsdk3
libvamp-sdk2
libvcdinfo0
libvdpau1
libvirtodbc0
libvlc5
libvlccore4
libwpd8c2a
libwpg-0.1-1
libwps-0.1-1
libwv-1.2-3
libwww-perl
libwxbase2.6-0
libwxbase2.8-0
libwxgtk2.6-0
libwxgtk2.8-0
libx11-dev
libxau-dev
libxcb-keysyms1
libxcb-randr0
libxcb-render-util0-dev
libxcb-render0-dev
libxcb-shape0
libxcb-shm0
libxcb-xv0
libxcb1-dev
libxcomposite-dev
libxcursor-dev
libxdamage-dev
libxdmcp-dev
libxerces-c28
libxerces2-java
libxerces2-java-gcj
libxext-dev
libxfixes-dev
libxft-dev
libxi-dev
libxine1
libxine1-bin
libxine1-console
libxine1-ffmpeg
libxine1-misc-plugins
libxine1-plugins
libxine1-x
libxine2-bin
libxine2-x
libxinerama-dev
libxklavier16
libxml++2.6-2
libxml-dom-perl
libxml-parser-perl
libxml-perl
libxml-regexp-perl
libxml-twig-perl
libxml-xpathengine-perl
libxml2-dev
libxml2-utils
libxrandr-dev
libxrender-dev
libxt-dev
libzrtpcpp-1.4-0
liferea
liferea-data
lightspeed
lilypond-doc
link-grammar-dictionaries-en
m4
media-player-info
mesa-common-dev
mono-2.0-gac
mono-gac
mono-runtime
mousetweaks
mozilla-plugin-gnash
mozilla-plugin-vlc
mpi-default-bin
mysql-client
mysql-client-5.1
mysql-common
mysql-server
mysql-server-5.1
mysql-server-core-5.1
nautilus
nautilus-actions
nautilus-arista
nautilus-clamscan
nautilus-data
nautilus-filename-repairer
nautilus-gksu
nautilus-image-converter
nautilus-open-terminal
nautilus-pastebin
nautilus-scripts-manager
nautilus-sendto
nautilus-sendto-empathy
nautilus-share
octave-ad
octave-ann
octave-audio
octave-bim
octave-communications
octave-communications-common
octave-control
octave-data-smoothing
octave-epstk
octave-financial
octave-fixed
octave-fpl
octave-ftp
octave-ga
octave-general
octave-gsl
octave-ident
octave-image
octave-informationtheory
octave-integration
octave-io
octave-irsa
octave-linear-algebra
octave-mapping
octave-miscellaneous
octave-missing-functions
octave-msh
octave-multicore
octave-nan
octave-nlwing2
octave-nnet
octave-nurbs
octave-ocs
octave-odepkg
octave-optim
octave-optiminterp
octave-outliers
octave-parallel
octave-pdb
octave-signal
octave-specfun
octave-splines
octave-symbolic
octave-time
octave-zenity
octave2.1
octave3.0
octave3.0-doc
octave3.0-htmldoc
octave3.2
octave3.2-common
octave3.2-dbg
octave3.2-doc
octave3.2-htmldoc
odbcinst
odbcinst1debian2
opalmod
openfire
openjdk-6-jdk
openmpi-bin
openmpi-checkpoint
openmpi-common
openuniverse
openuniverse-common
orbit2
oxygen-icon-theme
panflute-applet
panflute-daemon
perlmagick
phonon
phonon-backend-vlc
phonon-backend-xine
php-pear
php5-cli
php5-common
php5-gd
php5-mcrypt
php5-mysql
php5-suhosin
php5-xmlrpc
php5-xsl
phpmyadmin
pidgin-plugin-pack
pkg-config
plasma-scriptengine-javascript
po-debconf
polipo
postgresql
postgresql-8.4
postgresql-client-8.4
postgresql-client-common
postgresql-common
postgresql-server-dev-all
postr
privoxy
proj-bin
proj-data
pstoedit
pyjamas
pyjamas-canvas
pyjamas-desktop
pyjamas-doc
pyjamas-gchart
pyjamas-gmap
pyjamas-pyjs
pyjamas-ui
pylint
pyqonsole
python-all
python-apt
python-apt-common
python-aptdaemon
python-aptdaemon-gtk
python-axiom
python-beaker
python-beautifulsoup
python-bluez
python-bugbuddy
python-catwalk
python-chardet
python-clamav
python-clientform
python-coherence
python-configobj
python-crypto
python-cupshelpers
python-debian
python-decorator
python-decoratortools
python-dev
python-dialog
python-dns
python-egenix-mxdatetime
python-egenix-mxtools
python-epsilon
python-evolution
python-feedparser
python-foolscap
python-formencode
python-fpconst
python-gdata
python-gdbm
python-genshi
python-glade2
python-gmenu
python-gnomeapplet
python-gnomedesktop
python-gnomekeyring
python-gnupginterface
python-gobject-dev
python-gst0.10
python-gtk2-dev
python-gtk2-doc
python-gtkglext1
python-gtksourceview2
python-gudev
python-httplib2
python-hulahop
python-lash
python-ldap
python-libxml2
python-logilab-astng
python-logilab-common
python-louie
python-lxml
python-mako
python-markupsafe
python-mechanize
python-migrate
python-nautilus
python-nevow
python-nose
python-notify
python-opengl
python-openid
python-openssl
python-pam
python-paste
python-pastebin
python-pastedeploy
python-pastescript
python-peak.rules
python-peak.util
python-pkg-resources
python-pyasn1
python-pybabel
python-pygments
python-pylons
python-pysqlite2
python-qscintilla2
python-qt3
python-qt4
python-rdflib
python-repoze.tm2
python-repoze.what
python-repoze.what-plugins
python-repoze.who
python-repoze.who-plugins
python-routes
python-scgi
python-serial
python-setuptools
python-simplejson
python-sip
python-software-properties
python-sprox
python-sqlalchemy
python-sqlalchemy-ext
python-subversion
python-tagpy
python-tempita
python-tg.devtools
python-tgext.admin
python-tk
python-toscawidgets
python-transaction
python-turbogears2
python-turbogears2-doc
python-turbojson
python-twisted
python-twisted-bin
python-twisted-conch
python-twisted-core
python-twisted-lore
python-twisted-mail
python-twisted-names
python-twisted-news
python-twisted-runner
python-twisted-web
python-twisted-words
python-utidylib
python-vte
python-weberror
python-webflash
python-webhelpers
python-webkit
python-webob
python-webtest
python-wnck
python-wxgtk2.6
python-wxgtk2.8
python-wxversion
python-xapian
python-xdg
python-xpcom
python-zope.interface
python-zope.sqlalchemy
python2.5
python2.5-minimal
python2.6-dev
qjackctl
qt4-designer
qt4-dev-tools
qt4-qmake
qt4-qtconfig
qtcreator-doc
qtoctave
regexxer
remmina
remmina-plugin-data
remmina-plugin-rdp
remmina-plugin-vnc
remuco-base
remuco-vlc
rhythmbox
rhythmbox-plugin-cdrecorder
rhythmbox-plugins
rlwrap
rosegarden
ruby
ruby1.8
samba
science-astronomy
science-config
science-tasks
seahorse
seahorse-plugins
sextractor
sflphone-daemon
sflphone-data
sflphone-gnome
sgml-data
shared-desktop-ontologies
shotwell
simgear1.9.1
simple-scan
skype
slang-cfitsio
sndfile-programs
sndfile-tools
software-center
software-properties-gtk
soprano-daemon
sound-juicer
sox
ssft
stardata-common
stellarium
stellarium-data
subversion
subversion-tools
sun-java6-bin
sun-java6-jre
swh-plugins
system-config-printer
system-config-printer-udev
system-tools-backends
tcl8.5
tcllib
tclvfs
tcptraceroute
tcsh
tedia2sql
telepathy-gabble
telepathy-mission-control-5
telepathy-salut
tex-common
texinfo
texlive-base-bin-doc
texlive-common
tk8.5
tkgate
tkgate-data
tkgate-doc
tomboy
tor
tor-geoipdb
torsocks
totem
totem-coherence
totem-common
totem-mozilla
totem-plugins
transmission-common
transmission-gtk
tsocks
ttf-lyx
unattended-upgrades
units
unixodbc
update-manager-core
update-manager-gnome
update-notifier
update-notifier-common
vcdimager
videolan-doc
vim-addon-manager
vino
virtualbox-ose
virtualbox-ose-dkms
virtualbox-ose-qt
virtuoso-minimal
virtuoso-opensource-6.1-bin
virtuoso-opensource-6.1-common
visual-regexp
vlc
vlc-data
vlc-nox
vlc-plugin-fluidsynth
vlc-plugin-jack
vlc-plugin-notify
vlc-plugin-pulse
vlc-plugin-svgalib
vncsnapshot
webkit-image-qt
wwwconfig-common
x11proto-composite-dev
x11proto-core-dev
x11proto-damage-dev
x11proto-fixes-dev
x11proto-input-dev
x11proto-kb-dev
x11proto-randr-dev
x11proto-render-dev
x11proto-xext-dev
x11proto-xinerama-dev
xdg-user-dirs
xdg-user-dirs-gtk
xorsa
xplanet
xplanet-images
xserver-xephyr
xsltproc
xtrans-dev
yelp
zlib1g-dev
</pre>
</html>
!type
text/plain
!file
file:////home/knoppix/tmp/diffinstall.txt
!url

!data
data:text/plain;base64,YWJpd29yZAphYml3b3JkLWNvbW1vbgphYml3b3JkLXBsdWdpbi1ncmFtbWFyCmFiaXdvcmQtcGx1Z2luLW1hdGh2aWV3CmFkb2JlLWZsYXNocGx1Z2luCmFrb25hZGktc2VydmVyCmFsYWNhcnRlCmFsZG8KYW5hY3JvbgphbnRscjMKYXBhY2hlMgphcGFjaGUyLW1wbS1wcmVmb3JrCmFwYWNoZTItdXRpbHMKYXBhY2hlMi4yLWJpbgphcGFjaGUyLjItY29tbW9uCmFwcC1pbnN0YWxsLWRhdGEKYXB0LXNob3ctdmVyc2lvbnMKYXB0LXhhcGlhbi1pbmRleAphcHQtemlwCmFwdGRhZW1vbgphcHRpdHVkZS1kb2MtZW4KYXB0aXR1ZGUtZ3RrCmFwdGxpbmV4CmFyZG91cgphcmlzdGEKYXNwZWxsCmFzcGVsbC1lbgphc3Ryb25vbWljYWwtYWxtYW5hYwphdWRhY2l0eQphdWRhY2l0eS1kYXRhCmF1dG9jb25mCmF1dG9tYWtlCmF1dG9tb2MKYXV0b3BvaW50CmF1dG90b29scy1kZXYKYmFvYmFiCmJhc2gtYnVpbHRpbnMKYmljeWNsZXJlcGFpcgpiaW5mbXQtc3VwcG9ydApiaXNvbgpibGNyLWRrbXMKYmxjci11dGlsCmJsZW5kZXIKYmxlbmRzLWNvbW1vbgpibG9wCmJsdApib2dvZmlsdGVyCmJvZ29maWx0ZXItYmRiCmJvZ29maWx0ZXItY29tbW9uCmJvaW5jLWFwcC1taWxreXdheQpib2luYy1jbGllbnQKYnJvd3Nlci1wbHVnaW4tZ25hc2gKYnVpbGQtZXNzZW50aWFsCmJ3aWRnZXQKY2FwcGxldHMtZGF0YQpjZWxlc3RpYQpjZWxlc3RpYS1jb21tb24KY2VsZXN0aWEtY29tbW9uLW5vbmZyZWUKY2VsZXN0aWEtZ25vbWUKY2VsZXN0aWEta2RlCmNoZWNraW5zdGFsbApjaGVlc2UKY2hlZXNlLWNvbW1vbgpjbGFtYXYKY2xhbWF2LWJhc2UKY2xhbWF2LWZyZXNoY2xhbQpjbGktY29tbW9uCmNtdApjcHVmcmVxdXRpbHMKY3Vwcy1way1oZWxwZXIKY3VybApkYXNoZXIKZGFzaGVyLWRhdGEKZGJjb25maWctY29tbW9uCmRjdHJsLXRvb2xzCmRlYmFyY2hpdmVyCmRlYmhlbHBlcgpkZWJpYW4tZ29vZGllcwpkZWZhdWx0LWpkawpkZXNrYmFyLWFwcGxldApkZXNrdG9wLWJhc2UKZGVza3RvcC1maWxlLXV0aWxzCmRlc2t0b3AtcHJvZmlsZXMKZGV2aGVscApkZXZoZWxwLWNvbW1vbgpkaWEKZGlhLWNvbW1vbgpkaWEtZ25vbWUKZGlhLWxpYnMKZGlhMmNvZGUKZGttcwpkbXotY3Vyc29yLXRoZW1lCmRvYy1iYXNlCmRvY2Jvb2steG1sCmRvY2Jvb2steHNsCmRvY2Jvb2steHNsLWRvYy1odG1sCmRvbHBoaW4KZHBrZy1kZXYKZHJlYW1waWUKZHNlbGVjdApkeApkeC1kb2MKZHhzYW1wbGVzCmVkCmVkdWNhdGlvbi1hc3Ryb25vbXkKZWR1Y2F0aW9uLW1lbnVzCmVkdWNhdGlvbi10YXNrcwpla2lnYQplbXBhdGh5CmVtcGF0aHktY29tbW9uCmVvZwplcGlwaGFueS1icm93c2VyCmVwaXBoYW55LWJyb3dzZXItZGF0YQplcGlwaGFueS1leHRlbnNpb25zCmVyaWMKZXJpYy1hcGktZmlsZXMKZXZpbmNlCmV2aW5jZS1jb21tb24KZXZvbHV0aW9uCmV2b2x1dGlvbi1jb21tb24KZXZvbHV0aW9uLWRhdGEtc2VydmVyCmV2b2x1dGlvbi1kYXRhLXNlcnZlci1jb21tb24KZXZvbHV0aW9uLWV4Y2hhbmdlCmV2b2x1dGlvbi1wbHVnaW5zCmV2b2x1dGlvbi13ZWJjYWwKZXhpdjIKZmZ0dzIKZmdmcy1iYXNlCmZpbGUtcm9sbGVyCmZpcmViaXJkMi41LWNvbW1vbgpmaXJlYmlyZDIuNS1jb21tb24tZG9jCmZsZXgKZmxpZ2h0Z2VhcgpmcmVlZGVza3RvcC1zb3VuZC10aGVtZQpmcmVlZ2x1dDMKZnRwbGliMwpnKysKZysrLTQuNApnYW1iYXMyCmdhbWJhczItZGV2CmdhbWJhczItZG9jCmdhbWJhczItZ2ItY2hhcnQKZ2FtYmFzMi1nYi1jb21wcmVzcwpnYW1iYXMyLWdiLWNvbXByZXNzLWJ6bGliMgpnYW1iYXMyLWdiLWNvbXByZXNzLXpsaWIKZ2FtYmFzMi1nYi1jcnlwdApnYW1iYXMyLWdiLWRiCmdhbWJhczItZ2ItZGItZmlyZWJpcmQKZ2FtYmFzMi1nYi1kYi1mb3JtCmdhbWJhczItZ2ItZGItbXlzcWwKZ2FtYmFzMi1nYi1kYi1vZGJjCmdhbWJhczItZ2ItZGItcG9zdGdyZXNxbApnYW1iYXMyLWdiLWRiLXNxbGl0ZTIKZ2FtYmFzMi1nYi1kYi1zcWxpdGUzCmdhbWJhczItZ2ItZGVza3RvcApnYW1iYXMyLWdiLWZvcm0KZ2FtYmFzMi1nYi1mb3JtLWRpYWxvZwpnYW1iYXMyLWdiLWZvcm0tbWRpCmdhbWJhczItZ2ItZ3RrCmdhbWJhczItZ2ItZ3RrLWV4dApnYW1iYXMyLWdiLWd0ay1zdmcKZ2FtYmFzMi1nYi1ndWkKZ2FtYmFzMi1nYi1pbWFnZQpnYW1iYXMyLWdiLWluZm8KZ2FtYmFzMi1nYi1uZXQKZ2FtYmFzMi1nYi1uZXQtY3VybApnYW1iYXMyLWdiLW5ldC1zbXRwCmdhbWJhczItZ2Itb3BlbmdsCmdhbWJhczItZ2ItcGNyZQpnYW1iYXMyLWdiLXBkZgpnYW1iYXMyLWdiLXF0CmdhbWJhczItZ2ItcXQtZXh0CmdhbWJhczItZ2ItcXQta2RlCmdhbWJhczItZ2ItcXQta2RlLWh0bWwKZ2FtYmFzMi1nYi1xdC1vcGVuZ2wKZ2FtYmFzMi1nYi1yZXBvcnQKZ2FtYmFzMi1nYi1zZGwKZ2FtYmFzMi1nYi1zZGwtc291bmQKZ2FtYmFzMi1nYi1zZXR0aW5ncwpnYW1iYXMyLWdiLXY0bApnYW1iYXMyLWdiLXZiCmdhbWJhczItZ2Itd2ViCmdhbWJhczItZ2IteG1sCmdhbWJhczItZ2IteG1sLXJwYwpnYW1iYXMyLWdiLXhtbC14c2x0CmdhbWJhczItaWRlCmdhbWJhczItcnVudGltZQpnYW1iYXMyLXNjcmlwdApnY2FsY3Rvb2wKZ2NqLTQuNC1iYXNlCmdjai00LjQtanJlLWxpYgpnY3gKZ2RiCmdkYnNlcnZlcgpnZGViaQpnZGViaS1jb3JlCmdkbTMKZ2VkaXQKZ2VkaXQtY29tbW9uCmdlZGl0LXBsdWdpbnMKZ2VvY2x1ZQpnZW9jbHVlLWhvc3RpcApnZW9jbHVlLWxvY2FsbmV0Cmdlb2NsdWUtbWFudWFsCmdlb2NsdWUteWFob28KZ2VvaXAtYmluCmdldHRleHQKZ2Z0cApnZnRwLWNvbW1vbgpnZnRwLWd0awpnZnRwLXRleHQKZ2lyMS4wLWNsdXR0ZXItMS4wCmdpcjEuMC1mcmVlZGVza3RvcApnaXIxLjAtZ2xpYi0yLjAKZ2lyMS4wLWdzdHJlYW1lci0wLjEwCmdpcjEuMC1ndGstMi4wCmdpcjEuMC1qc29uLWdsaWItMS4wCmdpdApnbGFkZQpnbGFkZS1nbm9tZQpnbG9iYWwKZ21zaApnbmFzaApnbmFzaC1jb21tb24KZ25vbWUKZ25vbWUtYWJvdXQKZ25vbWUtYWNjZXNzaWJpbGl0eQpnbm9tZS1hY2Nlc3NpYmlsaXR5LXRoZW1lcwpnbm9tZS1hcHBsZXRzCmdub21lLWFwcGxldHMtZGF0YQpnbm9tZS1iYWNrZ3JvdW5kcwpnbm9tZS1jYXJkcy1kYXRhCmdub21lLWNvZGVjLWluc3RhbGwKZ25vbWUtY29tbWFuZGVyCmdub21lLWNvbW1vbgpnbm9tZS1jb250cm9sLWNlbnRlcgpnbm9tZS1jb3JlCmdub21lLWRlc2t0b3AtZGF0YQpnbm9tZS1kZXNrdG9wLWVudmlyb25tZW50Cmdub21lLWRpY3Rpb25hcnkKZ25vbWUtZGlzay11dGlsaXR5Cmdub21lLWRvYy11dGlscwpnbm9tZS1nYW1lcwpnbm9tZS1nYW1lcy1kYXRhCmdub21lLWdhbWVzLWV4dHJhLWRhdGEKZ25vbWUtanMtY29tbW9uCmdub21lLW1hZwpnbm9tZS1tZWRpYQpnbm9tZS1tZWRpYS1jb21tb24KZ25vbWUtbWVudXMKZ25vbWUtbmV0c3RhdHVzLWFwcGxldApnbm9tZS1uZXR0b29sCmdub21lLW9mZmljZQpnbm9tZS1wYW5lbApnbm9tZS1wYW5lbC1kYXRhCmdub21lLXBvd2VyLW1hbmFnZXIKZ25vbWUtc2NyZWVuc2F2ZXIKZ25vbWUtc2NyZWVuc2hvdApnbm9tZS1zZWFyY2gtdG9vbApnbm9tZS1zZXNzaW9uCmdub21lLXNlc3Npb24tYmluCmdub21lLXNlc3Npb24tY2FuYmVycmEKZ25vbWUtc2Vzc2lvbi1jb21tb24KZ25vbWUtc2V0dGluZ3MtZGFlbW9uCmdub21lLXN5c3RlbS1sb2cKZ25vbWUtc3lzdGVtLW1vbml0b3IKZ25vbWUtc3lzdGVtLXRvb2xzCmdub21lLXRlcm1pbmFsCmdub21lLXRlcm1pbmFsLWRhdGEKZ25vbWUtdGhlbWVzCmdub21lLXRoZW1lcy1leHRyYXMKZ25vbWUtdGhlbWVzLW1vcmUKZ25vbWUtdXNlci1ndWlkZQpnbm9tZS11c2VyLXNoYXJlCmdub21lLXV0aWxzLWNvbW1vbgpnbnVjaGVzcwpnbnVjaGVzcy1ib29rCmdudW1lcmljCmdudW1lcmljLWNvbW1vbgpnbnVwbG90CmdudXBsb3Qtbm94CmdudXBsb3QteDExCmdvawpncHJlZGljdApncm9mZgpnc3RyZWFtZXIwLjEwLWFsc2EKZ3N0cmVhbWVyMC4xMC1mZm1wZWcKZ3N0cmVhbWVyMC4xMC1mbHVlbmRvLW1wMwpnc3RyZWFtZXIwLjEwLXRvb2xzCmd0azItZW5naW5lcy1waXhidWYKZ3RrMi1lbmdpbmVzLXNtb290aApndGtkaWFsb2cKZ3VjaGFybWFwCmd1aWxlLTEuOApndWlsZS0xLjgtbGlicwpoYW1zdGVyLWFwcGxldApodGRpZwpoeWRyb2dlbgppZGxlCmlkbGUtcHl0aG9uMi42Cmlua3NjYXBlCmludGx0b29sCmludGx0b29sLWRlYmlhbgppcHl0aG9uCmphY2sta2V5Ym9hcmQKamFjay1taXhlcgpqYWNrLXJhY2sKamFjay10b29scwpqYWNrZApqYWNrZDIKamFja2QyLWZpcmV3aXJlCmphdmFzY3JpcHQtY29tbW9uCmp5dGhvbgprM2IKazNiLWRhdGEKazNiLWV4dHJhdGhlbWVzCmthYm9vbQprYWZmZWluZQprYWZmZWluZS1tb3ppbGxhCmthbGFybQprYXJib24Ka2NoYXJ0CmtkZWJhc2UtYmluCmtkZWJhc2UtZGF0YQprZGViYXNlLXJ1bnRpbWUKa2RlYmFzZS1ydW50aW1lLWRhdGEKa2RlbGlicy1iaW4Ka2RlbGlicy1kYXRhCmtkZWxpYnM0YzJhCmtkZWxpYnM1LWRhdGEKa2RlbGliczUtZGV2CmtkZWxpYnM1LXBsdWdpbnMKa2RlcGltLXJ1bnRpbWUKa2RlcGltbGlicy1raW8tcGx1Z2lucwprZGV2ZWxvcAprZGV2ZWxvcC1kYXRhCmtkZXZlbG9wLWRldgprZGV2ZWxvcC1kb2MKa2RldnBsYXRmb3JtLWRldgprZGV2cGxhdGZvcm0xLWxpYnMKa2RpZmYzCmtkaWZmMy1kb2MKa2RvY3Rvb2xzCmtmaW5kCmtnaG9zdHZpZXcKa2hlbHBjZW50ZXIKa2hlbHBjZW50ZXI0Cmtpa2kKa29kb3MKa29mZmljZS1kYXRhCmtvZmZpY2UtbGlicwprb21wYXJlCmtvbXBvemVyCmtvbXBvemVyLWRhdGEKa29tcG96ZXItZGV2CmtvbnF1ZXJvcgprb25xdWVyb3ItbnNwbHVnaW5zCmtwZGYKa3NuYXBzaG90CmtzdGFycwprc3RhcnMtZGF0YQprdG9ycmVudAprdG9ycmVudC1kYXRhCmxhc2hkCmxjb3YKbGliYWJpd29yZC0yLjgKbGliYWlrc2F1cnVzLTEuMi0wYzJhCmxpYmFpa3NhdXJ1cy0xLjItZGF0YQpsaWJhaWtzYXVydXNndGstMS4yLTBjMmEKbGliYWtvbmFkaS1jb250YWN0NApsaWJha29uYWRpLWthYmM0CmxpYmFrb25hZGkta2NhbDQKbGliYWtvbmFkaS1rZGU0CmxpYmFrb25hZGkta21pbWU0CmxpYmFrb25hZGlwcml2YXRlMQpsaWJhbGdvcml0aG0tZGlmZi1wZXJsCmxpYmFsZ29yaXRobS1kaWZmLXhzLXBlcmwKbGliYWxnb3JpdGhtLW1lcmdlLXBlcmwKbGliYWx1dDAKbGliYW1kMi4yLjAKbGliYW5uMApsaWJhbnRsci1qYXZhCmxpYmFudGxyLWphdmEtZ2NqCmxpYmFwYWNoZTItbW9kLWRuc3NkCmxpYmFwYWNoZTItbW9kLXBocDUKbGliYXByMQpsaWJhcHJ1dGlsMQpsaWJhcHJ1dGlsMS1kYmQtc3FsaXRlMwpsaWJhcHJ1dGlsMS1sZGFwCmxpYmFwdC1wa2ctcGVybApsaWJhcnBhY2syCmxpYmFydC0yLjAtZGV2CmxpYmFydDIuMC1jaWwKbGliYXJ0czFjMmEKbGliYXJ0c2MwCmxpYmFzbTMtamF2YQpsaWJhdGsxLjAtZGV2CmxpYmF0azEuMC1kb2MKbGliYXRsYXMzZ2YtYmFzZQpsaWJhdHRpY2EwCmxpYmF1YmlvMgpsaWJhdWRpb2ZpbGUtZGV2CmxpYmF2YWhpLWNsaWVudC1kZXYKbGliYXZhaGktY29tbW9uLWRldgpsaWJhdmFoaS1nbGliLWRldgpsaWJhdmFoaS1nb2JqZWN0MApsaWJhdmFoaS1xdDMtMQpsaWJhdmFoaS11aTAKbGliYm9ub2JvMi1kZXYKbGliYm9ub2JvdWkyLWRldgpsaWJib29zdC1kYXRlLXRpbWUxLjQyLjAKbGliYm9vc3QtcHJvZ3JhbS1vcHRpb25zMS40Mi4wCmxpYmJvb3N0LXB5dGhvbjEuNDIuMApsaWJib29zdC10aHJlYWQxLjQyLjAKbGliY2Fpcm8yLWRldgpsaWJjYW1kMi4yLjAKbGliY2FtZWwxLjItMTQKbGliY2NnbnUyLTEuNy0wCmxpYmNjb2xhbWQyLjcuMQpsaWJjY3J0cDEtMS43LTAKbGliY2RkYjIKbGliY2ZpdHNpbzMKbGliY2duczIKbGliY2hhbXBsYWluLTAuNC0wCmxpYmNoYW1wbGFpbi1ndGstMC40LTAKbGliY2hlZXNlLWd0azE4CmxpYmNob2xtb2QxLjcuMQpsaWJjbGFtYXY2CmxpYmNsbjYKbGliY2x1Y2VuZTBsZGJsCmxpYmNsdXR0ZXItMS4wLTAKbGliY2x1dHRlci1ndGstMC4xMC0wCmxpYmNvaW42MApsaWJjb2xvcmJsaW5kMApsaWJjb25maWctaW5pZmlsZXMtcGVybApsaWJjb25zdGFudGluZS1qYXZhCmxpYmNwdWZyZXEwCmxpYmNyMApsaWJjcnlwdHVpMApsaWJjeHNwYXJzZTIuMi4zCmxpYmRiZC1teXNxbC1wZXJsCmxpYmRiaS1wZXJsCmxpYmRidXMtMS1kZXYKbGliZGV2aGVscC0xLTEKbGliZGp2dWxpYnJlLXRleHQKbGliZGp2dWxpYnJlMjEKbGliZHBrZy1wZXJsCmxpYmR2YnBzaTYKbGliZHg0CmxpYmViYWNrZW5kMS4yLTAKbGliZWJtbDAKbGliZWJvb2sxLjItOQpsaWJlY2FsMS4yLTcKbGliZWRhdGEtYm9vazEuMi0yCmxpYmVkYXRhLWNhbDEuMi03CmxpYmVkYXRhc2VydmVyMS4yLTEzCmxpYmVkYXRhc2VydmVydWkxLjItOApsaWJlZ3JvdXB3aXNlMS4yLTEzCmxpYmVwYy0xLjAtMgpsaWJlcGMtY29tbW9uCmxpYmVwYy11aS0xLjAtMgpsaWJlcnJvci1wZXJsCmxpYmVzZDAtZGV2CmxpYmV2aW5jZTIKbGliZXZvbHV0aW9uCmxpYmV4aXYyLTkKbGliZXhwYXQxLWRldgpsaWJmYmNsaWVudDIKbGliZmZhZG8yCmxpYmZmaS1kZXYKbGliZmxhYysrNgpsaWJmbHRrMS4xCmxpYmZsdWlkc3ludGgxCmxpYmZvbnQtYWZtLXBlcmwKbGliZm9udGNvbmZpZzEtZGV2CmxpYmZyZWVyZHAtcGx1Z2lucy1zdGFuZGFyZApsaWJmcmVlcmRwMApsaWJmcmVldHlwZTYtZGV2CmxpYmZyZWV6ZXRoYXctcGVybApsaWJmdGdsMgpsaWJnYWlsLWRldgpsaWJnYWxhZ28zCmxpYmdjai1iYwpsaWJnY2otY29tbW9uCmxpYmdjajEwCmxpYmdjb25mMi1kZXYKbGliZ2NvbmYyLjAtY2lsCmxpYmdjb25mbW0tMi42LTFjMgpsaWJnY3J5cHQxMS1kZXYKbGliZ2QyLXhwbQpsaWJnZGFsMS0xLjYuMApsaWJnZGF0YS1jb21tb24KbGliZ2RhdGEtZ29vZ2xlMS4yLTEKbGliZ2RhdGExLjItMQpsaWJnZGF0YTcKbGliZ2RpY3QtMS4wLTYKbGliZ2RvbWUyLTAKbGliZ2RvbWUyLWNwcC1zbWFydDBjMmEKbGliZ2R1LWd0azAKbGliZ2VlMgpsaWJnZW9jbHVlMApsaWJnZW9zLTMuMi4wCmxpYmdlb3MtYzEKbGliZ2V4aXYyLTAKbGliZ2luYWMxLjUKbGliZ2lyZXBvc2l0b3J5MS4wLTAKbGliZ2xhZGUyLWRldgpsaWJnbGFkZTIuMC1jaWwKbGliZ2xhZGVtbS0yLjQtMWMyYQpsaWJnbGFkZXVpLTEtOQpsaWJnbGliMi4wLWNpbApsaWJnbGliMi4wLWRldgpsaWJnbGliMi4wLWRvYwpsaWJnbHBrMApsaWJnbWltZTIuNC1jaWwKbGliZ25vbWUta2V5cmluZy1kZXYKbGliZ25vbWUtbWFnMgpsaWJnbm9tZS1tZWRpYTAKbGliZ25vbWUtbWVudTIKbGliZ25vbWUtdmZzMi4wLWNpbApsaWJnbm9tZTItZGV2CmxpYmdub21lMi4yNC1jaWwKbGliZ25vbWVjYW52YXMyLWRldgpsaWJnbm9tZWNhbnZhc21tLTIuNi0xYzJhCmxpYmdub21la2JkLWNvbW1vbgpsaWJnbm9tZWtiZDQKbGliZ25vbWVwYW5lbDIuMjQtY2lsCmxpYmdub21ldWktZGV2CmxpYmdub21ldmZzMi1kZXYKbGliZ251dGxzLWRldgpsaWJnb2ZmaWNlLTAuOC04CmxpYmdvZmZpY2UtMC44LTgtY29tbW9uCmxpYmdvb2NhbnZhcy1jb21tb24KbGliZ29vY2FudmFzMwpsaWJncGctZXJyb3ItZGV2CmxpYmdwb2QtY29tbW9uCmxpYmdwb2Q0CmxpYmdyYXBoaWNzbWFnaWNrKyszCmxpYmdyYXBoaWNzbWFnaWNrMwpsaWJnc2wwbGRibApsaWJndGsyLjAtY2lsCmxpYmd0azIuMC1kZXYKbGliZ3RrMi4wLWRvYwpsaWJndGtnbGV4dDEKbGliZ3RraHRtbC1lZGl0b3ItY29tbW9uCmxpYmd0a2h0bWwtZWRpdG9yMApsaWJndGtodG1sMy4xNC0xOQpsaWJndGtpbWFnZXZpZXcwCmxpYmd0a21hdGh2aWV3MGMyYQpsaWJndGtzb3VyY2V2aWV3Mi4wLTAKbGliZ3Rrc291cmNldmlldzIuMC1jb21tb24KbGliZ3VjaGFybWFwNwpsaWJnd2VhdGhlci1jb21tb24KbGliZ3dlYXRoZXIxCmxpYmhkZjQtMC1hbHQKbGliaGRmNS1zZXJpYWwtMS42LjYtMApsaWJoZGY1LXNlcmlhbC0xLjguNApsaWJodG1sLWZvcm1hdC1wZXJsCmxpYmh0bWwtcGFyc2VyLXBlcmwKbGliaHRtbC10YWdzZXQtcGVybApsaWJodG1sLXRlbXBsYXRlLXBlcmwKbGliaHRtbC10cmVlLXBlcmwKbGliaWJ2ZXJiczEKbGliaWNhbDAKbGliaWNlLWRldgpsaWJpZGwtZGV2CmxpYmlubGluZS1vY3RhdmUtcGVybApsaWJpbmxpbmUtcGVybApsaWJpb2RiYzIKbGliaXBjLXNoYXJlYWJsZS1wZXJsCmxpYmlzbzk2NjAtNwpsaWJqYWNrLWphY2tkMi0wCmxpYmphY2swCmxpYmpheHAxLjMtamF2YS1nY2oKbGliam5hLWphdmEKbGliam5hLXBvc2l4LWphdmEKbGlianMtanF1ZXJ5CmxpYmpzLW1vY2hpa2l0CmxpYmpzLW1vb3Rvb2xzCmxpYmpzLXByb3RvdHlwZQpsaWJqcy1zY3JpcHRhY3Vsb3VzCmxpYmpzb24tZ2xpYi0xLjAtMApsaWJrM2I2CmxpYmszYjYtZXh0cmFjb2RlY3MKbGlia2FiYzQKbGlia2NhbDQKbGlia2NkZGI0CmxpYmtkZTNzdXBwb3J0NApsaWJrZGVjb3JlNQpsaWJrZGVwaW00CmxpYmtkZXN1NQpsaWJrZGV1aTUKbGlia2Rld2Via2l0NQpsaWJrZG5zc2Q0CmxpYmtmaWxlNApsaWJraG9saWRheXM0CmxpYmtodG1sNQpsaWJraW1hcDQKbGlia2ltcHJveHk0CmxpYmtpbzUKbGlia2pzYXBpNApsaWJranNlbWJlZDQKbGlia2xkYXA0CmxpYmttZWRpYXBsYXllcjQKbGlia21pbWU0CmxpYmtuZXdzdHVmZjItNApsaWJrbmV3c3R1ZmYzLTQKbGlia25vdGlmeWNvbmZpZzQKbGlia250bG00CmxpYmtvbnE1CmxpYmtvbnE1LXRlbXBsYXRlcwpsaWJrb25xc2lkZWJhcnBsdWdpbjRhCmxpYmtwYXJ0czQKbGlia3BhdGhzZWE0CmxpYmtwYXRoc2VhNQpsaWJrcGltaWRlbnRpdGllczQKbGlia3BpbXRleHRlZGl0NApsaWJrcGltdXRpbHM0CmxpYmtwdHk0CmxpYmtyZXNvdXJjZXM0CmxpYmtyb3NzY29yZTQKbGlia3Jvc3N1aTQKbGlia3RleHRlZGl0b3I0CmxpYmt0b3JyZW50LWwxMG4KbGlia3RvcnJlbnQyCmxpYmt1bml0Y29udmVyc2lvbjQKbGlia3V0aWxzNApsaWJrd29ya3NwYWNlNApsaWJsYXNoMgpsaWJsaW5rLWdyYW1tYXI0CmxpYmxvNwpsaWJsb2ctZGlzcGF0Y2gtcGVybApsaWJsb2ctbG9nNHBlcmwtcGVybApsaWJsb2c0YzMKbGlibG91ZG1vdXRoMS0wCmxpYmxyZGYwCmxpYmx0ZGwtZGV2CmxpYmx1YTUwCmxpYmx1YWxpYjUwCmxpYm1hZ2ljaysrMwpsaWJtYWlsLXNlbmRtYWlsLXBlcmwKbGlibWFpbHRvb2xzLXBlcmwKbGlibWFpbHRyYW5zcG9ydDQKbGlibWF0cm9za2EwCmxpYm1jcnlwdDQKbGlibWljcm9ibG9nNApsaWJtaWttb2QyCmxpYm1sZGJtLXBlcmwKbGlibW9uby1hZGRpbnMtZ3VpMC4yLWNpbApsaWJtb25vLWFkZGluczAuMi1jaWwKbGlibW9uby1jYWlybzIuMC1jaWwKbGlibW9uby1jb3JsaWIyLjAtY2lsCmxpYm1vbm8taTE4bi13ZXN0Mi4wLWNpbApsaWJtb25vLXBvc2l4Mi4wLWNpbApsaWJtb25vLXNlY3VyaXR5Mi4wLWNpbApsaWJtb25vLXNoYXJwemlwMi44NC1jaWwKbGlibW9uby1zeXN0ZW0yLjAtY2lsCmxpYm1waWNoMS4wZ2YKbGlibXRwOApsaWJteXNxbGNsaWVudC1kZXYKbGlibXlzcWxjbGllbnQxNgpsaWJuZGVzay1kYnVzLWdsaWIxLjAtY2lsCmxpYm5kZXNrLWRidXMxLjAtY2lsCmxpYm5lcG9tdWs0CmxpYm5lcG9tdWtxdWVyeTRhCmxpYm5ldC1kYWVtb24tcGVybApsaWJuZXQtZGJ1cy1wZXJsCmxpYm5ldC1zc2xlYXktcGVybApsaWJuZXQxCmxpYm5ldGNkZjYKbGlibmV3dC1kZXYKbGlibnNzLW1kbnMKbGlibnVtYTEKbGlib2dkaTMuMgpsaWJvbmlnMgpsaWJvb2JzLTEtNApsaWJvcGFsMy42LjgKbGlib3BlbmNhc2NhZGUtZm91bmRhdGlvbi02LjMuMApsaWJvcGVuY2FzY2FkZS1tb2RlbGluZy02LjMuMApsaWJvcGVubXBpMS4zCmxpYm9wZW5zY2VuZWdyYXBoNjUKbGlib3BlbnRocmVhZHMxMwpsaWJvcmJpdDItZGV2CmxpYm9yc2EwYzJhCmxpYm90czAKbGlicGFuZ28xLjAtZGV2CmxpYnBhbmdvMS4wLWRvYwpsaWJwYXJhbXMtdmFsaWRhdGUtcGVybApsaWJwYXJzZS1kaWEtc3FsLXBlcmwKbGlicGFyc2UtcmVjZGVzY2VudC1wZXJsCmxpYnBob25vbi1kZXYKbGlicGhvbm9uNApsaWJwaXhtYW4tMS1kZXYKbGlicGxhc21hMwpsaWJwbGliMQpsaWJwbG90MmMyCmxpYnBscnBjLXBlcmwKbGlicG5nMTItZGV2CmxpYnBvbGtpdC1ndGstMS0wCmxpYnBvbGtpdC1xdC0xLTAKbGlicG9wcGxlcjMKbGlicG9wdC1kZXYKbGlicG9ydG1pZGkwCmxpYnBxNQpsaWJwcm9jZXNzY29yZTRhCmxpYnByb2Nlc3N1aTRhCmxpYnByb2owCmxpYnBzaWNvbnY2CmxpYnBzdG9lZGl0MGMyYQpsaWJwdDIuNi43CmxpYnB0aHJlYWQtc3R1YnMwCmxpYnB0aHJlYWQtc3R1YnMwLWRldgpsaWJwdWxzZS1tYWlubG9vcC1nbGliMApsaWJxY2EyCmxpYnFkYm0xNApsaWJxaHVsbDUKbGlicXJ1cGRhdGUxCmxpYnFzY2ludGlsbGEyLTUKbGlicXQzLW10CmxpYnF0NC1hc3Npc3RhbnQKbGlicXQ0LWRidXMKbGlicXQ0LWRlc2lnbmVyCmxpYnF0NC1kZXYKbGlicXQ0LWhlbHAKbGlicXQ0LW11bHRpbWVkaWEKbGlicXQ0LW5ldHdvcmsKbGlicXQ0LW9wZW5nbApsaWJxdDQtcXQzc3VwcG9ydApsaWJxdDQtc2NyaXB0CmxpYnF0NC1zY3JpcHR0b29scwpsaWJxdDQtc3FsCmxpYnF0NC1zcWwtbXlzcWwKbGlicXQ0LXNxbC1zcWxpdGUKbGlicXQ0LXN2ZwpsaWJxdDQtdGVzdApsaWJxdDQtd2Via2l0CmxpYnF0NC14bWwKbGlicXQ0LXhtbHBhdHRlcm5zCmxpYnF0Y29yZTQKbGlicXRndWk0CmxpYnJhcmlhbjAKbGlicmVhZGxpbmUtamF2YQpsaWJydWJ5MS44CmxpYnNhbXBsZXJhdGUwCmxpYnNkbC1pbWFnZTEuMgpsaWJzZGwtbWl4ZXIxLjIKbGlic2VlZDAKbGlic2VsaW51eDEtZGV2CmxpYnNlcG9sMS1kZXYKbGlic2VyZi0wLTAKbGlic2xhYjBhCmxpYnNsYW5nMi1kZXYKbGlic20tZGV2CmxpYnNtcGVnMApsaWJzb2xpZDQKbGlic29saWRjb250cm9sNApsaWJzb2xpZGNvbnRyb2xpZmFjZXM0CmxpYnNvcHJhbm8tZGV2CmxpYnNvcHJhbm80CmxpYnNveC1mbXQtYWxzYQpsaWJzb3gtZm10LWJhc2UKbGlic294MWIKbGlic3BlY3RyZTEKbGlic3FsaXRlMApsaWJzc2gtNApsaWJzc2wtZGV2CmxpYnN0ZGMrKzYtNC40LWRldgpsaWJzdHJlYW1hbmFseXplcjAKbGlic3RyZWFtczAKbGlic3RyaW5ndGVtcGxhdGUtamF2YQpsaWJzdWJsaW1lLWRldgpsaWJzdWJsaW1lMQpsaWJzdWl0ZXNwYXJzZS0zLjEuMApsaWJzdm4tcGVybApsaWJzdm4xCmxpYnN5bmRpY2F0aW9uNApsaWJzeXMtaG9zdG5hbWUtbG9uZy1wZXJsCmxpYnQxLTUKbGlidGFyCmxpYnRhc24xLTMtZGV2CmxpYnRlbGVwYXRoeS1mYXJzaWdodDAKbGlidGVsZXBhdGh5LWdsaWIwCmxpYnRleHQtYWxpZ25lci1wZXJsCmxpYnRleHQtdGFibGUtcGVybApsaWJ0aHJlYWR3ZWF2ZXI0CmxpYnRpZHktMC45OS0wCmxpYnRpZS1peGhhc2gtcGVybApsaWJ0aW1lZGF0ZS1wZXJsCmxpYnRvbW1hdGgwCmxpYnRvb2wKbGlidG9ycXVlMgpsaWJ1aS1kaWFsb2ctcGVybApsaWJ1bWZwYWNrNS40LjAKbGlidW5pc3RyaW5nMApsaWJ1cG5wMwpsaWJ1cmktcGVybApsaWJ1dGVtcHRlcjAKbGlidXVpZC1wZXJsCmxpYnZhbXAtaG9zdHNkazMKbGlidmFtcC1zZGsyCmxpYnZjZGluZm8wCmxpYnZkcGF1MQpsaWJ2aXJ0b2RiYzAKbGlidmxjNQpsaWJ2bGNjb3JlNApsaWJ3cGQ4YzJhCmxpYndwZy0wLjEtMQpsaWJ3cHMtMC4xLTEKbGlid3YtMS4yLTMKbGlid3d3LXBlcmwKbGlid3hiYXNlMi42LTAKbGlid3hiYXNlMi44LTAKbGlid3hndGsyLjYtMApsaWJ3eGd0azIuOC0wCmxpYngxMS1kZXYKbGlieGF1LWRldgpsaWJ4Y2Ita2V5c3ltczEKbGlieGNiLXJhbmRyMApsaWJ4Y2ItcmVuZGVyLXV0aWwwLWRldgpsaWJ4Y2ItcmVuZGVyMC1kZXYKbGlieGNiLXNoYXBlMApsaWJ4Y2Itc2htMApsaWJ4Y2IteHYwCmxpYnhjYjEtZGV2CmxpYnhjb21wb3NpdGUtZGV2CmxpYnhjdXJzb3ItZGV2CmxpYnhkYW1hZ2UtZGV2CmxpYnhkbWNwLWRldgpsaWJ4ZXJjZXMtYzI4CmxpYnhlcmNlczItamF2YQpsaWJ4ZXJjZXMyLWphdmEtZ2NqCmxpYnhleHQtZGV2CmxpYnhmaXhlcy1kZXYKbGlieGZ0LWRldgpsaWJ4aS1kZXYKbGlieGluZTEKbGlieGluZTEtYmluCmxpYnhpbmUxLWNvbnNvbGUKbGlieGluZTEtZmZtcGVnCmxpYnhpbmUxLW1pc2MtcGx1Z2lucwpsaWJ4aW5lMS1wbHVnaW5zCmxpYnhpbmUxLXgKbGlieGluZTItYmluCmxpYnhpbmUyLXgKbGlieGluZXJhbWEtZGV2CmxpYnhrbGF2aWVyMTYKbGlieG1sKysyLjYtMgpsaWJ4bWwtZG9tLXBlcmwKbGlieG1sLXBhcnNlci1wZXJsCmxpYnhtbC1wZXJsCmxpYnhtbC1yZWdleHAtcGVybApsaWJ4bWwtdHdpZy1wZXJsCmxpYnhtbC14cGF0aGVuZ2luZS1wZXJsCmxpYnhtbDItZGV2CmxpYnhtbDItdXRpbHMKbGlieHJhbmRyLWRldgpsaWJ4cmVuZGVyLWRldgpsaWJ4dC1kZXYKbGlienJ0cGNwcC0xLjQtMApsaWZlcmVhCmxpZmVyZWEtZGF0YQpsaWdodHNwZWVkCmxpbHlwb25kLWRvYwpsaW5rLWdyYW1tYXItZGljdGlvbmFyaWVzLWVuCm00Cm1lZGlhLXBsYXllci1pbmZvCm1lc2EtY29tbW9uLWRldgptb25vLTIuMC1nYWMKbW9uby1nYWMKbW9uby1ydW50aW1lCm1vdXNldHdlYWtzCm1vemlsbGEtcGx1Z2luLWduYXNoCm1vemlsbGEtcGx1Z2luLXZsYwptcGktZGVmYXVsdC1iaW4KbXlzcWwtY2xpZW50Cm15c3FsLWNsaWVudC01LjEKbXlzcWwtY29tbW9uCm15c3FsLXNlcnZlcgpteXNxbC1zZXJ2ZXItNS4xCm15c3FsLXNlcnZlci1jb3JlLTUuMQpuYXV0aWx1cwpuYXV0aWx1cy1hY3Rpb25zCm5hdXRpbHVzLWFyaXN0YQpuYXV0aWx1cy1jbGFtc2NhbgpuYXV0aWx1cy1kYXRhCm5hdXRpbHVzLWZpbGVuYW1lLXJlcGFpcmVyCm5hdXRpbHVzLWdrc3UKbmF1dGlsdXMtaW1hZ2UtY29udmVydGVyCm5hdXRpbHVzLW9wZW4tdGVybWluYWwKbmF1dGlsdXMtcGFzdGViaW4KbmF1dGlsdXMtc2NyaXB0cy1tYW5hZ2VyCm5hdXRpbHVzLXNlbmR0bwpuYXV0aWx1cy1zZW5kdG8tZW1wYXRoeQpuYXV0aWx1cy1zaGFyZQpvY3RhdmUtYWQKb2N0YXZlLWFubgpvY3RhdmUtYXVkaW8Kb2N0YXZlLWJpbQpvY3RhdmUtY29tbXVuaWNhdGlvbnMKb2N0YXZlLWNvbW11bmljYXRpb25zLWNvbW1vbgpvY3RhdmUtY29udHJvbApvY3RhdmUtZGF0YS1zbW9vdGhpbmcKb2N0YXZlLWVwc3RrCm9jdGF2ZS1maW5hbmNpYWwKb2N0YXZlLWZpeGVkCm9jdGF2ZS1mcGwKb2N0YXZlLWZ0cApvY3RhdmUtZ2EKb2N0YXZlLWdlbmVyYWwKb2N0YXZlLWdzbApvY3RhdmUtaWRlbnQKb2N0YXZlLWltYWdlCm9jdGF2ZS1pbmZvcm1hdGlvbnRoZW9yeQpvY3RhdmUtaW50ZWdyYXRpb24Kb2N0YXZlLWlvCm9jdGF2ZS1pcnNhCm9jdGF2ZS1saW5lYXItYWxnZWJyYQpvY3RhdmUtbWFwcGluZwpvY3RhdmUtbWlzY2VsbGFuZW91cwpvY3RhdmUtbWlzc2luZy1mdW5jdGlvbnMKb2N0YXZlLW1zaApvY3RhdmUtbXVsdGljb3JlCm9jdGF2ZS1uYW4Kb2N0YXZlLW5sd2luZzIKb2N0YXZlLW5uZXQKb2N0YXZlLW51cmJzCm9jdGF2ZS1vY3MKb2N0YXZlLW9kZXBrZwpvY3RhdmUtb3B0aW0Kb2N0YXZlLW9wdGltaW50ZXJwCm9jdGF2ZS1vdXRsaWVycwpvY3RhdmUtcGFyYWxsZWwKb2N0YXZlLXBkYgpvY3RhdmUtc2lnbmFsCm9jdGF2ZS1zcGVjZnVuCm9jdGF2ZS1zcGxpbmVzCm9jdGF2ZS1zeW1ib2xpYwpvY3RhdmUtdGltZQpvY3RhdmUtemVuaXR5Cm9jdGF2ZTIuMQpvY3RhdmUzLjAKb2N0YXZlMy4wLWRvYwpvY3RhdmUzLjAtaHRtbGRvYwpvY3RhdmUzLjIKb2N0YXZlMy4yLWNvbW1vbgpvY3RhdmUzLjItZGJnCm9jdGF2ZTMuMi1kb2MKb2N0YXZlMy4yLWh0bWxkb2MKb2RiY2luc3QKb2RiY2luc3QxZGViaWFuMgpvcGFsbW9kCm9wZW5maXJlCm9wZW5qZGstNi1qZGsKb3Blbm1waS1iaW4Kb3Blbm1waS1jaGVja3BvaW50Cm9wZW5tcGktY29tbW9uCm9wZW51bml2ZXJzZQpvcGVudW5pdmVyc2UtY29tbW9uCm9yYml0MgpveHlnZW4taWNvbi10aGVtZQpwYW5mbHV0ZS1hcHBsZXQKcGFuZmx1dGUtZGFlbW9uCnBlcmxtYWdpY2sKcGhvbm9uCnBob25vbi1iYWNrZW5kLXZsYwpwaG9ub24tYmFja2VuZC14aW5lCnBocC1wZWFyCnBocDUtY2xpCnBocDUtY29tbW9uCnBocDUtZ2QKcGhwNS1tY3J5cHQKcGhwNS1teXNxbApwaHA1LXN1aG9zaW4KcGhwNS14bWxycGMKcGhwNS14c2wKcGhwbXlhZG1pbgpwaWRnaW4tcGx1Z2luLXBhY2sKcGtnLWNvbmZpZwpwbGFzbWEtc2NyaXB0ZW5naW5lLWphdmFzY3JpcHQKcG8tZGViY29uZgpwb2xpcG8KcG9zdGdyZXNxbApwb3N0Z3Jlc3FsLTguNApwb3N0Z3Jlc3FsLWNsaWVudC04LjQKcG9zdGdyZXNxbC1jbGllbnQtY29tbW9uCnBvc3RncmVzcWwtY29tbW9uCnBvc3RncmVzcWwtc2VydmVyLWRldi1hbGwKcG9zdHIKcHJpdm94eQpwcm9qLWJpbgpwcm9qLWRhdGEKcHN0b2VkaXQKcHlqYW1hcwpweWphbWFzLWNhbnZhcwpweWphbWFzLWRlc2t0b3AKcHlqYW1hcy1kb2MKcHlqYW1hcy1nY2hhcnQKcHlqYW1hcy1nbWFwCnB5amFtYXMtcHlqcwpweWphbWFzLXVpCnB5bGludApweXFvbnNvbGUKcHl0aG9uLWFsbApweXRob24tYXB0CnB5dGhvbi1hcHQtY29tbW9uCnB5dGhvbi1hcHRkYWVtb24KcHl0aG9uLWFwdGRhZW1vbi1ndGsKcHl0aG9uLWF4aW9tCnB5dGhvbi1iZWFrZXIKcHl0aG9uLWJlYXV0aWZ1bHNvdXAKcHl0aG9uLWJsdWV6CnB5dGhvbi1idWdidWRkeQpweXRob24tY2F0d2FsawpweXRob24tY2hhcmRldApweXRob24tY2xhbWF2CnB5dGhvbi1jbGllbnRmb3JtCnB5dGhvbi1jb2hlcmVuY2UKcHl0aG9uLWNvbmZpZ29iagpweXRob24tY3J5cHRvCnB5dGhvbi1jdXBzaGVscGVycwpweXRob24tZGViaWFuCnB5dGhvbi1kZWNvcmF0b3IKcHl0aG9uLWRlY29yYXRvcnRvb2xzCnB5dGhvbi1kZXYKcHl0aG9uLWRpYWxvZwpweXRob24tZG5zCnB5dGhvbi1lZ2VuaXgtbXhkYXRldGltZQpweXRob24tZWdlbml4LW14dG9vbHMKcHl0aG9uLWVwc2lsb24KcHl0aG9uLWV2b2x1dGlvbgpweXRob24tZmVlZHBhcnNlcgpweXRob24tZm9vbHNjYXAKcHl0aG9uLWZvcm1lbmNvZGUKcHl0aG9uLWZwY29uc3QKcHl0aG9uLWdkYXRhCnB5dGhvbi1nZGJtCnB5dGhvbi1nZW5zaGkKcHl0aG9uLWdsYWRlMgpweXRob24tZ21lbnUKcHl0aG9uLWdub21lYXBwbGV0CnB5dGhvbi1nbm9tZWRlc2t0b3AKcHl0aG9uLWdub21la2V5cmluZwpweXRob24tZ251cGdpbnRlcmZhY2UKcHl0aG9uLWdvYmplY3QtZGV2CnB5dGhvbi1nc3QwLjEwCnB5dGhvbi1ndGsyLWRldgpweXRob24tZ3RrMi1kb2MKcHl0aG9uLWd0a2dsZXh0MQpweXRob24tZ3Rrc291cmNldmlldzIKcHl0aG9uLWd1ZGV2CnB5dGhvbi1odHRwbGliMgpweXRob24taHVsYWhvcApweXRob24tbGFzaApweXRob24tbGRhcApweXRob24tbGlieG1sMgpweXRob24tbG9naWxhYi1hc3RuZwpweXRob24tbG9naWxhYi1jb21tb24KcHl0aG9uLWxvdWllCnB5dGhvbi1seG1sCnB5dGhvbi1tYWtvCnB5dGhvbi1tYXJrdXBzYWZlCnB5dGhvbi1tZWNoYW5pemUKcHl0aG9uLW1pZ3JhdGUKcHl0aG9uLW5hdXRpbHVzCnB5dGhvbi1uZXZvdwpweXRob24tbm9zZQpweXRob24tbm90aWZ5CnB5dGhvbi1vcGVuZ2wKcHl0aG9uLW9wZW5pZApweXRob24tb3BlbnNzbApweXRob24tcGFtCnB5dGhvbi1wYXN0ZQpweXRob24tcGFzdGViaW4KcHl0aG9uLXBhc3RlZGVwbG95CnB5dGhvbi1wYXN0ZXNjcmlwdApweXRob24tcGVhay5ydWxlcwpweXRob24tcGVhay51dGlsCnB5dGhvbi1wa2ctcmVzb3VyY2VzCnB5dGhvbi1weWFzbjEKcHl0aG9uLXB5YmFiZWwKcHl0aG9uLXB5Z21lbnRzCnB5dGhvbi1weWxvbnMKcHl0aG9uLXB5c3FsaXRlMgpweXRob24tcXNjaW50aWxsYTIKcHl0aG9uLXF0MwpweXRob24tcXQ0CnB5dGhvbi1yZGZsaWIKcHl0aG9uLXJlcG96ZS50bTIKcHl0aG9uLXJlcG96ZS53aGF0CnB5dGhvbi1yZXBvemUud2hhdC1wbHVnaW5zCnB5dGhvbi1yZXBvemUud2hvCnB5dGhvbi1yZXBvemUud2hvLXBsdWdpbnMKcHl0aG9uLXJvdXRlcwpweXRob24tc2NnaQpweXRob24tc2VyaWFsCnB5dGhvbi1zZXR1cHRvb2xzCnB5dGhvbi1zaW1wbGVqc29uCnB5dGhvbi1zaXAKcHl0aG9uLXNvZnR3YXJlLXByb3BlcnRpZXMKcHl0aG9uLXNwcm94CnB5dGhvbi1zcWxhbGNoZW15CnB5dGhvbi1zcWxhbGNoZW15LWV4dApweXRob24tc3VidmVyc2lvbgpweXRob24tdGFncHkKcHl0aG9uLXRlbXBpdGEKcHl0aG9uLXRnLmRldnRvb2xzCnB5dGhvbi10Z2V4dC5hZG1pbgpweXRob24tdGsKcHl0aG9uLXRvc2Nhd2lkZ2V0cwpweXRob24tdHJhbnNhY3Rpb24KcHl0aG9uLXR1cmJvZ2VhcnMyCnB5dGhvbi10dXJib2dlYXJzMi1kb2MKcHl0aG9uLXR1cmJvanNvbgpweXRob24tdHdpc3RlZApweXRob24tdHdpc3RlZC1iaW4KcHl0aG9uLXR3aXN0ZWQtY29uY2gKcHl0aG9uLXR3aXN0ZWQtY29yZQpweXRob24tdHdpc3RlZC1sb3JlCnB5dGhvbi10d2lzdGVkLW1haWwKcHl0aG9uLXR3aXN0ZWQtbmFtZXMKcHl0aG9uLXR3aXN0ZWQtbmV3cwpweXRob24tdHdpc3RlZC1ydW5uZXIKcHl0aG9uLXR3aXN0ZWQtd2ViCnB5dGhvbi10d2lzdGVkLXdvcmRzCnB5dGhvbi11dGlkeWxpYgpweXRob24tdnRlCnB5dGhvbi13ZWJlcnJvcgpweXRob24td2ViZmxhc2gKcHl0aG9uLXdlYmhlbHBlcnMKcHl0aG9uLXdlYmtpdApweXRob24td2Vib2IKcHl0aG9uLXdlYnRlc3QKcHl0aG9uLXduY2sKcHl0aG9uLXd4Z3RrMi42CnB5dGhvbi13eGd0azIuOApweXRob24td3h2ZXJzaW9uCnB5dGhvbi14YXBpYW4KcHl0aG9uLXhkZwpweXRob24teHBjb20KcHl0aG9uLXpvcGUuaW50ZXJmYWNlCnB5dGhvbi16b3BlLnNxbGFsY2hlbXkKcHl0aG9uMi41CnB5dGhvbjIuNS1taW5pbWFsCnB5dGhvbjIuNi1kZXYKcWphY2tjdGwKcXQ0LWRlc2lnbmVyCnF0NC1kZXYtdG9vbHMKcXQ0LXFtYWtlCnF0NC1xdGNvbmZpZwpxdGNyZWF0b3ItZG9jCnF0b2N0YXZlCnJlZ2V4eGVyCnJlbW1pbmEKcmVtbWluYS1wbHVnaW4tZGF0YQpyZW1taW5hLXBsdWdpbi1yZHAKcmVtbWluYS1wbHVnaW4tdm5jCnJlbXVjby1iYXNlCnJlbXVjby12bGMKcmh5dGhtYm94CnJoeXRobWJveC1wbHVnaW4tY2RyZWNvcmRlcgpyaHl0aG1ib3gtcGx1Z2lucwpybHdyYXAKcm9zZWdhcmRlbgpydWJ5CnJ1YnkxLjgKc2FtYmEKc2NpZW5jZS1hc3Ryb25vbXkKc2NpZW5jZS1jb25maWcKc2NpZW5jZS10YXNrcwpzZWFob3JzZQpzZWFob3JzZS1wbHVnaW5zCnNleHRyYWN0b3IKc2ZscGhvbmUtZGFlbW9uCnNmbHBob25lLWRhdGEKc2ZscGhvbmUtZ25vbWUKc2dtbC1kYXRhCnNoYXJlZC1kZXNrdG9wLW9udG9sb2dpZXMKc2hvdHdlbGwKc2ltZ2VhcjEuOS4xCnNpbXBsZS1zY2FuCnNreXBlCnNsYW5nLWNmaXRzaW8Kc25kZmlsZS1wcm9ncmFtcwpzbmRmaWxlLXRvb2xzCnNvZnR3YXJlLWNlbnRlcgpzb2Z0d2FyZS1wcm9wZXJ0aWVzLWd0awpzb3ByYW5vLWRhZW1vbgpzb3VuZC1qdWljZXIKc294CnNzZnQKc3RhcmRhdGEtY29tbW9uCnN0ZWxsYXJpdW0Kc3RlbGxhcml1bS1kYXRhCnN1YnZlcnNpb24Kc3VidmVyc2lvbi10b29scwpzdW4tamF2YTYtYmluCnN1bi1qYXZhNi1qcmUKc3doLXBsdWdpbnMKc3lzdGVtLWNvbmZpZy1wcmludGVyCnN5c3RlbS1jb25maWctcHJpbnRlci11ZGV2CnN5c3RlbS10b29scy1iYWNrZW5kcwp0Y2w4LjUKdGNsbGliCnRjbHZmcwp0Y3B0cmFjZXJvdXRlCnRjc2gKdGVkaWEyc3FsCnRlbGVwYXRoeS1nYWJibGUKdGVsZXBhdGh5LW1pc3Npb24tY29udHJvbC01CnRlbGVwYXRoeS1zYWx1dAp0ZXgtY29tbW9uCnRleGluZm8KdGV4bGl2ZS1iYXNlLWJpbi1kb2MKdGV4bGl2ZS1jb21tb24KdGs4LjUKdGtnYXRlCnRrZ2F0ZS1kYXRhCnRrZ2F0ZS1kb2MKdG9tYm95CnRvcgp0b3ItZ2VvaXBkYgp0b3Jzb2Nrcwp0b3RlbQp0b3RlbS1jb2hlcmVuY2UKdG90ZW0tY29tbW9uCnRvdGVtLW1vemlsbGEKdG90ZW0tcGx1Z2lucwp0cmFuc21pc3Npb24tY29tbW9uCnRyYW5zbWlzc2lvbi1ndGsKdHNvY2tzCnR0Zi1seXgKdW5hdHRlbmRlZC11cGdyYWRlcwp1bml0cwp1bml4b2RiYwp1cGRhdGUtbWFuYWdlci1jb3JlCnVwZGF0ZS1tYW5hZ2VyLWdub21lCnVwZGF0ZS1ub3RpZmllcgp1cGRhdGUtbm90aWZpZXItY29tbW9uCnZjZGltYWdlcgp2aWRlb2xhbi1kb2MKdmltLWFkZG9uLW1hbmFnZXIKdmlubwp2aXJ0dWFsYm94LW9zZQp2aXJ0dWFsYm94LW9zZS1ka21zCnZpcnR1YWxib3gtb3NlLXF0CnZpcnR1b3NvLW1pbmltYWwKdmlydHVvc28tb3BlbnNvdXJjZS02LjEtYmluCnZpcnR1b3NvLW9wZW5zb3VyY2UtNi4xLWNvbW1vbgp2aXN1YWwtcmVnZXhwCnZsYwp2bGMtZGF0YQp2bGMtbm94CnZsYy1wbHVnaW4tZmx1aWRzeW50aAp2bGMtcGx1Z2luLWphY2sKdmxjLXBsdWdpbi1ub3RpZnkKdmxjLXBsdWdpbi1wdWxzZQp2bGMtcGx1Z2luLXN2Z2FsaWIKdm5jc25hcHNob3QKd2Via2l0LWltYWdlLXF0Cnd3d2NvbmZpZy1jb21tb24KeDExcHJvdG8tY29tcG9zaXRlLWRldgp4MTFwcm90by1jb3JlLWRldgp4MTFwcm90by1kYW1hZ2UtZGV2CngxMXByb3RvLWZpeGVzLWRldgp4MTFwcm90by1pbnB1dC1kZXYKeDExcHJvdG8ta2ItZGV2CngxMXByb3RvLXJhbmRyLWRldgp4MTFwcm90by1yZW5kZXItZGV2CngxMXByb3RvLXhleHQtZGV2CngxMXByb3RvLXhpbmVyYW1hLWRldgp4ZGctdXNlci1kaXJzCnhkZy11c2VyLWRpcnMtZ3RrCnhvcnNhCnhwbGFuZXQKeHBsYW5ldC1pbWFnZXMKeHNlcnZlci14ZXBoeXIKeHNsdHByb2MKeHRyYW5zLWRldgp5ZWxwCnpsaWIxZy1kZXYK
!usage
{{{[[startweb.sh|startweb.sh]]}}}
[[startweb.sh|startweb.sh]]
!notes
<html>
<pre>
#!/bin/bash
#startweb.sh

sudo mkdir /var/log/apache2
sudo chmod 777 /var/log/apache2
sudo /etc/init.d/ssh
sudo /etc/init.d/webmin start
sudo /etc/init.d/mysql start
sudo /etc/init.d/apache2 start
sudo amportal start
sudo /etc/init.d/openfire start
sudo modprobe vboxdrv
sudo modprobe vboxnetflt
sudo /etc/init.d/portmap start
sudo /etc/init.d/nfs-common start
sudo /etc/init.d/nfs-kernel-server start
sudo /etc/init.d/ssh start
sudo /etc/init.d/postgresql start
sudo mknod -m660 /dev/loop/1 b 7 1
sudo mknod -m660 /dev/loop/2 b 7 2
</pre>
</html>

!type
text/plain
!file
file:////home/knoppix/tmp/startweb.sh
!url

!data
data:text/plain;base64,IyEvYmluL2Jhc2gKI3N0YXJ0d2ViLnNoCgpzdWRvIG1rZGlyIC92YXIvbG9nL2FwYWNoZTIKc3VkbyBjaG1vZCA3NzcgL3Zhci9sb2cvYXBhY2hlMgpzdWRvIC9ldGMvaW5pdC5kL3NzaApzdWRvIC9ldGMvaW5pdC5kL3dlYm1pbiBzdGFydApzdWRvIC9ldGMvaW5pdC5kL215c3FsIHN0YXJ0CnN1ZG8gL2V0Yy9pbml0LmQvYXBhY2hlMiBzdGFydApzdWRvIGFtcG9ydGFsIHN0YXJ0CnN1ZG8gL2V0Yy9pbml0LmQvb3BlbmZpcmUgc3RhcnQKc3VkbyBtb2Rwcm9iZSB2Ym94ZHJ2CnN1ZG8gbW9kcHJvYmUgdmJveG5ldGZsdApzdWRvIC9ldGMvaW5pdC5kL3BvcnRtYXAgc3RhcnQKc3VkbyAvZXRjL2luaXQuZC9uZnMtY29tbW9uIHN0YXJ0CnN1ZG8gL2V0Yy9pbml0LmQvbmZzLWtlcm5lbC1zZXJ2ZXIgc3RhcnQKc3VkbyAvZXRjL2luaXQuZC9zc2ggc3RhcnQKc3VkbyAvZXRjL2luaXQuZC9wb3N0Z3Jlc3FsIHN0YXJ0CnN1ZG8gbWtub2QgLW02NjAgL2Rldi9sb29wLzEgYiA3IDEKc3VkbyBta25vZCAtbTY2MCAvZGV2L2xvb3AvMiBiIDcgMgo=